msync()

Synchronize memory with physical storage

Synopsis:

#include <sys/mman.h>

int msync( void * addr, 
           size_t len, 
           int flags );

Arguments:

addr
The beginning of the range of addresses that you want to synchronize.
len
The length of the range of addresses, in bytes.
flags
A bitwise inclusive OR of one or more of the following flags:

Note: You can specify at most one of MS_ASYNC and MS_SYNC, not both.

Library:

libc

Use the -l c option to qcc to link against this library. This library is usually included automatically.

Description:

The msync() function writes all modified data to permanent storage locations, if any, in those whole pages containing any part of the address space of the process starting at address addr and continuing for len bytes. The msync() function is used with memory mapped files. If no such storage exists, msync() need not have any effect. If requested, the msync() function then invalidates cached copies of data.

For mappings to files, this function ensures that all write operations are completed as defined for synchronized I/O data integrity completion.


Note: Mappings to files aren't implemented on all filesystems.

If you call msync() on MAP_PRIVATE mappings, any modified data isn't written to the underlying object and doesn't cause such data to be made visible to other processes.

The behavior of msync() is unspecified if the mapping wasn't established by a call to mmap().

If msync() causes any write to a file, the file's st_ctime and st_mtime fields are marked for update.

Returns:

0
Success
-1
An error occurred (errno is set).

Errors:

EBUSY
Some or all of the addresses in the range starting at addr and continuing for len bytes are locked, and MS_INVALIDATE is specified.
EINTR
The call was interrupted by a signal.
EINVAL
Invalid flags value.
ENOMEM
The addresses in the range starting at addr and continuing for len bytes are outside the range allowed for the address space of a process or specify one or more pages that aren't mapped.

Examples:

See the entry for mmap().

Classification:

POSIX 1003.1 MF SIO

Safety:
Cancellation point Yes
Interrupt handler No
Signal handler Yes
Thread Yes

Caveats:

MS_INVALIDATE_ICACHE and MS_CACHE_ONLY are QNX Neutrino extensions. The behavior of this function changed in the QNX Neutrino Core OS 6.3.2; to get the previous behavior of just data-cache operations, add the MS_CACHE_ONLY flag to the call in addition to MS_ASYNC, MS_SYNC, or MS_INVALIDATE.

See also:

mmap(), sysconf()