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));
		//只接受类型1
        msgrcv(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));
		//只接受类型2
        msgrcv(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;
}

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

深入理解计算机系统学习笔记

2.3整数运算 有时候会发现两个正数相加会得出一个负数&#xff0c;而比较表达式x<y和比较表达式x-y<0会产生不同的结果。这些属性是由于计算机运算的有限性造成的。理解计算机运算的细微之处能够帮助程序员编写更可靠的代码。 2 .3. 1 无符号加法 原理&#xff1a; 在正…

【技术分享】使用nginx完成动静分离➕集成SpringSession➕集成sentinel➕集成seata

&#x1f973;&#x1f973;Welcome 的Huihuis Code World ! !&#x1f973;&#x1f973; 接下来看看由辉辉所写的关于技术点的相关分享吧 目录 &#x1f973;&#x1f973;Welcome 的Huihuis Code World ! !&#x1f973;&#x1f973; 一、 使用nginx完成动静分离 1.下载…

c语言经典测试题5

1.题1 t0; while(printf("*")) { t; if (t<3) break; }关于上述代码描述正确的是&#xff1f; A: 其中循环控制表达式与0等价 B: 其中循环控制表达式与0等价 C: 其中循环控制表达式是不合法的 D: 以上说法都不对 我们来分析一下&#xff1a;printf的返回值…

mac 安装hbuilderx

下载 HBuilderX下载地址: 下载地址 选额mac版本点击下载 安装 如图&#xff0c;将HBuilderX拖到Applications&#xff0c;才是正确的安装姿势。 MacOSX&#xff0c;软件必须安装到/Applications目录&#xff0c;如未安装到此目录&#xff0c;可能会出现插件安装失败、项目创建…

使用Django的admin功能管理数据_vscode

之前的文章 项目 hello_django, app名 hello&#xff0c;已有的model LogMessage&#xff1a; https://blog.csdn.net/weixin_44741835/article/details/136202771?spm1001.2014.3001.5502 参考得到电子书&#xff1a;第八章。 https://www.dedao.cn/ebook/reader?idrEQKv6…

深入理解指针2

各位小伙伴们&#xff0c;我们继续来学习指针&#xff0c;指针和结构体以及动态内存管理对后面的数据结构学习有非常大的帮助&#xff0c;所有我们一定要把这些知识点学会。OK,正式进入学习之旅吧 1.数组名的理解 在上⼀个章节我们在使⽤指针访问数组的内容时&#xff0c;有这…

thinkphp+vue+mysql学生宿舍水电费报修管理系统 0s7h5

本文首先实现了学生宿舍管理系统技术的发展随后依照传统的软件开发流程&#xff0c;最先为系统挑选适用的言语和软件开发平台&#xff0c;依据需求分析开展控制模块制做和数据库查询构造设计&#xff0c;随后依据系统整体功能模块的设计&#xff0c;制作系统的功能模块图、E-R图…

BL、万科、中海地产、碧桂园、华润置地、佳兆业、金地商置、龙湖、绿城、融创、时代中国、旭辉、中国建筑校招笔试题

为了帮助应聘者更好地备战地产公司的招聘考试&#xff0c;我将介绍以下13套校招试题资料&#xff0c;涵盖了24 BL、24万科、24中海地产、碧桂园、华润置地、佳兆业、金地商置、龙湖、绿城、融创、时代中国、旭辉和中国建筑等知名房地产企业&#xff0c;为您提供全方位的备考资源…

(Linux学习一):Mac安装vmWare11.5,centOS 7安装步骤教程

一。下载vmware 官网地址&#xff1a;下载地址 由于我的电脑系统是Mac 10.15.6版本系统&#xff0c;我下载的是VMware Fusion 11.5版本&#xff0c;13是最新版本不支持安装需要系统在11以上。 百度网盘下载地址: VMware Fusion 11 VMware Fusion 12 VMware Fusion 13 下载需要…

K—近邻算法实际应用案例

K—近邻算法实际应用案例 1. 案例1&#xff1a;鸢尾花种类预测1.1 数据集获取和属性介绍1.1.1 scikit-learn中的数据集介绍1.1.2 sklearn数据集返回值介绍 1.2 数据可视化介绍&#xff08;查看数据分布&#xff09;1.3 数据集的划分1.4 特征工程1.4.1 归一化1.4.2 标准化 1.5 鸢…

Vue 卸载eslint

卸载依赖 npm uninstall eslint --save 然后 进入package.json中&#xff0c;删除残留信息。 否则在执行卸载后&#xff0c;运行会报错。 之后再起项目。

Vue+SpringBoot打造高校实验室管理系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、研究内容2.1 实验室类型模块2.2 实验室模块2.3 实验管理模块2.4 实验设备模块2.5 实验订单模块 三、系统设计3.1 用例设计3.2 数据库设计 四、系统展示五、样例代码5.1 查询实验室设备5.2 实验放号5.3 实验预定 六、免责说明 一、摘…

【vue3语法】开发使用创建项目等

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、vue3创建vue3v2函数式、v3组合式api响应式方法ref、reactive计算属性conputed监听属性wacthvue3 选项式生命周期父子通信父传子defineProps编译宏 子传父de…

Typora结合PicGo + 使用Github搭建个人免费图床

文章目录 一、国内图床比较二、使用Github搭建图床三、PicGo整合Github图床1、下载并安装PicGo2、设置图床3、整合jsDelivr具体配置介绍 4、测试5、附录 四、Typora整合PicGo实现自动上传 每次写博客时&#xff0c;我都会习惯在Typora写好&#xff0c;然后再复制粘贴到对应的网…

2.23日学习总结

今天刚学的01背包&#xff0c;套模板就可以解决这道题。 #include<iostream> using namespace std; int n,m,f[13000],w[3410],v[3410]; int main() {cin>>n>>m;for(int i1;i<n;i)scanf("%d %d",&w[i],&v[i]);for(int i1;i<n;i)for…

第三节:Vben Admin登录对接后端login接口

系列文章目录 第一节&#xff1a;Vben Admin介绍和初次运行 第二节&#xff1a;Vben Admin 登录逻辑梳理和对接后端准备 文章目录 系列文章目录前言一、Flask项目介绍二、使用步骤1.User模型创建2.迁移模型3. Token创建4. 编写蓝图5. 注册蓝图 三. 测试登录总结 前言 上一节&…

1904_ARM Cortex M系列芯片特性小结

1904_ARM Cortex M系列芯片特性小结 全部学习汇总&#xff1a; g_arm_cores: ARM内核的学习笔记 (gitee.com) ARM Cortex M系列的MCU用过好几款了&#xff0c;也涉及到了不同的内核。不过&#xff0c;关于这些内核的基本的特性还是有些不了解。从ARM的官方网站上找来了一个对比…

皓学IT:WEB05-Servlet

一、Servlet 1.1.概述 Servlet是SUN公司提供的一套规范&#xff0c;名称就叫Servlet规范&#xff0c;它也是JavaEE规范之一。我们可以像学习Java基础一样&#xff0c;通过API来学习Servlet。这里需要注意的是&#xff0c;在我们之前JDK的API中是没有Servlet规范的相关内容&am…

k8s笔记26--快速实现prometheus监控harbor

k8s笔记26--快速实现prometheus监控harbor 简介采集指标&配置grafana面板采集指标配置grafana面板 说明 简介 harbor是当前最流行的开源容器镜像仓库项目&#xff0c;被大量IT团队广泛应用于生产、测试环境的项目中。本文基于Harbor、Prometheus、Grafana介绍快速实现监控…

H5多用途的产品介绍展示单页HTML5静态网页模板

H5多用途的产品介绍展示单页HTML5静态网页模板 源码介绍&#xff1a;一款H5自适应多用途的产品介绍展示单页HTML静态网页模板&#xff0c;可用于团队官网、产品官网。 下载地址&#xff1a; https://www.changyouzuhao.cn/13534.html