Linux学习笔记-消息队列概念
目录System V IPC概念System V IPC对象的访问举几个例子IPC对象的权限和所有者结构体消息队列消息队列属性 System V IPC概念Unix系统存在信号、管道和命令管道等基本进程间通讯机制。System V引入了三种高级进程间通信机制:消息队列、共享内存、信号量;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; //最后改变的时间
};
更多推荐
所有评论(0)