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 of the process's address space back to permanent storage 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 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.
- [
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
HISTORY
The msync
() function first appeared in
4.4BSD. 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.