IO 作业 24/2/26

1>思维导图

1> 使用消息队列完成两个进程间相互通信

#include<myhead.h>
//定义一个消息类型
struct msgbuf
{long mtype;         //消息类型char mtext[1024];   //消息正文
};
//定义一个宏,表示消息正文大小
#define MSGSIZE sizeof(struct msgbuf)-sizeof(long)
int main(int argc, const char *argv[])
{//创建子进程pid_t pid=fork();//在父进程实现读功能if(pid>0){//1、创建key值key_t key = 0;if((key=ftok("/", 'k')) == -1){perror("ftok error");return -1;}//2、根据key值创建一个消息队列int msqid = -1;if((msqid = msgget(key, IPC_CREAT|0664)) == -1){perror("msgget error");return -1;}//定义一个消息struct msgbuf rbuf;while(1){//清空容器bzero(rbuf.mtext, sizeof(rbuf.mtext));//只接受类型1msgrcv(msqid, &rbuf, MSGSIZE, 1, 0);printf("收到消息为:%s\n", rbuf.mtext);if(strcmp(rbuf.mtext, "quit")==0){break;}}//删除消息队列if(msgctl(msqid, IPC_RMID, NULL) !=0){perror("msgctl error");return -1;}}//在子进程实现写功能if(pid==0){//1、创建key值key_t key = 0;if((key=ftok("/", 'k')) == -1){perror("ftok error");return -1;}//2、根据key值创建一个消息队列int msqid = -1;if((msqid = msgget(key, IPC_CREAT|0664)) == -1){perror("msgget error");return -1;}//定义一个消息struct msgbuf sbuf;while(1){//清空正文的容器bzero(sbuf.mtext, sizeof(sbuf.mtext));sbuf.mtype=2;printf("请输入消息正文:");fgets(sbuf.mtext, sizeof(sbuf.mtext), stdin);sbuf.mtext[strlen(sbuf.mtext)-1] = 0;//将消息存放入队列中msgsnd(msqid, &sbuf, MSGSIZE, 0);printf("发送成功\n");if(strcmp(sbuf.mtext, "quit")==0){break;}}
}return 0;
}
#include<myhead.h>
//定义一个消息类型
struct msgbuf
{long mtype;         //消息类型char mtext[1024];   //消息正文
};
//定义一个宏,表示消息正文大小
#define MSGSIZE sizeof(struct msgbuf)-sizeof(long)
int main(int argc, const char *argv[])
{//创建子进程pid_t pid=fork();//在父进程实现读功能if(pid>0){//1、创建key值key_t key = 0;if((key=ftok("/", 'k')) == -1){perror("ftok error");return -1;}//2、根据key值创建一个消息队列int msqid = -1;if((msqid = msgget(key, IPC_CREAT|0664)) == -1){perror("msgget error");return -1;}//定义一个消息struct msgbuf rbuf;while(1){//清空容器bzero(rbuf.mtext, sizeof(rbuf.mtext));//只接受类型2msgrcv(msqid, &rbuf, MSGSIZE, 2, 0);printf("收到消息为:%s\n", rbuf.mtext);if(strcmp(rbuf.mtext, "quit")==0){break;}}//删除消息队列if(msgctl(msqid, IPC_RMID, NULL) !=0){perror("msgctl error");return -1;}}//在子进程实现写功能if(pid==0){//1、创建key值key_t key = 0;if((key=ftok("/", 'k')) == -1){perror("ftok error");return -1;}//2、根据key值创建一个消息队列int msqid = -1;if((msqid = msgget(key, IPC_CREAT|0664)) == -1){perror("msgget error");return -1;}//定义一个消息struct msgbuf sbuf;while(1){//清空正文的容器bzero(sbuf.mtext, sizeof(sbuf.mtext));sbuf.mtype=1;printf("请输入消息正文:");fgets(sbuf.mtext, sizeof(sbuf.mtext), stdin);sbuf.mtext[strlen(sbuf.mtext)-1] = 0;//将消息存放入队列中msgsnd(msqid, &sbuf, MSGSIZE, 0);printf("发送成功\n");if(strcmp(sbuf.mtext, "quit")==0){break;}}
}return 0;
}

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

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

相关文章

网络编程中的read、write函数的三种返回值处理及readn和writen函数

read函数返回值为0&#xff0c;表示对端关闭。 write函数返回值为0&#xff0c;表示什么东西都没写。 比如&#xff1a;总共想读4096个字节&#xff0c;每次只发1500个字节&#xff0c;就需要读多次。 readn函数读一行&#xff0c;读到\n

MCU多核异构通信原理

摘要&#xff1a; 本文结合瑞萨RZ/G2L 多核处理器&#xff0c;给大家讲述一下多核异构设计及通信的原理。 随着电子技术的不断发展&#xff0c;以及市场需求的日益增长&#xff0c;嵌入式系统不仅要求执行复杂的控制任务&#xff0c;还需要实时地采集和处理数据。 为了满足这…

好用的伪原创工具有哪些?

伪原创工具哪个好用&#xff1f;在互联网时代&#xff0c;内容创作是一项至关重要的工作。然而&#xff0c;随着信息爆炸式增长&#xff0c;内容创作者们往往面临着时间和灵感的压力。为了解决这一难题&#xff0c;越来越多的人开始寻找伪原创工具&#xff0c;这些工具可以帮助…

数据安全策略

当您在第一线担负着确保公司的信息和系统尽可能免受风险的关键职责时&#xff0c;您的数据安全策略需要复杂且多层次。威胁可能有多种形式&#xff1a;恶意软件、黑客攻击、财务或信息盗窃、破坏、间谍活动&#xff0c;甚至是您信任的员工故意或无意的活动造成的。因此&#xf…

Linux第66步_linux字符设备驱动_挂载和卸载

1、了解linux中的驱动类型: 1)、字符设备驱动 字符设备是limnux驱动中最基本的一类设备驱动&#xff0c;字符设备就是一个一个字节&#xff0c;按照字节流进行读写操作的设备&#xff0c;读写数据是分先后顺序的。如&#xff1a;GPIO输入输出、UART、I2C、SPI、USB、LCD、音频…

获取tensorflow lite模型指定中间层的输出

以mobilenet v2为例子&#xff0c;我已经训练好了模型&#xff0c;有tflite格式和onnx格式两种模型的权重文件&#xff0c;我想获取tflite模型在推理阶段neck部分的输出。 查看onnx模型得到neck最后一层位置 使用netron查看onnx模型结构 从name中能知道Reshape是neck的最后一…

HTTP---------状态码

当服务端返回 HTTP 响应时&#xff0c;会带有一个状态码&#xff0c;用于表示特定的请求结果。比如 HTTP/1.1 200 OK&#xff0c;里面的 HTTP/1.1 表示协议版本&#xff0c;200 则是状态码&#xff0c;OK 则是对状态码的描述。 由协议版本、状态码、描述信息组成的行被称为起始…

Spring ReflectionUtils 反射工具介绍和使用

一、ReflectionUtils 在 Java 中&#xff0c;反射&#xff08;Reflection&#xff09;是一种强大的机制&#xff0c;允许程序在运行时动态地检查类、获取类的信息、调用类的方法、访问或修改类的属性等。Java 的反射机制提供了一组类和接口&#xff0c;位于 java.lang.reflect…

记录一些mac电脑重装mysql和pgsql的坑

为什么要重装,是想在mac电脑 创建data目录…同事误操作,导致电脑重启不了.然后重装系统后,.就连不上数据库了.mysql和pgsql两个都连不上.网上也查了很多资料.实在不行,.就重装了… 重装mysql. 1.官网下载 https://www.mysql.com/downloads/ 滑到最下面 选择 选择对应的芯片版本…

MFC由初值终值步长生成数值序列

matlab的冒号运算符可以生成数值序列; 下面来生成自己的数值序列; vc6新建一个对话框工程; 放几个控件;添加成员变量如下; void CMycolonDlg::OnButton1() {// TODO: Add your control notification handler code hereUpdateData(TRUE);double d1, d2;CString str1, …

前后端分离vue.js+nodejs学生考勤请假系统 _fbo36

此系统设计主要采用的是nodejs语言来进行开发&#xff0c;采用vue框架技术&#xff0c;框架分为三层&#xff0c;分别是控制层Controller&#xff0c;业务处理层Service&#xff0c;持久层dao&#xff0c;能够采用多层次管理开发&#xff0c;对于各个模块设计制作有一定的安全性…

文献阅读:Transformers are Multi-State RNNs

文献阅读&#xff1a;Transformers are Multi-State RNNs 1. 内容简介2. 方法介绍 1. 基础回顾 1. RNN2. Transformer 2. Transformer解构 1. MSRNN2. Transformer 3. TOVA 1. 现有转换策略2. TOVA 3. 实验考察 & 结论 1. 实验设计2. 实验结果 1. LM2. 长文本理解3. 文本生…