【发布时间】:2011-01-13 00:33:59
【问题描述】:
我正在 Linux 上编写记录器。
记录器在初始化时打开一个文件。
并在程序运行时写入该文件描述符。
如果创建文件描述符后日志文件将被删除,
不会检测到异常/错误。
我试过了:
out.fail()
!out.is_open()
我在谷歌上找到了这个帖子。
http://www.daniweb.com/forums/thread23244.html
所以我现在明白了,即使文件是使用 rm 删除的。它仍然存在,只是取消了链接。
处理这个问题的最佳方法是什么?
1. 这是一个日志应用程序,所以性能是一个问题,我不想在每次写入时都使用 stat()
2. 我不在乎日志文件中的某些行是否会在开始时丢失
3.允许用户删除日志文件,重新开始。记录器应该重新打开文件。
【问题讨论】:
-
你用什么函数写入文件?例如。对于 fwrite,您可以测试返回结果。如果大小与预期不同,则重新打开(创建)文件..
-
@Dyatlov 测试结果不会有帮助,因为文件存在它只是取消链接,写入 succssed.so 会检查文件大小,谢谢
-
我在调查同一个问题时遇到了这个问题,除了删除的过程是 logrotate -- 我的情况更容易修复 -- logrotate 有一个选项 -- copytruncate -- 这将解决这个问题通过根本不删除文件来记录日志问题。