管道

原创 2012年03月27日 00:32:39

   管道和有名管道是最早的进程间通信机制之一,管道可用于具有亲缘关系进程间的通信,有名管道克服了管道没有名字的限制,因此,除具有管道所具有的功能外,它还允许无亲缘关系进程间的通信。

   管道是指用于连接一个读进程和一个写进程,以实现它们之间通信的共享方式,又称pipe文件。

 

管道的特点:

l 管道是半双工的,数据只能向一个方向流动;需要双方通信时,需要建立起两个管道;

l 只能用于父子进程或者兄弟进程之间(具有亲缘关系的进程);

l 单独构成一种独立的文件系统:管道对于管道两端的进程而言,就是一个文件,但它不是普通的文件,它不属于某种文件系统,而是自立门户,单独构成一种文件系统,并且只存在与内存中。

l 数据的读出和写入:一个进程向管道中写的内容被管道另一端的进程读出。写入的内容每次都添加在管道缓冲区的末尾,并且每次都是从缓冲区的头部读出数据。

 

管道的创建:

#include <unistd.h>

int pipe(int fd[2])

该函数创建的管道的两端处于一个进程中间,在实际应用中没有太大意义,因此,一个进程在由pipe()创建管道后,一般再fork一个子进程,然后通过管道实现父子进程间的通信。

 

管道的读写规则:

 管道两端可分别用描述字fd[0]以及fd[1]来描述。

 管道的一端只能用于读,由描述字fd[0]表示,称其为管道读端;另一端则只能用于写,由描述字fd[1]来表示,称其为管道写端。

 如果试图从管道写端读取数据,或者向管道读端写入数据都将导致错误发生。

一般文件的I/O函数都可以用于管道,如closereadwrite等等。

系统文件 write(fd[1],buf,size)

功能:把buf中的长度为size字符的消息送入管道入口fd[1]

fd[1]——pipe入口

buf:存放消息的空间

size:要写入的字符长度

系统文件 read(fd[0],buf,size)

功能:从pipe出口fd[0]读出size字符的消息置入buf中。

fd[0]――pipe的出口

 

例如:父进程fork一个子进程后,子进程把字符串写到管道中,父进程从管道中读取字符串

C++进程通信之命名管道

命名管道通过网络来完成进程间通信,它屏蔽了底层的网络协议细节。
  • hk627989388
  • hk627989388
  • 2016年12月19日 15:34
  • 1810

linux管道pipe详解

管道 管道的概念: 管道是一种最基本的IPC机制,作用于有血缘关系的进程之间,完成数据传递。调用pipe系统函数即可创建一个管道。有如下特质: 1. 其本质是一个伪文件(实为内核缓冲区) 2. 由两...
  • oguro
  • oguro
  • 2016年12月23日 17:16
  • 17573

cmd 组合命令和管道命令的使用

1.& Usage:第一条命令 & 第二条命令 [& 第三条命令...]  用这种方法可以同时执行多条命令,而不管命令是否执行成功 2.&&  Usage:第一条命令 && 第二条命令 [&&...
  • ncafei
  • ncafei
  • 2016年11月27日 19:57
  • 2453

雨、污管道设计校核计算表格

  • 2014年11月04日 13:31
  • 36KB
  • 下载

管道通信实验

  • 2014年12月11日 21:36
  • 172KB
  • 下载

命名管道通讯

  • 2017年06月16日 10:55
  • 87KB
  • 下载

linux 无名管道使用示例

  • 2016年08月23日 18:10
  • 2KB
  • 下载

进程通信——管道通信

  • 2017年11月28日 20:20
  • 8KB
  • 下载

三维点云管道数据拟合_坐标变换和投影法_最小二乘法_matlab

  • 2017年12月14日 22:15
  • 4.9MB
  • 下载

linux下进程的管道通信和软中断通信

  • 2017年12月29日 10:01
  • 197KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:管道
举报原因:
原因补充:

(最多只允许输入30个字)