pipe 半双工_pipe 半双工_Linux管道PIPE的原理和应用

article/2025/9/11 8:20:21

Linux中进程的通信方式有信号,管道,共享内存,消息队列socket等。其中管道是*nix系统进程间通信的最古老形式,所有*nix都提供这种通信方式。管道是一种半双工的通信机制,也就是说,它只能一端用来读,另外一端用来写;另外,管道只能用来在具有公共祖先的两个进程之间通信。管道通信遵循先进先出的原理,并且数据只能被读取一次,当此段数据被读取后,马上会从数据中消失,这一点很重要。

Linux上,创建管道使用pipe函数,当它执行后,会产生两个文件描述符,分别为读端和写端。单个进程中的管道几乎没有任何作用,通常会先调用pipe,然后调用fork,从而创建从父进程到子进程的IPC通道。

thread-14765134-1-1.html

Linux PIPE管道

Linux中,我们经常会使用到管道,例如用cat命令查看一个大文件时,一页不能全部显示,我们可以通过cat xxx | more来分页显示,又比如搜索文件里的内容可以用 cat xxx | grep search来进行,这里我们都用到了管道。接下来我会用python编写一段自动分页显示的程序,而不用手动来使用管道。

#!/usr/bin/env python

import os,sys

if not sys.argv[1:]:

print "No filename input"

sys.exit(1)

try:

fp = open(sys.argv[1],"r")

except IOError,msg:

sys.exit(msg)

pi=os.pipe()

pid=os.fork()

if pid:

#parent

os.close(pi[0]) #close read pipe

#write to pipe

line=fp.readline()

while line:

os.write(pi[1],line)

line=fp.readline()

#close write pipe

os.close(pi[1])

#wait for chile

os.waitpid(pid,0)

else:

os.close(pi[1]) #close write pipe

#put pipe read to stdin

os.dup2(pi[0],sys.stdin.fileno())

os.close(pi[0])

os.execl("/bin/more","more")

把这段代码存为scat.py,增加执行权限之后,运行 scat.py 文件名,系统就会自动读取文件的内容并分页,与使用 cat 文件名 | more 的效果是一模一样的。在上面的代码中,用到了前几篇博客中说的fork,dup2和exec系列函数。

首先是程序创建了一个管道,系统fork之后,父进程关闭其读端,子进程关闭其写端,接下来父进程读取传递过来的文件名,并把内容通过管道的写入端口写入管道里,然后关闭写入端口,并等待子进程的结束。子进程在关闭写入端口后,把读取端口重定向到进程的标准输入,子进程就能自动接收到管道传递过来的数据,最后用execl函数调用系统的more程序用来处理传递过来的数据,这样,就轻松实现的分页的效果。

pipe是半双工的通信机制,如果进程间要使用全双工的通信,可以创建两条管道来达到全双工的效果。另外,pipe匿名管道只能用来在拥有同一个父进程的进程间通信,*nix提供另外一个fifo(命名管道)可以让任意的进程之间实现通信,会在接下来的博客中来讲。


http://chatgpt.dhexx.cn/article/2FxsplNr.shtml

相关文章

网络编程 2022-07-09 chapter17

通信协议模型 TCP和UDP的区别 1.TCP 和 UDP 都属于传输层的协议 2.TCP 是可靠的, UDP 是不可靠的 3.TCP 有拥塞机制, UDP 没有 拥塞机制指的是根据当前网络状况动态调整传输速率 4.TCP 有重传机制, UDP 没有 如果 TCP 协议在传输过程中发…

设置交换机交换速率和双工模式

计算机网络实验的学习笔记,初学小白,有错误请指出 ∩_∩ 设置交换机交换速率和双工模式 环境:Cisco Packet Tracer 交换机2960 用户pc机 配置线(pc端2s 232 交换机Console) (1)设置pc端地址(192.168.1.2) (2)打开终端…

linux全双工管道创建代码,【Linux】管道文件(有名管道、无名管道)

【Linux】管道文件(有名管道、无名管道) 多进程编程的目的就是为了同时完成多个任务。 例如:一个产品,一个软件,需要n个进程同时执行才能完成,而这些进程之间一定是有所联系的。 因此:多进程工作时,进程间需…

RF4463F30半双工模组,伪全双工透传方案(STM32平台)(第一章,环境搭建)

RF4463F30半双工模组,伪全双工透传方案(STM32平台)(第一章,环境搭建) 前言模块介绍基础信息参数配置通讯频段空中速率 配置文件生成头文件修改处1头文件修改处2库函数修改处1库函数修改处2宏定义来源 例程简…

OSI七层网络模型详解!

本文章为沐一Gin的笔记&总结,转载请标明出处。 本文有下一章,如果看完后觉得有帮助就留个言呗,我会继续加油的! OSI七层网络模型 物理层(Physical Layer): 该层为上层协议提供了一个传输…

linux网络编程基础-socket

Socket基础以及相关应用函数 什么是socket socket,也就是我们所谓的套接字,就像插座一样。 IP地址可以在网络环境中唯一的标识一台主机 端口号:在主机当中唯一标识一个进程。 因此,IP地址端口号,就可以在网络环境…

全双工管道

Fork() 函数: 返回0时是子进程,否则,是父进程。 pipe函数 int pipe(int filedes[2]); 返回值:成功,返回0,否则返回-1。参数数组包含pipe使用的两个文件的描述符。fd[0]:读管道,fd[1]:写管道…

TCP/UDP 协议,和 HTTP、FTP、SMTP,区别及应用场景(单工,半双工,全双工)

TCP/UDP 协议,和 HTTP、FTP、SMTP,区别及应用场景 一、OSI 模型 OSI 模型主要作为一个通用模型来做理论分析,而TCP/IP 协议模型是互联网的实际通讯协议,两者一般做映射分析,以下不做严格区分和声明(好吧&…

串口通讯理解

机器的通信方式有两种,分别是并行通信与串行通信 并行通信:并行通信是指多比特数据同时通过并行线进行传送,这样数据传送速度大大提高,但并行传送的线路长度受到限制,因为长度增加,干扰就会增加&#xff0c…

Linux-C语言-利用有名管道简单实现两个进程间的全双工通信

有名管道特点: 1.有名管道是对无名管道的改进,它可以使互不相关的两个进程互相通信,并且在文件系统中可见,可以通过文件名来找到。 2.半双工的通信方式,进程通过文件IO来操作有名管道。 3.有名管道遵循先进先出原则,不支持lseek()。 2.有名管道的创建 配…

E70_433半双工无线模组,伪全双工方案

E70_433半双工无线模组,伪全双工方案 前言架构设计外侧输入模块外侧输出模块内侧发帧模块内侧接受模块 实现代码通用宏定义代码解析 通用工具函数代码解析 串口输入输出函数代码解析 核心业务代码发送模块代码解析 接收模块代码解析代码流程 结语附带 前言 要搞一个…

计算机双工模式,100M 全双工、100M 半双工、10M全双工几种模式分别测试

1. 首先核实是否有多台电脑同时上网,或是当前电脑有没有在进行P2P下载或在线视频之类比较占用网络带宽的操作,此操作可能导致宽带数据量过大影响稳定性。若存在此情况,请关闭些软件断开些联网设备,减少带宽使用测试。 2. 若有其他…

Linux 查看网卡全双工 还是半双工 以及设置网卡为半双工

分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章。分享知识,造福人民,实现我们中华民族伟大复兴! 请问各位兄弟,在Linux中怎么看网卡是全双工工作还是半双工工作?mii-tool Linux:~ # mii…

路由之静态路由配置

一、路由概念 二、路由表的形成 三、路由协议 静态路由 路由器之间的连接需要配置静态路由 首先创建一个局域网,给pc0和pc1分别配置ip地址。 创建三个不同网段的局域网分别给电脑配置ip地址,将三个连接到一个路由上。为路由器与局域网相连的端口&#…

路由器静态路由配置实验

简单配置: 1.连接设备 2.配置PC和服务器的IP地址和网关 3.在路由器配置接口的IP地址(作为网关) 4.实现PC之间的通信 5.分别命名交换机和路由器,并设置时间 6.实现PC1可以telnet和ssh管理SW2和R1 7.配置静态路由实现全网互通 8.开启web服务器,在4台PC上测试是否能访问 实验…

静态路由配置实验

题目: 目录 1、首先进行基础配置 2、创建环回接口并配置IP地址 3、配置静态路由 对r1,要配置除自身连接的3个网段以外的5个网段 对r2,要配置除自身连接的3个网段以外的5个网段,其中3.3.3.0/24网段已配过,则配剩余4个网段 对r…

华为简单静态路由配置

今天通过学习路由交换的知识,学会了配置简单的静态路由,所以我这里介绍一个简单的实 验,在开始之前,我们要先了解一下什么是路由? 路由 路由是指导报文转发的路径信息,通过路由可以确认转发IP报文的路径。…

vue 3.0 静态路由配置

今天研究了一下vue3.0的静态路由配置,分享一下。 首先我们现在项目中建立router文件夹,如下图所示: 404文件夹存放404页面,components文件夹存放首页界面,config为设置文件夹,diz存放具体的业务逻辑和界面…

计算机配置静态路由目标,静态路由的配置命令

用户需求: 某学校网络拓扑图如图所示,要求配置静态路由,实现计算机PC1、PC2和PC3互通。 直连路由直连路由出现在路由表的条件 (1)接口为“up/up”状态。 (2)接口已经完成了IP地址的配置。直连路由的检查 静态路由是指由网络管理员手工配置的路由信息,用于定义去往目的网络的…

路由基础(简单的静态路由配置)

目录 一.路由基础 1.路由信息获取方式 2.路由加表前的比较-优先级;度量值 3.路由转发的选择-最长掩码 4.静态路由应用场景及配置 1.路由信息获取方式 路由器依据路由表进行转发,要实现转发功能,路由器需要发现路由,三种常见…