【Linux基础(四)】管道

news2024/11/13 22:23:40

学习分享

  • 1、什么是管道
  • 2、管道的分类
  • 3、管道的特点
  • 4、pipe函数(匿名管道)
  • 5、命名管道:FIFO文件
    • 5.1、创建一个命名管道
    • 5.2、访问一个FIFO文件
  • 6、命名管道示例
    • 6.1、写操作示例
    • 6.2、读操作示例
  • 7、access函数和mkfifo函数
  • 8、删除FIFO文件

1、什么是管道

在这里插入图片描述
管道可以传输各种类型数据,因为write函数的参数是void*类型。
管道最大容纳65535字节=64kb
在这里插入图片描述

2、管道的分类

1、匿名管道:只能使用在具有亲缘关系(父子进程、兄弟进程)的进程之间
2、命名管道:不限于任何关系之间

3、管道的特点

1、读入写出,确定方向,使用close()关闭其中一个描述符。
2、管道一旦建立好,则是单行道,不能修改方向,只能在开一个管道。
在这里插入图片描述

在这里插入图片描述

4、pipe函数(匿名管道)

在这里插入图片描述

#include <iostream>
#include <unistd.h>
#include <stdio.h>
using namespace std;
typedef struct student
{
	char stuName[20];
	char stuNum[10];
	int  age;
}STU;

int main()
{
	char buf[20]={0}int fdarr[2]={0};
	int res=pipe(fdarr);
	if(res!=0)
	{
		perror("pipe error);
	}
	else
	{
		pid_t pid = fork();
		//父进程发  子进程收
		if(pid>0)
		{
			STU stu ={"张三","1001",19};
			cout<<"父进程 pid ="<<getpid()<<endl;
			close(fdarr[0]);//关闭父进程读
			while(1)
			{
				//cin>>buf;
				//write(fdarr[1],buf,sizeof(buf));
				
				write(fdarr[1],&stu,sizeof(STU));
				sleep(10);
			}
			
		}
		else if(pid ==0 )
		{
			STU resStu;
			cout<<"子进程pid = "<<getpid()<<endl;
			close(fdarr[1]);//关闭子进程写
			while(1)
			{
				//read(fdarr[0],buf,sizeof(buf));
				//cout<<"pid = "<<getpid()<<"buf="<<buf<<endl;
				read(fdarr[0],&resStu,sizeof(STU));//阻塞函数
				cout<<"resStu.stdName"<<resStu.stuName<<endl;
			}
		}	
	}
	return 0;
}

5、命名管道:FIFO文件

在这里插入图片描述

5.1、创建一个命名管道

在这里插入图片描述

5.2、访问一个FIFO文件

在这里插入图片描述

6、命名管道示例

6.1、写操作示例

#include <iostream>
#include <unistd.h>
#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
using namespace std;

int main()
{
	int wfd =0;
	umask(0);
	if(access("/root/project/AtoB.fifo",F_OK)==-1)//访问路径是否存在
	{
		if(mkfifo("/root/projects/AtoB.fifo",0777)==-1)
		{
			perror("mkfifo error");
		}
		else
		{
			cout<<"文件创建成功"<<endl;
		}
	}else
	{
		cout<<"文件已经存在"<<endl;
	}
	wfd = open("/root/project/AtoB.fifo",O_WRONLY);
	char buf[20] ={0};
	while(1)
	{
		cin>>buf;
		write(wfd,buf,sizeof(buf));
	}
	return 0;
}

6.2、读操作示例

#include <iostream>
#include <unistd.h>
#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <string.h>
using namespace std;

int main()
{
	int rfd =0;
	umask(0);
	if(access("/root/project/AtoB.fifo",F_OK)==-1)//访问路径是否存在
	{
		if(mkfifo("/root/projects/AtoB.fifo",0777)==-1)
		{
			perror("mkfifo error");
		}
		else
		{
			cout<<"文件创建成功"<<endl;
		}
	}else
	{
		cout<<"文件已经存在"<<endl;
	}
	rfd = open("/root/project/AtoB.fifo",O_RDONLY);
	char buf[20] ={0};
	while(1)
	{
		read(rfd,buf,sizeof(buf));
		cout<<"buf ="<<buf<<endl;
		bzero(buf,sizeof(buf));
	}
	
	return 0;
}

7、access函数和mkfifo函数

在这里插入图片描述
在这里插入图片描述

8、删除FIFO文件

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1503169.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

基于java+springboot+vue实现的宠物健康咨询系统(文末源码+Lw)23-206

摘 要 本宠物健康咨询系统分为管理员还有用户两个权限&#xff0c;管理员可以管理用户的基本信息内容&#xff0c;可以管理公告信息以及宠物健康知识信息&#xff0c;能够与用户进行相互交流等操作&#xff0c;用户可以查看宠物健康知识信息&#xff0c;可以查看公告以及查看…

一个将图片转3D的开源项目TripoSR

TripoSR AI是StabilityAI联合发布的图生3D模型&#xff0c;TripoSR是一个快速的3D物体重建模型。TripoSR能够在不到一秒钟的时间内从单张图片生成高质量的3D模型。TripoSR模型的特点是能够快速处理输入&#xff0c;在 NVIDIA A100 GPU 上不到 0.5 秒的时间内生成高质量的 3D 模…

【STM32+OPENMV】二维云台颜色识别及追踪

一、准备工作 有关OPENMV最大色块追踪及与STM32通信内容&#xff0c;详情见【STM32HAL】与OpenMV通信 有关七针OLED屏显示内容&#xff0c;详情见【STM32HAL】七针OLED(SSD1306)配置(SPI版) 二、所用工具 1、芯片&#xff1a;STM32F407ZGT6 2、CUBEMX配置软件 3、KEIL5 4…

Python和Google Colab进行卫星图像二维小波变化和机器学习

2D 小波分解是图像处理中的一种流行技术,使用不同的滤波器将图像分解为不同的频率分量(“近似”和“细节”系数)。该技术对于各种图像处理任务特别有用,例如压缩、去噪、特征提取和边缘检测。 在本文中,我们将演示如何在 Google Colab 中使用 Python 下载高分辨率样本卫星…

XSS-Labs靶场1---11关

一、XSS环境搭建&#xff1a; [ 靶场环境篇 ] XSS-labs 靶场环境搭建(特别详细)_xss靶场搭建-CSDN博客 &#xff08;该博主总结的较为详细&#xff0c;若侵权必删&#xff09; 常用的xss攻击语句&#xff1a; 输入检测确定标签没有过滤后&#xff0c;为了显示存在漏洞&#…

Vue2 基础二常用特性

代码下载 表单操作 基于Vue的表单操作 input 单行文本textarea 多行文本select 下拉多选&#xff0c;multiple属性实现多选&#xff0c;多选时对应的 data 中的数据也要定义成数组radio 单选框checkbox 多选框&#xff0c;data 中的数据要定义成数组&#xff0c;否则无法实现…

C++ Qt开发:QNetworkInterface网络接口组件

Qt 是一个跨平台C图形界面开发库&#xff0c;利用Qt可以快速开发跨平台窗体应用程序&#xff0c;在Qt中我们可以通过拖拽的方式将不同组件放到指定的位置&#xff0c;实现图形化开发极大的方便了开发效率&#xff0c;本章将重点介绍如何运用QNetworkInterface组件实现查询详细的…

面试遇到了接口分析和测试用例分析题,该如何下手?

只要有软件产品的公司百分之九十以上都会做接口测试&#xff0c;要做接口测试的公司那是少不了接口测试工程师的&#xff0c;接口测试工程师相对于其他的职位又比较轻松并且容易胜任。如果你想从事接口测试的工作那就少不了对接口进行分析&#xff0c;同时也会对测试用例进行研…

el根据需求合并列

将 列分为 3 3 1 的格式 以下是vue代码&#xff1a; <el-table:data"dataSource":border"true":header-cell-style"{ font-weight: normal, text-align: center }":cell-style"{ text-align: center }"size"mini"style…

CODESYS双通气缸功能块(ST源代码)

博途PLC双通气缸功能块请参考下面文章链接: https://rxxw-control.blog.csdn.net/article/details/136415539https://rxxw-control.blog.csdn.net/article/details/136415539CODESYS 结构变量使用 https://rxxw-control.blog.csdn.net/article/details/126248829

NUMA简介

NUMA 1 什么是NUMA 早期的计算机&#xff0c;内存控制器还没有整合进 CPU&#xff0c;所有的内存访问都需要经过北桥芯片来完成。如下图所示&#xff0c;CPU 通过前端总线&#xff08;FSB&#xff0c;Front Side Bus&#xff09;连接到北桥芯片&#xff0c;然后北桥芯片连接到…

go语言添加代理

LiteIDE 工具->管理 https://mirrors.aliyun.com/goproxy/或https://goproxy.cn,direct 命令行 go env -w GOPROXYhttps://goproxy.cn,direct

找不到duilib.dll:是什么文件?如何解决

当你尝试打开某个程序软件时&#xff0c;你可能会看到一条错误信息&#xff0c;提示你缺失一个名为“duilib.dll”的文件。这个文件通常与程序开发中使用的UI框架相关&#xff0c;缺失它会导致程序无法正常运行。那么&#xff0c;如何解决这个问题呢&#xff1f;本文将为你提供…

Java项目:45 ssm004新生报到系统+jsp(含文档)

项目介绍 技术栈&#xff1a;spring springMVC mybatis mysql 系统角色&#xff1a;管理员&#xff0c;学生 系统功能&#xff1a;个人中心&#xff0c;管理员信息&#xff0c;班级信息&#xff0c;学院信息&#xff0c;专业信息&#xff0c;消息通知&#xff0c;缴费信息&a…

让你秒会C语言冒泡排序

代码展示&#xff1a; 代码讲解&#xff1a; 一&#xff0c;代码目的&#xff1a; 将一个乱序的数组通过冒泡排序排成升序。 二&#xff0c;代码重点理解&#xff1a; 1&#xff1a;sz为元素个数&#xff0c;其必须和数组arr一起作为参数传给bubble_sort函数&#xff0c;…

【框架设计】MVC、MVP、MVVM对比图

1. MVC&#xff08;Model-View-Controller&#xff09; 2. MVP&#xff08;Model-View-Presenter&#xff09; 3. MVVM&#xff08;Model-View-ViewModel&#xff09;

基于SVM模型的网络入侵检测模型训练与评估(NSL-KDD数据集)

简介 针对网络安全领域的NSL-KDD数据集进行分类任务的预处理和模型训练、以及超参数调优。 数据预处理 读取并解析数据集&#xff1b;检查并删除指定列&#xff08;outcome&#xff09;的缺失值&#xff1b;对类别型特征&#xff08;protocol_type, service, flag&#xff0…

Stable Diffusion 模型下载:ZavyChromaXL(现实、魔幻)

本文收录于《AI绘画从入门到精通》专栏&#xff0c;专栏总目录&#xff1a;点这里。 文章目录 模型介绍生成案例案例一案例二案例三案例四案例五案例六案例七案例八 下载地址 模型介绍 作者述&#xff1a;该模型系列应该是用于 SDXL 的 ZavyMix SD1.5 模型的延续。主要重点是获…

21-Java观察者模式 ( Observer Pattern )

Java备忘录模式 摘要实现范例 观察者模式 ( Observer Pattern ) 常用于对象间存在一对多关系时&#xff0c;比如&#xff0c;当一个对象被修改时&#xff0c;需要自动通知它的依赖对象 观察者模式属于行为型模式 摘要 1. 意图 定义对象间的一种一对多的依赖关系&#xff…

先进电机技术 —— 伺服驱动器与变频器

一、变频器与伺服驱动器发展趋势 在近年来的技术发展中&#xff0c;变频器和伺服驱动器均呈现出显著的先进性提升和技术融合趋势&#xff0c;以下是一些主要的发展方向&#xff1a; ### 变频器的发展趋势&#xff1a; 1. **智能化与网络化**&#xff1a; - 高级变频器集成…