首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Linux从始终在线的应用程序中创建和删除文件

问Linux从始终在线的应用程序中创建和删除文件
EN

Stack Overflow用户
提问于 2018-05-27 23:06:58
回答 1查看 57关注 0票数 0

我正在用Linux编写一个永远在线的服务,它打开/tmp中的文件并将其写入,然后应该删除文件。

我看到在进程删除文件之后,/tmp/并没有释放空间,尽管文件本身并不存在。当我执行lsof时,我看到这个文件被标记为(已删除):

1381 /mnt/unlink /tmp/mest_elf (已删除)

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

问题:

  1. 我正在使用posix remove()\unlink()函数。有没有其他函数可以完全删除文件?
  2. 有没有办法删除文件?
  3. 有没有其他建议?(请记住,我必须用c应用程序编写它)

谢谢。

EN

回答 1

Stack Overflow用户

发布于 2018-05-27 23:14:12

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

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

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

Linux/Unix和Windows文件系统的语义在这方面有很大的不同。你应该仔细阅读一下具体的区别。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50553516

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档