#include<stdio.h>
#include<stdlib.h>
#include <sys/mman.h>
#include <sys/types.h>
#include <unistd.h>
#include <string.h>
#include <sys/wait.h>
#define MAXSZ 1024
int main(){
char* star = NULL;
star = (char*) mmap(NULL,MAXSZ,PROT_READ|PROT_WRITE,MAP_SHARED|MAP_ANONYMOUS,-1,0);
if(star < 0){
perror("mmap():");
exit(1);
}
pid_t pid = fork();
if(pid < 0){
perror("fork()");
exit(1);
}
if(pid == 0){
strcpy(star,"HELLO");
munmap(star,MAXSZ);
exit(0);
}
else{
wait(NULL);
puts(star);
exit(0);
}
}
这个代码我们先用mmap系统调用将内存空间的一段区域映射到我们的进程空间,注意我们选择flag选项的时候一定要加上这个选项MAP_ANONYMOUS,这样代表申请内存的一段匿名空间,就不需要借助文件了,记得文件描述符哪里填-1,接着我们调用fork,此时子进程也复制了父进程的进程空间,因为我们是先mmap的,所以一段内存空间同样也映射到了star所指向的子进程的进程空间,我们先向star指向的子进程空间写向hello字符串,执行完munmap后,子进程的进程空间的东西就刷到了对应的内存空间。然后我们用父进程去读自己的进程空间,相当于读了内存,就可以读到了。