错误说明
- EBUSY
- 在标志中指定了MS_INVALIDATE,并且对于指定的地址范围存在内存锁定。
- EINVAL
- addr不是PAGESIZE的倍数;或MS_ASYNC以外的任何其他位| MS_INVALIDATE | MS_SYNC在标志中设置;或MS_SYNC和MS_ASYNC都在标志中设置。
- ENOMEM
- 指示的内存(或其一部分)未映射。
语法
#包括
int msync(void * addr,size_t长度,int标志);
备注
根据POSIX,必须在标志中指定MS_SYNC或MS_ASYNC,实际上,如果不包含这些标志之一将导致msync()在某些系统上失败。但是,Linux允许调用msync(),该调用既不指定这些标志,也不具有(当前)等价于指定MS_ASYNC的语义。 (自Linux 2.6.19起,MS_ASYNC实际上是禁止操作的,因为内核会正确跟踪脏页并根据需要将它们刷新到存储中。)尽管Linux行为良好,但可移植,面向未来的应用程序应确保它们指定了MS_SYNC或MS_ASYNC中的标志。
返回值
成功时,返回零。如果出错,则返回-1,并正确设置errno。
出版信息
这个页面是Linux手册页项目5.08版的一部分。有关项目的说明、有关报告错误的信息以及此页面的最新版本,请访问https://www.kernel.org/doc/man-pages/。
名称
msync-将文件与内存映射同步
遵循规范
POSIX.1-2001,POSIX.1-2008。
此调用是在Linux 1.3.21中引入的,然后使用EFAULT代替ENOMEM。在Linux 2.4.19中,将其更改为POSIX值ENOMEM。
在可以使用msync()的POSIX系统上,_POSIX_MAPPED_FILES和_POSIX_SYNCHRONIZED_IO都定义为大于0的值。(另请参见sysconf(3)。)
Linux程序员手册 第2部分
更新日期: 2020-06-09
日期:2019-08-20 17:59:01 来源:oir作者:oir