IO第6天

实现AB进程对话

A进程发送一句话后,B进程接收到打印。然后B进程发送一句话,A进程接收后打印b。重复上述步骤。直到AB接收或者发送完quit后,结束AB进程

使用消息队列实现

//A文件
#include <myhead.h>struct msgbuf{long mtype;char mtext[128];
};int main(int argc, const char *argv[])
{//创建keykey_t key=ftok("/home/ubuntu/",1);if(key<0){perror("ftok");return -1;}//找到或创建消息队列int msgid=msgget(key,IPC_CREAT|0664);if(msgid<0){perror("msgget");return -1;}system("ipcs -q");//准备数据struct msgbuf snd;struct msgbuf rcv;while(1){//写printf("请输入消息类型>>>");scanf("%ld",&snd.mtype);getchar();printf("请输入消息内容>>>");fgets(snd.mtext,sizeof(snd.mtext),stdin);snd.mtext[strlen(snd.mtext)-1]='\0';//发送消息if(msgsnd(msgid,&snd,sizeof(snd.mtext),0)<0){perror("msgsnd");break;}if(strcmp(snd.mtext,"quit")==0){printf("退出\n");break;}printf("发送成功\n");//读	if(msgrcv(msgid,&rcv,sizeof(rcv.mtext),0,0)<0){perror("msgrcv");break;}if(strcmp(rcv.mtext,"quit")==0){printf("退出\n");break;}printf("mtype=%ld mtext=%s\n",rcv.mtype,rcv.mtext);}//关闭消息队列if(msgctl(msgid,IPC_RMID,NULL)<0){perror("msgctl");return -1;}system("ipcs -q");return 0;
}
//B文件
#include <myhead.h>struct msgbuf{long mtype;char mtext[128];
};int main(int argc, const char *argv[])
{//创建keykey_t key=ftok("/home/ubuntu/",1);if(key<0){perror("ftok");return -1;}//找到或创建消息队列int msgid=msgget(key,IPC_CREAT|0664);if(msgid<0){perror("msgget");return -1;}//准备数据struct msgbuf snd;struct msgbuf rcv;while(1){//读if(msgrcv(msgid,&rcv,sizeof(rcv.mtext),0,0)<0){perror("msgrcv");break;}if(strcmp(rcv.mtext,"quit")==0){printf("退出\n");break;}                                    printf("mtype=%ld mtext=%s\n",rcv.mtype,rcv.mtext);//写printf("请输入消息类型>>>");scanf("%ld",&snd.mtype);getchar();printf("请输入消息内容>>>");fgets(snd.mtext,sizeof(snd.mtext),stdin);snd.mtext[strlen(snd.mtext)-1]='\0';//发送消息if(msgsnd(msgid,&snd,sizeof(snd.mtext),0)<0){perror("msgsnd");break;}if(strcmp(snd.mtext,"quit")==0){printf("退出\n");break;}printf("发送成功\n");}//关闭消息队列if(msgctl(msgid,IPC_RMID,NULL)<0){perror("msgctl");return -1;}system("ipcs -q");return 0;
}

 

要求在共享内存中存入字符串“1234567”。

A进程循环打印字符串,B进程循环倒置字符串,要求结果不允许出现乱序:

提示:共享内存+信号灯集

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

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

相关文章

neo4j-Py2neo使用

neo4j-Py2neo(一)&#xff1a;基本库介绍使用 py2neo的文档地址&#xff1a;https://neo4j-contrib.github.io/py2neo/ py2neo的本质是可以采用两种方式进行操作&#xff0c;一种是利用cypher语句&#xff0c;一种是使用库提供的DataTypes&#xff0c;Data类的实例需要和远程…

pycharm运行正常,但命令行执行提示module不存在的多种解决方式

问题描述 在执行某个测试模块时出现提示&#xff0c;显示自定义模块data不存在&#xff0c;但是在PyCharm下运行正常。错误信息如下&#xff1a; Traceback (most recent call last):File "/run/channelnterface-autocase/testcases/test_chanel_detail.py", line 2…

JavaSE学习笔记 Day20

JavaSE学习笔记 Day20 个人整理非商业用途&#xff0c;欢迎探讨与指正&#xff01;&#xff01; 上一篇 文章目录 JavaSE学习笔记 Day20十七、数据结构与算法17.1算法17.1.1冒泡排序17.1.2选择排序17.1.3插入排序17.1.4三个排序的区别 17.2顺序表17.2.1顺序表代码实现17.2.2顺…

蜘点云原生之 KubeSphere 落地实践过程

作者&#xff1a;池晓东&#xff0c;蜘点商业网络服务有限公司技术总监&#xff0c;从事软件开发设计 10 多年&#xff0c;喜欢研究各类新技术&#xff0c;分享技术。 来源&#xff1a;本文由 11 月 25 日广州站 meetup 中讲师池晓东整理&#xff0c;整理于该活动中池老师所分享…

npm login报错:Public registration is not allowed

npm login报错:Public registration is not allowed 1.出现场景2.解决 1.出现场景 npm login登录时,出现 2.解决 将自己的npm镜像源改为npm的https://registry.npmjs.org/这个&#xff0c;解决&#xff01;

Android Studio 显示前进后退按钮

在写代码的过程中我们经常需要快速定位到先前或者往后的代码位置&#xff0c;可以使用Alt左右箭头 但是新安装的Android Studio工具栏上是没有显示左右箭头的工具按钮的&#xff0c;需要我们设置将Toolbar显示出来 View-Appearance-Toolbar 勾选即可 显示后

Qt窗体常用属性设置

01 显示屏尺寸&#xff1a; QDesktopWidget 获取系统屏幕大小 QDesktopWidget* pDesktopWidget QApplication::desktop();//获取可用桌面大小 QRect deskRect QApplication::desktop()->availableGeometry(); //获取主屏幕分辨率 QRect screenRect QApplication::deskt…

关于反射机制的简单理解

1、反射的简单认识 1.1 定义 Java的反射&#xff08;reflection&#xff09;机制是在运行状态中&#xff0c;对于任意一个类&#xff0c;都能够知道这个类的所有属性和方法&#xff1b;对于任意一个对象&#xff0c;都能够调用它的任意方法和属性&#xff0c;既然能拿到,那么我…

el-form与el-upload结合上传带附件的表单数据(后端篇)

1.写在之前 本文采用Spring Boot MinIO MySQLMybatis Plus技术栈&#xff0c;参考ruoyi-vue-pro项目。 前端实现请看本篇文章el-form与el-upload结合上传带附件的表单数据&#xff08;前端篇&#xff09;-CSDN博客。 2.需求描述 在OA办公系统中&#xff0c;流程表单申请人…

【图的应用一:最小生成树】- 用 C 语言实现普里姆算法和克鲁斯卡尔算法

目录 一、最小生成树 二、普里姆算法的构造过程 三、普里姆算法的实现 四、克鲁斯卡尔算法的构造过程 五、克鲁斯卡尔算法的实现 一、最小生成树 假设要在 n 个城市之间建立通信联络网&#xff0c;则连通 n 个城市只需要 n - 1 条线路。这时&#xff0c;自然会考虑这样…

Android的组件、布局学习

介绍 公司组织架构调整&#xff0c;项目组需要承接其他项目组的android项目&#xff0c;负责维护和开发新需求&#xff0c;故学习下基础语法和项目开发。 组件学习 Toolbarheader布局部分 就是app最顶部的部分 他的显示与否&#xff0c;是与F:\androidProject\android_lear…

功能点估算的常规流程

功能点估算流程在软件项目管理中起着重要的作用&#xff0c;它可以帮助项目团队更好地理解项目的需求和目标&#xff0c;从而提高项目的成功率和效率。如果功能点估算未按流程进行&#xff0c;可能会导致项目估算不准确&#xff0c;估算时间超出预期等问题。 因此功能点估算的常…

Linux: sysctl: network: ip_no_pmtu_disc,容易搞混的参数名称

这个参数的迷惑性在于双重否定,字面意思是关闭PMTU发现的功能。如果设置为1,代表关闭;如果是0,代表不关闭pmtu发现的功能。所以说明里,有disable/enable,就容易搞混。所以要甄别网上的某些博客的说明,不要被误导。 ip_no_pmtu_disc - INTEGER Disable Path MTU Discover…

设计测试用例(万能思路 + 六种设计用例方法)(详细 + 图解 + 实例)

一、设计测试用例的万能思路 针对某个物品/功能进行测试。 万能思路&#xff1a;功能测设 界面测试 性能测试 兼容性测试 易用性测试 安全测试。 总结&#xff1a; 功能测试&#xff1a; 水杯&#xff1a;装水、喝水... 注册场景&#xff1a;注册 登录 想象日常使用…

西南科技大学数字电子技术实验五(用计数器设计简单秒表)FPGA部分

一、实验目的 1.进一步理解用中规模集成计数器构成任意进制计数器的原理。 2.了解计数器的简单应用。 3.进一步学习与非门和译码显示器的使用方法。 4.学会用FPGA实现本实验内容。 二、实验原理 简单秒表 可暂停、复位秒表 三、程序清单(每条语句必须包括注释或在开发…

[Linux] LVS+Keepalived高可用集群部署

一、Keepalived实现原理 1.1 高可用方案 Keepalived 是一个基于VRRP协议来实现的LVS服务高可用方案&#xff0c;可以解决静态路由出现的单点故障问题。 在一个LVS服务集群中通常有主服务器&#xff08;MASTER&#xff09;和备份服务器&#xff08;BACKUP&#xff09;两种角色…

Jenkins+Docker+Gitee搭建自动化部署平台

目录 服务器准备 Docker安装 yum 包更新到最新 设置yum源 安装docker 启动和开机启动 验证安装是否成功 Jenkins安装 拉取镜像 创建映射目录 运行镜像 运行出错 修正权限 重新运行镜像 新建安全组&#xff0c;放通8080端口 激活Jenkins Jenkins插件 Jenkins全…

【论文解读】Comparing VVC, HEVC and AV1 using Objective and Subjective Assessments

时间&#xff1a;2020 级别&#xff1a;IEEE 机构&#xff1a; IEEE 组织 摘要&#xff1a; 对3种最新的视频编码标准HEVC (High Efficiency video Coding)测试模型HM (High Efficiency video Coding)、amedia video 1 (AV1)和Versatile video Coding测试模型 (VTM)进行了客观和…

UE5 水材质注意要点

1、两个法线反向交替流动&#xff0c;可以去观感假的现象 2、水面延边的透明度低 3、增加水面延边的浪花 4、增加折射 折射要整体质量至少在High才有效果 改为半透明材质没有法线信息&#xff1f; 5、处理反射效果 勾选为true 找到这个放在水域 勾为false&#xff0c;即可有非…

欺骗技术:网络反情报的艺术

网络攻击变得越来越普遍和复杂。例如&#xff0c;2022 年&#xff0c;数据泄露的平均成本高达 445 万美元&#xff0c;显示了这些威胁的严重影响。 这清楚地表明对先进安全方法的需求与日俱增。迅速流行的技术之一是欺骗技术。 与直接阻止或识别威胁的标准安全方法不同&…