Adr*_*ui3 1 linux temporary-files linux-kernel
我一直在研究一些 Linux 实现,并且想到了一个问题。
据我所知,有一个位将文件标记为临时文件。当生成该文件的进程死亡时,内核如何删除它?我认为它可能与文件描述符表有关,但我不确定。
如果有人能一步一步地给出解释,那将会派上用场!
没有任何位将文件标记为临时文件。
每个索引节点都有一个链接计数字段,它是引用该文件的目录条目的数量。每次您对文件建立硬链接时,该计数就会增加,而当您删除名称时,该计数就会减少;当计数变为零时,文件被删除(索引节点被标记为可用,并且所有数据块都被放入空闲列表中)。
当在进程中打开文件时,inode 的副本会保留在内核的文件表中,并且引用它的文件句柄的数量将添加到该副本的链接计数中。当进程关闭其文件描述符时,链接计数就会减少。在内存中的链接计数降至零之前,该文件实际上不会被删除。这就是文件在打开时保留在磁盘上的原因,即使所有名称都被删除。
因此,当您创建临时文件时,它会执行以下步骤:
此时,该进程可以继续使用临时文件,但它不能被其他进程打开,因为它没有名称。
当进程关闭文件句柄时,链接计数变为 0,并且文件被删除。
最近版本的 Linux 有一个O_TMPFILE标志可以open(2)自动执行此操作。您无需指定文件名,只需指定目录,该目录仅用于查找保存文件数据的文件系统。使用此功能时,它可以在一次调用中有效地执行上述所有 3 个步骤,但它实际上不会在任何地方创建文件名(因此可以避免竞争条件和名称冲突)。
| 归档时间: |
|
| 查看次数: |
1184 次 |
| 最近记录: |