华清day7 24-8-5

news2024/12/24 8:30:02

文章目录

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

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

#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/1983236.html

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

相关文章

WPF学习(1)-Grid控件(网格布局)

Grid控件其实是一个窗体的默认控件&#xff0c;我们创建一个WPF应用程序后&#xff0c;其主窗体里面会有一个Grid控件。 Grid有两个非常关键的属性ColumnDefinitions和RowDefinitions&#xff0c;分别表示列的数量集合和行的数量集合。 ColumnDefinitions集合中的元素类型是…

终于有人把华为认证全部说清楚了

在信息技术领域&#xff0c;华为认证好比一座金字招牌&#xff0c;吸引着无数技术专业人士的青睐。 市场上关于华为认证的声音纷繁复杂&#xff0c;存在不少争议&#xff0c;让人难以辨别真伪。 今天就来好好讲讲华为认证&#xff0c;从头到尾都帮你盘盘清楚。 01 华为认证是…

论文辅导 | 基于二次分解和BO-BiLSTM组合模型采煤工作面瓦斯涌出量预测方法研究

辅导文章 模型描述 结合变分模态分解&#xff08;VMD&#xff09;、自适应噪声完备经验模态分解&#xff08;CEEMDAN&#xff09;、贝叶斯优化算法&#xff08;BO&#xff09;和双向长短期记忆神经网络&#xff08;BiLSTM&#xff09;这4种时间序列处理方法&#xff0c;建立了…

EKMA曲线及大气O3来源解析实践技术

目前&#xff0c;大气臭氧污染成为我国“十四五”期间亟待解决的环境问题。臭氧污染不仅对气候有重要影响&#xff0c;而且对人体健康、植物生长均有严重损害。为了高效、精准地治理区域大气臭氧污染&#xff0c;首先需要了解导致臭氧生成的主要前体物。因此&#xff0c;EKMA曲…

图的DFS

LeetCode2368 受限条件下可到达节点的数目 class Solution { public:int dfs(vector<vector<int>>& g,int x,int fa){int sum1;for(int y:g[x]){if(y!fa) sumdfs(g,y,x);}return sum;}int reachableNodes(int n, vector<vector<int>>& edges, …

C#—串口和网口之间的通信详解

C#—串口和网口之间的通信 串口转网口、网口转串口&#xff0c;就是将网口发送来的数据包发送给串口设备&#xff0c;将串口设备返回的数据转发给网口客户端。 在C#中&#xff0c;将串口数据转换为网络数据并发送到网络&#xff0c;通常涉及以下步骤&#xff1a; 1. 创建一个…

C# Unity 面向对象补全计划 七大原则 之 里氏替换(LSP) 难度:☆☆☆ 总结:子类可以当父类用,牛马是马,骡马也是马

本文仅作学习笔记与交流&#xff0c;不作任何商业用途&#xff0c;作者能力有限&#xff0c;如有不足还请斧正 本系列作为七大原则和设计模式的进阶知识&#xff0c;看不懂没关系 请看专栏&#xff1a;http://t.csdnimg.cn/mIitr&#xff0c;尤其是关于继承的两篇文章&#xff…

相机无须标定,使用基础矩阵F实现多相机内参自标定

Abstract 从给定的基本矩阵中进行两个摄像头的自我校准问题是几何计算机视觉中的基本问题之一。在已知主点和正方形像素的假设下&#xff0c;Bougnoux公式提供了一种计算两个未知焦距的方法。然而&#xff0c;在许多实际情况下&#xff0c;由于常见的奇异性&#xff0c;公式会…

xshell无法连接Ubuntu20.4

在之前红帽版本里&#xff0c;直接下了就可以用xshell直接连接&#xff0c;但是Ubuntu20.4不能直接连接&#xff0c;我开始以为是密码错了&#xff0c;但是我想了想vscode连接不需要密码&#xff0c;一样连接不上&#xff0c;我就在网上找了很多方法&#xff0c;最后终于连接上…

总线学习4--UART

想来串口通信是我第一次接触嵌入式就知道的&#xff0c;一直调试也是用串口线&#xff0c;但是里面的原理还真不清楚。这次难得把环境弄出来了&#xff0c;就顺便学学。 一 环境搭建 还是老规矩&#xff0c;废话不多说&#xff0c;干就完事。 这次用的树莓派zero小板&#x…

云计算实训19——上线一个静态的前端系统(续)

上线一个静态的前端系统(续) 准备工作 在eleme服务器上&#xff1a; 启动服务 启动rpcbind [rooteleme-static ~]# systemctl restart rpcbind 启动nfs [rooteleme-static ~]# systemctl restart nfs 在static-server主机上&#xff1a; 1.重启服务 启动smb [rootstatic…

重塑汽车制造未来:3D插图技术大师,零误差高效驱动新时代

在当今快速革新的汽车制造领域&#xff0c;高效、精准的产品设计与制造流程已成为众多车企破浪前行的核心引擎。但随着市场竞争的日益激烈&#xff0c;在产品设计与制造中&#xff0c;传统二维CAD设计的局限性越发明显——设计周期长、沟通成本高、错误频发及资源利用低效等问题…

AI算力租赁是什么,哪些行业会有需求?

一、AI算力租赁的定义与概述 AI算力租赁是指基于人工智能&#xff08;AI&#xff09;应用需求&#xff0c;将所需的计算能力&#xff08;即算力&#xff09;通过租赁服务的方式提供给企业和个人用户。这种服务允许用户根据需要租用人工智能计算资源&#xff0c;如图形处理单元…

[网鼎杯2018]Unfinish解题,五分钟带你解题

目录 前期准备 ​编辑 扫描目录 寻找注入点 构建payload&#xff1a; 开始注入&#xff1a; 寻找过滤规则 绕过过滤 构建python脚本 提交flag 总结 前期准备 这道题是2018年网鼎杯的一道题&#xff0c;是比较经典的一道sql二次注入的题&#xff0c;我们一起来看一下 …

B1.3 程序状态寄存器PSTATE的介绍

快速链接: . 👉👉👉 ARMv8/ARMv9架构入门到精通-[目录] 👈👈👈 付费专栏-付费课程 【购买须知】个人博客笔记导读目录(全部) B1.3 进程状态,PSTATE* 程序状态寄存器或PSTATE,是程序状态信息的抽象。所有指令集都提供操作 PSTATE 元素的指令。 以下 PSTATE 信…

第二十一天内容

上午 4、mysql基础命令 5、mysql操作命令 ------------------------------------------------------------------------------------------------------------------------------- 下午 1、脚本安装mysql 2、mysql命令回顾 3、mysql用户权限设置 4、命令练习 6、权限角色 7、…

按xls标签替换docx及xls内容

WPSoffice环境下&#xff0c;需要批量替换doc文档及xls表格某些内容&#xff0c;在windows下&#xff0c;可以用VBA宏实现&#xff0c;先建一个标签表格&#xff0c;然后按标签批量替换。但在Linux下&#xff0c;WPS表格宏不能跨文档操作WPS文字&#xff0c;于是想用python实现…

工程架构简析

文内项目 Github&#xff1a;XIAOJUSURVEY 架构 架构的设计最终是为了场景可以快速扩展&#xff0c;基于工程底座&#xff0c;使用者能够专注于业务领域的深入。 B端&#xff1a;面向问卷管理者&#xff0c;专注于问卷管理、问卷投放和数据分析三大核心能力的建设。&#xff0…

vue3实现商品图片放大镜效果(芋道源码yudao-cloud 二开笔记)

今天开发一个防某商城的商品图片放大镜&#xff0c;鼠标移动到图片位置时&#xff0c;右侧出现一个已放大的图片效果。 示例如下&#xff1a; 下图的图片的放大效果和小图的切换封装成了组件PicShow.vue&#xff0c;可根据需求自行修改&#xff0c;如下&#xff1a; 第一步&…

鸿蒙应用服务开发【钱包服务(ArkTS)】

介绍 基于Stage模型&#xff0c;提供钱包交通卡和Pass卡的开卡、预览卡、查询卡信息、更新卡片信息、删除卡片、初始化钱包环境等功能。 效果预览 具体实现 交通卡 在hms.core.payment.walletTransitCard中定义了钱包交通卡接口API&#xff0c;示例接口如下&#xff1a; /*…