计算机操作系统 教学课件 作者 刘循 朱敏 文艺 第10章 用 户 接 口.pptVIP

计算机操作系统 教学课件 作者 刘循 朱敏 文艺 第10章 用 户 接 口.ppt

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
10.3.2 UNIX系统中的系统调用(续) ? 消息队列的建立和消息描述符的获取 在UNIX系统中每个消息队列除了用户指定的名字外,为方便用户访问还有一个消息队列描述符。 进程利用系统调用msgget创建消息队列并返回一个指定消息队列的消息描述符。其它进程则用该消息队列描述符访问消息队列。 msgget系统调用格式为 int msgget(key,msgflg); key_t key; int msgflg; 该系统调用返回值是消息描述符,它是搜索消息队列头表表项的索引。其中,key是用户指定的消息队列关键词;msgget是用户设置的标志和访问方式。 10.3.2 UNIX系统中的系统调用(续) ? 消息的发送和接收 进程用msgsnd系统调用发送消息和用msgrcv系统调用接收消息。 系统调用msgsnd的格式为 int msgsnd(msgid,msgp,msgsz,msgflg); int msgid,msgsz,msgflg; struct msgbuf * msgp; 其中,msgid是由msgget返回的消息队列描述符;msgp是指向用户消息缓冲区的指针。在消息缓冲区msgbuf中有消息类型和消息正文 { long mtype; /*消息类型*/ char mtext[ ]; /*消息的正文*/ } msgsz是mtext长度的字节数;msgflg规定无内存空间存储消息时,进程是等待还是立即返回。 10.3.2 UNIX系统中的系统调用(续) 系统调用msgrcv的格式为 int msgrcv(msgid,msgp,msgsz,msgtpy,msgflg); int msgid,msgsz,msgflg; long msgtpy; struct msgbuf * msgp; 其中,msgid、msgp、msgsz、msgflg与msgsnd中的对应参数相同,msgtpy是选读的消息类型。 Msgtpy有三种不同情况处理: msgtpy=0,核心寻找消息队列中的第一个消息并返回给调用者。 msgtpy为正整数,核心返回给定消息类型的第一个消息; msgtpy为负整数,核心在其类型值小于或等于msgtpy绝对值的所有消息中,选出其类型值最低的一个消息返回。 10.3.2 UNIX系统中的系统调用(续) ? 消息队列的操作 用户建立了消息队列后用msgctl系统调用读取消息队列的状态信息同时还可对消息队列的一些信息进行修改。 msgctl系统调用格式为: int msgctl(msgid,cmd,buf); int msgid,cmd; struct msgid_ds *buf; 其中,cmd是规定的命令,有三种类型: ? IPC_STAT,是用于查询消息队列中的消息数目、队列中的最大字节数、最后一个发送消息的进程标志符、发送时间等信息的命令; ? IPC_SET,用于设置和改变消息队列的用户标志符、消息队列的权限等属性的命令; ? IPC_RMID,消除消息队列的标志符命令。 10.3.2 UNIX系统中的系统调用(续) 下面是消息通信的C程序代码: #include sys/types.h #include sys/ipc.h #include sys/msg.h ? #define MYMSGKEY 98 struct msgform /*消息缓冲区内容*/ { long mtype; /*消息类型*/ char mtext [50]; /*消息正文*/ }; ? int main () { struct msgform msg, msg2; int msgid,pid,*pint; 10.3.2 UNIX系统中的系统调用(续) msgid=msgget(MYMSGKEY,IPC_CREAT|0600); /*创建消息队列,得到消息描述符msgid*/ ? pid=getpid(); pint=(int*)msg.mtext; *pint=pid; /*把进程标志符拷贝到消息正文*/ msg.mtype=666; ? pid = fork(); ? if (pid0) { perror(could not create subprocess); exit(2); 10.3.2 UNIX系

您可能关注的文档

文档评论(0)

时间加速器 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档