内核如何知道文件已关闭
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
【讨论】:
以上是关于内核如何知道文件已关闭的主要内容,如果未能解决你的问题,请参考以下文章