进程间通信之消息队列篇

如同其他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是将要采取的动作。他可以取三个直,如下面:

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值