IO进程---day5

news2024/11/26 10:49:57

 

 1、使用有名管道实现两个进程之间的相互通信

//管道文件
#include<myhead.h>
int main(int argc, const char *argv[])
{
	//创建有名管道文件1
	if(mkfifo("./pipe1",0664)==-1)
	{
		perror("创建管道文件失败");
		return 0;
	}

	if(mkfifo("./pipe2",0664)==-1)
	{
		perror("创建管道文件失败");
		return 0;
	}
	getchar();  //防止当前进程结束
	unlink("pipe1");
	unlink("pipe2");
	return 0;
}
#include<myhead.h>
int main(int argc, const char *argv[])
{
	//以只写的形式打开管道文件1
	int fd1=open("./pipe1",O_WRONLY);
	
	if(fd1 == -1)
	{
		perror("open error");
		return -1;
	}
	printf("fd1=%d\n",fd1);
	
	//以只读的形式打开管道文件2
	int fd2=open("./pipe2",O_RDONLY);
	if(fd2 == -1)
	{
		perror("open error");
		return -1;
	}
	printf("fd2=%d\n",fd2);
	//创建子进程
	pid_t pid1=fork();
	//判断读写进程
	if(pid1>0)
	{
		//接收数据字符数组
		char arr[180]="";
		while(1)
		{
			printf("请输入数据:");
			fgets(arr,sizeof(arr),stdin);  //向终端输入字符串
			arr[strlen(arr)-1]='\0';  //将'\n'换成'\0'

			//向管道文件1中写入数据
			write(fd1,arr,strlen(arr));
			printf("发送成功\n");

			if(strcmp(arr,"q") == 0)
			{
				break;
			}
		}

	}
	else if(pid1==0)
	{
		//接收数据字符数组
		char brr[180]="";
		while(1)
		{

			bzero(brr,sizeof(brr));   // 清空文件中读取的数据
			read(fd2,brr,sizeof(brr));
			printf("\n收到的消息为:%s\n",brr);
			if(strcmp(brr,"q")==0)
			{
				break;
			}
		}

		//退出子进程
		exit(EXIT_SUCCESS);
	}
	wait(NULL);
	
	//关闭文件
	close(fd1);
	close(fd2);

	return 0;
}

#include<myhead.h>
int main(int argc, const char *argv[])
{
 	//以只读的形式打开管道文件1
	int fd2=open("./pipe1",O_RDONLY);
	if(fd2 == -1)
	{
				
		perror("open error");
		return -1;
	}
	printf("fd2=%d\n",fd2);
	
	
	//以只写的形式打开管道文件1
	int fd1=open("./pipe2",O_WRONLY);
	if(fd1 == -1)
	{
		perror("open error");
		return -1;
	}
	printf("fd1=%d\n",fd1);
	
	//创建子进程
	pid_t pid2=fork();
	//判断读写进程

	if(pid2>0)
	{
		

		//接收数据字符数组
		char brr[180]="";
		while(1)
		{

			bzero(brr,sizeof(brr));   // 清空文件中读取的数据
			read(fd2,brr,sizeof(brr));
			printf("\n收到的消息为:%s\n",brr);
			if(strcmp(brr,"q")==0)
			{
				break;
			}
		}

	}
	else if(pid2==0)
	{
		//接收数据字符数组
		char arr[180]="";
		while(1)
		{
			printf("请输入数据:");
			fgets(arr,sizeof(arr),stdin);  //向终端输入字符串
			arr[strlen(arr)-1]='\0';  //将'\n'换成'\0'

			//向管道文件1中写入数据
			write(fd1,arr,strlen(arr));
			printf("发送成功\n");

			if(strcmp(arr,"q") == 0)
			{
				break;
			}
		}

		
		//退出子进程
		exit(EXIT_SUCCESS);
	}
	wait(NULL);
	
	//关闭文件
	close(fd1);
	close(fd2);

	return 0;
}

 2、思维导图

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

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

相关文章

upload-labs靶场Pass-03

upload-labs靶场Pass-03 分析源码 $is_upload false; $msg null; if (isset($_POST[submit])) {if (file_exists(UPLOAD_PATH)) {$deny_ext array(.asp,.aspx,.php,.jsp);$file_name trim($_FILES[upload_file][name]);$file_name deldot($file_name);//删除文件名末尾的…

Damn-Vulnerable-Drone:一款针对无人机安全研究与分析的靶机工具

关于Damn-Vulnerable-Drone Damn-Vulnerable-Drone是一款针对无人机安全研究与分析的靶机工具&#xff0c;广大研究人员可以利用该环境工具轻松学习、研究和分析针对无人机安全态势。 Damn Vulnerable Drone 基于流行的 ArduPilot/MAVLink 架构&#xff0c;其中故意留下了各种…

PDF 软件如何帮助您编辑、转换和保护文件

如何找到最好的 PDF 编辑器。 无论您是在为您的企业寻找更高效的 PDF 解决方案&#xff0c;还是尝试组织和编辑主文档&#xff0c;PDF 编辑器都可以在一个地方提供您需要的所有工具。市面上有很多 PDF 编辑器 — 在决定哪个最适合您时&#xff0c;请考虑这些因素。 1. 确定您的…

基于 Konva 实现Web PPT 编辑器(三)

完善公式 上一节我们简单讲述了公式的使用&#xff0c;并没有给出完整的样例&#xff0c;下面还是完善下相关步骤&#xff0c;我们是默认支持公式的编辑功能的哈&#xff0c;因此&#xff0c;我们只需要提供必要的符号即可&#xff1a; 符号所表达的含义是 mathlive 的command命…

从0开始深度学习(12)——多层感知机的逐步实现

依然以Fashion-MNIST图像分类数据集为例&#xff0c;手动实现多层感知机和激活函数的编写&#xff0c;大部分代码均在从0开始深度学习&#xff08;9&#xff09;——softmax回归的逐步实现中实现过 1 读取数据 import torch from torchvision import transforms import torchv…

JavaCove部署文档

1. 基础配置 1.1服务器&#xff1a; 2 核 2G 1.2. 一个域名 1.3. 项目地址&#xff1a; gitee:https://gitee.com/guo-_jun/JavaCove github:https://github.com/nansheng1212/JavaCove 2. CentOS 安装 Docker 官方网站上有各种环境下的 安装指南&#xff0c;这里主要介绍…

webpack自定义插件 ChangeScriptSrcPlugin

插件文件 class ChangeScriptSrcPlugin {apply(compiler) {const pluginName "ChangeScriptSrcPlugin";compiler.hooks.compilation.tap(pluginName, (compilation, callback) > {compilation.hooks.htmlWebpackPluginAlterAssetTags.tapAsync(pluginName,(html…

SpringCloudStream使用StreamBridge实现延时队列

利用RabbitMQ实现消息的延迟队列 一、安装RabbitMQ 1、安装rabbitmq 安装可以看https://blog.csdn.net/qq_38618691/article/details/118223851,进行安装。 2、安装插件 安装完毕后,exchange是不支持延迟类型的,需要手动安装插件,需要和安装的rabbitmq版本一致 https:…

动态规划:17.简单多状态 dp 问题_买卖股票的最佳时机III_C++

题目链接&#xff1a; 一、题目解析 题目&#xff1a;123. 买卖股票的最佳时机 III - 力扣&#xff08;LeetCode&#xff09; 解析&#xff1a; 拿示例1举例&#xff1a; 我们可以如图所示买入卖出股票&#xff0c;以求得最大利润&#xff0c;并且交易次数不超过2次 拿示…

基于SpringBoot设计模式之结构型设计模式·组合模式

文章目录 介绍开始架构图定义条目定义文件定义文件夹 测试样例 总结 介绍 能够使容器与内容具有一致性&#xff0c;创造出递归结构的模式就是 Composite 模式。Composite 在英文中是“混合物”“复合物”的意思。   以目录为例&#xff0c;在计算机中&#xff0c;某个目录下有…

在海外留学/工作,如何报考微软mos认证?

重点首先得强调的是&#xff0c;即使在海外也可以顺利地在国内获取微软MOS认证&#xff01; 01 微软mos认证简介 Microsoft Office Specialist 简称MOS。是微软公司和第三方国际认证机构、全球三大IT测验与教学中心之一的思递波/Certiport公司于1997年联合推出的&#xff0c;…

2009年国赛高教杯数学建模A题制动器试验台的控制方法分析解题全过程文档及程序

2009年国赛高教杯数学建模 A题 制动器试验台的控制方法分析 汽车的行车制动器&#xff08;以下简称制动器&#xff09;联接在车轮上&#xff0c;它的作用是在行驶时使车辆减速或者停止。制动器的设计是车辆设计中最重要的环节之一&#xff0c;直接影响着人身和车辆的安全。为了…

分享一个IDEA里面的Debug调试设置

1.问题来源 其实我们在这个IDEA里面的这个进行调试的时候&#xff0c;这个是只有步入&#xff0c;出去的选项的&#xff1b; 之前学习这个sort的底层源码的时候&#xff0c;进不去&#xff0c;我们是设置了一个取消java*什么的选项&#xff0c;然后使用这个step into就可以进…

计算机网络易混知识点

1.以太网采用曼彻斯特编码&#xff1b;以太网帧最短为64B&#xff0c;其中14个B首部(目的MAC-6B&#xff0c;源MAC-6B&#xff0c;类型-2B)4B尾部 2.OSI协议中&#xff0c;每一层为上一层提供服务&#xff0c;为下一层提供接口 3.帧序号的比特数表示的是发送窗口的大小&#…

java逻辑运算符 C语言结构体定义

1. public static void main(String[] args) {System.out.println(true&true);//&两者均为true才trueSystem.out.println(false|false);// | 两边都是false才是falseSystem.out.println(true^false);//^ 相同为false&#xff0c;不同为trueSystem.out.println(!false)…

(38)MATLAB分析带噪信号的频谱

文章目录 前言一、MATLAB仿真代码二、仿真结果画图总结 前言 本文给出带噪信号的时域和频域分析&#xff0c;指出频域分析在处理带噪信号时的优势。 首先使用MATLAB生成一段信号&#xff0c;并在信号上叠加高斯白噪声得到带噪信号&#xff0c;然后对带噪信号对其进行FFT变换&…

Java面试指南:Java基础介绍

这是《Java面试指南》系列的第1篇&#xff0c;本篇主要是介绍Java的一些基础内容&#xff1a; 1、Java语言的起源 2、Java EE、Java SE、Java ME介绍 3、Java语言的特点 4、Java和C的区别和联系&#xff1f; 5、面向对象和面向过程的比较 6、Java面向对象的三大特性&#xff1a…

云计算-----单机LNMP结构WordPress网站

LNMP结构 博客网站 day1 小伙伴们&#xff0c;LNMP结构在第一二阶段浅浅的学习过&#xff0c;这里我们可以离线部署该结构。L指&#xff08;虚拟机&#xff09;服务器&#xff0c;nginx&#xff08;前端代理服务器&#xff09;mysql数据库&#xff0c;最后基于php建设动态…

AlDente Pro for Mac电脑 充电限制保护工具 安装教程【简单,轻松上手】

Mac分享吧 文章目录 AlDente Pro for Mac 充电限制保护工具 安装完成&#xff0c;软件打开效果一、AlDente Pro for Mac 充电限制保护工具 Mac电脑版——v1.28.41️⃣&#xff1a;下载软件2️⃣&#xff1a;安装软件&#xff0c;将安装包从左侧拖入右侧文件夹中&#xff0c;等…

Halcon实战——基于NCC模板匹配的芯片检测(附源码)

Halcon实战——基于NCC模板匹配的芯片检测&#xff08;附源码&#xff09; 关于作者 作者&#xff1a;小白熊 作者简介&#xff1a;精通python、matlab、c#语言&#xff0c;擅长机器学习&#xff0c;深度学习&#xff0c;机器视觉&#xff0c;目标检测&#xff0c;图像分类&am…