mmap()函数可以将内存的一块地址空间映射到进程空间的指定地址中。
同样的也可以利用其开启一块共享的内存空间。(与malloc类似)
开启一个子进程,与父进程利用mmap共同管理一块内存空间。
#include<stdlib.h>
#include<sys/mman.h>
#include<stdio.h>
#include<string.h>
#include<unistd.h>
#include<sys/types.h>
#include<sys/wait.h>
#define MEMSIZE 1024
int main()
{
char *ptr;
pid_t pid;
ptr = (char *)mmap(NULL,MEMSIZE,PROT_READ|PROT_WRITE,MAP_SHARED|MAP_ANONYMOUS,-1,0);
if(ptr == MAP_FAILED)
{
perror("mmap()");
exit(0);
}
pid = fork();
if(pid<0)
{
perror("fork()");
munmap(ptr,MEMSIZE);
exit(1);
}
if(pid == 0) //child write
{
strcpy(ptr,"Hello");
munmap(ptr,MEMSIZE);
exit(0);
}
else //parent read
{
wait(NULL);
puts(ptr);
munmap(ptr,MEMSIZE);
exit(0);
}
}