繁体   English   中英

从两个进程安全访问文件

[英]Safe access to file from two processes

假设我有两个进程。 一个总是驻留在内存中,并定期从磁盘上的文件中读取一些设置。 如果它检测到设置已更改,则会应用它们。

另一个进程在命令行下按需运行并修改设置。 因此,第一个进程只读取文件而从不写入文件,而第二个进程只能写入文件。

我是否应该同步对文件的访问以确保第一个进程始终获得一致的设置,即在修改之前或之后不是某些中间内容? 如果是,那么在C ++中执行此操作的最简单方法是什么。

我主要对跨平台方式感兴趣。 但也对Windows和/或Linux特定的那些感到好奇。

使用命名信号量并在编辑磁盘上的文件之前要求任一进程保存信号量。 任何正在运行的应用程序都可以连接命名信号量。

查看man 7 sem_overview以获取有关linux机器上命名信号量的更多信息。

我能找到的最接近Windows的等价物是http://msdn.microsoft.com/en-us/library/windows/desktop/ms682438(v=vs.85).aspx

您正在使用C ++,因此您的第一个选择应该是检查通常的跨平台库 - POCOBoostACE等,以查看是否有任何已经满足您需要的内容。

你真的有两个不同的问题:(1)文件同步和(2)通知。

在Linux上,为避免让守护程序不断轮询以查看文件是否已更改,您可以使用inotify调用并设置事件,这些事件将告诉您文件何时被命令行程序更改。 查找IN_CLOSE_WRITE事件可能最简单,因为CL prog可能会打开,更改和关闭文件。

对于同步,由于您可以控制两个程序,因此您可以使用文件或记录锁定,例如lockfflockfcntl

最明显的解决方案是以独占模式打开文件。 如果无法打开文件,请等待一段时间再尝试打开该文件。 这将防止可能的访问/修改冲突。

这种方法的好处是它很简单,没有明显的缺点。

当然你可以使用一些同步原语(Mutex,信号量取决于操作系统),但这在你的场景中是一种矫枉过正,当不需要快速响应时(在打开尝试之间等待200毫秒就可以了,并且编写配置文件赢了'采取更多)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM