IPC——管道(Pipe)

来源:互联网 发布:cntv中国网络电视台 编辑:程序博客网 时间:2024/06/05 17:09

用于进程间通信的有5种常用方式:管道、FIFO、消息队列、信号量、共享存储等。

管道 (亦被称为无名管道,以区分FIFO:有名管道)顾名思义具有两个对外端口,一个称为读端,一个称为写端。一个进程在管道的写端写数据,另一个进程从管道的读端
读出数据。如下图所示:


管道仅局限于父进程与子进程之间的通信

管道通信的特点:

1.管道通讯是单向的,有固定的读端和写端。
2. 数据被进程从管道读出后,在管道中该数据就不存在了。
3. 当进程去读取空管道的时候,进程阻塞。
4. 当进程往满管道写数据时,进程阻塞。
5. 系统常量PIPE_BUF规定了内核的管道缓冲区大小。


其中fd[0]表示管道读端,fd[1]表示管道写端

参考书籍《Unix环境高级编程(第三版)》

  1 #include "apue.h"  2   3 int main(void)  4 {  5         int n;  6         int fd[2];  7         pid_t pid;  8         char line[MAXLINE];  9  10         if(pipe(fd)<0)//创建一个pipe 11                 err_sys("pipe error"); 12  13         if((pid=fork())<0) 14                 err_sys("fork error"); 15  16         else if (pid>0)//parent process 17         { 18                 close(fd[0]); 19                 write(fd[1],"enjoy Linux!\n",13); 20         } 21         else//child  22         { 23                 close(fd[1]); 24                 n=read(fd[0],line,MAXLINE); 25                 write(STDOUT_FILENO,line,n); 26         } 27         exit(0); 28 }~        



0 0
原创粉丝点击