无名管道pipe


管道是UNIX系统IPC的最古老形式,所有的UNIX系统都支持这种通信机制。有两个局限性:

(1)       支持半双工;

(2)       只有具有亲缘关系的进程之间才能使用这种无名管道;

pipe函数

功能:创建无名管道

函数原型:#include

          int pipe(int filedes[2]);

参数经由参数filedes返回两个文件描述符,filedes[0]为读而打开,filedes[1]为写而打开。

经典的管道使用模型

使用管道的注意事项:

1.       当读一个写端已经关闭的管道时,在所有数据被读取之后,read函数返回值为0,以指示到了文件结束处;

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

实例

   系统调用pipe创建一个管道,子进程想管道里面写

             Child process is sending a message

父进程从管道中读出,并显示

#include

#include

#define SIZE    128

int pid;

 

int main(int argc, char *argv[])

{

       int fd[2];

       char out[SIZE];

       char in[SIZE] = “Child process is sending a message”;

      

       pipe(fd);  // create a pipe

       while((pid = fork()) < 0);   //create a child process

       if(pid == 0)  //in child process

       {

              close(fd[1]);

              read(fd[0], out, SIZE);

              fprintf(stdout, “%s\n”, out);

              exit(0);

}

else   //in parent process

{

       close(fd[0]);

       write(fd[1], in, SIZE);

       sleep(2);

       exit(0);

}

       return 0;

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值