内存映射文件如何与另一个写入文件的进程同步?

时间:2015-05-06 12:57:17

标签: c++ linux file-io shared-memory

我基本上试图通过在读取器进程中使用内存映射文件来“尾随”文件,而编写器进程在某个时间间隔将数据附加到它(使用stdio)。

我的问题是内存映射文件和编写器之间的同步如何在幕后工作?我还需要其他同步机制吗?

我可以使用inotify来找出修改文件的时间,但我不确定内存映射文件是否也能保证更新。

我正在使用Linux ubuntu和gcc 4.8.2。

1 个答案:

答案 0 :(得分:1)

如果要写入内存映射文件,则在以下情况下将文件备份到磁盘(我假设您使用MAP_SHARED映射了文件):

  1. 使用msync(请参阅http://man7.org/linux/man-pages/man2/msync.2.html
  2. 当换出内存页时:系统需要内存,如果内存页是文件,它将保存到原始位置。
  3. 当您munmap时(请参阅http://man7.org/linux/man-pages/man2/munmap.2.html
  4. 在任何一种情况下,您都应该使用msync将数据刷新到磁盘并通知在文件上观看的任何程序。