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

article/2025/9/11 9:19:01

【Linux】管道文件(有名管道、无名管道)

多进程编程的目的就是为了同时完成多个任务。

例如:一个产品,一个软件,需要n个进程同时执行才能完成,而这些进程之间一定是有所联系的。

因此:多进程工作时,进程间需要通讯(传递数据)。

fork()创建的子进程,与父进程之间唯一共享的是文件描述符。

进程之间的通讯方式有: 管道

信号量

消息队列

共享内存

Socket (用于网络通讯,即不同主机上进程之间的通讯)

de18c28bf50038d3fc2c1f89bd63de67.png

关于单工、半双工、全双工通讯

单工通讯:任意时刻,数据流向均为单向

半双工通讯:同一时刻,数据流向为单向(管道文件)

管道

①有名管道(命令管道)

在磁盘上会存储一个管道文件表示(inode存于内存上),但它并不会占据磁盘空间(block),数据并不会存储到磁盘上。

有名管道限制:同一台主机上,同一个系统有权限操作管道文件的任意进程都可以通过其完成进程间通讯。

986d713f2b738c2b8bfcda04aa29247c.png

②无名管道

无名管道不存在管道文件,其借助于父子进程共享fork之前打开的文件描述符。(文件打开机制)其数据存储在内存中。

无名管道限制:只能使用于父子进程之间(无法跨越父子关系)

837795cf95709b9c7edee5ff291a05d5.png

管道的使用

①有名管道的使用

1、创建管道文件

命令:mkfifo 文件名

函数:int mkfifo(const char* pathname , int mode);

2、打开管道文件

int open();同文件操作中open的使用。

仅仅打开文件,如果不存在,则无法创建。

参数有两个:

参数一:打开管道文件的路径+名称

参数二:打开文件方式

注意!!!!在仅仅一端打开时,open会阻塞,只到有读端、有写端,open才会返回。

读和写的次数无必然联系。

3、写操作

int write();同文件操作中write的使用。

4、读操作

int read();同文件操作中read的使用。

注意:读写操作也会阻塞↓

read阻塞:管道中无数据。

返回条件:管道中有数据/所有的写端关闭

write阻塞:管道缓存区满。

返回条件:管道中有空间/所有的读端关闭

5、关闭

Int close();同文件操作中close的使用。

例题练习:A进程接收用户输入,B进程统计用户输入字节的个数。

代码展示:

maina.c

755119829e1fd041839eaa9399798aec.png

mainb.c

788212ee2cf6140ea3659162ea85c92d.png

结果:

d85957eafeba97c7bd109c4fd6417a90.png

eb629af7d8637d58fef3b37910d64a56.png

②无名管道的使用

创建并且打开无名管道(自带open过程)

int pipe(int fds[2]);

fds[2]初始时同时打开,fd[0]管道读端, fd[1]管道写端

Fork();//注意:一定要在fork之前打开pipe

父子进程均可读可写

如果父-->子进程,则父进程关闭读端,子进程关闭写端

如果子-->父进程,则子进程关闭读端,父进程关闭写端

读端判断是否通讯完成,read返回值:0

5653f711d7240caa6b02751144de7e4d.png

例题练习:父进程接收用户输入,子进程统计字节并且输出。

代码:

59c3f402626d9eb811abe4931407292c.png

086d9e34efa07f7756993a16adb490f5.png

结果:

099a95ca51549800dc824a30f182cc16.png


http://chatgpt.dhexx.cn/article/93U5Boa7.shtml

相关文章

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.路由信息获取方式 路由器依据路由表进行转发,要实现转发功能,路由器需要发现路由,三种常见…

四种静态路由配置方法

拓扑图如下: 接口IP地址如拓扑图所示,配置过程省略,ar1和ar3都开启了dhcp。过程省略。 ar1的路由表: 此时只有直连的1.0和2.0网段的IP。没有3.0网段的。 那怎么有3.0网段的呢?接下来介绍四种方法。 方法一&#xff1a…

Windows系统的静态路由配置

Windows电脑静态路由的配置,使电脑同时使用两个不同网段的IP 操作方法: 1.开始菜单,输入cmd,右击cmd.exe,选择以管理员身份运行 2.查看当前路由的配置 命令格式: ##查看静态路由 route print 输出结果…

华为静态路由配置

静态路由 静态路由(Static Router)是由管理员通过手动配置的方式创建的路由,可以让路由器便捷的获知到达目的网络的路由。在静态路由基础上也可使用负载均衡、路由备份等技术。 本文分别对静态路由、负载均衡、路由备份进行实验配置及配置完之后如何验证。 网络拓…