我正在linux上logging一个logging器。
logging器在init上打开一个文件。
并在程序运行时写入该文件描述符。
如果日志文件在创build文件描述符后被删除,
没有exception/错误将被检测到。
我努力了:
out.fail() !out.is_open()
我有谷歌这个,并find这个职位。
http://www.daniweb.com/forums/thread23244.HTML
所以我现在明白,即使该文件是通过使用RM删除。 它还是存在的,它根本就是没有联系的。
处理这个问题的最好方法是什么?
1.这是一个日志应用程序,所以性能是一个问题,我不想在每次写入时使用stat()
2.我不在乎日志文件中的某些行在开始时是否会丢失
3.用户被允许删除日志文件,重新开始。logging器应该重新打开文件。
为什么MysqL服务器不把表格写入文件?
fread()在fwrite()之后得到0个字节
使用shell添加文件名合并多个文件
linux:列出文件名的唯一部分
如何在ruby中设置与windows相关的文件属性?
windows上的文件是否具有编码属性?
如何调用shell的“文件复制对话框”来报告在Win32中复制的进度?
如何设置文件的隐藏属性
windowsbatch file – 显示所有子文件夹
file.copy以及作为stream打开的文件,并写入networking文件挂起到本地机器
文件被rm “ 取消关联 ”。
一个文件可以有很多名字。 如果没有名字,没有人打开,那么文件系统就会回收它,并且占用的空间可以被重新使用。
linux有一个“监视” inotify文件的API,但是这是一个非常复杂的竞争条件。
所以更大的问题是,还有谁在运行时删除这个文件,为什么? 说服他们不要!
您在评论中指出,原因是允许用户删除日志文件,在这种情况下,您希望应用程序开始写一个新的日志文件。
处理这个问题的传统的UNIX机制是让你的程序安装一个信号处理程序(通常用于SIGHUP ,因为这对于一个守护进程是没有意义的)。 信号处理程序包括使程序关闭并重新打开日志文件的代码。
然后指示用户删除日志文件后,需要发送一个SIGHUP给程序。
处理这个唯一明智的方法是尝试写入日志。 如果写入失败(大部分时间不会),那么你需要找出原因。 在这一点上,你可以做一些事情,比如使用stat来查看日志是否仍然存在 – 如果是的话,你有某种磁盘已满或许可错误,如果不是,重新打开并重新尝试写入。
总结以上是内存溢出为你收集整理的ofstream – 检测文件是否在打开和closures之间被删除全部内容,希望文章能够帮你解决ofstream – 检测文件是否在打开和closures之间被删除所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)