Creating and Using Mappings

The mmap() function establishes a mapping of a named file system object into a process address space. A named file system object can also be partially mapped into a process address space. This basic memory management interface is very simple. Use the open() function to open the file, then use the mmap() function to create the mapping with the appropriate access and sharing options to proceed with your application.

The mapping established by the mmap() function replaces any previous mappings for the specified address range.

The flags MAP_SHARED and MAP_PRIVATE, specifies the type of mapping. You must specify the mapping type. If the MAP_SHARED flag is set, write operations modify the mapped object. No further operations on the object are needed to make the change. If the MAP_PRIVATE flag is set, the first write operation to the mapped area creates a copy of the page. All further write operations reference the copy. Only modified pages are copied.

You can use the MAP_ADI flag on platforms that support Application Data Integrity (ADI). When the MAP_ADI flag is set, ADI is enabled on the mapped region. When a region of memory is mapped for ADI, the ADI versions for the region are undefined until they are explicitly set by the application. The mapping type is retained across a fork() function.

After you have established the mapping through the mmap() function, the file descriptor used in the call is no longer used. If you close the file, the mapping remains until the munmap() function removes the mapping. Creating a new mapping replaces an existing mapping. For more information, see the munmap(2) man page.

A mapped file can be shortened by a call to truncate. An attempt to access the area of the file that no longer exists causes a SIGBUS signal.

Mapping /dev/zero gives the calling program a block of zero-filled virtual memory. This can also be done by setting the MAP_ANON flag and the file descriptor variable, filedes to -1. The size of the block is specified in the call to mmap() function.

Some devices or files are useful only when accessed by a mapping. Frame buffer devices used to support bit-mapped displays are an example of this phenomenon. Display management algorithms are imple to implement when the algorithms operate directly on the addresses of the display.

For more information, see the mmap(2), munmap(2), open(2), fork(2), adi(2), and adi(3C) man pages.