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

Tim*_*Tim 0 c linux file hardlink

来自APUE

#include <unistd.h>
int unlink(const char *pathname);
Run Code Online (Sandbox Code Playgroud)

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

  1. 如果某个execve()进程正在使用某个文件,它是否将其视为"进程打开文件"?

  2. 如果某个进程打开或execve()编辑了文件,会unlink()立即返回0或-1,还是等到进程关闭文件或execve()完成运行并执行其工作?

jsp*_*cal 7

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

2)unlink不会阻止.它将简单地删除路径并减少硬链接文件的引用计数,此时文件系统可以删除引用的文件,并在任何进程不再打开文件后释放与其关联的空间.unlink除非出现I/O或权限错误等,否则将返回0