如何将记忆映射的文件与另一个进程写入文件同步
How is a memory mapped file synchronized with another process writing to file?
我本质上是在尝试在读取器进程中使用内存映射的文件在作者进程将数据附加到它(使用STDIO)的某个时间间隔时来"尾部"文件。
我的问题是,内存映射文件和作者之间的同步如何在幕后工作?我是否需要其他同步机制?
我可以使用Inotify来找出何时修改文件,但我不确定是否也保证了内存映射的文件也可以更新。
我正在使用Linux Ubuntu与GCC 4.8.2。
如果要写入内存映射文件,则在以下情况下将文件备份到磁盘(我假设您是用MAP_SHARED
映射的文件):
- 使用
msync
(请参阅http://man7.org/linux/man-pages/man2/msync.2.html) - 当内存页面交换时:系统需要内存,如果内存页是文件,则将其保存到原始位置。
- 当您
munmap
(请参阅http://man7.org/linux/man-pages/man2/munmap.2.html
无论哪种情况,您都应使用msync
冲洗数据以磁盘并通知在文件上观看的任何程序。
相关文章:
- c++多进程编写一个唯一的文件
- 避免使用 boost::进程间::消息队列创建文件
- 从根权限进程创建可访问的文件
- Windows 将标准的 C 文件结构注入到正在运行的进程中
- gcc 找不到 -lgcc, g++.exe: 错误: 创建进程: 没有这样的文件或目录
- 是否可以将子进程的 stdout 重定向到父进程中的另一个文件?
- 如何在 Linux 下使用 c++ 知道文件是否被其他进程使用?
- 多个线程/进程是否可以在不同步的情况下同时从/写入文件的非重叠区域?
- 如何检测哪些进程更改,重命名或创建文件?
- 如何:监视Windows中另一个进程的文件访问?
- 提升进程间共享内存删除、权限和输出文件
- 使用文件锁定的进程之间的条件变量
- 当多个进程尝试同时替换同一文件时,Linux 如何处理这种情况?
- COM 客户端连接 COM 服务器所需的文件是什么(进程外方案)
- 如何在我的进程中运行的二进制文件中注册操作和内核
- 为什么我的 Redhat 服务器上的 QuickFIX 进程没有将其核心文件写入应有的位置?
- Growing Boost.使用单个写入器的进程间内存映射文件
- C++ Mingw32 创建进程() 失败,错误代码 2:系统找不到指定的文件
- 如何从安卓原生二进制文件运行单独的进程
- Python 子进程.Popen 在 g++ 中编译,自动添加.cpp文件