华清作业day53

1.c代码:

#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/msg.h>
#include <string.h>
#include <unistd.h>
#include <sys/wait.h>
struct msgbuf{long int type;char data[128];
};
#define SIZE sizeof(struct msgbuf)-sizeof(long int)
int main(int argc, const char *argv[])
{char buf[128];key_t key = ftok("/", 'g');if(-1 == key){printf("fork error\n");return -1;}int msqid = msgget(key, IPC_CREAT|0664);if(msqid == -1){printf("mssget error\n");return -1;}pid_t pid = fork();if(pid < 0){printf("fork error\n");return -1;}else if(pid == 0)//子进程{struct msgbuf msg = {.type = 2};while(1){bzero(msg.data, sizeof(msg.data));fgets(msg.data, sizeof(msg.data), stdin);msg.data[strlen(msg.data) - 1] = '\0';if(msgsnd(msqid, &msg, SIZE, 0) == -1){printf("msgsnd error\n");return -1;}if(strcmp(msg.data, "quit") == 0){	break;}}exit(EXIT_SUCCESS);}else//父进程{struct msgbuf msg = {.type = 1};while(1){bzero(buf, sizeof(buf));if(msgrcv(msqid, &msg, SIZE, 1, 0) == -1){printf("msgrcv error\n");return -1;}printf("取出的消息为:%s\n", msg.data);if(strcmp(msg.data, "quit") == 0){	break;}}wait(NULL);}if(msgctl(msqid, IPC_RMID, NULL) == -1){printf("msgctl error\n");return -1;}return 0;
}

2.c代码:

#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/msg.h>
#include <string.h>
#include <unistd.h>
#include <sys/wait.h>
struct msgbuf{long int type;char data[128];
};
#define SIZE sizeof(struct msgbuf)-sizeof(long int)
int main(int argc, const char *argv[])
{char buf[128];key_t key = ftok("/", 'g');if(-1 == key){printf("fork error\n");return -1;}int msqid = msgget(key, IPC_CREAT|0664);if(msqid == -1){printf("mssget error\n");return -1;}pid_t pid = fork();if(pid < 0){printf("fork error\n");return -1;}else if(pid == 0)//子进程{struct msgbuf msg = {.type = 1};		while(1){bzero(msg.data, sizeof(msg.data));fgets(msg.data, sizeof(msg.data), stdin);msg.data[strlen(msg.data) - 1] = '\0';if(msgsnd(msqid, &msg, SIZE, 0) == -1){printf("msgsnd error\n");return -1;}if(strcmp(msg.data, "quit") == 0){	break;}}exit(EXIT_SUCCESS);}else//父进程{struct msgbuf msg = {.type = 2};while(1){bzero(buf, sizeof(buf));if(msgrcv(msqid, &msg, SIZE, 2, 0) == -1){printf("msgrcv error\n");return -1;}printf("取出的消息为:%s\n", msg.data);if(strcmp(msg.data, "quit") == 0){break;}}wait(NULL);}if(msgctl(msqid, IPC_RMID, NULL) == -1){printf("msgctl error\n");return -1;}return 0;
}

效果图:

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

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

相关文章

2.5消息队列实现进程之间通信

send.c #include<myhead.h>//定义消息类型 struct msgbuf {long int mtype; //消息类型char mtext[1024]; //消息正文内容 };//宏定义一个消息大小 #define MSGSIZE sizeof(struct msgbuf)-sizeof(long int) int main(int argc, const char *argv[]) {//1、创建key值以…

【数据结构与算法】(10)基础数据结构 之 堆 建堆及堆排序 详细代码示例讲解

目录 2.9 堆建堆习题E01. 堆排序E02. 数组中第K大元素-Leetcode 215E03. 数据流中第K大元素-Leetcode 703E04. 数据流的中位数-Leetcode 295 2.9 堆 以大顶堆为例&#xff0c;相对于之前的优先级队列&#xff0c;增加了堆化等方法 public class MaxHeap {int[] array;int siz…

浅谈交换原理(1)——概述

一、什么是交换 在通信系统中&#xff0c;我们所认知的最简单的通信方式就是点对点通信&#xff0c;但是当有多个终端需要进行相互通信时&#xff0c;点对点通信就具有一定的局限性&#xff0c;如下图所示&#xff1a; 我们如果想要做到全互连方式两两相连&#xff0c;假设终端…

04. 【Linux教程】安装 Linux 操作系统

通过前面的小节学习&#xff0c;我们已经对 Linux 操作系统有了简单的了解&#xff0c;同时也在 Windows 下安装了虚拟机软件 VMware &#xff0c;那么本节课我们就介绍下如何使用虚拟机软件安装 Linux 操作系统。 通过第一小节的学习我们知道 Linux 有很多的发行版本&#xf…

2024年1月30日

2024年1月30日13:00:50 2024年1月30日13:09:32二连击破 2024年1月30日13:18:20三联绝世 2024年1月30日13:32:03继续拿下

Akamai 如何揪出微软 RPC 服务中的漏洞

近日&#xff0c;Akamai研究人员在微软Windows RPC服务中发现了两个重要漏洞&#xff1a;严重程度分值为4.3的CVE-2022-38034&#xff0c;以及分值为8.8的CVE-2022-38045。这些漏洞可以利用设计上的瑕疵&#xff0c;通过缓存机制绕过MS-RPC安全回调。我们已经确认&#xff0c;所…

【Java 数据结构】String进阶

字符串常量池 1. 创建对象的思考2. 字符串常量池(StringTable)3. 再谈String对象创建 1. 创建对象的思考 下面两种创建String对象的方式相同吗&#xff1f; public static void main(String[] args) {String s1 "hello";String s2 "hello";String s3 …

CIFS(Samba)服务的使用

理论部分 概念&#xff1a; 通用互联网文件系统CIFS使用的是公共的或者开放的SMB协议版本。SMB是在会话层和表示层以及小部分应用层上的 协议&#xff0c;使用了NetBIOS的应用程序接口API。该协议在局域网上用于服务器文件访问和打印。它使用客户/服务器模式&#xff0c;客 户…

【实训】自动运维ansible实训(网络管理与维护综合实训)

来自即将退役学长的分享&#xff0c;祝学弟学妹以后发大财&#xff01; 一 实训目的及意义 1.1 实训目的 1、熟悉自动化运维工具&#xff1a;实训旨在让学员熟悉 Ansible 这一自动化运维工具。通过实际操作&#xff0c;学员可以了解 Ansible 的基本概念、工作原理和使用方法…

ACM训练题:Division

题意是给你N&#xff0c;打印出所有相除等于N的五位数&#xff08;包含前导零&#xff09;&#xff0c;可以枚举后五位&#xff0c;计算量是10&#xff01;/5&#xff01;&#xff0c;然后乘N&#xff0c;一起检验10个数是否都出现。 AC代码&#xff1a; #include <iostre…

读论文:DiffBIR: Towards Blind Image Restoration with Generative Diffusion Prior

DiffBIR 发表于2023年的ICCV&#xff0c;是一种基于生成扩散先验的盲图像恢复模型。它通过两个阶段的处理来去除图像的退化&#xff0c;并细化图像的细节。DiffBIR 的优势在于提供高质量的图像恢复结果&#xff0c;并且具有灵活的参数设置&#xff0c;可以在保真度和质量之间进…

智慧树考试怎么搜题找答案?分享9个有手机就能搜题的工具 #学习方法#微信#知识分享

市面上搜题软件不少&#xff0c;大部分都挺好用的&#xff0c;今天小编在这里给大家分享几个好用的搜题工具&#xff0c;都拥有丰富的题库资源&#xff1b;而且搜题功能也都很完善&#xff0c;手机端、网页端均有&#xff0c;有需要的小伙伴赶紧码住&#xff01; 1.七燕搜题 …