内核如何知道文件已关闭

Posted

技术标签:

【中文标题】内核如何知道文件已关闭【英文标题】:How does kernel know file is closed 【发布时间】:2011-09-14 20:53:24 【问题描述】:

linux 知道文件已关闭的具体机制是什么? 我知道诸如 INOTIFY 之类的命令会在文件关闭时触发 IN_CLOSE_WRITE 事件。但它是如何工作的?什么触发了文件的关闭?

同样,操作系统如何知道文件已打开以及它在哪里注册该事实?

【问题讨论】:

【参考方案1】:

操作系统(即内核)是实际打开和关闭文件的操作系统。程序每次想通过系统调用 来告诉操作系统代表它打开/关闭文件。操作系统可以简单地跟踪通过自己的这些调用。

【讨论】:

谢谢。让我用一个例子来问我的具体问题:假设我在 /tmp 目录中的服务器 A 上启动了一个 FTP 进程。我使用 PYINOTIFY、IN_CLOSE_WRITE 事件观察目录。当 FTP 成功完成时,IN_CLOSE_WRITE 被触发。但即使 FTP 由于任何原因在中途失败,也会触发 IN_CLOSE_WRITE 事件。操作系统通过什么机制知道 FTP 进程不再写入文件(相对于具有高延迟的 ftp 进程仍在写入文件但延迟非常高)? @A J:你确定FTP服务器没有在大量写入后手动关闭文件吗? 当前Linux内核在哪里存储打开了哪些文件? @moose 全局打开文件表。【参考方案2】:

有一个打开的文件表,列出了所有打开的流以及它们在内存中指向的位置。

这可能会有所帮助:http://www.cs.kent.edu/~walker/classes/os.f07/lectures/Walker-11.pdf

【讨论】:

以上是关于内核如何知道文件已关闭的主要内容,如果未能解决你的问题,请参考以下文章

我如何知道一个 mgo 会话是不是已关闭

未记录的内核启动参数? [关闭]

我如何知道 UdpClient 是不是已关闭/处置?

如何知道数据是不是已更改 [关闭]

C - Linux在内核模式下创建声音[关闭]

我的 GPU 中有多少个内核? [关闭]