进程间通信方式主要分为管道、SystemV IPC、 POSIX IPC三大类,管道作为进程间通信的一大重要方式,平时应用当中十分广泛。于是这里就先简单整理了一些关于管道的用法和注意事项。
匿名管道
管道是UNIX中最古老的进程间通信形式。通常将一个进程连接到另一个进程的一个数据流称为一个 “管道”。它本质上其实就是内核的一块缓存。
管道的限制:
*大小有限制(一般是65536)
*半双工 (数据只能向一个方向流动)
*在有亲缘关系的进程间使用(父进程创建一个管道,两个子进程通过管道进行通信也行)
如何创建管道?
使用int pipe(int fds[2]) 函数创建一个无名管道 //fds[0]代表读; fds[1] 代表写 ; 函数成功返回0, 错误返回错误代码
比如来创建一个管道来用于父子进程间通信:
1 #include
2 #include
3 #include
4 #include
5
6 //父子进程间通信
7 int main(void)8 {9 int fds[2];10 //创建一个无名管道
11 if(pipe(fds) == -1){12 perror("make pipe");exit(1);13 }14
15 pid_t pid =fork(