gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 12:06:32 26 4
gpt4 key购买 nike

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

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

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

谢谢。

最佳答案

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

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

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

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

关于c++ - Linux 从永远在线的应用程序中创建和删除文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50553516/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com