内容简介
#include <sys/mman.h>int msync(void *start, size_t%uA0length, int%uA0flags)
描述
msync() flushes changes made to the in-core copy of a file that was mapped into memory using%uA0mmap(2) back to disk. Without use of this call there is no guarantee that changes are written back before%uA0munmap(2) is called. To be more precise, the part of the file that corresponds to the memory area starting at%uA0start%uA0and having length%uA0lengthis updated. The%uA0flags%uA0argument may have the bits MS_ASYNC, MS_SYNC and MS_INVALIDATE set, but not both MS_ASYNC and MS_SYNC. MS_ASYNC specifies that an update be scheduled, but the call returns immediately. MS_SYNC asks for an update and waits for it to complete. MS_INVALIDATE asks to invalidate other mappings of the same file (so that they can be updated with the fresh values just written).返回值
On success, zero is returned. On error, -1 is returned, and%uA0errno%uA0is set appropriately.错误
标签 | 描述 |
---|---|
EINVAL | start%uA0is not a multiple of PAGESIZE or any bit other than MS_ASYNC | MS_INVALIDATE | MS_SYNC is set in%uA0flags or both MS_SYNC and MS_ASYNC are set in%uA0flags. |
ENOMEM | The indicated memory (or part of it) was not mapped. |
可用性
On POSIX systems on which%uA0msync() is available, both%uA0_POSIX_MAPPED_FILES%uA0and_POSIX_SYNCHRONIZED_IO%uA0are defined in <unistd.h> to a value greater than 0. (See also%uA0sysconf(3).)遵循于
POSIX.1-2001.This call was introduced in Linux 1.3.21, and then used EFAULT instead of ENOMEM. In Linux 2.4.19 this was changed to the POSIX value ENOMEM.