目录
1、非父子进程间通信
假设现在有两个毫无关联的进程A、B,要让这两个进程进行通信,其实就是让这两个进程跟同一个文件建立映射。相当于一个进程在向文件写内容,一个进程在从文件读内容。

(1) 进程 mmap_w:负责写文件
我们让进程mmap_w 每隔 1s向映射空间中写入一个字节。
int main(){
int fd = open("./log.txt", O_RDWR);
if(fd < 0)
{
perror("open");
return -1;
}
int len = lseek(fd, 0, SEEK_END);
void* addr = mmap(NULL, len, PROT_WRITE, MAP_SHARED, fd, 0);
if(addr == MAP_FAILED)
{
perror("mmap");
return -1;
}
close(fd);
int i = 0;
while(1){
memcpy(addr + i, "a", 1); // 每隔1s向 addr + i 的位置写入一个字节
i++;
sleep(1);
}
munmap(addr, len); // 释放映射
}
<

本文介绍如何利用mmap实现非父子进程及父子进程间的通信。通过两个进程对同一文件进行读写操作来实现非父子进程通信;通过设置MAP_ANONYMOUS标志位实现父子进程通信。
最低0.47元/天 解锁文章
570

被折叠的 条评论
为什么被折叠?



