介绍
- 使用 shm 共享内存,实现父子之间通信;
- 父进程读,子进程写
- 若要实现没有没有亲缘关系进程之间的通信,只需使用 ftok() 获取一个 key 值,两个进程都使用这个 key 值代替 IPC_PRIVATE ,即可实现不同进程之间的通信
代码
mmap_shm.c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <sys/wait.h>
#include <sys/shm.h>
#define MEMSIZE 1024
int main(int argc, char **argv){
pid_t pid;
int shmid;
char *ptr;
if((shmid = shmget(IPC_PRIVATE, MEMSIZE, 0644)) < 0){
perror("shmget()");
exit(1);
}
pid = fork();
if(pid < 0){
perror("fork()");
shmctl(shmid, IPC_RMID, NULL);
exit(1);
}
if(pid == 0){
ptr = shmat(shmid, NULL, 0);
if(ptr == (void*)-1){
perror("shmmat()");
exit(1);
}
strcpy(ptr, "saika");
shmdt(ptr);
exit(0);
}else{
wait(NULL);
ptr = shmat(shmid, NULL, 0);
if(ptr == (void*)-1){
perror("shmmat()");
exit(1);
}
puts(ptr);
shmdt(ptr);
shmctl(shmid, IPC_RMID, NULL);
exit(0);
}
}
运行结果
![01](https://i-blog.csdnimg.cn/blog_migrate/c01ca731d8ab771665aace75842826a2.png)
总结
- 使用相同的 key 值,并规定好协议,即可实现不同进程之间的信息传递。