msync - synchronize a file with a memory map
#include <unistd.h>
#include <sys/mman.h>
#ifdef _POSIX_MAPPED_FILES
#ifdef _POSIX_SYNCHRONIZED_IO
int msync(const void *start, size_t length, int flags);
#endif
#endif
msync flushes changes made to the in-core copy of a file that was
mapped into memory using mmap(2) back to disk. Without use of this
call there is no guarantee that changes are written back before mun-
map(2) is called. To be more precise, the part of the file that corresponds
to the memory area starting at start and having length length is
updated. The flags argument may have the bits MS_ASYNC, MS_SYNC and
MS_INVALIDATE set, but not both MS_ASYNC and MS_SYNC. MS_ASYNC specifies
that an update be scheduled, but the call returns immediately.
MS_SYNC asks for an update and waits for it to complete. MS_INVALIDATE
asks to invalidate other mappings of the same file (so that they can be
updated with the fresh values just written).
On success, zero is returned. On error, -1 is returned, and errno is
set appropriately.
EINVAL start is not a multiple of PAGESIZE, or any bit other than
MS_ASYNC | MS_INVALIDATE | MS_SYNC is set in flags.
EFAULT The indicated memory (or part of it) was not mapped.
POSIX.1b (formerly POSIX.4)
mmap(2), B.O. Gallmeister, POSIX.4, O'Reilly, pp. 128-129 and 389-391.
Linux 1.3.86 1996-04-12 MSYNC(2)
[ Back ] |