Name
      
      msync - synchronizes a file with a memory map 
      
      
      
      
         
         Library
      
      
      
      
      libc.lib
      
      
      
      
         
         Synopsis
      
      
      
      
      
      
      
         
            |  | int
               
               
               msync (void *addr, size_t len, int flags); 
 | 
      
      
         
         Return values
      
      
      Upon successful completion, msync() shall return 0; otherwise,
      it shall return -1 and set
      
      
       errno
      to indicate the error.
      
      
      
      
         
         Detailed description
      
      
      The
      
      
       msync
      system call
      writes any modified pages back to the file system.
      if
      
      
       len
      is non-zero, only those pages containing
      
      
       addr
      and
      
      
       len-1
      succeeding locations will be examined.
      The
      
      
       flags
      argument may be specified as follows:
      
      
      
      
         
         
         
         
         
         
            
               | MS_ASYNC | 
            
               |  | This flag is currently not supported. | 
            
               | MS_SYNC | 
            
               |  | Perform synchronous writes | 
            
               | MS_INVALIDATE | 
            
               |  | Invalidate all cached data | 
            |
         
         
         
      
      
         
         Examples
      
      
      
      
      
/*
* Detailed description: Example to sync changes on mapped memory to file.
* Precondition: None
*               
*/
#include <unistd.h>
#include <stdio.h>
#include <sys/mman.h>
#include <fcntl.h>
#include <string.h>
int main(void)
{
    int fd = -1;
    char* mapaddr;
    int len = getpagesize();
    int prot = PROT_WRITE | PROT_READ;
    if((fd = open("C:\est.txt", O_RDWR | O_CREAT, 0666) ) < 0)
    {
         printf("File open failed");
    }
    mapaddr = (char*)mmap((void*)0, len, prot, MAP_SHARED, fd, 0);
    if(mapaddr == MAP_FAILED)
    {
         printf("mmap on file failed");
    }
    strcpy(mapaddr, "This is a write through mapped memory ");
    if(-1 == msync(mapaddr, len, MS_SYNC))
    {
        printf("Sync on mapped memory to file failed");
    }
    printf("Sync on mapped memory to file succeeded");
}
         
      
         
         Errors
      
      
      The
      
      
       msync
      system call
      will fail if:
      
      
      
      
      
      
         
            | [EBUSY] | 
         
            |  | Some or all of the pages in the specified region are locked and
               
               
                MS_INVALIDATE
               is specified. (This errno is currently not supported) | 
         
            | [EINVAL] | 
         
            |  | The
               
               
                addr
               argument
               is not a multiple of the hardware page size. | 
         
            | [EINVAL] | 
         
            |  | The
               
               
                len
               argument
               is too large or negative. | 
         
            | [EINVAL] | 
         
            |  | The
               
               
                flags
               argument
               was both MS_ASYNC and MS_INVALIDATE.
               Only one of these flags is allowed or the
               
               
                flags
               are invalid. | 
         
            | [ENOMEM] | 
         
            |  | The addresses in the range starting at addr and continuing for len bytes
               are outside the range allowed for the address space of a process or specify
               one or more pages that are not mapped. | 
         |
      
      
      
      
         
         See also
      
      
      
      
      mlock,
      
      
      mprotect,
      
      
      munmap
      
      
      
      
         The
         
         
          msync
         system call first appeared in
         
         
         BSD 4.4.
         
         
         Feedback
For additional information or queries on this page send feedback	
      
      
      
      
         
         
         
            
               | © 2005-2007 Nokia  | 
 |