Name

mmap - map files or devices into memory

Library

libc.lib

Synopsis

  #include <sys/mman.h>
  void * mmap (void *addr, size_t len, int prot, int flags, int fd, off_t offset);

Return values

Upon successful completion, mmap returns a pointer to the mapped region. Otherwise, a value of MAP_FAILED is returned and errno is set to indicate the error.

Detailed description

The mmap system call causes the pages starting at addr and continuing for at most len bytes to be mapped from the object described by fd, starting at byte offset offset. If len is not a multiple of the pagesize, the mapped region may extend past the specified range. Any such extension beyond the end of the mapped object will be zero-filled.

If addr is non-zero, it is used as a hint to the system. (As a convenience to the system, the actual address of the region may differ from the address supplied.) If addr is zero, an address will be selected by the system. The actual starting address of the region is returned. A successful mmap deletes any previous mapping in the allocated address range.

The protections (region accessibility) are specified in the prot argument by or ’ing the following values:

PROT_READ Pages may be read.
PROT_WRITE Pages may be written.
PROT_EXEC Pages may be executed.
PROT_NONE This protection mode is currently not supported.

The flags argument specifies the type of the mapped object, mapping options and whether modifications made to the mapped copy of the page are private to the process or are to be shared with other references. Sharing, mapping type and options are specified in the flags argument by or ’ing the following values:

MAP_PRIVATE Modifications are private.
MAP_SHARED Modifications are shared.
MAP_FIXED, MAP_FILE, MAP_ANON, MAP_HASSEMAPHORE, MAP_STACK, MAP_NOSYNC -- These flags are currently not supported.

The close system call does not unmap pages, see munmap for further information.

The current design does not allow a process to specify the location of swap space. In the future we may define an additional mapping type, MAP_SWAP, in which the file descriptor argument specifies a file or device to which swapping should be done.


Examples

/*
* Detailed description  : Example to create a mapped memory to a file region.
* Precondition : None
*               
*/
#include <unistd.h>
#include <stdio.h>
#include <sys/mman.h>
#include <fcntl.h>
int main(void)
{
    int fd = -1;
    char* mapaddr;
    int len = getpagesize();
    int prot = PROT_WRITE | PROT_READ;
    if((fd = open("C:\\Test.txt", O_RDWR | O_CREAT, 0666) ) < 0){
        printf("File open failed\n");
    }
    mapaddr = (char*)mmap((void*)0, len, prot, MAP_SHARED, fd, 0);
    if(mapaddr == MAP_FAILED){
        printf("mmap on file failed\n");
    }
    printf("mmap on file succeeded\n");
}

         

Errors

The mmap system call will fail if:
[EACCES]
  The flag PROT_READ was specified as part of the prot argument and fd was not open for reading. The flags MAP_SHARED and PROT_WRITE were specified as part of the flags and prot argument and fd was not open for writing.
[EBADF]
  The fd argument is not a valid open file descriptor.
[ENOTSUP]
  MAP_FIXED was specified in the flag argument.
[ENOTSUP]
  PROT_NONE was specified in the prot argument.
[EMFILE]
  The number of mapped regions would exceed an implementation-defined limit (per process or per system).
[ENXIO]
  Addresses in the range( off,off + len ) are invalid for the object specified by fd.
[EINVAL]
  The len argument was lesser or equal to 0.
[EINVAL]
  The offset argument was not page-aligned.

See also

mprotect, msync, munmap, getpagesize,

Feedback

For additional information or queries on this page send feedback

© 2005-2007 Nokia

Top