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_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.
- [
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.