MSYNC(2) | System Calls Manual | MSYNC(2)

# NAME

`msync` — synchronize a mapped region

# SYNOPSIS

`#include <sys/mman.h>`

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

# DESCRIPTION

The `msync`() system call writes all pages with shared modifications in the specified region starting from addr and continuing for len bytes. addr should be a multiple of the page size. 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 the bitwise OR of zero or more of the following values:

    MS_ASYNC	Perform asynchronous writes.
    MS_SYNC		Perform synchronous writes.
    MS_INVALIDATE	Invalidate cached data after writing.

# RETURN VALUES

Upon successful completion, the value 0 is returned; otherwise the value -1 is returned and the global variable errno is set to indicate the error.

# ERRORS

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 or addr and size specify a region that would extend beyond the end of the address space.
[`EPERM`]
  The addr and len parameters specify a region which contains at least one page marked immutable.
[`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.

# SEE ALSO

madvise(2), mimmutable(2), minherit(2), mprotect(2), munmap(2)

# HISTORY

The `msync`() function has been available since 4.3BSD-Net/2. It was modified to conform to IEEE Std 1003.1b-1993 (“POSIX.1b”)

# BUGS

Writes are currently done synchronously even if the `MS_ASYNC` flag is specified.

January 21, 2024 | Debian