首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >当某个进程打开一个文件时,unlink()会做什么?

当某个进程打开一个文件时,unlink()会做什么?
EN

Stack Overflow用户
提问于 2018-06-10 05:12:54
回答 2查看 1.2K关注 0票数 0

来自APUE

#include int unlink(const char *pathname);

只有当链接数达到0时,才能删除file的内容。另一个条件是防止删除file的内容:只要某个进程具有打开的file ,它的内容就不会被删除。当file关闭时,内核first会检查打开file的进程数。如果该计数达到0,则内核检查链接计数;如果该计数为0,则删除file的内容。

  1. 如果某个文件正由execve()在进程中使用,它是否将其计为“该进程打开了该文件”?
  2. 如果某个进程正在打开或打开该文件,unlink()将立即返回0或-1,还是等到该进程关闭该文件或execve()完成运行并执行其作业?

<execve()>G213

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-06-10 05:16:47

1)进程通过execve继承的文件句柄将保持打开状态,直到显式关闭或进程退出。

2) unlink不会被阻塞。它将简单地移除路径并递减硬链接文件的引用计数,此时,一旦文件不再被任何进程打开,文件系统就可以移除被引用的文件并释放与其相关联的空间。除非发生I/O或权限等错误,否则unlink将返回0。

票数 7
EN

Stack Overflow用户

发布于 2018-06-10 05:31:51

对于execve-d或mmap-ed文件,内核还认为(在内核内部)使用了文件描述符(因此内核inode有一个为正的引用计数)。另请参见inode(7)proc(5)。请注意errno(3)中的ETXTBSY错误代码。可执行文件甚至可以在执行期间自行删除(请参阅thisthat),文件的inode将一直保留到进程终止或执行其他execve操作。

因此,文件等内部数据不会释放(直到execvemmap停用)

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

https://stackoverflow.com/questions/50778585

复制
相关文章

相似问题

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