1.mmap父子进程通信
\qquad父子等有血缘关系的进程之间也可以通过mmap建立的映射区来完成数据通信。但相应的要在创建映射区时候指定对应的标志位参数flags:
\qquadMAP_PRIVATE
:父子进程各自独占映射区;MAP_SHARED
:父子进程共享映射区。
2.mmap匿名通信
\qquad所谓mmap匿名通信就是不借助中间文件创建mmap映射区。
3.举例
#include<stdio.h>
#include<sys/types.h>
#include<sys/stat.h>
#include<fcntl.h>
#include<stdlib.h>
#include<errno.h>
#include<string.h>
#include<sys/mman.h>
#include<unistd.h>
#include <sys/types.h>
#include <sys/wait.h>
int main()
{//1.创建父子共享映射区int* p;p = mmap(NULL,100,PROT_READ|PROT_WRITE,MAP_SHARED|MAP_ANON,-1,0);if(p==MAP_FAILED){perror("mmap fail!");exit(1);}//2.创建子进程int fork_fd;fork_fd = fork();if(fork_fd==-1){perror("fork fail!");exit(1);}else if(fork_fd==0){printf("子进程已经被创建!\n");*p = 1000;printf("i am child,*p=%d\n",*p);}else if(fork_fd>0){sleep(2);int wait_fd;wait_fd = wait(NULL);if(wait_fd==-1){perror("wait fail!");exit(1);}printf("父进程已经被创建!\n");printf("i am parent,*p=%d\n",*p);}//3.关闭映射区int close_fd;close_fd = munmap(p,100);if(close_fd==-1){perror("munmap fail!");exit(1);}return 0;
}