一、管道通信的特点
1. 管道是单向的,先进先出的。
2.一个进程在管道尾部写入数据,另一个进程在管道头部读取数据。因此管道通信是半双工的。
3. 管道提供了简单的流控制机制,当进程试图读空管道时,进程将阻塞。当管道已经写满时,进程再试图向管道写入数据,进程将阻塞。
4.数据被进程读出,将从管道中删除
二、管道通信的区别
1、有名管道
2、无名管道
三、两种管道通信的区别
1、有名管道:同一系统中任意两个进程间的通信
2、无名管道:用于父子进程之间
四、创建无名管道 -- pipe
函数原型:int pipe(int filedes[2]);
函数参数:filedes[2]为两个新建的文件描述符,其中fd[0]表示管道读取端,fd[1]用于管道写入端。
头文件: #include <unistd.h>
返回值:成功返回0,失败返回-1。
例:
- #include <stdio.h>
- #include <unistd.h>
- #include <sys/types.h>
- #include <string.h>
- #include <errno.h>
- #include <stdlib.h>
- #include <sys/wait.h>
- int main()
- {
- int pipe_fd[2];
- pid_t pid;
- char r_buf[100];
- int r_num;
- memset(r_buf,0,sizeof(r_buf));
- if(pipe(pipe_fd) < 0)
- {
- printf("pipe creat error\n");
- return