October 17, 2005 MSYNC 2

### NAME

msync - synchronize a mapped region

### LIBRARY

Standard C Library (libc, -lc)

### SYNOPSIS

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

### DESCRIPTION

The msync(``) system call writes all pages with shared modifications in the specified region of the process's address space back to permanent storage, and, if requested, invalidates cached data mapped in the region. If ```len` is 0, all modified pages within the region containing ```addr` will be flushed; if ```len` is non-zero, only modified pages containing ```addr` and ```len` succeeding locations will be flushed. 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 formed by or'ing 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, a value of 0 is returned. Otherwise, a value of -1 is returned and 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.

[```EINVAL`]
  The ```addr` parameter did not specify an address part of a mapped region.

[```EINVAL`]
  The ```len` parameter was negative.

[```EIO`]
  An I/O error occurred while writing to the file system.

[```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.

### SEE ALSO

mlock(2), mmap(2), munlock(2)

### HISTORY

The msync(``) function first appeared in 4.4BSD. It was modified to conform to IEEE Std 1003.1b-1993 (``POSIX.1'') in NetBSD1.3.