msync —
synchronize a mapped region
Standard C Library (libc, -lc)
#include <sys/mman.h>
int
  
  msync(void
    *addr, size_t len,
    int flags);
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
Upon successful completion, a value of 0 is returned. Otherwise, a value of -1
  is returned and errno is set to indicate the error.
The following errors may be reported:
  - [EBUSY]
- The MS_INVALIDATEflag 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.
- [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.
Themsync() function conforms to IEEE
  Std 1003.1b-1993 (“POSIX.1b”)
The msync() function first appeared in
  4.4BSD. It was modified to conform to
  IEEE Std 1003.1b-1993 (“POSIX.1b”) in
  NetBSD 1.3.