Section: Linux Programmer's Manual (2)
msync - synchronize a file with a memory map
int msync(void *addr, size_t length, int flags);
flushes changes made to the in-core copy of a file that was mapped
into memory using
back to the filesystem.
Without use of this call,
there is no guarantee that changes are written back before
To be more precise, the part of the file that
corresponds to the memory area starting at
and having length
argument should specify exactly one of
and may additionally include the
These bits have the following meanings:
Specifies that an update be scheduled, but the call returns immediately.
Requests an update and waits for it to complete.
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
is set appropriately.
was specified in
and a memory lock exists for the specified address range.
is not a multiple of PAGESIZE; or any bit other than
MS_ASYNC | MS_INVALIDATE | MS_SYNC
is set in
are set in
The indicated memory (or part of it) was not mapped.
This call was introduced in Linux 1.3.21, and then used
In Linux 2.4.19, this was changed to the POSIX value
On POSIX systems on which
is available, both
are defined in
to a value greater than 0.
According to POSIX, either
must be specified in
and indeed failure to include one of these flags will cause
to fail on some systems.
However, Linux permits a call to
that specifies neither of these flags,
with semantics that are (currently) equivalent to specifying
(Since Linux 2.6.19,
is in fact a no-op, since the kernel properly tracks dirty
pages and flushes them to storage as necessary.)
Notwithstanding the Linux behavior,
portable, future-proof applications should ensure that they specify either
B.O. Gallmeister, POSIX.4, O'Reilly, pp. 128-129 and 389-391.
This page is part of release 5.10 of the Linux
A description of the project,
information about reporting bugs,
and the latest version of this page,
can be found at