Linux学习笔记-消息队列概念

140 篇文章 11 订阅

目录

System V IPC概念

System V IPC对象的访问

举几个例子

IPC对象的权限和所有者结构体

消息队列

消息队列属性


 

System V IPC概念

Unix系统存在信号、管道和命令管道等基本进程间通讯机制。

System V引入了三种高级进程间通信机制:消息队列、共享内存、信号量;

IPC对象(消息队列、共享内存、信号量)存在于内核中而不是文件系统中,由用户控制释放(用户管理ipc对象的生命周期),不像管道的释放由内核控制。

IPC对象通过其标识符来引用和访问,所有IPC对象在内核空间中有唯一性标识ID,在用户控件中的唯一性标识称为key。

 

System V IPC对象的访问

IPC对象是全局对象:可用ipcs,ipcrm等命令查看或删除。

每个IPC对象都由get函数创建:

msgget,shmget,semget

调用get函数时必须指定关键字key

 

举几个例子

注意:管道是由内核控制,IPC是用户自己控制,所以要手动释放;

举个例子:ipcs和ipcrm命令:

由上可知:

通信有3种,如下:

1. Shared Memory Segments;

2. Semaphore Arrays;

3. Message Queues;

 

如果加-m是指memory,-q是Queues如下:

 

IPC对象的权限和所有者结构体

struct ipc_perm{

    uid_t uid;        //所有者的使用id
    gid_t gid;        //所有者的组
    uid_t cuid;        //创建者的id
    gid_t cgid;        //创建者的组
    mode_t mode;        //访问模块
    ...  
};

 

消息队列

1. 消息队列是内核中的一个链表;

2. 用户进程将数据传输到内核后,内核重写添加一些如用户ID、组ID、读写进程的ID和优先级等相关信息后并打成一个数据包称为消息;

3.运行一个或者多个进程往消息队列中写消息和读取消息,但一个消息只能被一个进程读取,读取完毕后就自动删除;

4.消息队列具有一定的FIFO的特性,消息可以按照顺序发送到队列中,也可以几种不同的方式从队列中读取。没一个消息队列在内核中用一个唯一的IPC消息表示ID表示;

5.消息队列到实现包括创建和打开队列、发送消息、读取消息、控制消息队列四种操作。

 

消息队列属性

struct msqid_ds{

    struct ipc_perm msg_perm;
    msgqnum_t msg_qnum;             //消息队列数量
    msglen_t msg_qbytes;            //队列的最大字节
    pid_t msg_lspid;                //最后发送的pid
    pid_t msg_lrpid;                //最后接收的pid
    time_t msg_stime;               //最后发送的时间
    time_t msg_ctime;               //最后改变的时间
};

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

IT1995

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值