【问题标题】:Detecting changes to an open file检测对打开文件的更改
【发布时间】:2010-10-02 21:32:05
【问题描述】:

假设我有一个打开的文件。如何检测文件何时被后台另一个程序更改。如果打开的文件被另一个进程更改,一些文本编辑器可以检测并更新它。

我特别要求在 Linux 下使用 C 进行此操作(这似乎取决于操作系统)。

【问题讨论】:

    标签: c linux file


    【解决方案1】:

    如果您不想使用 stat 轮询文件,并且不介意特定于 Linux,那么您可以使用 inotify API。您的内核需要是 2.6.13 或更新版本以及 glibc 2.4 或更新版本(如果您的目标是过去 2 或 3 年的任何东西,它们将是)。 API 基本上为您提供了一个文件描述符,您可以通过pollselectread 获取有关修改文件的信息。如果您的应用程序是交互式的,例如编辑器,那么它通常会有某种事件循环调用selectpoll,并且可以查看您的 inotify 文件描述符中的事件。

    通常最好使用 inotify stat,因为您会立即收到通知,并且不会在文件未更改时浪费时间和磁盘 I/O 轮询。缺点是它可能无法在 NFS 或其他网络文件系统上运行,而且它不可移植。

    This page at IBM Developerworks 给出了一些示例 C 代码,man page 是权威参考。

    【讨论】:

      【解决方案2】:

      使用stat 函数。页面中的示例。

      【讨论】:

        【解决方案3】:

        我在 Windows 和 Linux 上看到的文本编辑器也是这样做的:他们不检查文件是否实际发生了变化,他们只是查看文件的 stat mtime。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2015-08-30
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多