编程接口指南

创建和使用映射

mmap(2) 可用于建立指定的文件系统对象到进程地址空间的映射。指定的文件系统对象也可部分映射到进程地址空间中。此基本内存管理接口非常简单。请使用 open(2) 打开文件,接着使用 mmap(2) 创建具有适当访问权限和共享选项的映射,随后再继续执行应用程序。

mmap(2) 所建立的映射可针对指定的地址范围替换先前所有的映射。

标志 MAP_SHAREDMAP_PRIVATE 可指定映射的类型。必须指定一种映射类型。如果设置了 MAP_SHARED 标志,则写入操作会修改映射对象。无需对对象进一步执行任何操作即可进行更改。如果设置了 MAP_PRIVATE 标志,则首次对映射区域进行写入操作将创建一个页面副本。所有进一步的写入操作都会引用该副本。只有修改了的页面会被复制。

映射类型可以跨 fork(2) 保留。

通过 mmap(2) 建立映射之后,将不再使用调用中所用的文件描述符。如果关闭文件,则映射在 munmap(2) 将其撤消之前会一直保留。创建新映射可以替换现有映射。

通过 truncate 调用可以截短映射文件。尝试访问不再存在的文件区域会导致产生 SIGBUS 信号。

映射 /dev/zero 可为调用程序提供零填充的虚拟内存块。块的大小在调用 mmap(2) 时指定。以下代码段说明了如何使用此技术在程序中创建零填充的存储块。块的地址由系统选择。

removed to fr.ch4/pl1.create.mapping.c

某些设备或文件仅当通过映射对其进行访问时才有用。用于支持位图显示的帧缓冲区设备便是此现象的一个示例。显示管理算法直接对显示地址执行操作时,实现这些算法会简单得多。