进程间通讯的种类
1. 无名管道(pipe)
2. 有名管道(fifo)
3. 信号 (signal)
4. 共享内存(mmap)
5. 套接字 (socket)
无名管道![](https://i-blog.csdnimg.cn/blog_migrate/9f3cd2667e2916af11a6110188cf5985.png)
特点:
只能用于具有亲缘关系的进程之间的通信
单工的通信模式,具有固定的读端和写端
无名管道创建时会返回两个文件描述符,分别用于读写管道
无名管道的创建:
#include <unistd.h>
int pipe(int pfd[2]);
//成功时返回0,失败时返回EOF
//pfd 包含两个元素的整形数组,用来保存文件描述符
//pfd[0]用于读管道;pfd[1]用于写管道(但是只能使用一个,因为是单工)
无名管道代码
子进程写,父进程读
#include <stdio.h>
#include <unistd.h>
#include <string.h>
int main(int argc, char const *argv[])
{
int pfd[2];
pid_t pid;
int re;
char buf[20] = {0};
re = pipe(pfd);
if (re < 0)
{
perror("pipe");
return 0;
}
pid = fork();
if (pid < 0)
{
perror("fork");
return 0;