华清IOday7 24-8-5

news2024/11/24 5:35:01

文章目录

  • 使用有名管道实现,一个进程用于给另一个进程发消息,另一个进程收到消息后,展示到终端上,并且将消息保存到文件上一份
  • 使用有名管道实现两个进程间相互通信

使用有名管道实现,一个进程用于给另一个进程发消息,另一个进程收到消息后,展示到终端上,并且将消息保存到文件上一份

#include<myhead.h>
//子进程获取数据并写入
void getandwrite()
{
	//打开zy1文件
	int getfd = open("./zy1",O_RDONLY);
	if(getfd == -1)
	{
		perror("getfd error");
		return ;
	}
	//打开zy1.txt文件要是没有就创建,有就追加
	int writefd = open("./zy1.txt",O_WRONLY|O_CREAT|O_APPEND,0664);
	if(writefd ==-1)
	{
		perror("writefd error");
		return ;
	}
	while(1)
	{
		sleep(1);
		char getbuf[128] = "";//存储读取的数据
		//初始化getbuf
		bzero(getbuf,sizeof(getbuf));
		read(getfd,getbuf,sizeof(getbuf));
		if(strcmp(getbuf,"quit")==0)
		{
			break;
		}
		printf("收到消息为:%s\n",getbuf);
		//将getbuf中的数据写入zy1.txt文件
		write(writefd,getbuf,strlen(getbuf));
		write(writefd,"\n",1);
	}
	close(getfd);
    exit(EXIT_SUCCESS);
}
//父进程发送数据
void set()
{
	int setfd = open("./zy1",O_WRONLY);
	if(setfd == -1)
	{
		perror("setfd error");
		return ;
	}

	while(1)
	{
		sleep(1);
		printf("请输入>>>>");
		char setbuf[128] = "";//存储输入的数据
		//初始化setbuf
		bzero(setbuf,sizeof(setbuf));
		fgets(setbuf,sizeof(setbuf),stdin);
		//去除换行符
		setbuf[strlen(setbuf)-1] = 0;
		//将setbuf中的数据写入zy1文件
		write(setfd,setbuf,strlen(setbuf));
		if(strcmp(setbuf,"quit")==0)
		{
			break;
		}

	}
	close(setfd);



}
/*********************主程序********************/
int main(int argc, char const *argv[])
{   
    if (mkfifo("./zy1",0644) == -1)
    {
        perror("mkfifo error");
        return -1;
    }
    pid_t pid = fork();
    
    if(pid ==0)
    {
		getandwrite();//子进程获取数据并写入
        printf("子进程\n");
    }
    else if(pid >0)
    {
		set();//父进程发送数据
        printf("父进程\n");
    }
    else
    {
        printf("fork error\n");
    }
	getchar();

    system("rm ./zy1");//删除生成的管道文件
    return 0;
}

在这里插入图片描述

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

在这里插入图片描述
cerate.c

#include<myhead.h>

int main(int argc, const char *argv[])
{
     if (mkfifo("./1",0664) ==-1)
    {
        perror("mkfifo error");
        return -1;
    }
    if (mkfifo("./2",0664) ==-1)
    {
        perror("mkfifo error");
        return -1;
    }

    getchar();

    system("rm ./1");
    system("rm ./2");
    return 0;
}

1.c

#include <myhead.h>

void set() //发送给2的进程函数
{

    int fd = open("./1", O_WRONLY);
    if (fd == -1)
    {
        perror("open error");
        return;
    }

    char buf[128] = "";
    while (1)
    {
        bzero(buf, sizeof(buf));

        fgets(buf, sizeof(buf), stdin);
        printf("上面你要发给2的信息:\n");
        buf[strlen(buf) - 1] = 0;
        write(fd, buf, strlen(buf));
        if (strcmp(buf, "quit") == 0)
        {
            break;
        }
        
    }
    close(fd);
}

void get() //接收2的进程函数
{
    int fd = open("./2", O_RDONLY);
    if (fd == -1)
    {
        perror("open error");
        return;
    }
    char buf[128] = "";
    while (1)
    {
        bzero(buf, sizeof(buf));
        read(fd, buf, sizeof(buf));

        if (strcmp(buf, "quit") == 0)
        {
            break;
        }
        printf("从2接收到的信息:%s\n", buf);
    }
    close(fd);
}
int main(int argc, char const *argv[])
{
    pid_t pid = fork();

    if (pid > 0)
    {
        set();
    }
    else if (pid == 0)
    {
        get();
        exit(EXIT_SUCCESS);
    }
    else
    {
        printf("error\n");
        return -1;
    }

    wait(NULL);

    return 0;
}

2.c

#include <myhead.h>
void set() //发送给1的进程函数
{

    int fd = open("./2", O_WRONLY);
    if (fd == -1)
    {
        perror("open error");
        return;
    }

    char buf[128] = "";
    while (1)
    {
        bzero(buf, sizeof(buf));
        fgets(buf, sizeof(buf), stdin);
        printf("上面你要发给1的信息:\n");
        buf[strlen(buf) - 1] = 0;
        write(fd, buf, strlen(buf));
        if (strcmp(buf, "quit") == 0)
        {
            break;
        }
        
    }
    close(fd);
}

void get() //接收1的进程函数
{
    int fd = open("./1", O_RDONLY);
    if (fd == -1)
    {
        perror("open error");
        return;
    }
    char buf[128] = "";
    while (1)
    {
        bzero(buf, sizeof(buf));
        read(fd, buf, sizeof(buf));

        if (strcmp(buf, "quit") == 0)
        {
            break;
        }
        printf("从1接收到的信息:%s\n", buf);
    }
    close(fd);
}
int main(int argc, char const *argv[])
{

    pid_t pid = fork();

    if (pid > 0)
    {
        set();
    }
    else if (pid == 0)
    {
        get();
        exit(EXIT_SUCCESS);
    }
    else
    {
        printf("error\n");
        return -1;
    }
    wait(NULL);

    return 0;
}

在这里插入图片描述

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

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

相关文章

服务器数据恢复—raid5阵列上层Oracle数据库数据恢复案例

服务器数据恢复环境&故障&#xff1a; 一台服务器上有8块SAS硬盘&#xff0c;其中的7块硬盘组建了一组RAID5阵列&#xff0c;另外1块硬盘作为热备盘使用。划分了6个LUN&#xff0c;服务器上部署有oracle数据库。 RAID5磁盘阵列中有2块硬盘出现故障并离线&#xff0c;RAID5阵…

浮点数在计算机中的编码方式

一、前言 我们常能听到&#xff0c;直接用浮点数做运算得出的结果是不准确的了&#xff1b;或者也能看到涉及到浮点数时&#xff0c;会出现一些奇奇怪怪的问题&#xff0c;比如&#xff1a; public class DecimalTest {public static void main(String[] args) {float f1 1.…

STK12.2+Python开发(二):添加访问约束,新建场景、卫星、地面站等,获取当前场景的信息

新建场景 1.获取当前打开的场景 #获取当前打开的场景 scenario root.CurrentScenario2.设置当前场景的时间 scenario.SetTimePeriod(Today,24hr)3.添加一个地面目标到当前的场景 scenario.SetTimePeriod(Today,24hr)4.添加一个地面目标到当前的场景&#xff0c;括号内是三…

空气质量传感器 - 从零开始认识各种传感器【二十八期】

空气质量传感器|从零开始认识各种传感器 1、什么是空气质量传感器&#xff1f; 空气质量传感器是一种检测空气中污染物浓度的设备&#xff0c;广泛应用于环境监测、智能家居、工业控制和健康管理等领域。 2、空气质量传感器是如何工作的&#xff1f; 对于每个人都关心的空气质…

效率何止10倍!利用输入法瞬间调用提示词

我们在日常工作/学习/生活有很多场景需要使用提示词&#xff0c;比如说&#xff1a; 快速总结文章快速排版解释概念翻译其它经常面对的任务 但是使用提示词有几个痛点&#xff1a; 你很难临时写一个非常完整的提示词你凑合写的提示词&#xff0c;又担心结果不满意如果已经保…

前端使用css动画绘制简易的进度条,数据多条的时候可以切换

文章目录 一、效果图二、使用步骤1.公共的进度条组件2.使用 总结 一、效果图 二、使用步骤 1.公共的进度条组件 我这里命名的progressBar.vue&#xff0c; 你们使用的时候直接复制粘贴到自己的项目里面即可。 文件中代码如下&#xff08;示例&#xff09;&#xff1a; <t…

EasyX 碰撞检测

代码&#xff1a; #define _UNICODE #define UNICODE#include <array> #include <cmath> #include <ctime> #include <format> #include <graphics.h> #include <vector>typedef struct tagRECTF {double left;double top;double right;d…

You Only Look Once:Unified, Real-Time Object Detection 论文阅读

论文名&#xff1a;You Only Look Once:Unified, Real-Time Object Detection 论文作者&#xff1a;Joseph Redmon et.al. 期刊/会议名&#xff1a;CVPR 2016 发表时间&#xff1a;2016-5 ​论文地址&#xff1a;https://arxiv.org/pdf/1506.02640 1.摘要 我们提出了一种新的目…

论文辅导 | 结合变种残差模型和 Transformer 的城市公路短时交通流预测

辅导文章 模型描述 城市公路交通流的预测受到历史交通流量和相邻车道交通流量的影响&#xff0c;蕴含了复杂的时空特征。针对传统交通流预测模型卷积长短时记忆网络(ConvLSTM)进行交通流预测时&#xff0c;未将时空特征分开提取而造成的提取不充分、特征信息混淆和特征信息缺失…

视频融合技术

三维视频融合技术遵循数字孪生多源数据融合的原则&#xff0c;比视频窗口、矩阵更加直观高效&#xff0c;省去了人脑理解空间的时间&#xff0c;可有效提升数字孪生城市在物联感知操作、虚实融合交互等方面的能力&#xff0c;动静一体、虚实结合&#xff0c;让三维场景“动起来…

常见的SQL注入

联合查询 如下&#xff0c;要求我们传入一个id值过去。传参?id1&#xff0c;当我们输入id1和id2时&#xff0c;页面中name值和password的值会发生变化&#xff0c;说明此时我们输入的数据和数据库有交互并且将数据显示在屏幕上了 输入?id1&#xff0c;页面发生报错&#xf…

手机联网如何设置动态ip

在现代社会&#xff0c;手机已成为我们日常生活中不可或缺的一部分&#xff0c;无论是工作、学习还是娱乐&#xff0c;都离不开网络的支持。而在手机联网的过程中&#xff0c;IP地址的分配方式显得尤为重要。动态IP地址因其灵活性和安全性&#xff0c;成为了许多用户的首选。那…

电子合同怎么制作?9款常用电子合同软件

文章将介绍了以下9个工具&#xff1a;e签宝、文书宝、签通云、快签宝、法天使、Zycus iContract、airSlate WorkFlow、Lightico、KeepSolid Sign。 在数字化快速发展的今天&#xff0c;电子合同成为了业务操作中不可或缺的一部分&#xff0c;但许多人仍然面临如何有效创建和管理…

Redis vs Memcached:Redis的三大优势

Redis vs Memcached&#xff1a;Redis的三大优势 1. 数据类型2. 数据持久化能力3. 高性能与灵活性 &#x1f496;The Begin&#x1f496;点点关注&#xff0c;收藏不迷路&#x1f496; 1. 数据类型 Redis&#xff1a;支持多样化的数据类型&#xff0c;包括字符串&#xff08;S…

前端性能优化-回流与重绘

前言 本文总结回流与重绘相关的知识点 回流与重绘的基本概念 重绘&#xff08;Repaint&#xff09;&#xff1a; 当元素样式发生改变&#xff0c;但不影响其几何属性的时候&#xff0c;浏览器只需要重新绘制这个元素&#xff0c;这个过程被称为重绘。 回流&#xff08;Refl…

Linux_监测CPU和内存

通过TOP持续获取进程的CPU和内存消耗&#xff0c;并写入到表格 # 配置进程名 processvm-agent # 配置次数 number100 # 配置间隔时间 time5 # csv结果文件 filecm_$(date %s).csv echo "%CPU,%MEM">${file} pid$(ps -aux | grep ${process} | awk -F {OFS"…

debug\moc\mocinclude.tmp dose not exist

先把jom禁用&#xff0c;然后清理工程&#xff0c;重新编译&#xff0c;编译通过后再重新打开jom

MybatisPlus的主键策略

ASSIGN_ID(默认策略) 生成唯一的值&#xff0c;包含数字&#xff0c;表对应字段类型bigint或者varchar类型 ASSIGN_UUID() 生成唯一的值&#xff0c;包含数字和字母&#xff0c;表对应字段类型varchar类型 AUTO 主键自动增长效果&#xff0c;和表字段auto_increment INPUT …

养猫劝退?猫咪浮毛太多难清理?宠物空气净化器一招搞定

受不了了&#xff0c;真的很想把家里的猫孩子丢出去&#xff01;平日实在是太能掉毛了&#xff0c;赶上换毛季更夸张&#xff0c;家里都要被猫毛淹没了。这些还能靠多加打扫卫生清理掉&#xff0c;可空气中的浮毛真是束手无策。对于我这种过敏性鼻炎患者&#xff0c;一旦空气中…

FSRCNN论文读后感

本文的主要目的是在尽可能保持恢复质量不变的情况下&#xff0c;提高模型的处理速度&#xff0c;以将其投入实际应用。&#xff08;注意&#xff1a;本文只要是针对大尺寸图像&#xff0c;但实验结果证明&#xff0c;FRSNN模型对于小尺寸图像的处理速度也比SRCNN快&#xff0c;…