面试题答案
一键面试msync
函数的作用
msync
函数用于将内存映射的文件数据同步到磁盘。当对内存映射区域进行修改后,通过msync
函数可以确保修改后的数据持久化到对应的文件中,保证内存和磁盘数据的一致性。
参数
int msync(void *addr, size_t length, int flags);
addr
:指向内存映射区域起始地址的指针,即mmap
函数返回的地址。length
:需要同步的内存区域的长度,以字节为单位。如果想同步整个映射区域,该值可设置为mmap
时指定的长度。flags
:同步标志,常见的标志有:MS_ASYNC
:异步同步,系统将尽快将数据写回磁盘,但函数会立即返回,不等待写操作完成。MS_SYNC
:同步同步,函数会阻塞直到数据成功写回磁盘。MS_INVALIDATE
:使其他进程对该映射区域的缓存失效,常用于多进程共享内存映射文件时,确保其他进程能获取到最新数据。
常见返回值含义
0
:表示函数执行成功,数据已成功同步(如果是MS_SYNC
标志)或已安排同步(如果是MS_ASYNC
标志)。-1
:表示函数执行失败,此时errno
会被设置以指示具体的错误原因,常见的错误原因如:EFAULT
:addr
指针无效,不在有效的映射区域内。EINVAL
:flags
参数无效,包含了不支持的标志位组合。ENOMEM
:系统内存不足,无法完成同步操作。