我正在linux上logging一个logging器。
并在程序运行时写入该文件描述符。
没有exception/错误将被检测到。
我努力了:
out.fail() !out.is_open()
我有谷歌这个,并find这个职位。
http://www.daniweb.com/forums/thread23244.html
所以我现在明白,即使该文件是通过使用RM删除。 它还是存在的,它根本就是没有联系的。
处理这个问题的最好方法是什么?
1.这是一个日志应用程序,所以性能是一个问题,我不想在每次写入时使用stat()
2.我不在乎日志文件中的某些行在开始时是否会丢失
3.用户被允许删除日志文件,重新开始。logging器应该重新打开文件。
fread()在fwrite()之后得到0个字节
Linux:列出文件名的唯一部分
如何调用shell的“文件复制对话框”来报告在Win32中复制的进度?
File.copy以及作为stream打开的文件,并写入networking文件挂起到本地机器
文件被rm “ 取消关联 ”。
一个文件可以有很多名字。 如果没有名字,没有人打开,那么文件系统就会回收它,并且占用的空间可以被重新使用。
Linux有一个“监视” inotify文件的API,但是这是一个非常复杂的竞争条件。
所以更大的问题是,还有谁在运行时删除这个文件,为什么? 说服他们不要!
您在评论中指出,原因是允许用户删除日志文件,在这种情况下,您希望应用程序开始写一个新的日志文件。
处理这个问题的传统的UNIX机制是让你的程序安装一个信号处理程序(通常用于SIGHUP ,因为这对于一个守护进程是没有意义的)。 信号处理程序包括使程序关闭并重新打开日志文件的代码。
然后指示用户删除日志文件后,需要发送一个SIGHUP给程序。
处理这个唯一明智的方法是尝试写入日志。 如果写入失败(大部分时间不会),那么你需要找出原因。 在这一点上,你可以做一些事情,比如使用stat来查看日志是否仍然存在 – 如果是的话,你有某种磁盘已满或许可错误,如果不是,重新打开并重新尝试写入。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。