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

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

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

【问题讨论】:

    标签: filesystems kernel inotify pyinotify


    【解决方案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

    【讨论】:

      猜你喜欢
      • 2014-09-08
      • 1970-01-01
      • 2023-03-15
      • 2014-07-09
      • 2016-05-25
      • 2012-02-12
      • 2012-03-07
      • 2015-03-28
      • 2015-10-26
      相关资源
      最近更新 更多