您的位置:首页 > 其它

无名管道

2015-06-11 20:30 260 查看
管道是UNIX系统IPC的最古老形式,所有的UNIX系统都支持这种通信机制。有两个局限性:
(1)       支持半双工;
(2)       只有具有亲缘关系的进程之间才能使用这种无名管道;
pipe函数
功能:创建无名管道
函数原型:#include <unistd.h>
          int pipe(int filedes[2]);
参数经由参数filedes返回两个文件描述符,filedes[0]为读而打开,filedes[1]为写而打开。
经典的管道使用模型

使用管道的注意事项:
1.       当读一个写端已经关闭的管道时,在所有数据被读取之后,read函数返回值为0,以指示到了文件结束处;
2.       如果写一个读端关闭的管道,则产生SIGPIPE信号。如果忽略该信号或者捕捉该信号并处理程序返回,则write返回-1,errno设置为EPIPE
实例
   系统调用pipe创建一个管道,子进程想管道里面写
             Child process is sending a message
父进程从管道中读出,并显示
#include <stdio.h>
#include <unistd.h>
#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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: