映射地址空間,只能用與有親緣關系
函數(shù)聲明
#include <sys/mman.h>
void *mmap(void *addr, size_t length, int prot, int flags int fd, off_t offset);
參數(shù)含義
第一參數(shù)為映射空間地址,如果是NULL,則內(nèi)核自動分配到進程所在的第一個可用地址上,不傳NULL,則分配地址由用戶指定;
第二個參數(shù)為空間大小
第三個參數(shù)為權(quán)限,可選參數(shù)有
? 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.
第四個參數(shù)為附加選項常用可選參數(shù)有
? MAP_PRIVATE
? MAP_ANONYMOUS
? MAP_SHARED
第五個參數(shù)為文件描述符,如果文件描述符為-1,
第六個參數(shù)為文件偏移量
返回值
若成功,返回映射區(qū)起始地址
若出錯,返回MAP_FAILED
共享內(nèi)存示例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);
}