映射地址空间,只能用与有亲缘关系
函数声明
#include <sys/mman.h>
void *mmap(void *addr, size_t length, int prot, int flags int fd, off_t offset);
参数含义
第一参数为映射空间地址,如果是NULL,则内核自动分配到进程所在的第一个可用地址上,不传NULL,则分配地址由用户指定;
第二个参数为空间大小
第三个参数为权限,可选参数有
PROT_EXEC Pages may be executed.
PROT_READ Pages may be read.
PROT_WRITE Pages may be written.
PROT_NONE Pages may not be accessed.
第四个参数为附加选项常用可选参数有
MAP_PRIVATE
MAP_ANONYMOUS
MAP_SHARED
第五个参数为文件描述符,如果文件描述符为-1,
第六个参数为文件偏移量
返回值
若成功,返回映射区起始地址
若出错,返回MAP_FAILED
共享内存示例2
#include <stdio.h>
#include <stdlib.h>
#include <sys/wait.h>
#include <unistd.h>
#include <string.h>
#include <errno.h>
#include <sys/mman.h>
int main(void)
{
pid_t pid;
void *ptr = NULL;
ptr = mmap(NULL, 1024, PROT_READ | PROT_WRITE, MAP_ANONYMOUS | MAP_SHARED, -1, 0);
if (MAP_FAILED == ptr) {
perror("mmap()");
exit(1);
}
pid = fork();
if (pid < 0) {
perror("fork()");
goto FORK_ERROR;
}
if (pid == 0) {
memcpy(ptr, "map address", 11);
exit(1);
}
wait(NULL);
puts(ptr);
munmap(ptr, 1024);
exit(0);
FORK_ERROR:
exit(1);
}