消息队列

优缺点

  1. 消息队列只适用于单台主机的进程间通信,如果是不同主机,需要用socket等其他方式,也就不属于IPC的范畴了。
  2. 消息队列可以实现异步通信,这似乎是优点,但说是它缺点也是可以的:通讯往往不是实时的。
  3. 消息队列有大小限制,通常只用于小数据量的发送。系统对用户的大小限制可以通过 ulimit -q 命令进行查询。
  4. 消息队列可以实现阻塞调用和非阻塞调用。
  5. 实现简单,且可移植性好。 

 

演示




 

以上程序,实现了发数据到消息队列和从消息队列收取数据的功能。

第一个参数需要是一个整形数值,表示消息队列的Key;

第二个参数是一个长整形的数值,表示消息的Type,Key+Type 可以唯一确定一个先进先出的消息队列。

第三个参数如果是‘s’则把第四个参数发到指定消息队列,如果是‘r’则从指定消息队列收取消息,并打印。

另外,如果第二个函数是‘c’,则把Key对应的队列删除。

$ gcc -o ipc_msg ipc_msg.c $ ipcs -q


Message Queues --------

key msqid owner perms used-bytes messages

  1. 一开始队列里没有消息。

$ ./ipc_msg 1 2 s abc Send Success. $ ipcs -q


Message Queues --------

key msqid owner perms used-bytes messages 0x00000001 262144 lily 666 3 1

  1. 发送了一个消息以后,队列里有消息了,key是1,有3个字节。

$ ./ipc_msg 1 2 r Recv Success.(3 bytes): abc

  1. 从消息队列成功收到消息了。

$ ipcs -q


Message Queues --------

key msqid owner perms used-bytes messages 0x00000001 262144 lily 666 0 0

  1. 收完以后,空的消息队列仍然存在,不会自动消失。

$ ./ipc_msg 1 c

  1. 删除队列

$ ipcs -q


Message Queues --------

key msqid owner perms used-bytes messages

  1. 成功删除了,回到原始状态。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值