选择特殊符号

选择搜索类型

热门搜索

首页 > 百科 > 建设工程百科

半双工管道

从已有的进程创建新进程,其用途是有限的,它们无法进行进程间通信。进程间通信允许运行在同一CPU上的并且祖先相同的进程交换信息。最成熟的进程间通信的形式称为管道,它由两个文件描述符组成,一个用于读信息,另一个用于写信息。有两种管道:半双工和全双工。半双工管道仅能在一个方向上传递信息,而全双工管道可在两个方向上传递信息。 

半双工管道基本信息

半双工管道简介

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

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

查看详情

半双工管道造价信息

  • 市场价
  • 信息价
  • 询价

管道

  • 公称直径DN(mm):50,规格型号:24
  • m
  • 卓奥
  • 13%
  • 江苏卓奥节能设备安装工程有限公司浙江办事处
  • 2022-12-08
查看价格

管道式换气扇

  • DPT20-54B 风量:770m3/H;功率:0.145KW;噪声:35DB(A),风压:200PA
  • 雄吉通风
  • 13%
  • 重庆市雄吉通风设备股份有限公司
  • 2022-12-08
查看价格

给水用钢丝网增强聚乙烯复合管道1.6MPA

  • Ф160
  • m
  • 顾地
  • 13%
  • 重庆顾地塑胶电器有限公司
  • 2022-12-08
查看价格

给水用钢丝网增强聚乙烯复合管道1.6MPA

  • Ф200
  • m
  • 顾地
  • 13%
  • 重庆顾地塑胶电器有限公司
  • 2022-12-08
查看价格

管道及附件

  • 包含系统内所含的管道、弯头、三通、法兰等
  • 13%
  • 上海熊猫机械(集团)有限公司
  • 2022-12-08
查看价格

环卫管道疏通机

  • 功率1.5(kW)
  • 台班
  • 韶关市2010年8月信息价
  • 建筑工程
查看价格

  • 9A151
  • 台班
  • 汕头市2012年4季度信息价
  • 建筑工程
查看价格

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

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

  • 9A151
  • 台班
  • 汕头市2012年3季度信息价
  • 建筑工程
查看价格

管道系统

  • 包括进出水管道、药剂输送管道、污泥管道、自来水管道、压缩空气
  • 1项
  • 1
  • 中档
  • 含税费 | 含运费
  • 2022-08-02
查看价格

管道支架

  • 管道支架
  • 1000kg
  • 1
  • 1
  • 中档
  • 含税费 | 含运费
  • 2019-07-05
查看价格

管道支架

  • 管道支架
  • 100kg
  • 1
  • 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
查看价格

半双工管道管道及介绍

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

匿名半双工管道在系统中是没有实名的,并不可以在文件系统中以任何方式看到该管道。它只是进程的一种资源,会随着进程的结束而被系统清除。管道通信是在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(),否则子进程不会继承文件描述符。

查看详情

半双工管道概念

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

匿名半双工管道在系统中是没有实名的,并不可以在文件系统中以任何方式看到该管道。它只是进程的一种资源,会随着进程的结束而被系统清除。管道通信是在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个子进程中读出消息并处理。在父进程中,由于并不使用管道通信,所以什么都不做,直接关闭了管道的两端并退出。

查看详情

半双工管道常见问题

查看详情

半双工管道创建

从程序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函数读出数据,并将数据显示到标准输出中。

查看详情

半双工管道文献

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

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

格式:pdf

大小:497KB

页数: 4页

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

利用半圆管做管道支架的弊端 利用半圆管做管道支架的弊端

利用半圆管做管道支架的弊端

格式:pdf

大小:497KB

页数: 1页

北京市南苑蔬菜冷库是北京最大的一座蔬菜冷库。总容量六千吨。以氨作为制冷剂。1979年投产。去年劳动局压力容器检验所对冷库制冷系统压力容器进行检验时,发现有两台LN—120冷凝器不合格,要求必须更新。在更新冷凝器后进行打压试漏过程中,压力达到1.2MPa时,隐约嗅到一股股氨味,

相关推荐

立即注册
免费服务热线: 400-888-9639