进程间通信之消息队列篇

来源:互联网 发布:手机360清理软件 编辑:程序博客网 时间:2024/05/16 17:03

如同其他ipc机制一样,消息队列提供量一种从一个进程向另外一个进程发送一个数据块的方法。每个数据快都被认为含有一个类型,接收进程可以独立地接收含有不同类型直的数据块。我们可以通过发送消息来几乎完全避免命名管道的同步和阻塞问题。但不能解决譬如管道满时阻塞问题。接口函数和其他ipc机制类似。

int msgget(key_t key,int msgflg)来创建和访问一个消息队列。

int msgsnd(int msgid,const void *msg_ptr,size_t msg_sz,int msgflg)函数允许我们把一个消息添加到消息队列中,msgid是由msgget返回的消息队列标识符;msg_ptr是一个指向准备发送消息的指针;msg_sz是msg_ptr指向的消息的长度;msgflg控制当当前消息队列满或队列消息到达系统范围的限制时将要发生的事情。如果msgflg中设置了IPC_NOWAIT标志,函数将立刻返回,不发送消息并且返回值为-1.

int msgrcv(int msgid,void *msg_ptr,size_t msg_sz,long int msgtype,int msgflg)函数从一个消息队列中获取消息。参数同msgsnd类似。

int msgctl(int msgid,int cmd,struct msqid_ds *buf)函数同共享内存的控制函数非常类似。第二个参数cmd是将要采取的动作。他可以取三个直,如下面:

通过上面的说明,下面看看一个具体的例程: