在某些特性上又不同于文件,例如,当数据读出后,则管道中就没有数据了,但文件没有这个特性。

匿名半双工管道在系统中是没有实名的,并不可以在文件系统中以任何方式看到该管道。它只是进程的一种资源,会随着进程的结束而被系统清除。管道通信是在UNIX系统中应用比较频繁的一种方式,例如使用grep查找。

上述命令中使用的是半双工管道,即grep命令的输入是ls命令的输出。管道从数据流动方向上又分全双工管道以及半双工管道,当然全双工管道现在某些系统还不支持,其在具体的实现过程中也只是在文件打开的方式上有一点区别(在操作规则上也有一些不同,全双工管道要相比半双工复杂的多)。

匿名

匿名管道没有名字,对于管道中使用的文件描述符没有路径名,也就是不存在任何意义上的文件,它们只是在内存中跟某一个索引节点相关联的两个文件描述符。匿名半双工管道的主要特性如下:

● 数据只能在一个方向上移动。

● 只能在具有公共祖先的进程间通信,即或是父子关系进程间、或是在兄弟关系进程间通信。

尽管有如此限制,半双工管道还是最常用的通信方式。Linux环境下使用pipe函数创建一个匿名半双工管道,其函数原型如下:

参数int fd[2]为一个长度为2的文件描述符数组,fd[0]是读出端,fd[1]是写入端,函数的返回值为0表示成功,–1表示失败。当函数成功返回,则自动维护了一个从fd[1]到fd[0]的数据通道。

下面实例演示了如何使用pipe函数创建管道以及关闭管道。程序中先使用函数pipe建立管道,并使用管道传输数据,在程序的结束部分,释放掉管道占用的文件资源(两个文件描述符),具体实现如下。

匿名读写操作

当对管道进行读写操作时,使用read和write函数对管道进行操作。当对一个读端已经关闭的管道进行写操作时,会产生信号SIGPIPE,说明管道读端已经关闭,并且write操作返回为–1,errno的值为EPIPE,对于SIGPIPE信号可以进行捕捉处理。如果写入进程不能捕捉或者干脆忽略SIGPIPE信号,则写入进程会中断。

%注意:在进行读写管道时,对一个管道进行读操作后,read函数返回为0,有两种意义,一种是管道中无数据并且写入端已经关闭。另一种是管道中无数据,写入端依然存活。这两种情况要根据需要分别处理。

从程序实例14.1中可以发现,单独一个进程操作管道是没有任何意义的,管道的应用一般体现在父子进程或者兄弟进程的通信。

如果要建立一个父进程到子进程的数据通道,可以先调用pipe函数紧接着调用 fork函数,由于子进程自动继承父进程的数据段,则父子进程同时拥有管道的操作权,此时管道的方向取决于用户怎么维护该管道,管道示意图如图14-3所示。

图14-3 管道示意图

当用户想要一个父进程到子进程的数据通道时,可以在父进程中关闭管道的读出端,相应的在子进程中关闭管道的输出端,如图14-3中图B所示。相反的,当维护子进程到父进程的数据通道时,在父进程中关闭输出,子进程中关闭读入即可。总之,使用pipe 及fork组合,可以构造出所有的父进程与子进程,或子进程到兄弟进程的管道。

下面实例演示了使用pipe以及fork组合实现父子进程通信。程序中先使用pipe函数建立管道,使用fork函数创建子进程。在父子进程中维护管道的数据方向,并在父进程中向子进程发送消息,在子进程中接收消息并输出到标准输出。

程序中使用pipe函数加fork组合,实现父进程到子进程的通信。程序在父进程段中关闭了管道的读出端,并相应地在子进程中关闭了管道的输入端,从而实现数据从父进程流向子进程。

管道在兄弟进程间应用时,应该先在父进程中建立管道,然后调用fork函数创建子进程,在父子进程中维护管道的数据方向。

%注意:这里的问题是维护管道的顺序,当父进程创建了管道,只有子进程已经继承了管道后,父进程才可以执行关闭管道的操作。如果在fork之前已经关闭管道,子进程将不能继承到可以使用的管道的。

下面实例演示了管道在兄弟进程间通信。下例中在父进程中创建管道,并使用fork函数创建2个子进程。在第1个子进程中发送消息到第2个子进程,第2个子进程中读出消息并处理。在父进程中,由于并不使用管道通信,所以什么都不做,直接关闭了管道的两端并退出。

半双工管道造价信息

市场价 信息价 询价
材料名称 规格/型号 市场价
(除税)
工程建议价
(除税)
行情 品牌 单位 税率 供应商 报价日期
管道 公称直径DN(mm):50,规格型号:24 查看价格 查看价格

卓奥

m 13% 江苏卓奥节能设备安装工程有限公司浙江办事处
管道式换气扇 DPT20-54B 风量:770m3/H;功率:0.145KW;噪声:35DB(A),风压:200PA 查看价格 查看价格

雄吉通风

13% 重庆市雄吉通风设备股份有限公司
给水用钢丝网增强聚乙烯复合管道1.6MPA Ф160 查看价格 查看价格

顾地

m 13% 重庆顾地塑胶电器有限公司
给水用钢丝网增强聚乙烯复合管道1.6MPA Ф200 查看价格 查看价格

顾地

m 13% 重庆顾地塑胶电器有限公司
管道及附件 包含系统内所含的管道、弯头、三通、法兰等 查看价格 查看价格

13% 上海熊猫机械(集团)有限公司
钢纤增强聚乙烯复合压力管道(含聚氨酯保温层及PE外护套) DN200×8.5 1.6MPa 查看价格 查看价格

粤星管道

m 13% 广东建通管道制品有限公司
钢纤增强聚乙烯复合压力管道(含聚氨酯保温层及PE外护套) DN350×13 1.6MPa 查看价格 查看价格

粤星管道

m 13% 广东建通管道制品有限公司
概念金铂漆 品种:内墙艺术涂料;容量:0.8kg/桶;型号:WTH14; 查看价格 查看价格

三联

13% 武汉智源伟业环保科技有限公司
材料名称 规格/型号 除税
信息价
含税
信息价
行情 品牌 单位 税率 地区/时间
环卫管道疏通机 功率1.5(kW) 查看价格 查看价格

台班 韶关市2010年8月信息价
9A151 查看价格 查看价格

台班 汕头市2012年4季度信息价
功率120kW 查看价格 查看价格

台班 汕头市2012年4季度信息价
功率160kW 查看价格 查看价格

台班 汕头市2012年4季度信息价
9A151 查看价格 查看价格

台班 汕头市2012年3季度信息价
功率240kW 查看价格 查看价格

台班 汕头市2012年3季度信息价
功率120kW 查看价格 查看价格

台班 汕头市2012年3季度信息价
9A151 查看价格 查看价格

台班 汕头市2012年1季度信息价
材料名称 规格/需求量 报价数 最新报价
(元)
供应商 报价地区 最新报价时间
管道系统 包括进出水管道、药剂输送管道、污泥管道、自来水管道、压缩空气|1项 1 查看价格 广东岑安机电有限公司 全国   2022-08-02
管道支架 管道支架|1000kg 1 查看价格 广州珠江管业科技有限公司 广东  广州市 2019-07-05
管道支架 管道支架|100kg 1 查看价格 广州珠江管业科技有限公司 广东  广州市 2019-07-05
管道清理疏通 含吸污车吸取、运输,管道冲洗|12000m 1 查看价格 成都美妙一环保工程有限公司 四川   2022-07-12
CPVC管道 种类 CPVC 公称外径 20(mm) 壁厚 2.4(mm) 长度 4(m) 拉伸强度 10(MPa) 用途 化工管道 每件重量 0.5(kg)|5890m 1 查看价格 睿智昊通管道阀门(北京)有限公司 北京  北京市 2015-03-30
管道(组合管道) 侧向+纵向抗震支架,SXZ-7,具体参数详见图纸|5套 3 查看价格 喜利得中国商贸有限公司 广东  深圳市 2019-12-04
管道(组合管道) 侧向抗震支架,CJZ-3,具体参数详见图纸|1套 3 查看价格 喜利得中国商贸有限公司 广东  深圳市 2019-12-04
管道(组合管道) 侧向+纵向抗震支架,SXZ-6,具体参数详见图纸|5套 3 查看价格 喜利得中国商贸有限公司 广东  深圳市 2019-12-04

管道是Linux/UNIX系统中比较原始的进程间通信形式,它实现数据以一种数据流的方式,在多进程间流动。在系统中其相当于文件系统上的一个文件,来缓存所要传输的数据。管道通信是最常见的通信方式之一,其是在两个进程之间实现一个数据流通的管道,该管道可以是双向或单向的。

我们将仅能在一个方向上传递信息的管道称为半双工管道,将可在两个方向上传递信息的管道称为全双工管道。管道是一种很经典的进程之间的通信方式,其优点在于简单易用,其缺点在于功能简单,有很多限制。

从程序14-2和程序14-3中可以总结出管道操作的一个流程。父进程中先使用pipe函数创建管道,在调用fork函数创建子进程,在父子进程中维护管道的数据流向。程序退出时及时关闭管道的两端,具体流程如图14-4所示。

图14-4 匿名管道的创建流程

管道操作的基本流程为:先创建一个管道,使用fork创建子进程, 在父子进程中关闭不需要的文件描述符使用管道通信,程序结束。由于这是一个比较规范也是比较常用的管道使用模式,所以在ANSI/ISO C中将以上操作定义在两个标准的库函数popen和pclose中,它们的函数原型是:

函数popen 的参数 command 是一个在shell中可运行的命令字符串的指针,参数mode 是一个字符指针,这个参数只有两种值可以使用,r或者w,分别表示popen函数的返回值是一个读打开文件指针,还是写打开文件指针。当函数失败时返回值为NULL,并设置出错变量errno。

popen函数先执行创建一个管道,然后调用fork函数创建子进程,紧接着执行一个exec函数调用, 调用/bin/sh –c来执行参数command中的命令字符串,然后函数返回一个标准的I/O文件指针。返回的文件指针类型与参数mode有关,如果参数mode是r则文件指针连接到command 命令的标准输出,如果是w则文件指针连接到command命令的标准输 入。为了关闭popen函数返回的文件指针,可以调用pclose函数。pclose函数的参数stream是一个popen打开的文件描述符,当函数失败返回–1。

下面实例演示了使用popen和pclose函数实现调用shell命令cat来打印一个文件到显示器的程序。程序中先使用popen函数为cat命令创建一条数据管道,并指定数据管道从cat命令的输出读出数据。在后续的代码中使用fgets函数读出数据,并将数据显示到标准输出中。

半双工管道概念常见问题

  • 什么是半工,全双工,半双工?

    纠正一下, 没有半工这个概念哦.全双工(Full lex)是指在发送数据的同时也能够接收数据,两者同步进行,这好像我们平时打电话一样,说话的同时也能够听到对方的声音。目前的网卡一般都支持全双工。 半双...

  • 全双工和半双工是什么意思?

    交换机的全双工是指交换机在发送数据的同时也能够接收数据,两者同步进行,这好像我们平时打电话一样,说话的同时也能够听到对方的声音。目前的交换机都支持全双工。全双工的好处在于迟延小,速度快。 提到全...

  • 光纤能不能半双工改全双工

管道在某些特性上不同于文件,例如,当数据读出后,则管道中就没有数据了,但文件没有这个特性。

匿名半双工管道在系统中是没有实名的,并不可以在文件系统中以任何方式看到该管道。它只是进程的一种资源,会随着进程的结束而被系统清除。管道通信是在UNIX系统中应用比较频繁的一种方式,例如使用grep查找。 其代码如下:

# ls | grep ipc

上述命令中使用的是半双工管道,即grep命令的输入是ls命令的输出。管道从数据流动方向上又分全双工管道以及半双工管道,当然全双工管道现在某些系统还不支持,其在具体的实现过程中也只是在文件打开的方式上有一点区别(在操作规则上也有一些不同,全双工管道要相比半双工复杂的多)。

匿名管道没有名字,对于管道中使用的文件描述符没有路径名,也就是不存在任何意义上的文件,它们只是在内存中跟某一个索引节点相关联的两个文件描述符。匿名半双工管道的主要特性如下:

● 数据只能在一个方向上移动。

● 只能在具有公共祖先的进程间通信,即或是父子关系进程间、或是在兄弟关系进程间通信。

尽管有如此限制,半双工管道还是最常用的通信方式。Linux环境下使用pipe函数创建一个匿名半双工管道,其函数原型如下:

#include

int pipe(int fd[2]);

参数int fd[2]为一个长度为2的文件描述符数组,fd[0]是读出端,fd[1]是写入端,函数的返回值为0表示成功,–1表示失败。当函数成功返回,则自动维护了一个从fd[1]到fd[0]的数据通道。

半双工管道管道创建

半双工管道的创建一般会从程序父进程中先使用pipe函数创建新管道,在调用fork函数创建子进程,在父子进程中维护管道的数据流向,最后,在程序退出时及时关闭管道的两端。

管道操作的基本流程为:先创建一个管道,使用fork创建子进程, 在父子进程中关闭不需要的文件描述符使用管道通信,程序结束。

半双工管道使用注意事项

当使用半双工管道时,任何关联的进程都必须共享一个相关的祖先进程。因为管道存在于系统内核之中,所以任何不在创建管道的进程的祖先进程之中的进程都将无法寻址它。而任命名管道中却不是这样。

虽然可以通过打开两个管道来创建一个双向的管道。但需要在产进程中正确地设置文件描述符。必须在系统调用fork()中调用pipe(),否则子进程不会继承文件描述符。

半双工管道概念文献

在Windows下PC机作为半双工RS-485网络主机通信程序的设计 在Windows下PC机作为半双工RS-485网络主机通信程序的设计

格式:pdf

大小:497KB

页数: 4页

评分: 4.5

描述了一个以PC机作为半双工RS-485网络主机,工作于Windows平台上的通讯程序。该程序特点是通过使用异步通信WIN32API和多线程及多种同步量来实现半双工通信方式。

立即下载
[整理]供热管道概念 [整理]供热管道概念

格式:pdf

大小:497KB

页数: 24页

评分: 4.4

------------- ------------- 供热管道概念:凡是输送蒸汽或热水的管道均称为供热管道 供热管道的任务:将锅炉生产的热能,通过蒸汽、热水等热媒输 送到室内用热设备,以满足生产、生活的需要。 一、供热管道的分类 ? 按其管内流动的介质不同可分为蒸汽和热水管道两种。 ? 按其工作压力不同可分为低压、中压和高压管道三种。 ? 按其敷设位置不同可分为室内和室外供热管道两种。 二、供热管道的特点 热水和蒸汽管道最突出的特点就是由于温度变化所引起的管道 热涨和冷缩。 安装时管道的温度为常温,初次运行(输送热媒)时,由于温度 陡然升高,管道将急剧地伸长,停止运行时,随着温度的下降管道也 渐渐向回收缩。 管道热胀冷缩时,将对其两端固定点产生很大的推(拉)应力, 使管道产生变形甚至支架破坏 ,因此,安装供热管道时应采取措施 (设 置补偿器),消除由于温度变化而产生的推拉应力。 对于

立即下载
半双工管道相关推荐
  • 相关百科
  • 相关知识
  • 相关专栏