reader.c
来自「进一步研究和实践操作系统中关于并发进程同步与互斥操作的一些经典问题的解法」· C语言 代码 · 共 41 行
C
41 行
#include "ipc.h"int main(int argc,char *argv[]){ int i; int rate; Msg_buf msg_arg; //可在在命令行第一参数指定一个进程睡眠秒数,以调解进程执行速度 if(argv[1] != NULL) rate = atoi(argv[1]); else rate = 3; //附加一个要读内容的共享内存 buff_key = 101; buff_num = STRSIZ+1; shm_flg = IPC_CREAT | 0644; buff_ptr = (char *)set_shm(buff_key,buff_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); //循环请求读 msg_arg.mid = getpid(); while(1){ //发读请求消息 msg_arg.mtype = READERQUEST; msgsnd(quest_id,&msg_arg,sizeof(msg_arg),0); printf("%d reader quest\n",msg_arg.mid); //等待允许读消息 msgrcv(respond_id,&msg_arg,sizeof(msg_arg),msg_arg.mid,0); printf("%d reading: %s\n",msg_arg.mid,buff_ptr); sleep(rate); //发读完成消息 msg_arg.mtype = FINISHED; msgsnd(quest_id,&msg_arg,sizeof(msg_arg),quest_flg); } return EXIT_SUCCESS;}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?