unix之进程通信(IPC)

来源:互联网 发布:淘宝偷换宝贝技巧 编辑:程序博客网 时间:2024/05/10 14:12

1、管道

管道是半双工的,也就是说数据只能在一个方向上流动。它们也只能在具有公共祖先的进程之间使用(通常一个管道由一个进程创建,然后该进程调用fork,此后父子进程之间就可以使用该管道了)。

函数原型:

#include <unistd.h>

int pipe(int filedes[2]);

返回值:若成功返回0,若错误返回-1

经由参数filedes返回两个文件描述符:filedes[0] 为读打开、filedes[1] 为写打开,file[1]的输出就是file[0]的输入。

单个进程中的管道没有任何意义,通常是在父子进程之间通过管道进行通信(至于方向是可以自己确定的,不一定一定是父进程写,子进程读,也可以反过来的)。

当一个管道的某一端被关闭时,下面的规则就成立:

1、如果写端被关闭,所有的数据被读取后,read就返回0,表明已到达了文件的结尾处。

2、如果写一个读端被关闭的管道时,就会产生信号SIGPIPE。如果忽略该信号或者捕捉该信号并且从处理程序返回,则write返回-1 errno设置为EPIPE

在写管道(FIFO)时,常量PIPE_BUF规定了内核中管道缓冲区的大小

 

下面是一个具体的例子:

 

原创粉丝点击