NAME

     msync - synchronize a file with a memory map


SYNOPSIS

     #include <unistd.h>
     #include <sys/mman.h>

     #ifdef _POSIX_MAPPED_FILES
     #ifdef _POSIX_SYNCHRONIZED_IO

     int msync(const void *start, size_t length, int flags

     #endif
     #endif


DESCRIPTION

     msync flushes changes made to the in-core  copy  of  a  file
     that  was  mapped  into  memory  using mmap(2) back to disk.
     Without use of this call there is no guarantee that  changes
     are  written  back  before  munmap(2) is called.  To be more
     precise, the part of the file that corresponds to the memory
     area  starting at start and having length length is updated.
     The flags argument may have the bits MS_ASYNC,  MS_SYNC  and
     MS_INVALIDATE  set,  but  not  both  MS_ASYNC  and  MS_SYNC.
     MS_ASYNC specifies that an update be scheduled, but the call
     returns  immediately.   MS_SYNC asks for an update and waits
     for it to complete.  MS_INVALIDATE asks to invalidate  other
     mappings  of the same file (so that they can be updated with
     the fresh values just written).


RETURN VALUE

     On success, zero is returned.  On error, -1 is returned, and
     errno is set appropriately.


ERRORS

     EINVAL
          start is not a multiple of PAGESIZE, or any  bit  other
          than  MS_ASYNC  |  MS_INVALIDATE  |  MS_SYNC  is set in
          flags.

     EFAULT
          The indicated memory (or part of it) was not mapped.


CONFORMING TO

     POSIX.1b (formerly POSIX.4)


SEE ALSO

     mmap(2), B.O. Gallmeister, POSIX.4,  O'Reilly,  pp.  128-129
     and 389-391.