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.