当前位置: 首页 > news >正文

IO进程线程;进程,发送信号;进程,消息队列通信;0903

思维导图

父进程,非阻塞,回收子进程

代码

#include<myhead.h>
void handler(int signum)//函数 捕获信号后 ,怎么操作
{if(signum==SIGCHLD)//捕获到 SIGCHLD 回收子进程的资源{while(waitpid(-1,NULL,WNOHANG)>0);//循环 回收子进程的资源//回收任意子进程 非阻塞 }
}
int main()
{if(signal(SIGCHLD,handler)==SIG_ERR)//signal函数 捕获信号//默认 SIGCHLD会被忽略{perror("signal error");//上面的 signal函数会置位错误码 所以可以用perrorreturn -1;}while(1){if(fork()==0){exit(EXIT_SUCCESS);}}return 0;
}

运行情况

两个程序,从消息队列,发送接受数据

代码

msgrcv.c

#include<myhead.h>
//r.out 父进程接收,子进程发送
//自定义 消息结构体
struct msgbuf{long mtype;char mtext[1024];//消息正文大小 可自定义
};
#define SIZE (sizeof(struct msgbuf)-sizeof(long))int main()
{//创建key值 要一样才行key_t key=ftok("/",'x');if(key==-1)//判断 key值创建成功{perror("ftok error");return -1;}//打开 同一个消息列表int Messageid=msgget(key,IPC_CREAT);if(Messageid==-1)//判断 创建消息队列成功{perror("msgget error");return -1;}//定义 发送的数据的 结构体变量struct msgbuf buff;//创建多进程int pid=fork();//父进程 接收消息 类型1if(pid>0){while(1){//默认 接收类型1//接收内容msgrcv(Messageid,&buff,SIZE,1,0);//阻塞形式接收printf("%s\n",buff.mtext);}}//子进程 发送消息 类型2else if(pid==0){while(1){//默认 发送类型2buff.mtype=2;//发送内容fgets(buff.mtext,SIZE,stdin);//fgets 从终端接收 SIZE字节 >保存到buff.mtextbuff.mtext[strlen(buff.mtext)-1]='\0';//把 数据正文的末尾 置'\0'//发送数据msgsnd(Messageid,&buff,SIZE,0);//以阻塞的形式发送,但是这个程序应该不会遇到阻塞的情况,因为另一个程序会把写进消息队列的马上读出来}}return 0;
}

msgsnd.c

#include<myhead.h>
//s.out 父进程发送,子进程接收//自定义 消息结构体
struct msgbuf{long mtype;char mtext[1024];//消息正文大小 可自定义
};
#define SIZE (sizeof(struct msgbuf)-sizeof(long))
int main()
{//创建 key值key_t key=ftok("/",'x');if(key==-1)//判断 key值创建成功{perror("ftok error");return -1;}//创建 消息队列int Messageid=msgget(key,IPC_CREAT|0644);if(Messageid==-1)//判断 创建消息队列成功{perror("msgget error");return -1;}//定义 发送的数据的 结构体变量struct msgbuf buff;//创建 多进程int pid=fork();//父进程 发送消息 类型1if(pid>0){while(1){//默认 发送类型1buff.mtype=1;//发送内容fgets(buff.mtext,SIZE,stdin);//fgets 从终端接收 SIZE字节 保存到buff.mtextbuff.mtext[strlen(buff.mtext)-1]='\0';//把 数据正文的末尾 置'\0'//发送数据msgsnd(Messageid,&buff,SIZE,0);//以阻塞的形式发送,但是这个程序应该不会遇到阻塞的情况,因为另一个程序会把写进消息队列的马上读出来}}//子进程 接收消息 类型2else if(pid==0){while(1){//默认 接收类型2//接收内容msgrcv(Messageid,&buff,SIZE,2,0);//阻塞形式接收printf("%s\n",buff.mtext);}}return 0;
}

运行情况

牛客刷题


文章转载自:

http://TyJfBEAU.hrzhg.cn
http://XXIXFPgT.hrzhg.cn
http://hp2a5DQV.hrzhg.cn
http://2UkcOQRJ.hrzhg.cn
http://NbBwDfrv.hrzhg.cn
http://FQtgSeWU.hrzhg.cn
http://jvJdEjWU.hrzhg.cn
http://eaA95vHT.hrzhg.cn
http://7L4BGJjl.hrzhg.cn
http://j3wJP6g8.hrzhg.cn
http://2x2dY7HL.hrzhg.cn
http://7jwraCUc.hrzhg.cn
http://a5cVwD3J.hrzhg.cn
http://SpLhNdqw.hrzhg.cn
http://kRHXhW41.hrzhg.cn
http://7ke2OF97.hrzhg.cn
http://0G9OaKiy.hrzhg.cn
http://yd0PyhoJ.hrzhg.cn
http://0Q2NhQnB.hrzhg.cn
http://0roXYRpa.hrzhg.cn
http://3jhOhL0y.hrzhg.cn
http://9Y6SsRcF.hrzhg.cn
http://ZkDBjfha.hrzhg.cn
http://TmJCj6gA.hrzhg.cn
http://2JPdef3l.hrzhg.cn
http://iLiVu4bi.hrzhg.cn
http://HJt6xiUy.hrzhg.cn
http://pDXSAN4v.hrzhg.cn
http://pa1uwjfW.hrzhg.cn
http://MbFkx17V.hrzhg.cn
http://www.dtcms.com/a/365388.html

相关文章:

  • 消息传递模型实现
  • 阿里开源首个图像生成基础模型——Qwen-Image本地部署教程,中文渲染能力刷新SOTA
  • AI 生成内容(AIGC)版权归属引争议:创作者、平台、AI 公司,谁该拥有 “作品权”?
  • 弧焊工业机器人保护气节约的关键
  • Windows/Linux下vscode+vcpkg管理C++包链接方法
  • 相关性分析与常用相关系数
  • React学习教程,从入门到精通, React 组件语法知识点(9)
  • 记一次VMware虚拟机(BC-linux)网络配置过程
  • LVGL9.3 vscode 模拟环境搭建
  • 【医疗行业案例】基于 React 的预约系统:DHTMLX 助力高效排班与预约管理
  • kafka Partition(分区)详解
  • 线性代数基础 | 基底 / 矩阵 / 行列式 / 秩 / 线性方程组
  • UniApp 混合开发:Plus API 从基础到7大核心场景实战的完整指南
  • 老年综合实训室建设方案:产教融合新实践助力养老人才供需精准对接
  • pytorch初级
  • 【FPGA】DDS信号发生器
  • leetcode210.课程表II
  • 蓝光三维扫描技术赋能内衣胸垫设计:从精准制造到个性化体验的革新之旅
  • 【OC】属性关键字
  • 3027. 人员站位的方案数 II
  • 前端自动化打包服务器无法安装高版本 Node.js v22 问题解决
  • 高效文本处理:cut、sort、uniq 和 tr 命令详解与实战
  • 巨头撤退,玩家内卷!2025,IoT平台的生死劫与重生路
  • raspberry Pi 4B(树莓派4B)开启VNC服务 主机用VNC连接
  • Radiant Photo 2.1.0.756 +扩展插件 图像AI增强修饰
  • 时间感知认知诊断模型:原理与实施步骤
  • Vite 环境变量与全局变量详解
  • Java 技术支撑 AI 系统落地:从模型部署到安全合规的企业级解决方案(三)
  • 什么是好的系统设计
  • 虚拟机详细图文教程系列14、Linux虚拟机Centos8系统下载安装Python-Pycharm