msync - synchronize a mapped region
#include <sys/types.h>
#include <sys/mman.h>
int
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 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 formed by OR'ing the following values
MS_ASYNC Perform asynchronous writes.
MS_SYNC Perform synchronous writes.
MS_INVALIDATE Invalidate cached data after writing.
Upon successful completion, a value of 0 is returned. Otherwise, a value
of -1 is returned and errno is set to indicate the error.
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.
[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 conform
to IEEE Std 1003.1b-1993 (``POSIX'')
Writes are currently done synchronously even if the MS_ASYNC
flag is
specified.
OpenBSD 3.6 October 10, 1997
[ Back ] |