华清远见作业第二十三天——IO(第六天)

使用有名管道完成两个进程之间相互通信

 代码:

创建管道:

#include<a.h>
int main(int argc, const char *argv[])
{
    //创建有名管道文件
    if(mkfifo("./myfifo1", 0664) != 0)
    {
        perror("mkfifo1 error");
        return -1;
    }
    printf("myfifo1 create success\n");
    //创建有名管道文件
    if(mkfifo("./myfifo2", 0664) != 0)
    {
        perror("mkfifo2 error");
        return -1;
    }
    printf("myfifo2 create success\n");
    system("ls -l");
    //使用getchar阻塞一下
    getchar();
    system("rm myfifo1");
    system("rm myfifo2");
    return 0;
}

 主进程A:

#include<a.h>

int main(int argc, const char *argv[])
{
    pid_t pid = -1;   //定义变量存储进程号
    pid = fork();    //创建一个子进程
    //后续的程序,父子进程都会执行
    if(pid > 0)
    {
        printf("这是父进程对应管道1,pid = %d\n", pid);
		//以只写的形式打开管道文件
	    int wfd = -1;
	    if((wfd = open("./myfifo1", O_WRONLY)) == -1)
	    {
		perror("open error");
		return -1;
	    }
	    //向管道文件中循环写入数据
    	char wbuf[128] = "";
		while(1)
    	{
        	bzero(wbuf, sizeof(wbuf));           //清空内容
			//从终端输入数据
			printf("管道1请输入>>>>>");
        	fflush(stdout);            //刷新行缓冲区
       		read(0, wbuf, sizeof(wbuf));
        	wbuf[strlen(wbuf)-1] = 0;           //将回车换成'\0'

        	//将数据写入管道中
        	write(wfd, wbuf, sizeof(wbuf));

        	//判断
        	if(strcmp(wbuf, "quit") == 0)
        	{
            	break;
        	}
    	}

    	//关闭文件
    	close(wfd);	
    	}
    	else if(pid == 0)
    	{
        	printf("这是子进程对应管道2,pid = %d\n", pid);
    		//以只读的形式打开管道文件
    		int rfd = -1;
    		if((rfd = open("./myfifo2", O_RDONLY)) == -1)
    		{
        		perror("open error");
        		return -1;
    		}

    			printf("管道2读端打开成功\n");

    			//从管道文件中循环读取数据
    			char rbuf[128] = "";
    			while(1)
    			{
        			bzero(rbuf, sizeof(rbuf));           //清空内容

        			//从管道中读取数据
        			read(rfd, rbuf, sizeof(rbuf));

        			printf("收到消息:%s\n", rbuf);

        
        		//判断
        		if(strcmp(rbuf, "quit") == 0)
        		{
            		break;
        		}
    		}

   	 			//关闭文件
    			close(rfd);	
	
    }else 
    {
        perror("fork error");
        return -1;
    }

    while(1);


    return 0;
}

主进程B:

#include<a.h>

int main(int argc, const char *argv[])
{
	pid_t pid = -1;   //定义变量存储进程号
	pid = fork();    //创建一个子进程
	//后续的程序,父子进程都会执行
	if(pid > 0)
	{
		printf("这是父进程,pid = %d\n", pid);
		//以只读的形式打开管道文件
	    int rfd = -1;
	    if((rfd = open("./myfifo1", O_RDONLY)) == -1)
		{
			perror("open error");
			return -1;
		}
	    printf("读端打开成功\n");
	    //从管道文件中循环读取数据
		 char rbuf[128] = "";
		while(1)
	    {
			bzero(rbuf, sizeof(rbuf));           //清空内容
			//从管道中读取数据
			read(rfd, rbuf, sizeof(rbuf));
			printf("收到消息:%s\n", rbuf);
			//判断
			if(strcmp(rbuf, "quit") == 0)
			{
			    break;
			}
	     }

		    //关闭文件
		    close(rfd);
	    }else if(pid == 0)
	    {
			printf("这是子进程,pid = %d\n", pid);
    		//以只写的形式打开管道文件
    		int wfd = -1;
    		if((wfd = open("./myfifo2", O_WRONLY)) == -1)
    		{
       			 perror("open error");
        	     return -1;
   			 }

   				 printf("写端打开成功\n");

   			 //向管道文件中循环写入数据
    		char wbuf[128] = "";
    		while(1)
    		{
       			 bzero(wbuf, sizeof(wbuf));           //清空内容

        		//从终端输入数据
        		printf("请输入>>>>>");
        		fflush(stdout);            //刷新行缓冲区
        		read(0, wbuf, sizeof(wbuf));
        		wbuf[strlen(wbuf)-1] = 0;           //将回车换成'\0'

        		//将数据写入管道中
        		write(wfd, wbuf, sizeof(wbuf));

        		//判断
        		if(strcmp(wbuf, "quit") == 0)
        		{
            		break;
        		}
    		}

   			 //关闭文件
    		close(wfd);
	    }else 
	    {
			perror("fork error");
			return -1;
	    }

	    	printf("hello world\n");
	    	while(1);


    return 0;
}

运行效果:

 

 

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Open3D mesh模型平滑处理 (9)

Open3D mesh模型平滑处理 &#xff08;9&#xff09; 一、模型平滑示意图二、平滑函数介绍三、具体实现1.代码 一、模型平滑示意图 生成球体并添加高斯噪声的模型 平滑后&#xff0c;参数简单设置一下 二、平滑函数介绍 在Open3D中&#xff0c;filter_smooth_taubin方法的三…

分享一个小妙招,把文档制作成可翻页的电子书

​据统计数据显示&#xff0c;电子书的阅读人数正在逐年增长。随着人们对阅读方式的不断追求&#xff0c;可翻页的电子书将会成为一种新的趋势。因此&#xff0c;掌握这个小妙招&#xff0c;将有助于你在竞争激烈的市场中脱颖而出。 这个小妙招很简单&#xff0c;跟着我简单操作…

前端根据文件url路径判断文件预览或者下载以及自定义

需求&#xff1a; 点击不同附件浏览器查看效果不同&#xff0c;比如附近类型为pdf&#xff0c;则打开一个新的tab页在线预览&#xff0c;如果是zip包等&#xff0c;则直接下载&#xff0c;如果是image&#xff0c;则弹窗展示当前图片 如下图&#xff0c;服务端一般会把文件放…

PR、希喂、百利主食冻干哪款更好?铲龄8年真实喂养测评

随着对猫咪主食健康和营养问题的关注度提高&#xff0c;越来越多的铲屎官开始重视科学养猫。主食冻干因其模拟猫咪原始捕猎猎物模型配比、低温加工的特点&#xff0c;被认为是最符合猫咪饮食天性的选择。相比传统的膨化猫粮&#xff0c;主食冻干中的淀粉和碳水化合物添加较少&a…

机器学习(四) -- 模型评估(4)

系列文章目录 机器学习&#xff08;一&#xff09; -- 概述 机器学习&#xff08;二&#xff09; -- 数据预处理&#xff08;1-3&#xff09; 机器学习&#xff08;三&#xff09; -- 特征工程&#xff08;1-2&#xff09; 机器学习&#xff08;四&#xff09; -- 模型评估…

金和OA C6 CarCardInfo.aspx SQL注入漏洞复现

0x01 产品简介 金和网络是专业信息化服务商,为城市监管部门提供了互联网+监管解决方案,为企事业单位提供组织协同OA系统开发平台,电子政务一体化平台,智慧电商平台等服务。 0x02 漏洞概述 金和OA C6 CarCardInfo.aspx接口处存在SQL注入漏洞,攻击者除了可以利用 SQL 注入漏洞…

2024腾讯云免费服务器申请入口,限制及申请攻略亲测!

腾讯云免费服务器申请入口 https://curl.qcloud.com/FJhqoVDP 免费服务器可选轻量应用服务器和云服务器CVM&#xff0c;轻量配置可选2核2G3M、2核8G7M和4核8G12M&#xff0c;CVM云服务器可选2核2G3M和2核4G3M配置&#xff0c;腾讯云百科txybk.com分享2024年最新腾讯云免费服务器…

01.08

#include "widget.h"Widget::Widget(QWidget *parent): QWidget(parent) {//窗口设置//设置窗口名称this->setWindowTitle("chat");//设置窗口图标this->setWindowIcon(QIcon("D:\\Qt\\pictrue\\pictrue\\plant.svg"));//设置窗口大小this…

SpringBoot集成Camunda

一&#xff1a;pom.xml 因camunda集成SpringBoot对SpringBoot的版本和JDK的版本都有一定的要求&#xff0c;所以这里贴个完整的依赖。可以去官网找每个SpringBoot的版本对应的camunda版本。 <?xml version"1.0" encoding"UTF-8"?> <project x…

市场复盘总结 20240108

仅用于记录当天的市场情况,用于统计交易策略的适用情况,以便程序回测 短线核心:不参与任何级别的调整,采用龙空龙模式 今日空仓 最常用的二种方法: 方法一:指标选股找强势股 select * from dbo.ResultAll where 入选类型 like %指标选股% and 入选日期=20240108;方法二…

基于Java SSM框架实现时间管理系统项目【项目源码+论文说明】

基于java的SSM框架实现时间管理系统演示 摘要 随着科学技术的飞速发展&#xff0c;各行各业都在努力与现代先进技术接轨&#xff0c;通过科技手段提高自身的优势&#xff1b;对于时间管理系统当然也不能排除在外&#xff0c;随着网络技术的不断成熟&#xff0c;带动了时间管理…

第二百五十三回

文章目录 概念介绍使用方法示例代码 概念介绍 进度条是常用的组件之一&#xff0c;它主要用来显示某种动作的完成进度。Flutter提供了多种进度条组件&#xff0c;常用的是水平进度条&#xff1a;LinearProgressIndicator&#xff1b;圆形进度条 :CircularProgressIndicator和R…

HPM6750开发笔记《DMA接收和发送数据UART例程深度解析》

目录 概述&#xff1a; 端口设置&#xff1a; 代码分析&#xff1a; 运行现象&#xff1a; 概述&#xff1a; DMA&#xff08;Direct Memory Access&#xff09;是一种计算机系统中的数据传输技术&#xff0c;它允许数据在不经过中央处理器&#xff08;CPU&#xff09;的直…

CCF模拟题 202305-1 重复局面

试题编号&#xff1a; 202305-1 试题名称&#xff1a; 重复局面 时间限制&#xff1a; 1.0s 内存限制&#xff1a; 512.0MB 题目背景 国际象棋在对局时&#xff0c;同一局面连续或间断出现3次或3次以上&#xff0c;可由任意一方提出和棋。 问题描述 国际象棋每一个局面可以用…

如何打开wps的备份中心查找备份文件

备份中心在我们使用WPS Office时扮演着重要的角色。经常保存文件的同时&#xff0c;我们也应该学会备份文件&#xff0c;以免意外损失。本文将向您介绍如何使用WPS备份中心来查找并恢复备份文件&#xff0c;方便您在需要时快速找到所需文件。 图片来源于网络&#xff0c;如有侵…

戴尔笔记本触摸板的右键区域没有效果

1、解决方案 试一下两个手指同时点击触控板。切记不是单个手指双击哦&#xff01;  这里很疑惑的是&#xff0c;触摸板的右下角进行右键单击是可有可无的选项&#xff0c;希望有明白的朋友可以一起交流。实际上&#xff0c;在触摸板任意一个区域用两个手指点击即可触发右键单…

基于GA-PSO遗传粒子群混合优化算法的DVRP问题求解matlab仿真

目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.本算法原理 4.1 遗传算法&#xff08;GA&#xff09;基本原理 4.2 粒子群优化&#xff08;PSO&#xff09;基本原理 4.3 GA-PSO混合优化算法 4.4 GA-PSO在DVRP中的应用 5.完整程序 1.程序功能描述 车…

js highcharts图表控件

Highcharts是国外的一款功能强大、开源、美观、图表丰富、兼容绝大多数浏览器的纯js图表库 一、新建项目&#xff1a;HchartDemo 二、引入js <script src"~/lib/jquery/dist/jquery.min.js"></script> <script src"~/lib/hchart/highcharts.js…

数字IC芯片设计实现 | 时序Timing Signoff check_timing检查解析

今天分享在数字IC芯片设计实现做timing signoff阶段必须要看的report。check_timing的报告必须是clean的&#xff0c;否则芯片回来大概率是废片&#xff01;&#xff01;&#xff01;实际上一堆公司的芯片败在不看这个report了。 我们知道primetime(简称PT)做时序检查是基于我…

NVMe系统内存结构 - 命令格式

NVMe系统内存结构 - 命令格式 1 Submission Queue与Completion Queue定义1.1 空队列1.2 满队列1.3 队列大小1.4 队列标识符1.5 队列优先级 2 Submission Queue - 命令格式2.1 Command Dword 02.2 Command Format – Admin Command Set2.3 Command Format – NVM Command Set2.4…