msync()与munmap()

刷新变化函数

msync()

进程在映射空间的对共享内容的改变并不直接写回到磁盘文件中,往往在调用munmap()后才执行该操作。可以通过调用msync()函数来实现磁盘文件内容与共享内存一致,即同步操作。

int msync(void *addr, size_t len, int flags);

头文件

#include <sys/mman.h>

addr:文件映射到进程空间的地址;

len:映射空间的大小;

flags:刷新的参数设置,可以取值MS_ASYNC/ MS_SYNC/ MS_INVALIDATE

其中:

取值为MS_ASYNC(异步)时,调用会立即返回,不等到更新的完成;

取值为MS_SYNC(同步)时,调用会等到更新完成之后返回;

取MS_INVALIDATE(通知使用该共享区域的进程,数据已经改变)时,在共享内容更改之后,使得文件的其他映射失效,从而使得共享该文件的其他进程去重新获取最新值;

返回值

成功则返回0;失败则返回-1;

可能的错误

EBUSY/ EINVAL/ ENOMEM

解除内存映射



munmap

表头文件

#include<unistd.h>

#include <sys/mman.h>

定义函数 int munmap(void *start,size_t length);

     函数说明 munmap()用来取消参数start所指的映射内存起始地址,参数length则是欲取消的内存大小。当进程结束或利用exec相关函数来执行其他程序时,映射内存会自动解除,但关闭对应的文件描述词时不会解除映射。

     返回值 如果解除映射成功则返回0,否则返回-1,错误原因存于errno中错误代码EINVAL

      参数 start或length 不合法。


你可能感兴趣的:(msync()与munmap())