管道

原创 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一个子进程后,子进程把字符串写到管道中,父进程从管道中读取字符串

相关文章推荐

命名管道通讯

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

linux 无名管道使用示例

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

关于管道通信和多线程应用 调试总结...

关于管道通信和多线程应用 调试总结... 最近我做了一个Named Pipe 同学示例程序,在调试的过程中 遇到若干问题,现在简单总结一下 : 首先简单介绍一下,给予MFC 单文档应用程序,两...

c#管道通讯server与client代码

  • 2017年09月20日 14:03
  • 3KB
  • 下载

通信管道人孔和手孔图集

  • 2015年06月11日 09:55
  • 320KB
  • 下载

Mongodb中数据聚合之聚合管道aggregate

在之前的两篇文章Mongodb中数据聚合之基本聚合函数count、distinct、group >和Mongodb中数据聚合之MapReduce >中,我们已经对数据聚合提供了两种实现方式,今天,...

管道的使用及实现例子

  • 2016年05月23日 14:39
  • 1KB
  • 下载

检测到在集成的托管管道模式下不适用的ASP.NET设置的解决方法(非简单设置为【经典】模式)。 - CatcherX

我们将ASP.NET程序从IIS6移植到IIS7,可能运行提示以下错误: HTTP 错误 500.23 - Internal Server Error 检测到在集成的托管管道模式下不适用的 AS...

在R中使用管道操作_任坤.pdf

  • 2015年10月14日 21:46
  • 549KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:管道
举报原因:
原因补充:

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