除了标准文件I/O,内核还提供了一个接口,支持应用程序将文件映射到内存中,
即内存地址和文件数据一一对应。这样,开发人员就可以直接通过内存来访问
文件,就像操作内存中的数据块一样,甚至可以写入内存数据区,然后通过透明
的映射机制将文件写入磁盘。
mmap()
mmap()调用请求内核将文件描述符fd所指向的对象的len个字节数据映射到内存中,
起始位置从offset开始。如果指定addr,表示优先使用addr作为内存中的起始地址。
参数prot指定了访问权限,flags指定了其他操作行为。
#include
void *mmap(void *addr,
size_t len,
int prot,
int flags,
int fd,
off_t offset);
下面,我们来看一个简单的实例,它使用mmap()将用户选择的文件输出到标准输出:
编译:
运行:
这段程序完成如下操作:接收一个文件名作为程序参数,打开文件,确保是普通文件,为文件
做存储映射,关闭,按字节把文件输出到标准输出,最后消除文件的存储映射。