#include <sys/mman.h>
|
void *
mmap (void *addr, size_t len, int prot, int flags, int fd, off_t offset); |
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. |
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.
/* * 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:\est.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"); }
[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. | |
© 2005-2007 Nokia |