【发布时间】:2018-05-27 15:06:58
【问题描述】:
我正在 Linux 中编写一个始终在线的服务,该服务打开并写入 /tmp 中的文件,然后应该删除文件。
我看到 /tmp/ 在进程删除文件后没有释放空间,尽管文件本身不存在。当我执行 lsof 时,我看到此文件被标记为(已删除):
第1381章 /mnt/unlink /tmp/mest_elf
我读到要释放这个空间,我必须终止我的进程,但我不能,因为我需要它始终运行。
问题:
1. 我正在使用 posix remove()\unlink() 函数。还有其他功能可以完全删除文件吗?
2.有没有办法删除am lsof文件?
3. 对我还有什么建议吗? (记住我必须在c应用程序中编写)
谢谢。
【问题讨论】:
-
简短的回答是“不”。在您的进程实际关闭文件之前,它将占用空间。 Linux 内核无法通过心灵感应确定您的进程是否会再次使用该文件,因此只要它处于打开状态,内核就必须假定该文件的内容必须随时可供您的程序使用,如果它选择
read()它。如果您想回收该磁盘空间,请close()您的文件。 -
感谢您的回答。但是如果我使用ofstream呢?一般来说,我知道我不必明确关闭文件。如果我想删除文件,我应该先调用 close() 吗?
-
你的理解有误。所有打开的文件都应该关闭。
-
是的,这就是问题所在,我必须在调用删除之前关闭文件。谢谢!!
标签: c++ linux embedded-linux