⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 test15_b.c

📁 进程间调度
💻 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 + -