IPC之管道详解


基本概念:

linux管道(也叫无名管道)由pipe函数创建,提供一个单路(单向)数据流。(注:linux不支持全双工的管道,某些系统支持

PIPE(2)                                                  Linux Programmer's Manual                                                  PIPE(2)

NAME
       pipe, pipe2 - create pipe

SYNOPSIS
       #include <unistd.h>

       int pipe(int pipefd[2]);
返回:若成功则为0,若出错则为-1

该函数返回两个文件描述符:fd[0]和fd[1]。前者打开来读,后者打开来写。


管道的典型用途是以下述方式为两个不同进程(一个是父进程,一个是子进程)提供进程间通信的手段。首先,由一个进程(它将成为父进程)创建一个管道后调用fork派生一个自身的副本,如图4-3所示:

接着,父进程关闭这个管道的读出端,子进程关闭同一管道的写入端。这就在父子进程间提供了一个单向数据流,如图4-4所示:

我们在某个shell中输入一个像下面这样的命令时:

who | sort | lp

该shell将执行上述步骤创建三个进程和其间的两个管道。它还把每个管道的读出端复制到相对应进程的标准输入,把每个管道的写入端复制到相应进程的标准输出。图4-5展示了这样的管道线:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值