首页
外语
计算机
考研
公务员
职业资格
财经
工程
司法
医学
专升本
自考
实用职业技能
登录
自考
编写利用消息机构实现输入进程和输出进程同步的C程序。输入进程从标准输入读入一个字符串,并将该字符串发给输出进程;输出进程向标准输出中输出字符串。通信双方通过关键字为MSGKEY的消息队列进行通信,两个程序使用相同的一组头文件,假设头文件的说明已放在文件ms
编写利用消息机构实现输入进程和输出进程同步的C程序。输入进程从标准输入读入一个字符串,并将该字符串发给输出进程;输出进程向标准输出中输出字符串。通信双方通过关键字为MSGKEY的消息队列进行通信,两个程序使用相同的一组头文件,假设头文件的说明已放在文件ms
admin
2016-05-12
27
问题
编写利用消息机构实现输入进程和输出进程同步的C程序。输入进程从标准输入读入一个字符串,并将该字符串发给输出进程;输出进程向标准输出中输出字符串。通信双方通过关键字为MSGKEY的消息队列进行通信,两个程序使用相同的一组头文件,假设头文件的说明已放在文件msgcom.h中。
选项
答案
程序清单24-7:msg.C /*msgcom.h*/ #include<errno.h> #include<sys/types.h> #include<sys/ipc.h> #include<sys/msg.h> #define MSGKEY 12345678 struct msgtype{ long mtype; charstr[256]; }; /*输入进程*/ #include"msgcom.h" #include<stdio.h> #include<string.h> main() { struct msgtype buf; int qid,pid; void bzero(); if((qid=msgget(MSGKEY,IPC_CREAT|0666))==-1) return(-1); buf.mtype=getpid(); while(1){ bzero(buf.str,sizeof(buf.str)); printf("Input data:"); Scanf("%S",buf.str); msgsnd(qid,&buf,strlen(buf.str)+1,0); } } /*输出进程*/ #include"msgcom.h" #include<stdio.h> main() { void bzero(); struct msgtype buf; int qid; if((qid=msgget(MSGKEY,IPC_CREAT|0666))==-1) return(-1); while(1){ msgrcv(qid,&buf,512,0,MSG_NOERROR);//接收消息队列最早的消息 printf("Receive a string from process%d:%S\n",buf.mtype,buf.str); bzero(buf.str,sizeof(buf.str)); } } 由于消息队列本身就具有缓冲和队列的同步机制,故发送进程只需不断发数据,接收进程只管不断收数据就可以了。这比用信号量实现计算进程和打印进程的同步要简单。
解析
转载请注明原文地址:https://kaotiyun.com/show/DSNx777K
本试题收录于:
操作系统题库理工类分类
0
操作系统
理工类
相关试题推荐
旋转变压器是一种输出电压随【】变化的角位移测量装置。
表示逻辑函数“异或"功能的是【】
某项目投资方案净现金流量如下表所示,当基准收益率为10%时,用内部收益率指标判断项目是否可行。
建设程序
下列程序属于招标准备阶段的是()
根据任务属性的不同,入侵检测系统的功能结构分为哪几部分,作用分别是什么?
下列有关时间与资源优化的叙述中,不正确的是()
设有n个进程共用一个相同的程序段(临界区),若每次只允许一个进程进入临界区,则信号量的变化范围是()
对于___________光纤,因为只有一种模式在光纤中传输,所以不存在模式色散。
对于栈和队列,无论它们采用顺序存储结构还是链式存储结构,进行插入和删除操作的时间复杂度都是____。
随机试题
下列选项中,属于低钾血症早期表现的是()
肾小球滤过膜
属于骨折急救内容的是
男性,40岁,喘息发作5小时入院,为鉴别是否为上气道梗阻最为简便的方法是()
功能行气调中止痛,善理脾胃大肠之气滞的药物是
Thebillofladingisacontractofcarriage.()
企业经营决策的前提是()。
论述20世纪民族乐派与19世纪民族乐派的不同之处。
认识的客体是指()。
Whatdoesthewomanmean?
最新回复
(
0
)