📄 customer.c~
字号:
#include "ipc.h"int main(int argc,char *argv[]){ int pid[50]={0}; //存放子进程号 int status[50]={0}; //存放子进程返回状态 int i; int bar; int rate; Msg_buf msg_arg; if(argv[1] != NULL) rate = atoi(argv[1]); else rate = 3; //建立一条请求消息队列,存放理发师的请求与新顾客的请求 quest_flg = IPC_CREAT| 0644; quest_key = 201; quest_id = set_msq(quest_key,quest_flg); //联系一个响应消息队列 respond_flg = IPC_CREAT|0644; respond_key = 202; respond_id = set_msq(respond_key,respond_flg); //建立理发椅子队列 My_flg1 = IPC_CREAT|0644; queen_key1 = 203; queen_id1= set_msq(queen_key1,My_flg1); //建立沙发队列 My_flg2 = IPC_CREAT|0644; queen_key2 = 204; queen_id2= set_msq(queen_key2,My_flg2); //建立大厅队列 My_flg3 = IPC_CREAT|0644; queen_key3 = 205; queen_id3= set_msq(queen_key3,My_flg3); quest_flg = IPC_NOWAIT; //以非阻塞方式接收请求消息 for(i=0;i<50;i++) { if((i+1)%15==0) { sleep(rate); } if((pid[i]=fork())==0) { i=getpid(); msg_arg.mtype = CUSTOMERREQUEST; msg_arg.mid=i; msgsnd(quest_id,&msg_arg,sizeof(msg_arg),0);//请求理发 msgrcv(respond_id,&msg_arg,sizeof(msg_arg),i,0);//等待 if(msg_arg.mid==CHAIR) { printf("%d 号客户坐上理发椅\n",i); msgrcv(queen_id1,&msg_arg,sizeof(msg_arg),i,0); bar=msg_arg.mid; printf("%d 号客户接受%d 号理发师理发\n",i,bar); msgrcv(queen_id1,&msg_arg,sizeof(msg_arg),i,0); msg_arg.mtype = i; msg_arg.mid=12;//付12元钱 msgsnd(queen_id1,&msg_arg,sizeof(msg_arg),0);//付费 printf("%d 号客户付%d 号理发师%d 元钱\n",i,bar,msg_arg.mid); } else if(msg_arg.mid==SOFA) { printf("%d 号客户坐上沙发\n",i); msgrcv(respond_id,&msg_arg,sizeof(msg_arg),i,0);//等待 if(msg_arg.mid==CHAIR) { printf("%d 号客户坐上理发椅\n",i); msgrcv(queen_id1,&msg_arg,sizeof(msg_arg),i,0); bar=msg_arg.mid; printf("%d 号客户接受%d 号理发师理发\n",i,bar); msgrcv(queen_id1,&msg_arg,sizeof(msg_arg),i,0); msg_arg.mtype = i; msg_arg.mid=12;//付12元钱 msgsnd(queen_id1,&msg_arg,sizeof(msg_arg),0);//付费 printf("%d 号客户付%d 号理发师%d 元钱\n",i,bar,msg_arg.mid); } } else if(msg_arg.mid== WAITINGROOM) { printf("%d 号客户走进客厅\n",i); msgrcv(respond_id,&msg_arg,sizeof(msg_arg),i,0);//等待 if(msg_arg.mid==SOFA) { printf("%d 号客户坐上沙发\n",i); msgrcv(respond_id,&msg_arg,sizeof(msg_arg),i,0);//等待 if(msg_arg.mid==CHAIR) { printf("%d 号客户坐上理发椅\n",i); msgrcv(queen_id1,&msg_arg,sizeof(msg_arg),i,0); bar=msg_arg.mid; printf("%d 号客户接受%d 号理发师理发\n",i,bar); msgrcv(queen_id1,&msg_arg,sizeof(msg_arg),i,0); msg_arg.mtype = i; msg_arg.mid=12;//付12元钱 msgsnd(queen_id1,&msg_arg,sizeof(msg_arg),0);//付费 printf("%d 号客户付%d 号理发师%d 元钱\n",i,bar,msg_arg.mid); } } } else printf("%d 号客户没有理发,直接离开\n",i); } } if(pid[0]>0) { for(i=0;i<50;i++) { waitpid(pid[i],&status[i],0); } } return EXIT_SUCCESS;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -