Unix系统下消息队列使用探讨.pdf

Unix系统下消息队列使用探讨.pdf

ID:54017019

大小:129.19 KB

页数:5页

时间:2020-04-28

Unix系统下消息队列使用探讨.pdf_第1页
Unix系统下消息队列使用探讨.pdf_第2页
Unix系统下消息队列使用探讨.pdf_第3页
Unix系统下消息队列使用探讨.pdf_第4页
Unix系统下消息队列使用探讨.pdf_第5页
资源描述:

《Unix系统下消息队列使用探讨.pdf》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、焦作工学院学报(自然科学版),第21卷,第3期,2002年5月JOurnaIOfJiaOzuOInstituteOfTecinOIOgy(NaturaIScience),VOI.21,NO.3,May2002Unix系统下消息队列使用探讨董国田,王向东(河南省建设银行,河南郑州450001)摘要:在计算机应用系统中,不同程序之间常常要求进行数据交换,尤其是在实时监控或统计系统中,这种数据交换尤为重要.在Unix系统中使用消息队列,就可以很好实现这些功能.消息队列可认为是一个消息链表,有写权限的线程可以在队列中放置消息,有读权限的线程可以从队列在取出消息.这样当有数据发生时,应用

2、程序可以将必要的数据传送给服务程序程序,服务程序可以将这些数据显示出来,也可以对它们进行相应处理,达到监控或统计的目的.关键词:消息队列;ipcs;服务进程;客户进程中图分类号:TP391文献标识码:A文章编号:1007!7332(2002)03!0213!040引言UNIX发展至今已有30余年,成为事实上的国际标准.随着我国计算机事业的蓬勃发展,UNIX系统也愈来愈广泛地得到应用.目前,大多数应用系统都采用了UNIX操作系统,如金融、电信、证券等的核心数据管理采用的都是UNIX系统.由于它是多进程、多用户系统,如何保证进程间、用户间的通信和协调就显得十分重要,消息队列就是其中

3、应用较为广泛的通信方式,本文就以消息队列在unix系统下如何使用进一步探讨.1创建访问消息队列在使用消息队列之前,必须有一个能够唯一被识别的消息队列和数据结构,这个唯一标识符叫消息队列描述符.函数msgget(key-tmsg-key,intmsg-fIag)可以用来访问一个已存在的队列或创建一个新的队列,它的返回值就是所需要的标识符.其中参数msg-key是类型为key-t的键值,它可以是函数ftOk的返回值,也可以是一个常值.参数msg-fIag为八进制的消息队列操作权和控制命令的组合.操作权定义与一般文件的操作权相似:八进制数操作权0400用户可读0200用户可写0040

4、同组可读0020同组可写0004其他可读0002其他可写控制命令为IPC-CREAT或IPC-CREATIIPC-EXCL,操作权命令与控制命令可以按位或.如创建一个key=666且属主与同组可读写的消息队列,可以使用函数调用msgget(0x666,0660IIPC-CREAT),这时如果队列已存在,则只返回描述符,如果不存在则创建队列并返回描述符.可以用系收稿日期:2002!04!07;修回日期:2002!04!15作者简介:董国田(1969!),河南郑州人,高级程序员,从事计算机应用软件开发.214焦作工学院学报(自然科学版)2002年第21卷统命令ipcs!g100看到

5、所建的消息队列:IPCstatusfrom/dev/kmemasofThuMay916:16:382002TIDKEYMODEOWNERGROUPMessageOueues:——————————g1000X00000666r!rtest-1informiX其中消息队列描述符为100,属主为用户test-1,属组为informiX,用户及同组可读写.2发送消息使用msgget打开一个消息队列后,就可以使用void!msg-ptr,size-tmsg-ien,intmsg-fiag)在上面放置一个消息.其中参数msg-id是由msgget返回的标识符,即消息描述符,参数msg-pt

6、r是一个结msgsnd(intmsg-id,const构指针,该结构如下:#defineMSG-MAX256structmsgbuf{iongmsg-type;消息类型charmsg-data[MSG-MAX];消息数据};参数msg-ien为消息数据的长度.参数msg-fiag可以是0,也可以是IPC-NOWAIT,如果使用了IPC-NOWAIT标志则msgsnd使用非阻塞方式即如果没有存放消息的可用空间,则函数立即返回.如果没有使用IPC-NOWAIT,那么线程就进入挂起状态,直到下列情况之一出现:"具备存放新消息的空间;#该消息队列从系统中删除;$调用进程被某个捕获的信号

7、所中断.3接收消息使用函数msgrcv(intmsg-id,void!msg-ptr,size-tmsg-ien,iongmsg-type,intmsg-fiag)可以从某个消息队列中读出一个消息.参数msg-id为消息描述符,参数msg-ptr指定接收消息的存放位置,参数msg-ien指定由msg-ptr指向的缓冲区的大小,这是该函数能返回的最大数据量.参数msg-type指定从给定的消息队列中读取什么样的消息:"0,返回队列中的第一个消息,由于消息队列是FIFO(先进先出)链表,所以返回

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。