代码之家  ›  专栏  ›  技术社区  ›  Adil Shaikh

我可以用C来知道运行时磁盘上是否执行了文件操作吗?

  •  0
  • Adil Shaikh  · 技术社区  · 15 年前

    我是否可以使用c来知道在运行时是否在磁盘上执行文件操作(以及在何处执行)?

    4 回复  |  直到 15 年前
        1
  •  1
  •   jfawcett    15 年前

    你问题的答案取决于你的意思。如果您询问是否可以检测到磁盘上的物理操作(查找、读取或写入),答案是“否”。磁盘具有磁盘缓存,以性能的名义对您隐藏这些操作。您可以使用上面的机制来判断何时更改了缓存,但在执行物理操作时不能判断。

    这就是为什么我们有日志文件系统。但是,即使使用日志记录,如果发生灾难性故障并且无法保存缓存,也有可能发生实际数据丢失。

    在上述方法中,我使用了filesystemwatcher,它工作得非常好。您可以选择您感兴趣的事件,当发生文件事件时,您的程序将收到一个程序事件的通知。

    请注意,至少在windows/c下,事件是在一个单独的线程上发生的,因此您必须使用委托来向发生事件的主(或任何)线程发出信号。

        2
  •  1
  •   Aviad P.    15 年前

    查看以下来自msdn的示例: Change Notify Watcher Sample

        3
  •  1
  •   Martin B    15 年前

    您需要依赖特定的OS API,这些API可以在C编程语言中使用。

        4
  •  1
  •   dmeister    15 年前

    正如其他人在这里所说,没有平台独立/C标准方式。

    在Linux上,您可以使用 inotify 应用程序编程接口。有 a tutorial on IBM developerworks .