36、IO进程线程/进程和线程之间的通信练习

一、使用有名管道完成两个进程的相互通信(提示:可以使用多进程或多线程完成)。

代码1:创建两个有名管道文件

#include<myhead.h>int main(int argc, const char *argv[])
{if(mkfifo("./mingtohua",0664)==-1)//创建小明向小华发信息的管道文件“mingtohua”{perror("mkfifo mingtohua error");return -1;}if(mkfifo("./huatoming",0664)==-1){perror("mkfifo huatoming error");//创建小华向小明发信息的管道文件“huatoming”return -1;}getchar();//阻塞等待  待聊天结束后删除两个管道文件system("rm mingtohua");system("rm huatoming");return 0;
}

代码2: 供小明发送、接收的代码:

#include<myhead.h>
void *send_message(void *arg);//负责发送信息的接口
void *receive_message(void *arg);//负责接收信息的接口int main(int argc, const char *argv[])
{pthread_t tid1,tid2;//创建两个线程if(pthread_create(&tid1,NULL,send_message,NULL)!=0)//负责发送信息的线程{puts("tid1 create error");return -1;}if(pthread_create(&tid2,NULL,receive_message,NULL)!=0)//负责接收信息{puts("tid2 create error");return -1;}if(pthread_join(tid1,NULL)==0 && pthread_join(tid2,NULL)==0)//等待回收两个线程{puts("xiaoming closed send&receive"); //成回收输出提示语句}puts("xiaoming off-line");//执行完成 函数结束前输出提示语句return 0;
}
void *send_message(void *arg)//发送信息
{int wfd=-1;//打开“mingtohua”管道文件if((wfd=open("./mingtohua",O_WRONLY))==-1){perror("open error");return NULL;}char wbuf[128]="";while(1){printf("请输入>>>");fgets(wbuf,sizeof(wbuf),stdin);//获取终端输入wbuf[strlen(wbuf)-1]=0;write(wfd,wbuf,strlen(wbuf));//向管道写入数据if(strcmp(wbuf,"quit")==0)  //输入quit结束break;}close(wfd);//关闭管道文件pthread_exit(NULL);//释放发送信息的线程
}
void *receive_message(void *arg)//接收消息
{int rfd=-1;//打开“huatoming”管道文件if((rfd=open("./huatoming",O_RDONLY))==-1){perror("open error");return  NULL;}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);//关闭文件pthread_exit(NULL);//退出线程
}

代码3: 供小明发送、接收的代码:

#include<myhead.h>
void *send_message(void *arg);
void *receive_message(void *arg);int main(int argc, const char *argv[])
{pthread_t tid1,tid2;//创建两个线程if(pthread_create(&tid1,NULL,send_message,NULL)!=0)//负责发送信息{puts("tid1 create error");return -1;}if(pthread_create(&tid2,NULL,receive_message,NULL)!=0)//负责接收信息{puts("tid2 create error");return -1;}if(pthread_join(tid1,NULL)==0 && pthread_join(tid2,NULL)==0){puts("xiaohua closed send&receive");}puts("xiaohua off-line");return 0;
}
void *send_message(void *arg)
{int wfd=-1;//打开管道文件if((wfd=open("./huatoming",O_WRONLY))==-1){perror("open error");return NULL;}char wbuf[128]="";while(1){printf("请输入>>>");fgets(wbuf,sizeof(wbuf),stdin);//获取终端输入wbuf[strlen(wbuf)-1]=0;write(wfd,wbuf,strlen(wbuf));//向管道写入数据if(strcmp(wbuf,"quit")==0)break;}close(wfd);pthread_exit(NULL);
}
void *receive_message(void *arg)
{int rfd=-1;if((rfd=open("./mingtohua",O_RDONLY))==-1){perror("open error");return  NULL;}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);pthread_exit(NULL);
}

运行图:

思维导图:

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

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

相关文章

Stable Diffusion 绘画入门教程(webui)-ControlNet(深度Depth)

上篇文章介绍了线稿约束&#xff0c;这篇文章介绍下深度Depth 文章目录 一、选大模型二、写提示词三、基础参数设置四、启用ControlNet 顾名思义&#xff0c;就是把原图预处理为深度图&#xff0c;而深度图可以区分出图像中各元素的远近关系&#xff0c;那么啥事深度图&#xf…

本机防攻击简介

定义 在网络中&#xff0c;存在着大量针对CPU&#xff08;Central Processing Unit&#xff09;的恶意攻击报文以及需要正常上送CPU的各类报文。针对CPU的恶意攻击报文会导致CPU长时间繁忙的处理攻击报文&#xff0c;从而引发其他业务的中断甚至系统的中断&#xff1b;大量正常…

惠尔顿 网络安全审计系统 任意文件读取漏洞复现

0x01 产品简介 惠尔顿网络安全审计产品致力于满足军工四证、军工保密室建设、国家涉密网络建设的审计要求&#xff0c;规范网络行为&#xff0c;满足国家的规范&#xff1b;支持1-3线路的internet接入、1-3对网桥&#xff1b;含强大的上网行为管理、审计、监控模块&#xff1b…

【2024软件测试面试必会技能】Requests(5):Requests模块_设置代理

设置代理 代理&#xff08;英语&#xff1a;Proxy&#xff09;&#xff0c;也称网络代理&#xff0c;是一种特殊的网络服务&#xff0c;英文全称是&#xff08;Proxy Server&#xff09;&#xff0c;其功 能就是代理网络用户去取得网络信息。形象的说&#xff1a;它是网络信息…

P8630 [蓝桥杯 2015 国 B] 密文搜索

P8630 [蓝桥杯 2015 国 B] 密文搜索 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)https://www.luogu.com.cn/problem/P8630 题目分析 基本上是hash的板子&#xff0c;但实际上对于密码串&#xff0c;只要判断主串中任意连续的八个位置是否存在密码串即可&#xff1b;那么我们…

PHP学习笔记1——html标签以及头部元素页面布局

html是一种超文本标识符号&#xff0c;用来在网页中指定显示页面格式显示 基本格式 <!doctype html> <html><head><title></title> </head><body> </body></html> 包含声明&#xff0c;框架html&#xff0c;头部head&a…

怎么把公众号文章链接做成二维码?扫码查看公众号推文的方法

公众号是现在给用户分享内容的一种方式&#xff0c;通过输出优质的公众号文章内容来为关注者提供信息和内容。当我们发布公众号文章后&#xff0c;有些情况下会需要将公众号内容生成二维码之后&#xff0c;印刷到传单、展板上来显示&#xff0c;那么如何将公众号的文章链接转二…

Commonjs 和 Es Module详解

一 前言 今天我们来深度分析一下 Commonjs 和 Es Module&#xff0c;希望通过本文的学习&#xff0c;能够让大家彻底明白 Commonjs 和 Es Module 原理&#xff0c;能够一次性搞定面试中遇到的大部分有关 Commonjs 和 Es Module 的问题。 带上疑问开始今天的分析&#xff1a; …

数字化转型导师坚鹏:城市数字化转型顶层规划方法

城市数字化转型顶层规划方法 课程背景&#xff1a; 很多城市存在以下问题&#xff1a; 不知道如何系统地开展数字化转型工作&#xff1f; 不清楚如何科学地制定数字化转型战略&#xff1f; 不知道如何高效地实施数字化转型战略&#xff1f; 课程特色&#xff1a; 有…

基于SpringBoot的在线拍卖系统设计与实现(源码+调试+LW+PPT)

项目描述 临近学期结束&#xff0c;还是毕业设计&#xff0c;你还在做java程序网络编程&#xff0c;期末作业&#xff0c;老师的作业要求觉得大了吗?不知道毕业设计该怎么办?网页功能的数量是否太多?没有合适的类型或系统?等等。今天给大家介绍一篇基于SpringBoot的在线拍…

VSCode将某个字符替换为换行符并换行显示

不想每次去查了&#xff0c;我自己写博客记录一下~~~ 我的需求是一个一行的数据&#xff0c;用逗号分开&#xff0c;我希望竖着看有规律点&#xff0c;类似这样 快捷键其实想 optioncommandf &#xff0c;但是我每次都记不住&#xff0c;大家可以直接在编辑栏找到replace的地方…

Unity Meta XR SDK 快捷配置开发工具【Building Block/Quick Action/OVRCameraRigInteraction】

文章目录 &#x1f4d5;教程说明&#x1f4d5;Building Block&#x1f4d5;Quick Action&#x1f4d5;OVRCameraRigInteraction 此教程相关的详细教案&#xff0c;文档&#xff0c;思维导图和工程文件会放入 Spatial XR 社区。这是一个高质量 XR 社区&#xff0c;博主目前在内…

进程线程的通信-day5

1、将互斥机制的代码实现重新敲一遍。 #include<myhead.h>//临界资源 int num520;//1、创建一个互斥锁变量 pthread_mutex_t mutex;void *task1(void *arg); void *task2(void *arg); int main(int argc, const char *argv[]) {//2、初始化互斥锁pthread_mutex_init(&am…

Shiro-14-subject 主体

理解Apache Shiro中的主题 毫无疑问&#xff0c;Apache Shiro中最重要的概念是主题。 “主题”只是一个安全术语&#xff0c;它指的是应用程序用户特定于安全的“视图”。Shiro主题实例代表了单个应用程序用户的安全状态和操作。 这些操作包括: 身份验证(登录) 授权(访问控…

了解JSON的作用及其方法

什么是json JSON&#xff08;JavaScript Object Notation&#xff09;是一种轻量级的数据交换格式采用完全独立编程语言的文本格式存储和表示数据&#xff08;就是字符串&#xff09;。它基于JavaScript语法&#xff0c;但可以被多种编程语言使用和解析。JSON以键值对的形式存…

高光谱图像降噪方法(2D Wavelet, 3D Wavelet, FORPDN, HyRes等方法)

近年来&#xff0c;随着遥感应用的不断深入&#xff0c;高光谱图像研究已经成为遥感领域发展最迅速的技术之一。与其他传统成像技术相比&#xff0c;高光谱图像具有更多优势&#xff1a;更丰富的信息量、纳米级的光谱分辨率以及范围更广且连续的光谱。因此&#xff0c;在农业、…

选择VR全景行业,需要了解哪些内容?

近年来&#xff0c;随着虚拟现实、增强现实等技术的持续发展&#xff0c;VR全景消费市场得以稳步扩张。其次&#xff0c;元宇宙行业的高速发展&#xff0c;也在进一步拉动VR全景技术的持续进步&#xff0c;带动VR产业的高质量发展。作为一种战略性的新兴产业&#xff0c;国家和…

OJ_学生信息系统

题干 输入样例&#xff1a; 5 zhaoyi 70 80 90 240 qianer 65 32 77 174 sunsan 100 55 68 223 lisi 86 77 90 253 wangwu 100 59 66 225 输出样例&#xff1a; *[qianer] 65 32 77 *[sunsan] 100 55 68 *[wangwu] 100 59 66 lisi 86 77 90 zhaoyi 70 80 90 wangwu 100 59 6…

云打印api搭建,云打印api怎么对接?

相信近来一段时间云打印概念的火热让很多企业和App都有开展打印业务的想法&#xff0c;但是云打印技术的开发又需要有打印设备的支持&#xff0c;这个时候我们可以找到专业的云打印服务平台进行api对接。那么云打印api搭建&#xff0c;云打印api怎么对接&#xff1f;今天来一起…

C语言自定义类型:结构体的使用及其内存对齐【超详细建议点赞收藏】

目录 1. 结构体类型的声明1.1 结构的声明1.2 结构体变量的创建和初始化1.3 结构的特殊声明---匿名结构体1.4 结构的自引用 2.结构体内存对齐&#xff08;重点&#xff01;&#xff01;&#xff09;2.1 对齐规则2.2 例题讲解2.3 为什么存在内存对齐&#xff1f;2.4 修改默认对齐…