MSYNC(2) BSD System Calls Manual MSYNC(2)
msync -- synchronize a mapped region
msync(void *addr, size_t len, int flags);
The msync() system call writes all pages with shared modifications in the
specified region of the process's address space back to permanent stor-
age, and, if requested, invalidates cached data mapped in the region. If
len is 0, all modified pages within the region containing addr will be
flushed; if len is non-zero, only modified pages containing addr and
len-1 succeeding locations will be flushed. Any required synchronization
of memory caches will also take place at this time. Filesystem opera-
tions on a file that is mapped for shared modifications are unpredictable
except after an msync().
The flags argument is the bitwise OR of zero or more of the following
MS_ASYNC Perform asynchronous writes.
MS_SYNC Perform synchronous writes.
MS_INVALIDATE Invalidate cached data after writing.
Upon successful completion, the value 0 is returned; otherwise the
value -1 is returned and the global variable errno is set to indicate the
The following errors may be reported:
[EBUSY] The MS_INVALIDATE flag was specified and a portion of
the specified region was locked with mlock(2).
[EINVAL] The specified flags argument was invalid.
[EINVAL] The addr parameter was not page aligned or addr and
size specify a region that would extend beyond the end
of the address space.
[ENOMEM] Addresses in the specified region are outside the
range allowed for the address space of the process, or
specify one or more pages which are unmapped.
[EIO] An I/O error occurred while writing.
madvise(2), mincore(2), minherit(2), mprotect(2), munmap(2)
The msync() function first appeared in 4.4BSD. It was modified to con-
form to IEEE Std 1003.1b-1993 (``POSIX.1'')
Writes are currently done synchronously even if the MS_ASYNC flag is
BSD April 29, 2017 BSD