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

【IO】进程间通信(IPC)练习

1>将课堂代码自己敲熟练


2>使用消息队列实现两个程序的相互通信

htr.c

#include <myhead.h>
//2.自定义消息类型结构体
struct msgbuf
{long mtype;char mtext[1024];
};
//宏定义一个消息的正文大小
#define SIZE (sizeof(struct msgbuf)-sizeof(long))
int main(int argc, const char *argv[])
{//3.创建一个key值key_t key=ftok("/",'k');if(key==-1){perror("ftok error");return -1;}//4.用key创建消息队列int msqid=msgget(key,IPC_CREAT);if(msqid==-1){perror("msgget error");return -1;}printf("msqid = %d\n",msqid);struct msgbuf buf;//1.创建父子进程pid_t pid=fork();if(pid>0){while(1){/*printf("发送信息给绿机类型:");scanf("%ld",&buf.mtype);getchar();*/buf.mtype=1;printf("消息正文:");fgets(buf.mtext,SIZE,stdin);buf.mtext[strlen(buf.mtext)-1]=0;//退出判断if(strcmp(buf.mtext,"quit")==0){break;}msgsnd(msqid,&buf,SIZE,0);}}else if(pid==0){while(1){msgrcv(msqid,&buf,SIZE,2,0);printf("接收信息为:%s\n",buf.mtext);}}return 0;
}

hts.c

#include <myhead.h>
//2.自定义消息类型结构体
struct msgbuf
{long mtype;char mtext[1024];
};//宏定义一个消息的正文大小
#define SIZE (sizeof(struct msgbuf)-sizeof(long))
int main(int argc, const char *argv[])
{//3.创建一个key值key_t key=ftok("/",'k');if(key==-1){perror("ftok error");return -1;}//4.用key创建消息队列int msqid=msgget(key,IPC_CREAT);if(msqid==-1){perror("msgget error");return -1;}printf("msqid = %d\n",msqid);struct msgbuf buf;//1.创建父子进程pid_t pid=fork();if(pid>0){while(1){msgrcv(msqid,&buf,SIZE,1,0);printf("接收信息为:%s\n",buf.mtext);}}else if(pid==0){while(1){/*printf("发送信息给红机类型:");scanf("%ld",&buf.mtype);getchar();*/buf.mtype=2;printf("消息正文:");fgets(buf.mtext,SIZE,stdin);buf.mtext[strlen(buf.mtext)-1]=0;//退出判断if(strcmp(buf.mtext,"quit")==0){break;}msgsnd(msqid,&buf,SIZE,0);}}return 0;
}

3> 使用信号实现非阻塞方式回收僵尸进程练习五遍

(重复内容纯手打)

#include <myhead.h>
void handlar(int signum)
{if(signum==SIGCHLD){while(waitpid(-1,NULL,WNOHANG)>0);}
}int main(int argc, const char *argv[])
{if(signal(SIGCHLD,handlar)==SIG_ERR){perror("signal error");return -1;}for(int i=0;i<10;i++){if(fork()==0){exit(EXIT_SUCCESS);}}return 0;
}/*#include <myhead.h>//3.回收
void handlar(int signum)
{if(signum==SIGCHLD)while(waitpid(-1,NULL,WNOHANG)>0);
}int main(int argc, const char *argv[]){//2.消息绑定if(signal(SIGCHLD,handlar)==SIG_ERR){perror("signal error");return -1;}//1.僵尸进程产生for(int i=0;i<10;i++){if(fork()==0){exit(EXIT_SUCCESS);	}}return 0;}
*/
/*
#include <myhead.h>
void handlar(int signum)
{if(signum==SIGCHLD)while(waitpid(-1,NULL,WNOHANG)>0);
}
int main(int argc, const char *argv[])
{if(signal(SIGCHLD,handlar)==SIG_ERR){perror("signal error");return -1;}for(int i=0;i<9;i++)if(fork()==0)exit(EXIT_SUCCESS);return 0;
}
*/
/*
#include <myhead.h>
void handlar(int signum)
{if(signum==SIGCHLD)while(waitpid(-1,NULL,WNOHANG)>0);
}
int main(int argc, const char *argv[])
{if(signal(SIGCHLD,handlar)==SIG_ERR){perror("signal error");return -1;}for(int i=0;i<10;i++)if(fork()==0)exit(EXIT_SUCCESS);return 0;
}
*/
/*
#include <myhead.h>
void handlar(int signum)
{if(signum==SIGCHLD)while(waitpid(-1,NULL,WNOHANG)>0);
}
int main(int argc, const char *argv[])
{if(signal(SIGCHLD,handlar)==SIG_ERR){ perror("signal error"); return -1;}for(int i=0;i<10;i++)if(fork()==0)exit(EXIT_SUCCESS);return 0;
}
*/

4>思维导图

5>牛客网


文章转载自:

http://tuNghrKs.wtcbL.cn
http://dc6Q3hMH.wtcbL.cn
http://PSasIl1x.wtcbL.cn
http://Z8dOcYXS.wtcbL.cn
http://uAFC50Bb.wtcbL.cn
http://JvSC8wPQ.wtcbL.cn
http://CoOPq7gI.wtcbL.cn
http://bU77Zkfe.wtcbL.cn
http://USQF0JWq.wtcbL.cn
http://oK8VB6kI.wtcbL.cn
http://nTDIPceP.wtcbL.cn
http://9gCeXkIu.wtcbL.cn
http://Wcnp5XJK.wtcbL.cn
http://AHkREctN.wtcbL.cn
http://ET3rJSPW.wtcbL.cn
http://A0tRcqQc.wtcbL.cn
http://D8lBMhL0.wtcbL.cn
http://ZgJ01sij.wtcbL.cn
http://OhVcFud0.wtcbL.cn
http://C2Qi35XK.wtcbL.cn
http://4l5h99Ar.wtcbL.cn
http://g8MIxuyW.wtcbL.cn
http://tbCyD7EX.wtcbL.cn
http://ydi9qaSF.wtcbL.cn
http://HaqAYtkv.wtcbL.cn
http://KQGjjPXa.wtcbL.cn
http://RtvLeLjv.wtcbL.cn
http://658g9BIX.wtcbL.cn
http://M0ksTdbk.wtcbL.cn
http://R3AV9iQC.wtcbL.cn
http://www.dtcms.com/a/364454.html

相关文章:

  • CAD/BIM软件产品技术深度分析文章写作计划
  • 7.4Element Plus 分页与表格组件
  • java spring cloud 企业工程管理系统源码+二次开发+定制化服务
  • 深兰科技AI问诊助手走访打浦桥街道社区卫生服务中心
  • Llama.cpp与CUDA Graph:深度学习推理框架的兼容性深度解析
  • Elasticsearch(text和keyword)区别分析
  • 怎么删除word空白页?【图文详解】删除最后一页空白页?5种删除word文档空白页方法?
  • Few-Shot Prompting 实战:用5个例子让GPT-4学会复杂任务
  • 线程与同步
  • 【Unity Shader学习笔记】(四)Shader编程
  • Java设计模式之结构型—适配器模式
  • SQLAlchemy ORM 入门教程
  • Low-Light Image Enhancement via Structure Modeling and Guidance 论文阅读
  • SQLint3 模块如何使用
  • Linux awk命令完全指南:从原理到实战,搞定文本处理难题
  • SQL(window)日志在linux 下查看
  • LangChain实战(十三):Agent Types详解与选择策略
  • 机器学习从入门到精通 - KNN与SVM实战指南:高维空间中的分类奥秘
  • Spring Boot 工程启动时自动执行任务方法
  • 图像正向扭曲反向扭曲
  • 安全测试漫谈:如何利用X-Forwarded-For头进行IP欺骗与防护
  • 停止所有dcoker容器
  • [UT]记录uvm_config_db的错误:get中的第二个参数设置为this
  • 第6章:垃圾回收分析与调优
  • 【NVIDIA B200】1.alltoall_perf 单机性能深度分析:基于 alltoall_perf 测试数据
  • 从卡顿到丝滑:3 个实战场景教你搞定代码性能优化
  • DeepSeek、GPT-5都在卷的“快慢脑”,腾讯中科院给出了更优解:还是多模态的!
  • 什么是科技成果鉴定测试?成果鉴定测试报告带给企业什么好处?
  • c语言链表:从入门到精通
  • 深度学习篇---SGD+Momentum优化器