2024.02.23作业
1. 尝试处理普通信号
#include "test.h"#define MAXSIZE 128void handler(int signo)
{if (SIGINT == signo){printf("用户按下了 ctrl + c 键\n");}
}int main(int argc, char const *argv[])
{if (signal(SIGINT, SIG_IGN) == SIG_ERR){perror("signal error");return -1;}if (signal(SIGINT, SIG_DFL) == SIG_ERR){perror("signal error");return -1;}if (signal(SIGINT, handler) == SIG_ERR){perror("signal error");return -1;}while (1){printf("我真的还想再活五百年\n");sleep(1);}return 0;
}
2. 尝试捕获或忽略SIGKILL信号
#include "test.h"#define MAXSIZE 128void handler(int signo)
{if (SIGINT == signo){printf("用户按下了 ctrl + c 键\n");}if (SIGKILL == signo){printf("捕获了 SIGKILL 信号\n");}
}int main(int argc, char const *argv[])
{if (signal(SIGKILL, SIG_IGN) == SIG_ERR){perror("signal error");return -1;}if (signal(SIGKILL, handler) == SIG_ERR){perror("signal error");return -1;}if (signal(SIGKILL, SIG_DFL) == SIG_ERR){perror("signal error");return -1;}while (1){printf("我真的还想再活五百年\n");sleep(1);}return 0;
}
3. 使用SIGCHLD信号回收僵尸进程
#include "test.h"#define MAXSIZE 128void handler(int signo)
{if (SIGCHLD == signo){while (waitpid(-1, NULL, WNOHANG) > 0);}
}int main(int argc, char const *argv[])
{if (signal(SIGCHLD, handler) == SIG_ERR){perror("signal error");return -1;}for (int i = 0; i < 10; i++){if (fork() == 0){sleep(1);exit(EXIT_SUCCESS);}}while (1);return 0;
}
4. 模拟出牌案例
#include "test.h"#define MAXSIZE 128void handler(int signo)
{if (SIGALRM == signo){printf("系统为你随机出了一张牌\n");alarm(5);}
}int main(int argc, char const *argv[])
{if (signal(SIGALRM, handler) == SIG_ERR){perror("signal error");return -1;}alarm(5);char ch = 0;while (1){scanf("%c", &ch);getchar();printf("您出的牌为:%c\n", ch);alarm(5);}return 0;
}
5. 验证发送信号函数
#include "test.h"#define MAXSIZE 128void handler(int signo)
{if (SIGUSR1 == signo){printf("造化弄人呀\n");raise(SIGKILL);}
}int main(int argc, char const *argv[])
{if (signal(SIGUSR1, handler) == SIG_ERR){perror("signal error");return -1;}pid_t pid = fork();if (pid > 0){while (1){printf("我真的还想再活五百年\n");sleep(1);}}else if (pid == 0){sleep(5);printf("我是子进程,我要独立啦!\n");kill(getpid(), SIGUSR1);while (1){printf("富贵险中求\n");sleep(1);}}return 0;
}
6. 消息队列
#include "test.h"struct msgbuf
{long mtype;char mtext[1024];
};#define MSGSIZE sizeof(struct msgbuf) - sizeof(long)int main(int argc, char const *argv[])
{key_t key = 0;if ((key = ftok("/", 'k')) == -1){perror("ftok error");return -1;}printf("ftok success key = %#x\n", key);int msgid = -1;if ((msgid = msgget(key, IPC_CREAT|0664)) == -1){perror("msgget error");return -1;}printf("msgget success msgid = %d\n", msgid);struct msgbuf sbuf;while (1){bzero(sbuf.mtext, sizeof(sbuf.mtext));printf("请输入当前消息的类型:");scanf("%ld", &sbuf.mtype);getchar();printf("请输入消息正文:");fgets(sbuf.mtext, sizeof(sbuf.mtext), stdin);sbuf.mtext[strlen(sbuf.mtext) - 1] = 0;msgsnd(msgid, &sbuf, MSGSIZE, 0);printf("发送成功\n");if (strcmp(sbuf.mtext, "quit") == 0){break;}}return 0;
}
#include "test.h"struct msgbuf
{long mtype;char mtext[1024];
};#define MSGSIZE sizeof(struct msgbuf) - sizeof(long)int main(int argc, char const *argv[])
{key_t key = 0;if ((key = ftok("/", 'k')) == -1){perror("ftok error");return -1;}printf("ftok success key = %#x\n", key);int msgid = -1;if ((msgid = msgget(key, IPC_CREAT|0664)) == -1){perror("msgget error");return -1;}printf("msgget success msgid = %d\n", msgid);struct msgbuf rbuf;while (1){bzero(rbuf.mtext, sizeof(rbuf.mtext));msgrcv(msgid, &rbuf, MSGSIZE, 1, 0);printf("收到的消息为:%s\n", rbuf.mtext);if (strcmp(rbuf.mtext, "quit") == 0){break;}}return 0;
}
7. 使用消息队列完成两个进程间通信
#include "test.h"struct msgbuf
{long mtype;char mtext[1024];
};#define MSGSIZE sizeof(struct msgbuf) - sizeof(long)void send(int msgid, long msgtype)
{struct msgbuf sbuf;while (1){bzero(sbuf.mtext, sizeof(sbuf.mtext));printf("请输入消息正文:");fgets(sbuf.mtext, sizeof(sbuf.mtext), stdin);sbuf.mtext[strlen(sbuf.mtext) - 1] = 0;sbuf.mtype = msgtype;msgsnd(msgid, &sbuf, MSGSIZE, 0);printf("发送成功\n");if (strcmp(sbuf.mtext, "quit") == 0){break;}}
}void receive(int msgid, long msgtype)
{struct msgbuf rbuf;while (1){bzero(rbuf.mtext, sizeof(rbuf.mtext));printf("\r");msgrcv(msgid, &rbuf, MSGSIZE, msgtype, 0);printf("收到的消息为:%s\n", rbuf.mtext);printf("请输入消息正文:");fflush(stdout);if (strcmp(rbuf.mtext, "quit") == 0){break;}}
}int main(int argc, char const *argv[])
{key_t key = 0;if ((key = ftok("/", 'k')) == -1){perror("ftok error");return -1;}printf("ftok success key = %#x\n", key);int msgid = -1;if ((msgid = msgget(key, IPC_CREAT|0664)) == -1){perror("msgget error");return -1;}printf("msgget success msgid = %d\n", msgid);int flag;puts("请选择:");puts("1. 主发子收");puts("2. 主收子发");printf("请输入:");scanf("%d", &flag);getchar();pid_t pid = fork();if (pid > 0){if (flag == 1){send(msgid, 1);}else if (flag == 2){receive(msgid, 1);}}else if (pid == 0){if (flag == 1){receive(msgid, 2);}else if (flag == 2){send(msgid, 2);}}return 0;
}
相关文章:
2024.02.23作业
1. 尝试处理普通信号 #include "test.h"#define MAXSIZE 128void handler(int signo) {if (SIGINT signo){printf("用户按下了 ctrl c 键\n");} }int main(int argc, char const *argv[]) {if (signal(SIGINT, SIG_IGN) SIG_ERR){perror("signal …...
倒模专用制作耳机壳UV树脂:改性丙烯酸树脂
倒模专用制作耳机壳的UV树脂是经过改性的丙烯酸树脂,具有高透明度、高粘度、快速固化的特点。这种树脂可以通过紫外线光固化,快速形成坚硬的表面,并且具有较高的硬度和耐磨性,因此非常适合用于制作耳机壳。 此外,改性丙…...
chatgpt:还有哪些人工智能和科技值得关注?
今天,很多人的目光都被ChatGPT吸引,其实,人工智能的范围很大,远不止ChatGPT或者其他自然语言的处理工具。所以说不管ChatGPT的结果如何,人工智能依然是未来。 那么在ChatGPT之外,还有没有什么值得关注的人…...
LeetCode 2997.使数组异或和等于K的最少操作次数
给你一个下标从 0 开始的整数数组 nums 和一个正整数 k 。 你可以对数组执行以下操作 任意次 : 选择数组里的 任意 一个元素,并将它的 二进制 表示 翻转 一个数位,翻转数位表示将 0 变成 1 或者将 1 变成 0 。 你的目标是让数组里 所有 元素…...
计算机设计大赛 深度学习大数据物流平台 python
文章目录 0 前言1 课题背景2 物流大数据平台的架构与设计3 智能车货匹配推荐算法的实现**1\. 问题陈述****2\. 算法模型**3\. 模型构建总览 **4 司机标签体系的搭建及算法****1\. 冷启动**2\. LSTM多标签模型算法 5 货运价格预测6 总结7 部分核心代码8 最后 0 前言 ǵ…...
WPF 附加属性+控件模板,完成自定义控件。建议观看HandyControl源码
文章目录 相关连接前言需要实现的效果附加属性添加附加属性,以Test修改FontSize为例依赖属性使用触发器使用直接操控 结论 控件模板,在HandyControl的基础上面进行修改参考HandyControl的源码控件模板原型控件模板 控件模板触发器完整样式简单使用 结论 …...
编程笔记 Golang基础 040 defer、panic 和 recover
编程笔记 Golang基础 040 defer、panic 和 recover 一、defer二、panic三、recover小结 在Go语言中,defer、panic 和 recover 是一组用于错误处理和控制程序流程的关键字。它们之间的交互有助于实现异常处理机制,并确保资源的正确释放。 一、defer defe…...
通过redfish协议实现服务器固件升级、从虚拟光驱启动自检盘并等待完成,最后截图保存
通过redfish协议实现服务器固件升级、从虚拟光驱启动自检盘并等待完成,最后截图保存 版本信息代码新开发的PCIE设备在做服务器适配时,有时需要服务器厂家更新BMC或BIOS固件。同时,我们也希望对PCIE设备做一些检测,最后收集一些信息存档。如果需要处理的服务器很多,通过BMC的界面…...
ARM 版银河麒麟桌面系统下 Qt 开发环境搭建指南
目录 前言安装Linux ARM 版 QtCreator配置 Qt Creator配置构建套件 第一个麒麟 Qt 应用程序小结 前言 在上一篇文章信创ARM架构QT应用开发环境搭建中建议大家使用 Ubuntu X86 系统作为信创 ARM 架构 QT 应用的开发环境,里面使用了交叉编译的方式。这对于自己的 Qt …...
架构面试题汇总:缓存(二)
目录 1. 问题:什么是缓存,以及为什么我们需要缓存?2. 问题:你能解释一下缓存击穿、缓存雪崩和缓存预热是什么吗?3. 问题:如何在Java中实现缓存?4. 问题:你如何决定哪些数据应该被缓存…...
【docker入门】1-
文章目录 参考: Docker – 容器虚拟化平台。 参考: docker入门,这一篇就够了。【零基础入门Docker】Dockerfile中的USER指令以及dockerfile命令详解dockerfile copy命令...
微信小程序-全局配置
个人笔记,仅供参考。 1.entryPagePath 代码: "entryPagePath": "pages/index/index" 具体用法: 2.pages 小程序中新增/减少页面,都需要对 pages 数组进行修改。 代码: "pages": [&…...
【Android】性能优化之内存、网络、布局、卡顿、安装包、启动速度优化
欢迎来到 Android 开发老生常谈的性能优化篇,本文将性能优化划分为内存、网络、布局、卡顿、安装包、启动速度七块,从这七块优化出发,阐述优化的 Application 的方式。 目录 内存优化避免内存泄漏使用内存分析工具优化数据结构和算法数据缓存…...
第3.6章:StarRocks数据导入——DataX StarRocksWriter
一、Datax 1.1 DataX 3.0概述 DataX3.0是一个异构数据源离线同步工具,可以方便的对各种异构数据源进行高效的数据同步。 其github地址为: https://github.com/alibaba/DataX/blob/master/introduction.mdhttps://github.com/alibaba/DataX/blob/mast…...
【非递归版】归并排序算法(2)
目录 MergeSortNonR归并排序 非递归&归并排序VS快速排序 整体思想 图解分析 代码实现 时间复杂度 归并排序在硬盘上的应用(外排序) MergeSortNonR归并排序 前面的快速排序的非递归实现,我们借助栈实现。这里我们能否也借助栈去…...
[C++]C++实现本地TCP通讯的示例代码
这篇文章主要为大家详细介绍了C如何利用TCP技术,实现本地ROS1和ROS2的通讯,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下 概要服务端代码 头文件源代码客户端代码 概要 利用TCP技术,实现本地ROS1和ROS2的通讯。 服务端代码 头文件 #include &…...
Sora - 探索AI视频模型的无限可能
文章目录 每日一句正能量前言技术解析应用场景未来展望伦理与创意用户体验与互动后记 每日一句正能量 . 一个人,如果没有经受过投资失败的痛楚,又怎么会看到绝望之后的海阔天空。很多时候,经历了人生中最艰难的事,反而锻造了最坚强…...
【JavaScript 漫游】【022】事件模型
文章简介 本篇文章为【JavaScript 漫游】专栏的第 022 篇文章,对 JavaScript 中事件模型相关的知识点进行了总结。 监听函数 浏览器的事件模型,就是通过监听函数(listener)对事件做出反应。事件发生后,浏览器监听到…...
【加密算法】RSA非对称加密算法简介
目录 前言 工作原理 密钥生成 加密和解密 在Java中使用RSA 生成密钥对 加密和解密数据 加密数据 解密数据 注意事项和最佳实践 结论 前言 RSA(Rivest-Shamir-Adleman)是一种基于数论的非对称加密算法,广泛应用于数字签名、数据加密…...
深入理解 JavaScript 对象原型,解密原型链之谜(上)
🤍 前端开发工程师、技术日更博主、已过CET6 🍨 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 🕠 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 🍚 蓝桥云课签约作者、上架课程《Vue.js 和 E…...
产品经理学习-产品运营《什么是SOP》
目录 什么是SOP 如何执行SOP 执行SOP的重点 什么是SOP SOP就是项目流程操作的说明书 日常工作中的例行操作: 例行操作是指,在每一天,针对每一个用户,在每个项目之中,都必须完成的操作,这些必须完成的操…...
大数据Hadoop生态圈
存储: HDFS(namenode,datanode) 计算:MapReduce(mapreduce,基于磁盘) 便于用sql操作:Hive(核心 metastore,存储这些结构化的数据),同类的还有Impala,hbase等 基于yaml的资源调度 hive &…...
算法简介:查找与算法运行时间
文章目录 1. 二分查找与简单查找1.1 运行时间 2. 旅行商问题 算法是一组完成任务的指令。任何代码片段都可以视为算法。 1. 二分查找与简单查找 二分查找是一种算法,其输入是一个有序的元素列表,如果要查找的元素包含在列表中,二分查找返回…...
零基础C++开发上位机--基于QT5.15的串口助手(三)
本系列教程本着实践的目的,争取每一节课都带大家做一个小项目,让大家多实践多试验,这样才能知道自己学会与否。 接下来我们这节课,主要学习一下QT的串口编程。做一款自己的串口助手,那么这里默认大家都是具备串口通信…...
Facebook的虚拟社交愿景:元宇宙时代的新起点
在当今数字化时代,社交媒体已经成为人们生活中不可或缺的一部分。而随着科技的不断进步和社会的发展,元宇宙已经成为了人们关注的热点话题之一。作为社交媒体的领军企业之一,Facebook也在积极探索虚拟社交的未来,将其视为元宇宙时…...
【深度学习笔记】4_6 模型的GPU计算
注:本文为《动手学深度学习》开源内容,部分标注了个人理解,仅为个人学习记录,无抄袭搬运意图 4.6 GPU计算 到目前为止,我们一直在使用CPU计算。对复杂的神经网络和大规模的数据来说,使用CPU来计算可能不够…...
留学申请过程中如何合理使用AI?大学招生官怎么看?
我们采访过的学生表示,他们在写essay的过程中会使用 ChatGPT,主要用于以下两个方面:第一,生成想法和头脑风暴;第二,拼写和语法检查。 纽约时报的娜塔莎辛格(Natasha Singer)在一篇文…...
vue2与vue3的diff算法有什么区别
在 Vue 中,虚拟 DOM 是一种重要的概念,它通过将真实的 DOM 操作转化为对虚拟 DOM 的操作,从而提高应用的性能。Vue 框架在虚拟 DOM 的更新过程中采用了 Diff 算法,用于比较新旧虚拟节点树,找出需要更新的部分ÿ…...
ES小总结
组合查询 FunctionScoreQueryBuilder functionScoreQuery QueryBuilders.functionScoreQuery(boolQuery,new FunctionScoreQueryBuilder.FilterFunctionBuilder[]{new FunctionScoreQueryBuilder.FilterFunctionBuilder(QueryBuilders.termQuery("isAD",true),Score…...
vue2与vue3中父子组件传参的区别
本次主要针对vue中父子组件传参所进行讲解 一、vue2和vue3父传子区别 1.vue2的父传子 1).在父组件子标签中自定义一个属性 <sonPage :子组件接收到的类名"传输的数据">子组件</sonPage> 2).在子组件中peops属性中拿到自定属性 props: {子组件接收的…...
泉州seo-泉州网站建设公司/卡点视频软件下载
根据OLAP委员会的定义,OLAP是“使分析人员、管理人员或执行人员能够从多种角度对从原始数据中转化出来的、能够真正为用户所理解的并真实反映企业维特性的信息进行快速、一致、交互地存取,从而获得对数据的更深入了解的一类软件技术。”其特点如下&#…...
十堰市住房和城乡建设厅官方网站/德阳seo优化
本文主要针对无线电中的频率、电磁波波长计算公式、电磁波传输方式等基础知识进行整理。 无线电的那些事儿(扫盲)频率划分电磁波波长计算公式天线与波长的关系电磁波传输的几种途径天线种类无线电与移动通信频率划分 1、甚低频(VLFÿ…...
免费新闻网站建设/百度推广运营怎么做
180万私域用户,每天贡献直接单量3.5万多杯,通过群内信息提醒促单10万多杯 达到这一目标用时仅3个月,其中60%以上都是活跃用户 用户入群后月消费频次提升30%,周复购人数提升28%,MAU提升10% 目前,私域订单贡献…...
跨境电商平台有哪些?列举5个/什么是seo推广
外观模式(facade): 为子系统中的一组接口提供一个一致的界面,此模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。 其实就是对内部诸多接口进行一个封装,提供一个简单的接口给外部调用。 比如说某个系统中…...
网站建设加盟/爱站工具包的模块
对一个包含n个字母的单词进行全排列: 1,对该单词右边n-1个字母进行全排列 2,轮换所有字母(所有字母左移一位,最左边的字母移动至最右边) 3,以上步骤重复n次(以保证该单词的所有字母都…...
企业网站底部/今天的新闻 最新消息摘抄
maven的配置和安装,可以参考这篇博客:https://blog.csdn.net/u012767369/article/details/70209400 ,很详细 搭建项目开始是使用的自己的项目配置文件 此篇博客是参考上面的博客,稍作修改而来,区别主要是这里多了一个…...