NAME
msync —
synchronize a mapped region
SYNOPSIS
#include
<sys/mman.h>
int
msync(void
*addr, size_t len,
int flags);
DESCRIPTION
The
msync()
system call writes all pages with shared modifications in the specified
region starting from addr and continuing for
len bytes. addr should be a
multiple of the page size. Any required synchronization of memory caches
will also take place at this time. Filesystem operations 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 values:
MS_ASYNC Perform asynchronous writes. MS_SYNC Perform synchronous writes. MS_INVALIDATE Invalidate cached data after writing.
RETURN VALUES
Upon successful completion, the value 0 is returned; otherwise the value -1 is returned and the global variable errno is set to indicate the error.
ERRORS
The following errors may be reported:
- [
EBUSY] - The
MS_INVALIDATEflag 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.
- [
EPERM] - The addr and len parameters specify a region which contains at least one page marked immutable.
- [
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.
SEE ALSO
madvise(2), mimmutable(2), minherit(2), mprotect(2), munmap(2)
HISTORY
The msync() function has been available
since 4.3BSD-Net/2. It was modified to conform to
IEEE Std 1003.1b-1993 (“POSIX.1b”)
BUGS
Writes are currently done synchronously even if the
MS_ASYNC flag is specified.