📄 test15_b.c
字号:
#include "test15.h"void fun_init(int *pmsg_id);int main(int argc, char *argv[]){ int pid, msg_id; int sta; struct msgbuf msg; fun_init(&msg_id); /*创建空消息队列*/ while(1) { sta = msgrcv(msg_id, &msg, 2, 0, 0); /*从消息队列取得消息*/ if(sta == -1) { printf("msgrcv faild in main() !!!\n"); exit(0); } switch(msg.mtype) { case 1: pid = fork(); if(!pid) /*若消息类型为1,则创建求和进程*/ execl("/root/test15_c", "test15_c", argv[1], (char *)0); break; case 2: pid = fork(); if(!pid) /*若消息类型为2,则根据不同的消息内容创建不同的并行计算进程*/ execl("/root/test15_d", "test15_d", msg.mtext, (char *)0); break; case 3: exit(0); } }}/*void fun_init(int *pmsg_id)返回值:无参数:pmsg_id int型指针,将消息队列的ID返回给变量*pmsg_id。函数功能:创建消息队列,并将其ID返回。若消息队列中已有消息存在,则将此消息队列销毁,重新创建。*/void fun_init(int *pmsg_id){ int sta; struct msqid_ds msgq; *pmsg_id = msgget(MSG_KEY, IPC_CREAT|0600); /*创建消息队列*/ if(*pmsg_id == -1) { printf("msgget faild in fun_init() !!! \n"); exit(0); } sta = msgctl(*pmsg_id, IPC_STAT, &msgq); /*获取消息队列的状态*/ if(sta == -1) { printf("msgctl faild in fun_init() !!!\n"); exit(0); } if(msgq.msg_qnum != 0) /*若消息队列中消息数不为0,则将消息队列销毁,重新创建*/ { sta = msgctl(*pmsg_id, IPC_RMID, &msgq); /*将消息队列销毁*/ if(sta == -1) { printf("msgctl faild in fun_init() !!!\n"); exit(0); } *pmsg_id = msgget(MSG_KEY, IPC_CREAT|0600); /*重新创建消息队列*/ if(*pmsg_id == -1) { printf("msgget faild in fun_init() !!!\n"); exit(0); } }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -