gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 10:52:53 28 4
gpt4 key购买 nike

我本质上是在尝试通过在读取进程中使用内存映射文件来“尾部”文件,而写入进程在某个时间间隔向它附加数据(使用 stdio)。

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

我可以使用 inotify 来查明文件何时被修改,但我不确定内存映射文件是否也能保证得到更新。

我正在使用带有 gcc 4.8.2 的 Linux ubuntu。

最佳答案

如果您正在写入内存映射文件,则在以下情况下该文件将备份到磁盘(我假设您使用 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

在任何一种情况下,您都应该使用 msync 将数据刷新到磁盘并通知所有监视该文件的程序。

关于c++ - 内存映射文件如何与写入文件的另一个进程同步?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30077472/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com