系统编程学习笔记第五章:消息队列

      大家好,我是小智!

1. 进程间通信方式

      进程间通信(Inter process communication,简称IPC)指的是进程之间的信息交换,进程间通信的方式有很多,比如管道通信、信号通信、共享内存、消息队列、信号量组、POSIX信号量等。

      进程间通信可以达到数据传输、共享资源、控制进程等目的,方便用户对进程进行控制和管理。

      当然,Linux系统中这么多种进程间的通信方式并不是一同出现的,而是在不同时期被设计出来,Linux系统属于类Unix系统,所以Linux系统继承了很多Unix系统的设计,比如Unix系统的System-V版本中就引入了三种进程间通信方式,分别是消息队列、共享内存、信号量组。这三种通信方式也被称为System-V IPC对象。

2. 消息队列概念

      Linux系统中消息队列(Message Queue)是进程间通信的一种方式,这种通信机制的好处是可以传输指定类型(用户可以自行定义)的数据,相同类型的数据根据到达顺序在队列中进行排队。

      当然,不同类型的数据不能处于同一个队列中,也就是说系统中可能存在多个消息队列,每个消息队列中的数据类型都是不同的,所以用户打算读取消息队列中的数据时也需要指定数据类型,才可以从存储该类型数据的消息队列中读取有效数据。

思考:既然Linux系统中可能存在多条消息队列,那操作系统是如何管理的以及进程如何选择某个消息队列来发送消息?
回答:Linux系统每个创建的消息队列都具有一个唯一的键值key,进程可以通过指定消息队列的键值来向消息队列发送数据。Linux系统中提供了一个shell命令:ipcs -a来查看系统中所有的IPC对象的信息,具体介绍如下图。

image

3. 创建消息队列

思考:既然当前的Linux系统中不存在消息队列,那用户如何创建一个消息队列供进程访问?
回答:Linux系统提供了一个名称叫做msgget()的函数接口,用户利用该接口可以创建或者打开一个消息队列,同样Linux系统中提供了一个shell命令:ipcmk 可以用于创建IPC对象。

3.1 ipcmk命令

image

posted @ 2025-06-24 19:39  努力赚钱的小智  阅读(47)  评论(0)    收藏  举报