进程间通信系列(9)消息队列的创建、打开、控制
来源:互联网 发布:渗透理论 复杂网络 编辑:程序博客网 时间:2024/05/20 01:35
消息队列的特性:
1.消息队列是内核中的链表;
2.用户将数据传送给内核后,内核重新添加一些如用户ID、组ID、读写进程的ID和优先级等相关信息后并打成一个数据包称为消息;
3.允许一个或者多个进程往消息队列中写消息和读消息,但一个消息只能被一个进程读取,读取完毕后就自动删除;
4.消息队列具有一定的FIFO特性,消息可以按照顺序发送到队列中,也可以几种不同的方式从队列中读取。每一个消息队列在内核中用一个唯一的IPC标识ID表示;
5.消息队列的实现包括创建和打开队列、发送消息、读取消息和控制消息队列四种操作。消息队列属性结构体
struct msqid_ds {struct ipc_perm msg_perm; /* Ownership and permissions*/unsigned long __msg_cbytes; /* Current number of bytes in queue (non-standard) */msgqnum_t msg_qnum; /* Current number of messages in queue */msglen_t msg_qbytes; /* Maximum number of bytesallowed in queue */pid_t msg_lspid; /* PID of last msgsnd() */pid_t msg_lrpid; /* PID of last msgrcv() */time_t msg_stime; /* Time of last msgsnd() */time_t msg_rtime; /* Time of last msgrcv() */time_t msg_ctime; /* Time of last change */};
创建和打开消息队列
#include <sys/msg.h>
int msgget(key_t key, int flag);
返回:成功返回内核中消息队列的标识符ID,出错返回-1参数:
key:用户指定的消息队列键值
flag:IPC_CREAT, IPC_EXCL等权限组合若创建消息队列,key可指定键值,也可将之设置为IPC_PRIVATE。若打开进行查询,则key不能为0,必须是一个非零的值,否则查询不到。
消息队列控制
#include <sys/msg.h>
int msgctl(int msgid, int cmd, struct msqid_ds *buf);返回:成功返回0,出错-1
参数:
msgid:消息队列ID
buf:消息队列属性指针cmd:
IPC_STAT 获取消息队列的属性,取此队列的msqid_ds结构,并将其存放在buf指向的结构中;
IPC_SET 设置属性,按由buf指向的结构中的值,设置与此队列相关的结构中的字段;
0 0
- 进程间通信系列(9)消息队列的创建、打开、控制
- Linux环境进程间通信系列(三):消息队列
- Linux环境进程间通信系列(三):消息队列
- Linux进程间通信(简单的消息队列通信)
- 进程间的通信之消息队列
- 进程间的通信-消息队列
- linux进程间的通信: 消息队列
- Linux的进程间通信-消息队列
- Linux的进程间通信-消息队列
- Linux进程间的通信--消息队列
- 进程间的通信之消息队列
- 进程间的通信---消息队列
- 进程间的通信--(四)消息队列
- 进程间通信系列 之 消息队列应用实例
- 进程间通信(消息队列)
- 进程间通信(三):消息队列
- Linux进程间通信(消息队列)
- 进程间通信(2)消息队列
- sql中开窗函数简单说明
- 软键盘自动打开与关闭
- ~取反操作符
- MySQL Illegal mix of collations for operation 'like'
- 驱动开发-1 模块hello world
- 进程间通信系列(9)消息队列的创建、打开、控制
- [Drools]JAVA规则引擎 -- Drools
- linux中shell变量$#,$@,$0,$1,$2的含义解释
- hibernate HQL学习笔记
- docker常用问题
- ubuntu-常用的重要目录、文件
- log4j配置文件
- 设置easyUI的日历选择范围
- Linux命令行与shell脚本(16)--gawk使用