📄 bar.c
字号:
#include "ipc.h"int main(int argc,char *argv[]){ int guest; int rate; int money; int bar_num; Msg_buf msg_arg; if(argv[1] != NULL) bar_num=atoi(argv[1]); else exit(EXIT_FAILURE); if(argv[2] != NULL) rate = atoi(argv[2]); else rate = 3; //附加一个共享内存 buff_key = 101; buff_num = 100; pput_key = 102; pput_num = 1; shm_flg = IPC_CREAT | 0644; buff_ptr = (int *)set_shm(buff_key,buff_num,shm_flg); //附加一个共享内存指针 pput_ptr = (int *)set_shm(pput_key,pput_num,shm_flg); ///建立一条请求消息队列,存放理发师的请求与新顾客的请求 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); quest_flg = IPC_NOWAIT; //以非阻塞方式接收请求消息 while(1) { if(msgrcv(queen_id1,&msg_arg,sizeof(msg_arg),CUSTOMERREQUEST,quest_flg) >= 0) { guest = msg_arg.mid; msg_arg.mtype = guest; msg_arg.mid=bar_num; msgsnd(queen_id1,&msg_arg,sizeof(msg_arg),0);//回应客户理发请求 printf("%d 号理发师为%d 号顾客服务\n",bar_num,guest); sleep(rate); msg_arg.mtype = guest; msg_arg.mid=REQUESTMONEY; msgsnd(queen_id1,&msg_arg,sizeof(msg_arg),0);//回应客户理发完毕 printf("%d 号理发师为%d 号顾客理发完毕\n",bar_num,guest); msgrcv(queen_id1,&msg_arg,sizeof(msg_arg),guest,0);//请求付费 money=msg_arg.mid; printf("%d 号理发师收到%d 号顾客的付费\n",bar_num,guest); msg_arg.mtype = RECIEVEMONEY; msg_arg.mid= bar_num; msgsnd(quest_id,&msg_arg,sizeof(msg_arg),0);//请求记帐 printf("%d 号理发师请求记帐\n",bar_num); msgrcv(respond_id,&msg_arg,sizeof(msg_arg),bar_num,0); buff_ptr[*pput_ptr]=bar_num;//写入帐簿 *pput_ptr=(*pput_ptr+1)%100; msg_arg.mtype = bar_num; msg_arg.mid= OVER; msgsnd(quest_id,&msg_arg,sizeof(msg_arg),0);//记帐完毕 printf("%d 号理发师记帐完毕\n",bar_num); } else { printf("%d 号理发师无事睡觉\n",bar_num); sleep(rate); } } return EXIT_SUCCESS;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -