Head First C学习之管道、pipe()

2016-04-07  本文已影响75人  燚随风

管道连接进程

ps -ef |grep init

pipe()打开两条数据流

#include<unistd.h> //头文件
int pipe(int filedes[2]);//定义函数
/*
 函数说明:pipe()会建立管道,并将文件描述词由参数filedes数组返回。
 filedes[0]为管道里的读取端
 filedes[1]则为管道的写入端。
 返回值:若成功则返回零,否则返回-1,错误原因存于errno中。
*/

当用pipe()创建管道时,他会创建两条相连的数据流,并把它加入表中。

#include <unistd.h>
... ...
int fd[]
if(pipe(fd) == -1){
error("Can't create the pipe");
}
文件描述符 数据流
0 标准输入
1 标准输出
2 标准错误
3 管道读取端:fd[0]
4 管道写入端:fd[1]

fd[1]写管道;fd[0]读管道。

在子进程中

close(fd[0]);
dup2(fd[1],1);
文件描述符 数据流
0 标准输入
1 标准输出(管道写入端:fd[1])
2 标准错误
3 管道读取端:fd[0]
4 管道写入端:fd[1]

也就是说,子进程把发送给标准输出的数据都会写到管道中

在父进程中

dup2(fd[0],0);
close(fd[1]);
文件描述符 数据流
0 标准输入(管道读取端:fd[0])
1 标准输出
2 标准错误
3 管道读取端:fd[0]
4 管道写入端:fd[1]

也就是说,子进程写进管道的数据将有父进程的标准输入读取。

上一篇 下一篇

猜你喜欢

热点阅读