嵌入式Linux高级编程-04-3posix进程间通信

嵌入式Linux高级编程-04-3posix进程间通信

ID:46379785

大小:1.18 MB

页数:17页

时间:2019-11-23

嵌入式Linux高级编程-04-3posix进程间通信_第1页
嵌入式Linux高级编程-04-3posix进程间通信_第2页
嵌入式Linux高级编程-04-3posix进程间通信_第3页
嵌入式Linux高级编程-04-3posix进程间通信_第4页
嵌入式Linux高级编程-04-3posix进程间通信_第5页
资源描述:

《嵌入式Linux高级编程-04-3posix进程间通信》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、嵌入式Linux高级编程linux进程间通信消息队列unix早期通信机制之一的信号能够传送的信息量有限,管道则只能传送无格式的字节流,这无疑会给应用程序开发带来不便。消息队列(也叫做报文队列)则克服了这些缺点。消息队列就是一个消息的链表。可以把消息看作一个记录,具有特定的格式。进程可以向中按照一定的规则添加新消息;另一些进程则可以从消息队列中读走消息。分类目前主要有两种类型的消息队列:POSIX消息队列以及系统V消息队列,系统V消息队列目前被大量使用。系统V消息队列是随内核持续的,只有在内核重起或者人工删除时,该消息队列才会被删除。键值消息队列的内核持续性要

2、求每个消息队列都在系统范围内对应唯一的键值,所以,要获得一个消息队列的描述字,必须提供该消息队列的键值。键值#include#includekey_tftok(char*pathname,charproj)功能:返回文件名对应的键值。pathname:文件名(已经创建)proj:项目名(不为0即可)打开/创建#include#include#includeintmsgget(key_tkey,intmsgflg)函数描述:建立消息队列key:

3、键值,由ftok获得。msgflg:标志位。返回值:与健值key相对应的消息队列描述字。msgflg表示权限以及消息队列的一些特性,有以下取值:IPC_CREATIPC_EXCL0666等等打开/创建IPC_CREAT创建新的消息队列IPC_EXCL与IPC_CREAT一同使用,表示如果要创建的消息队列已经存在,则返回错误。IPC_NOWAIT读写消息队列要求无法得到满足时,不阻塞。创建在以下两种情况下,将创建一个新的消息队列:如果没有与健值key相对应的消息队列,并且msgflg中包含了IPC_CREAT标志位。key参数为IPC_PRIVATE。创建in

4、topen_queue(key_tkeyval){intqid;if((qid=msgget(keyval,IPC_CREAT))==-1){return(-1);}return(qid);}发送消息#include#include#includeintmsgsnd(intmsqid,structmsgbuf*msgp,intmsgsz,intmsgflg)功能:向消息队列中发送一条消息。msqid:已打开的消息队列idmsgp:存放消息的结构msgsz:消息数据长度msgflg:发送标志

5、,有意义的msgflg标志为IPC_NOWAIT,指明在消息队列没有足够空间容纳要发送的消息时,msgsnd是否等待。消息格式structmsgbuf{longmtype;/*消息类型>0*/charmtext[1];/*消息数据的首地址*/};接收消息#include#include#includeintmsgrcv(intmsqid,structmsgbuf*msgp,intmsgsz,longmsgtyp,intmsgflg)功能:从msqid代表的消息队列中读取一个msgtyp类型

6、的消息,并把消息存储在msgp指向的msgbuf结构中。在成功地读取了一条消息以后,队列中的这条消息将被删除。msgctl(intmsqid,intcmd,struct*);CMD:IPC_SETIPC_STARIPC_RMID(移除消息对列)接收消息intread_message(intqid,longtype,structmsgbuf*qbuf){intresult,length;length=sizeof(structmsgbuf)-sizeof(long);if((result=msgrcv(qid,qbuf,length,type,0))==-1)

7、return(-1);return(result);}实例#include#include#include#include#includeintmain(){//生成keykey_tkey=ftok(“/tmp/3",1000);//创建消息队列intmsgid=msgget(key,IPC_CREAT

8、IPC_EXCL

9、0600);if(msgid<0)perror("error"),exit(-1);//发送消息char*msg="Helloworld!

10、";if(msgsnd(msgid,msg,strl

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

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

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