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