来自http://www.informit.com/guides/content.aspx?g=cplusplus&seqNum=213
POSIX头文件包括内存映射系统调用和数据结构。由于这个接口比Windows更直观和简单,我将我的内存映射示例基于POSIX库。
mmap()系统调用:
caddr_t mmap(caddress_t map_addr,
size_t length,
int protection,
int flags,
int fd,
off_t offset);
让我们来看看每个参数的含义。
在下面的示例中,程序将命令行传递的文件的前4 KB映射到其内存中,然后从中读取int值:
#include <errno.h>
#include <fcntl.h>
#include <sys/mman.h>
#include <sys/types.h>
int main(int argc, char *argv[])
{
int fd;
void * pregion;
if (fd= open(argv[1], O_RDONLY) <0)
{
perror("failed on open");
return –1;
}
pregion=mmap(NULL, 4096, PROT_READ,MAP_SHARED,fd,0);
if (pregion==(caddr_t)-1)
{
perror("mmap failed")
return –1;
}
close(fd);
int val= *((int*) pregion);
}
使用munmap()函数取消映射一个已经映射的区域:
int munmap(caddr_t addr, int length);
addr是正在取消映射的区域的地址。length指定应取消映射多少内存(您可以取消映射先前映射的部分区域)。以下示例取消映射了先前映射文件的第一个千字节。在此调用之后,剩余的三个KB仍然映射到进程的RAM中:
munmap(pregion, 1024);