I am LAZY bones?
AN ancient AND boring SITE

linux进程间通信──消息队列

linux自古以来就是一个多任务多用户的操作系统,所以linux的进程间通信(Inter-Process Communication──IPC)就显得非常重要了。
IPC是一种标准的Unix通讯机制,目前有以下几种通讯方式:管道(Pipe)、信号量(Semaphore)、互斥体(Mutex)、共享内存(Shared Memory)和消息队列(Message Queue),当然也有其他的方式,比如文件系统和dbus等。
今天我就来介绍一种简单实用的进程间通信方式:消息队列(Message Queue)。
首先说说消息队列的优缺点:
1.消息队列只适用于单台主机的进程间通信,如果是不同主机,需要用socket等其他方式,也就不属于IPC的范畴了。
2.消息队列可以实现异步通信,这似乎是优点,但说是它缺点也是可以的:通讯往往不是实时的。
3.消息队列有大小限制,通常只用于小数据量的发送。系统对用户的大小限制可以通过 ulimit -q 命令进行查询。
4.消息队列可以实现阻塞调用和非阻塞调用。
5.实现简单,且可移植性好。

下面通过一个实例来进行说明,以下文件保存成 ipc_msg.c:

以上程序,实现了发数据到消息队列和从消息队列收取数据的功能。
第一个参数需要是一个整形数值,表示消息队列的Key;
第二个参数是一个长整形的数值,表示消息的Type,Key+Type 可以唯一确定一个先进先出的消息队列。
第三个参数如果是‘s’则把第四个参数发到指定消息队列,如果是‘r’则从指定消息队列收取消息,并打印。
另外,如果第二个参数是‘c’,则把Key对应的队列删除。
让我们来运行一下试试:

本文以GNU自由文档许可证发表.

最后修改时间: 2009年06月09日 23:18

本文章发表于: 2009年06月09日 16:11 | 所属分类:编程相关. | 您可以在此订阅本文章的所有评论. | 您也可以发表评论, 或从您的网站trackback.

2 个评论 关于: “linux进程间通信──消息队列”

  1. 吼吼 在 2009年06月10日 10:24 说:回复

    嗯消息队列可以用来解决经典的读者写者问题。

  2. bones7456 : 给python增加IPC模块 在 2009年06月12日 10:35 说:回复

    […] 吼吼 在 linux进程间通信──消息队列 上的评论frankyue 在 趣站: lmgtfy 上的评论bones7456 在 XP也很牛 上的评论xiooli […]

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注