首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >对内存中的文件调用fsync()

对内存中的文件调用fsync()
EN

Unix & Linux用户
提问于 2018-10-04 11:32:56
回答 1查看 934关注 0票数 0

来自fsync(2):

代码语言:javascript
复制
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会产生什么影响?是否有必要显式提交对内存对象的更改?

EN

回答 1

Unix & Linux用户

回答已采纳

发布于 2018-10-04 11:36:20

没有效果。它与永久存储无关。

历史上,混合mmap()和read()/write()可能会产生不一致的结果。

现代Linux的结构非常仔细,以使其在每个受支持的CPU上都能正常工作。虽然你的系统太模糊了,但你仍然可能是一个不幸的人,发现了一个特定于硬件的错误。

要点是,在符合POSIX的操作系统上,如果您想让read()在写入文件的内存映射后保持一致,那么就有必要使用msync()进行刷新。如果您想了解POSIX规则,那么查看msync()的MS_INVALIDATE标志以及它的存在意味着什么可能会有帮助。

但是,POSIX msync()专门针对与持久存储相关联的映射。它没有定义它对“共享内存对象”的影响。因此,这将是一个非常模糊的方式来回答你原来的问题。

还要记住,仅仅因为实现了与POSIX调用名称相同的系统调用,它就不一定提供与POSIX相同的保证。实际上,只有少数OS版本被提交到POSIX测试套件中。(这要花钱)。

票数 1
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/473210

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档