进程间通信之消息队列

本文介绍了进程间通信中的消息队列机制,详细阐述了消息队列的定义、特点,以及相关操作函数如msgget、msgsnd、msgrcv和msgctl的使用。同时,文章提供了一个C/S模式下利用消息队列进行通信的简单实例。
摘要由CSDN通过智能技术生成

    对于进程我们知道一个进程拥有独立的用户地址空间,在一个进程中的全局变量在另一个进程中是看不到的,那仫进程间是如何通信的呢?在进程与进程间的通信必须要经过内核,在内核中开辟一块缓冲区,其中的一个进程把数据从用户空间拷贝到内核缓冲区,另一个进程则从该内核缓冲区中把数据读走,内核提供的这种机制叫进程间通信(IPC)。在这篇文章中主要提到的是进程间通信的第一种方式-消息队列

  1.什仫是消息队列?

  答:顾名思义,消息队列就是消息的链表,位于内核中。消息队列中每个数据块都被认为是有一个类型,接收者进程接收的数据块可以有不同的类型值。消息队列是基于消息的,管道是基于字节流的,且消息队列的读取不一定是先入先出。。。

  值得注意的是:还存在一种进程间通信的机制就是匿名管道和命名管道,管道的生命周期是随进程的,只要该进程消亡了该管道就会随之消失。但是消息队列却是随内核的,即使该进程消亡了该内核中的消息队列是不会主动消失的,除非使用ipcrm -q + msg_id删除该消息队列,也可以使用ipcs -q查看系统中的消息队列。。。

  2.IPC对象数据结构

    内核为每个IPC对象维护一个数据结构ipc_perm,一般在linux中的该/usr/include/linux/ipc.h下,当然也可以通过查找命名查找啦!!!

    

struct ipc_perm {
key_t __key; /* Key supplied to xxxget(2) */
uid_t uid; /* Effective UID of owner */
gid_t gid; /* Effective GID of owner */
uid_t cuid; /* Effective UID of creator */
gid_t cgid; /* Effective GID of creator */
unsigned short mode; /* Permissions */
unsigned short __seq; /* Sequence number */
};

     在systemV版本中的消息队列,共享内存和信号都存在ipc_perm这个结构,比如在/usr/include/linux/msg.h路径下查看消息队列的数据结构。。。

     

    通过观察我们可以发现该数据结构msqid_ds中的第一个对象就是ipc_perm类型的。。。

  3.关于消息队列的操作函数

   1).创建新的消息队列或者是获得已经存在的消息队列。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值