当前位置: 首页 > news >正文

我在杭州的Day30_进程间通信(IPC)——20240805

一、相关练习

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

1.1> 01homework.c

#include <myhead.h>int main(int argc, const char *argv[])
{//创建一个有名管道if(mkfifo("./pipe", 0664) == -1){perror("mkfifo error");return -1;}//定义通信容器char buf[128] = "";//创建父子进程pid_t pid = fork();if(pid < 0){perror("fork error");return -1;}else if(pid > 0){//子进程//以读的形式打开文件int rfd = open("./pipe", O_RDONLY);if(rfd == -1){perror("open error");return -1;}//已追加形式打开要写入文件int dfd = open("./test.txt", O_WRONLY|O_APPEND|O_CREAT, 0664);if(dfd == -1){perror("open dfd error");return -1;}printf("管道文件读端打开\n");while(1){bzero(buf, sizeof(buf));//读取数据read(rfd, buf, sizeof(buf));if(strcmp(buf, "quit") == 0){break;}printf("收到消息为:%s\n", buf);//将读取到的数据写入目标文件write(dfd, buf, strlen(buf));write(dfd, "\n", sizeof("\n"));}//关闭文件close(rfd);close(dfd);//退出进程exit(EXIT_SUCCESS);}//以写的形式打开管道文件int wfd = open("./pipe", O_WRONLY);if(wfd == -1){perror("open wfd error");return -1;}printf("管道文件写端打开\n");usleep(10);while(1){usleep(10);bzero(buf, sizeof(buf));printf("请输入>>>");fgets(buf, sizeof(buf), stdin);buf[strlen(buf)-1] = 0;//写入数据write(wfd, buf, strlen(buf));//终止判断if(strcmp(buf, "quit") == 0){break;}}//回收进程资源wait(NULL);//关闭写端close(wfd);//删除管道文件system("rm pipe");return 0;
}

1.2> 程序运行效果

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

2.1> creat.c

#include <myhead.h>int main(int argc, const char *argv[])
{//创建管道文件if(mkfifo("./pipe1", 0664) == -1){perror("mkfifo pipe1 error");return -1;}if(mkfifo("./pipe2", 0664) == -1){perror("mkfifo pipe2 error");}getchar();//删除管道文件system("rm pipe1");system("rm pipe2");return 0;
}

2.2> fork_a.c

#include <myhead.h>int main(int argc, const char *argv[])
{//创建通信中间变量char buf[128] = "";//创建父子进程pid_t pid = fork();if(pid < 0){perror("fork error");return -1;}else if(pid == 0){//子进程//以只读的形式打开管道文件2int rfd = open("./pipe2", O_RDONLY);if(rfd == -1){perror("pipe2 open error");return -1;}//读取管道文件2中的数据while (1){bzero(buf, sizeof(buf));read(rfd, buf, sizeof(buf));if(strcmp(buf, "quit") == 0){//退出聊天printf("B已经退出聊天,请输入“quit”退出聊天\n");break;}printf("收到B的消息:%s\n", buf);}//关闭文件描述符close(rfd);//退出子进程exit(EXIT_SUCCESS);}//以只写的形式打开管道文件1int wfd = open("./pipe1", O_WRONLY);if(wfd == -1){perror("pipe1 open error");return -1;}//向管道文件1中写入数据while(1){bzero(buf, sizeof(buf));			//清空容器printf("向B发送消息:");fgets(buf, sizeof(buf), stdin);		//从标准输入中读取数据putchar(10);buf[strlen(buf)-1] = 0;				//去掉换行符write(wfd, buf, strlen(buf));		//向管道文件1中写入数据if(strcmp(buf, "quit") == 0)		//如果输入的是quit,则退出聊天{break;}}//回收子进程wait(NULL);//关闭文件描述符close(wfd);return 0;
}

2.3> fork_b.c

#include <myhead.h>int main(int argc, const char *argv[])
{//创建通信中间变量char buf[128] = "";//创建父子进程pid_t pid = fork();if(pid < 0){perror("fork error");return -1;}else if(pid == 0){//子进程//以只读的形式打开管道文件2int rfd = open("./pipe1", O_RDONLY);if(rfd == -1){perror("pipe2 open error");return -1;}//读取管道文件2中的数据while (1){bzero(buf, sizeof(buf));read(rfd, buf, sizeof(buf));if(strcmp(buf, "quit") == 0){//退出聊天printf("A已经退出聊天,请输入“quit”退出聊天\n");break;}printf("收到A的消息:%s\n", buf);}//关闭文件描述符close(rfd);//退出子进程exit(EXIT_SUCCESS);}//以只写的形式打开管道文件1int wfd = open("./pipe2", O_WRONLY);if(wfd == -1){perror("pipe1 open error");return -1;}//向管道文件1中写入数据while(1){bzero(buf, sizeof(buf));			//清空容器printf("向A发送消息:");fgets(buf, sizeof(buf), stdin);		//从标准输入中读取数据putchar(10);buf[strlen(buf)-1] = 0;				//去掉换行符write(wfd, buf, strlen(buf));		//向管道文件1中写入数据if(strcmp(buf, "quit") == 0)		//如果输入的是quit,则退出聊天{break;}}//回收子进程wait(NULL);//关闭文件描述符close(wfd);return 0;
}

2.4> 程序运行效果

二、思维导图

相关文章:

我在杭州的Day30_进程间通信(IPC)——20240805

一、相关练习 1.使用有名管道实现&#xff0c;一个进程用于给另一个进程发消息&#xff0c;另一个进程收到消息后&#xff0c;展示到终端上&#xff0c;并且将消息保存到文件上一份 1.1> 01homework.c #include <myhead.h>int main(int argc, const char *argv[]) …...

FFmpeg推流

目录 一. 环境准备 二. 安装FFmpeg 三. 给docker主机安装docker服务 四. 使用 FFmpeg 进行推流测试 FFmpeg是一个非常强大的多媒体处理工具&#xff0c;它可以用于视频和音频的录制、转换以及流处理。在流处理方面&#xff0c;FFmpeg可以用来推流&#xff0c;即将本地媒体…...

【Rust光年纪】简化文件操作流程:深度剖析多款文件系统操作库

文件系统操作利器&#xff1a;介绍常用的文件操作库 前言 在现代软件开发中&#xff0c;文件系统操作是一个十分常见的需求。为了更加高效地进行文件系统操作&#xff0c;开发人员经常会使用各种文件系统操作库来简化开发流程、提高代码可维护性。本文将介绍几个常用的文件系…...

FFmpeg实现文件夹多视频合并

使用FFmpeg合并文件夹中的多个视频文件&#xff0c;可以通过多种方式来实现&#xff0c;具体取决于你希望如何合并这些视频文件。下面介绍两种常见的方法&#xff1a; 按顺序拼接多个视频文件&#xff1a; 适用于希望将多个视频文件按顺序合并成一个视频文件的情况。 将多个视…...

[设备] 关于手机设备中几种传感器的研究

一、手机设备中三位坐标系概念 X轴的方向&#xff1a;沿着屏幕水平方向从左到右&#xff0c;如果手机如果不是是正方形的话&#xff0c;较短的边需要水平 放置&#xff0c;较长的边需要垂直放置。Y轴的方向&#xff1a;从屏幕的左下角开始沿着屏幕的的垂直方向指向屏幕的顶端Z轴…...

C#通过Modbus读取温度和湿度

使用 C# 通过 RS-485 接口读取温湿度数据并在电脑上显示&#xff0c;需要使用串口通信。假设你的温湿度传感器使用 Modbus RTU 协议&#xff0c;这里提供一个示例代码&#xff0c;使用 System.IO.Ports 命名空间进行串口通信&#xff0c;并使用 Modbus 协议库 NModbus 进行通信…...

海量数据处理商用短链接生成器平台 - 9

第二十六章 短链服务-冗余双写架构删除和更新消费者开发实战 第1集 冗余双写架构-更新短链消费者开发实战 简介&#xff1a; 短链服务-更新短链-消费者开发实战 具体步骤见代码 第2集 冗余双写架构-更新短链消费者链路测试 简介&#xff1a; 冗余双写架构-更新短链消费者链…...

从困境到突破,EasyMR 集群迁移助力大数据底座信创国产化

在大数据时代&#xff0c;企业对数据的依赖程度越来越高。然而&#xff0c;随着业务的不断发展和技术的快速迭代&#xff0c;大数据平台的集群迁移已成为企业数据中台发展途中无法回避的需求。在大数据平台发展初期&#xff0c;国内数据中台市场主要以国外开源 CDH、商业化 CDP…...

【Mysql】第十二章 视图特性(概念+使用)

文章目录 一、概念二、使用1.创建视图2.修改视图会影响基表3.修改基表会影响视图4.删除视图 一、概念 视图不能添加索引&#xff0c;也不能有关联的触发器或者默认值。由于视图和基表用的本质是同一份数据&#xff0c;因此对视图的修改会影响到基表&#xff0c;对基表的修改也…...

【颠覆数据处理的利器】全面解读Apache Flink实时大数据处理的引擎-上篇

什么是 Apache Flink&#xff1f; Apache Flink 是一个框架和分布式处理引擎&#xff0c;用于对无界和有界数据流进行有状态计算。Flink 被设计为在所有常见的集群环境中运行&#xff0c;以内存速度和任何规模执行计算。 如何理解无界和有界数据&#xff1f; 无界数据&#…...

【C++】C++11(可变参数模板、lambda表达式、包装器)

文章目录 1. 可变参数模板1.1 介绍1.2 emplace系列接口实现 2. lambda表达式2.1 语法介绍2.2 原理 3. 包装器4. bind 1. 可变参数模板 1.1 介绍 可变参数我们在C语言阶段已经了解过了&#xff0c;C语言中叫做可变参数列表&#xff0c;其中使用 ... 代表可变参数。 C语言中的可…...

矩阵获客时代,云微客让你一个人成就一支队伍

短视频利用大家碎片化的时间让自身得到广泛的应用和发展&#xff0c;因此很多公司纷纷布局短视频赛道。但是一个账号的曝光量有限&#xff0c;并且能够出的爆款视频更是少之又少&#xff0c;这个时候就需要增加账号的数量&#xff0c;布局形成账号矩阵。 做账号矩阵&#xff0c…...

浅谈基础的图算法——Tarjan求强联通分量算法(c++)

文章目录 强联通分量SCC概念例子有向图的DFS树代码例题讲解[POI2008] BLO-Blockade题面翻译题目描述输入格式输出格式样例 #1样例输入 #1样例输出 #1 思路AC代码 【模板】割点&#xff08;割顶&#xff09;题目背景题目描述输入格式输出格式样例 #1样例输入 #1样例输出 #1 提示…...

【Godot4自学手册】第四十四节用着色器(shader)实现溶解效果

本小节&#xff0c;我将自学用用着色器&#xff08;shader&#xff09;实现溶解效果&#xff0c;最终效果如下&#xff1a; 一、进行shader初始设置 首先我们进入Player场景&#xff0c;选择AnimatedSprite2D节点&#xff0c;在检查器中找到CanvasItem属性&#xff0c;并在M…...

【画流程图工具】

画流程图工具 draw.io draw.io&#xff08;现称为 diagrams.net&#xff09;是一款在线图表绘制工具&#xff0c;可以用于创建各种类型的图表&#xff0c;如流程图、网络图、组织结构图、UML图、思维导图等。以下是关于它的一些优点、应用场景及使用方法&#xff1a; 优点&a…...

Revit二次开发选择过滤器,SelectionFilter

过滤器分为选择过滤器与规则过滤器 规则过滤器可以看我之前写的这一篇文章: Revit二次开发在项目中给链接模型附加过滤器 选择过滤器顾名思义就是可以将选择的构件ID集合传入并加入到视图过滤器中,有一些场景需要对某些构件进行过滤选择,但是没有共同的逻辑规则进行筛选的情况…...

【Linux】进程概念—环境变量

目录 一、冯诺依曼体系结构 二、操作系统(Operator System) 1 .概念 2 .设计OS的目的 3 . 定位 4 . 系统调用和库函数概念 三、进程 1 .基本概念 2 .描述进程-PCB&#xff08;process control block&#xff09;进程控制块 3 . 组织进程 4 . 查看进程 5 .通过系统调用获取进程…...

第十二章 Spring MVC 框架扩展和SSM框架整合(2023版本IDEA)

学习目标 12.1 Spring MVC 框架处理JSON数据12.1.1 JSON数据的传递处理12.1.2 JSON数据传递过程中的中文乱码和日期问题12.1.3 多视图解析器 12.2 Spring MVC 框架中的数据格式转换12.2.1 Spring MVC 框架数据转换流程12.2.2 编写自定义转换器12.2.3 使用InitBinder装配自定义编…...

js中的全局函数有这些

js中的全局函数有这些,记忆规则 6个编译 escape、‌‌unescape、decodeURI、decodeURIComponent、encodeURI、encodeURIComponent 2个数据处理 Number()、String() 4个数字处理 ‌isFinite、isNaN、‌parseFloat、parseInt 1个特殊情况 eval()...

Android SurfaceFlinger——重绘闪烁处理(四十六)

在帧数据准备完成后,下一步是调用 devOptRepaintFlash() 函数处理显示输出设备的可选重绘闪烁问题,这里我们就来看一下重绘闪屏问题的处理方案。 1.更新输出设备的色彩配置文件2.更新与合成相关的状态3.计划合成帧图层4.写入合成状态5.设置颜色矩阵6.开始帧7.准备帧数据以进行…...

Xshell远程连接Kali(默认 | 私钥)Note版

前言:xshell远程连接&#xff0c;私钥连接和常规默认连接 任务一 开启ssh服务 service ssh status //查看ssh服务状态 service ssh start //开启ssh服务 update-rc.d ssh enable //开启自启动ssh服务 任务二 修改配置文件 vi /etc/ssh/ssh_config //第一…...

从WWDC看苹果产品发展的规律

WWDC 是苹果公司一年一度面向全球开发者的盛会&#xff0c;其主题演讲展现了苹果在产品设计、技术路线、用户体验和生态系统构建上的核心理念与演进脉络。我们借助 ChatGPT Deep Research 工具&#xff0c;对过去十年 WWDC 主题演讲内容进行了系统化分析&#xff0c;形成了这份…...

鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个医院挂号小程序

一、开发准备 ​​环境搭建​​&#xff1a; 安装DevEco Studio 3.0或更高版本配置HarmonyOS SDK申请开发者账号 ​​项目创建​​&#xff1a; File > New > Create Project > Application (选择"Empty Ability") 二、核心功能实现 1. 医院科室展示 /…...

鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个医院查看报告小程序

一、开发环境准备 ​​工具安装​​&#xff1a; 下载安装DevEco Studio 4.0&#xff08;支持HarmonyOS 5&#xff09;配置HarmonyOS SDK 5.0确保Node.js版本≥14 ​​项目初始化​​&#xff1a; ohpm init harmony/hospital-report-app 二、核心功能模块实现 1. 报告列表…...

(转)什么是DockerCompose?它有什么作用?

一、什么是DockerCompose? DockerCompose可以基于Compose文件帮我们快速的部署分布式应用&#xff0c;而无需手动一个个创建和运行容器。 Compose文件是一个文本文件&#xff0c;通过指令定义集群中的每个容器如何运行。 DockerCompose就是把DockerFile转换成指令去运行。 …...

使用 Streamlit 构建支持主流大模型与 Ollama 的轻量级统一平台

🎯 使用 Streamlit 构建支持主流大模型与 Ollama 的轻量级统一平台 📌 项目背景 随着大语言模型(LLM)的广泛应用,开发者常面临多个挑战: 各大模型(OpenAI、Claude、Gemini、Ollama)接口风格不统一;缺乏一个统一平台进行模型调用与测试;本地模型 Ollama 的集成与前…...

[免费]微信小程序问卷调查系统(SpringBoot后端+Vue管理端)【论文+源码+SQL脚本】

大家好&#xff0c;我是java1234_小锋老师&#xff0c;看到一个不错的微信小程序问卷调查系统(SpringBoot后端Vue管理端)【论文源码SQL脚本】&#xff0c;分享下哈。 项目视频演示 【免费】微信小程序问卷调查系统(SpringBoot后端Vue管理端) Java毕业设计_哔哩哔哩_bilibili 项…...

tomcat指定使用的jdk版本

说明 有时候需要对tomcat配置指定的jdk版本号&#xff0c;此时&#xff0c;我们可以通过以下方式进行配置 设置方式 找到tomcat的bin目录中的setclasspath.bat。如果是linux系统则是setclasspath.sh set JAVA_HOMEC:\Program Files\Java\jdk8 set JRE_HOMEC:\Program Files…...

ubuntu22.04有线网络无法连接,图标也没了

今天突然无法有线网络无法连接任何设备&#xff0c;并且图标都没了 错误案例 往上一顿搜索&#xff0c;试了很多博客都不行&#xff0c;比如 Ubuntu22.04右上角网络图标消失 最后解决的办法 下载网卡驱动&#xff0c;重新安装 操作步骤 查看自己网卡的型号 lspci | gre…...

鸿蒙(HarmonyOS5)实现跳一跳小游戏

下面我将介绍如何使用鸿蒙的ArkUI框架&#xff0c;实现一个简单的跳一跳小游戏。 1. 项目结构 src/main/ets/ ├── MainAbility │ ├── pages │ │ ├── Index.ets // 主页面 │ │ └── GamePage.ets // 游戏页面 │ └── model │ …...