来自fsync(2):
fsync() transfers ("flushes") all modified in-core data of (i.e., modified
buffer cache pages for) the file referred to by the file descriptor fd to
the disk device (or other permanent storage device)如果fd是由shm_open(3p)或`memfd_create(2)*等内存中的API获得的,fsync会产生什么影响?是否有必要显式提交对内存对象的更改?
发布于 2018-10-04 11:36:20
没有效果。它与永久存储无关。
历史上,混合mmap()和read()/write()可能会产生不一致的结果。
现代Linux的结构非常仔细,以使其在每个受支持的CPU上都能正常工作。虽然你的系统太模糊了,但你仍然可能是一个不幸的人,发现了一个特定于硬件的错误。
要点是,在符合POSIX的操作系统上,如果您想让read()在写入文件的内存映射后保持一致,那么就有必要使用msync()进行刷新。如果您想了解POSIX规则,那么查看msync()的MS_INVALIDATE标志以及它的存在意味着什么可能会有帮助。
但是,POSIX msync()专门针对与持久存储相关联的映射。它没有定义它对“共享内存对象”的影响。因此,这将是一个非常模糊的方式来回答你原来的问题。
还要记住,仅仅因为实现了与POSIX调用名称相同的系统调用,它就不一定提供与POSIX相同的保证。实际上,只有少数OS版本被提交到POSIX测试套件中。(这要花钱)。
https://unix.stackexchange.com/questions/473210
复制相似问题