标签: c++ c linux
我目前正在为嵌入式系统(有限的磁盘空间)编写 C 应用程序 在这个系统上,有几个进程访问我必须在某些事件中使用我的应用程序删除的文件(例如磁盘空间不足)。但由于其他进程仍然可以写入这些文件,因此磁盘空间情况不会改善。
是否有可能实际删除该文件并让其他进程的写访问失败?
我只能有限地访问其他进程的行为,所以如果不需要这些进程的合作就会很好。
答案 0 :(得分:4)
有两个想法可以解决这样一个事实:在关闭文件的所有引用都关闭之前,文件实际上不会被删除:
答案 1 :(得分:-1)
如果我是“其他进程”的所有者,则只要它们的大小达到给定的阈值,就让它们关闭,重命名并重新打开日志文件。这样可以以“标准”方式执行日志轮换(例如:logrotate)
但是,似乎您已经有一些 legacy 应用程序。
在这种情况下,我建议在启动 legacy 应用程序之前,使用mkfifo创建命名管道来代替日志文件。
您的 C 应用程序将从这些特殊文件中读取数据,例如,这样便可以创建不超过指定数量的日志文件。这样,您便可以使用 logrotate 。
缺点:如果您的 C 应用程序未运行,则 legacy 应用程序将停留在write()系统调用中,尝试写入未连接的管道。
write()