ofstream– 检测文件是否在打开和closures之间被删除

ofstream– 检测文件是否在打开和closures之间被删除,第1张

概述ofstream – 检测文件是否在打开和closures之间删除

我正在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之间被删除所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1254514.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-07
下一篇 2022-06-07

发表评论

登录后才能评论

评论列表(0条)

保存