【问题标题】:Syncing independent applications. (How to check if a file was modified by another program on runtime)同步独立应用程序。 (如何检查文件是否在运行时被另一个程序修改)
【发布时间】:2013-09-21 20:22:00
【问题描述】:

用例子更容易解释。

当两个文本编辑器同时编辑同一个文本文件时,当一个编辑器保存文件时,另一个编辑器知道它被修改并要求做某事。

如何获得文件在程序外被修改的信号?

我正在使用 c++(尽管我认为这并不重要)和 linux。 (windows的解决方案也不错)

【问题讨论】:

  • Socket 通信可以成为推送通知的一种解决方案(它是可移植的并且相对通用)。一个活跃的监听器(轮询)是另一个。

标签: c++ linux windows file file-sharing


【解决方案1】:

①在写入前尽可能检查文件的时间戳。如果不是您上次打开此文件进行阅读时的状态,请注意!

②您可以构建文件的校验和,并将其与您之前构建的文件进行比较。

③ 注册到通知您文件活动的系统服务。这取决于您使用的操作系统的善意;如果这个通知服务不能正常工作,你的东西就会失败。在 Linux 上看看 Inotify。

【讨论】:

  • 使用前两种方法之一,您甚至可以在应用程序中创建一个线程,定期轮询修改,例如每隔几秒一次。以防操作系统出于某种原因发出通知。
【解决方案2】:

ISO-C++ 不提供此功能,因此您必须坚持操作系统提供的功能。

在 Linux 上是 inotify,在 Windows 上你会使用 directory change notifications

【讨论】:

  • 有点晚了,但我希望你能回答。将 inotify 工作“直播”。我是否需要不断要求 inotify 提供信息,或者它会在文件/目录被修改后立即以某种方式向我发出信号?
  • @khajvah inotify_init 返回一个文件描述符,用作所有操作的基础。您可以像使用套接字进行网络 I/O 一样使用它:您可以从工作线程对其进行read(),该工作线程将阻塞(即休眠)直到发生更改。或者,使用您最喜欢的异步 I/O 技术来避免阻塞线程。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-03-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多