Linux 从永远在线的应用程序中创建和删除文件

Linux create and remove file from always-on application

本文关键字:创建 删除 文件 应用程序 永远 在线 Linux      更新时间:2023-10-16

我在 Linux 中编写一个始终在线的服务,该服务在/tmp 中打开并写入文件,然后应该删除文件。
我看到在进程删除文件后没有从/tmp/释放空间,尽管文件本身不存在。当我做lsof时,我看到这个文件被标记为(已删除(:
1381/mnt/unlink/tmp/mest_elf(已删除(

我读到我为了释放这个空间,我必须杀死我的进程,但我不能,因为我需要它始终运行。

问题:
1. 我正在使用 posix remove((\unlink(( 函数。 还有其他功能可以完全删除文件吗?
2.有没有办法删除我的LSOF文件?
3. 对我还有其他建议吗?(记住我必须用c应用程序编写它(

谢谢。

在 Linux(和其他 Unix 系统(中,只要任何进程都有一个引用该文件的打开文件描述符,文件就存在。您可以取消文件与文件系统的链接,使其不再可见,但如果该文件有打开的句柄(文件描述符(,那么它仍然会保留,并且对于持有这些句柄的进程来说是一个有效的文件。

这很有用 - 您没有无法删除打开文件的 Windows 问题。 但这也意味着,在具有打开句柄的所有进程关闭该句柄之前,不会释放文件占用的存储空间。

当然,确保进程已关闭所有句柄的一种简单方法是终止进程。但是,一个进程也可以只是close()(或fclose()和类似;最终close(它对文件的打开句柄并继续运行。

Linux/Unix和Windows文件系统语义在这方面有很大的不同。您应该阅读具体的差异。