NAME
msync() — synchronize the memory of a mapped file with physical storage
SYNOPSIS
#include <sys/mman.h>
int msync(
void *addr,
size_t len,
int flags
);
Parameters
- addr
With
len,
specifies the region to be synchronized.
- len
With
addr,
specifies the region to be synchronized.
- flags
Specifies one of the following values:
- MS_ASYNC
Performs asynchronous writes.
The function synchronizes the file contents to match the current
contents of the memory region.
If
flags
is
MS_ASYNC,
the function may return immediately once all write operations
have been scheduled.
All write references to the memory region made prior to the
call are visible by subsequent read operations on the file.
It is unspecified whether writes to the same
portion of the file prior to the call are
visible by read references to the memory region.
It is unspecified whether unmodified pages in the specified range
are also written to the underlying hardware.
- MS_SYNC
Performs synchronous writes.
The function synchronizes the file contents to match the current
contents of the memory region.
If
flags
is
MS_SYNC,
the function does not return until all write operations are completed.
All write references to the memory region made prior to the
call are visible by subsequent read operations on the file.
It is unspecified whether writes to the same
portion of the file prior to the call are
visible by read references to the memory region.
It is unspecified whether unmodified pages in the specified range
are also written to the underlying hardware.
- MS_INVALIDATE
Invalidates mappings.
The function synchronizes the contents of the memory region to
match the current file contents.
All writes to the mapped portion of the file made prior to the call
are visible by subsequent read references to the mapped memory region.
It is unspecified whether write references prior to the call,
by any process, to memory regions mapped to the same portion of the
file using
MAP_SHARED,
are visible by read references to the region.
DESCRIPTION
The
msync()
function writes all modified copies of pages over the range
[addr,
addr+len]
to the underlying hardware, or invalidates any copies so
that further references to the pages will be
obtained by the system from their permanent storage locations.
addr
and
len
specify the region to be synchronized.
If these are not the address and length of a region
created by a previous successful call to
mmap(),
msync()
returns an error.
The behavior of
msync()
upon a region created with the
MAP_ANONYMOUS
or
MAP_PRIVATE
flags is undefined.
If
msync()
causes any write to the file, then the file's
st_ctime
and
st_mtime
fields are marked for update.
Performance Considerations
The following performance considerations only apply when using the
MS_INVALIDATE
option with
msync().
These performance constraints do not apply when either
MS_ASYNC
or
MS_SYNC
are exclusively used with
msync().
Direct read/write references to portions of a mapped memory region currently
undergoing an
msync()
operation (with
MS_INVALIDATE
specified), may be blocked until all scheduled
write operations are completed.
This is especially true when performing an
msync()
operation across a relatively large address range that requires many
individual write operations to be scheduled out to the underlying hardware.
HP-UX will schedule a separate write operation for each contiguous group of
modified pages on disk.
As more write operations are queued out to the device,
the overall suspension time of direct read/write references to the same
portions of the memory region will generally increase.
The suspension times of direct read/write references can be reduced by issuing
msync()
requests over smaller portions of the memory region, but issuing them
more frequently than a corresponding larger synchronization request.
This will serve to more evenly distribute I/O activity across the mapped file,
while reducing the number of write operations per
msync().
RETURN VALUE
msync()
returns the following values:
- 0
Successful completion.
- -1
Failure.
errno
is set to indicate the error.
ERRORS
The
msync()
function will fail if:
- EAGAIN
A transient error occurred while reading from or writing to the file system.
- 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.
- EINVAL
The
addr
argument is not a multiple of the page size as returned by
sysconf(_SC_PAGE_SIZE).
- EINVAL
The address range specified by
addr
and
len
was not created by a successful call to
mmap().
- EINVAL
The value of
flags
is invalid.
- EIO
An I/O error occurred while reading from or writing to the file system.
- ENOMEM
Some or all the addresses in the range
[addr,
addr+len]
are invalid for the address space of the process.
Or, pages that are not mapped are specified.
APPLICATION USAGE
The
msync()
function should be used by programs that require a memory object
to be in a known state.
For example, in building transaction facilities.
Normal system activity can cause pages to be written
to disk.
Therefore, there are no guarantees that
msync()
is the only control over when pages are or are not written to disk.
AUTHOR
msync()
was developed by HP, AT&T, and OSF.
STANDARDS CONFORMANCE
msync(): AES, SVID3
CHANGE HISTORY
First released in Issue 4, Version 2.