linux消息队列的使用
2016-07-20 22:25
387 查看
消息队列
*消息队列是内核地址空间中的内部链表,通过内核在各个进程之间传递的内容。消息顺序发送到消息队列中,每个消息队列都有IPC标识符唯一地进行标识。msgbuf结构
struct msgbuf{ long mtype; //消息类型 char mtext[1]; //消息数据 };
msgid_ds结构
struct msqid_ds{ struct ipc_perm msg_perm; time_t msg_stime; //发送到队列的最后一个消息的时间戳 time_t msg_rtime; //从队列中获取的最后一个消息的时间戳 time_t msg_ctime; //对队列进行最后一次变动的时间戳 unsigned long __msg_cbytes; //在队列上所驻留的字节总数 msgqnum_t msg_qnum; //当前处于队列中的消息数目 msglen_t msg_qbytes; //队列中能容纳的字节的最大数目 pid_t msg_lspid //发送最后一个消息进程的PID pid_t msg_lrpid //接收最后一个消息进程的PID };
ipc_perm结构
struct ipc_perm{ key_t key; //函数msget()使用的键值 uid_t uid; //用户的UID gid_t gid; //用户的GID uid_t cuid; //建立者的UID gid_t cgid; //建立者的GID unsigned short mode; //权限 unsigned short seq; //序列号 };
键值构建ftok()函数
#include<sys/types.h> #include<sys/ipc.h> key_t ftok(const char *pathname, int proj_id); //pathname必须是已经存在的目录
获得消息msgget()函数
#include<sys/types.h> #include<sys/ipc.h> #include<sys/msg.h> int msgget(key_t key, int msgflg); /*第一个参数可以用ftok()函数生成 msgflg参数: 1.IPC_CREAT 如果内核中不存在该消息队列,则创建它 2.IPC_EXCL 当和IPC_CREAT一起使用时,如果队列早已存在则将出错 */
发送消息msgsend()函数
#include<sys/types.h> #include<sys/ipc.h> #include<sys/msg.h> int msgsend(int msqid, const void *msgp, size_t msgsz, int msgflg); /* 第一个参数从msgget()获得 第二个参数指向一个消息缓冲区 第三个参数消息的大小,以字节为单位,不包括消息类型的长度(4字节) 第四个参数设置成0表示忽略,设置成IPC_NOWAIT,如果消息队列已经满了,则消息不写进队列中,如果不设置则阻塞直到可以写消息为止 */
接收消息msgrcv()函数
#include<sys/types.h> #include<sys/ipc.h> #include<sys/msg.h> ssize_t msgrcv(int msqid, void *msgp, size_t msgsz, long msgtyp, int msgflg); /* 第一个参数从msgget()获得 第二个参数消息缓冲变量的地址 第三个参数消息的大小,以字节为单位,不包括消息类型的长度(4字节) 第四个参数指定要从队列中获取的消息类型,内核查找队列中匹配类型的第一个到达的消息,如果传0则返回队列最早的消息,不管类型 第五个参数设置成IPC_NOWAIT,如果消息队列没有消息则返回ENOMSG,否则进程将阻塞直到满足条件的消息到达,如果客户等待消息的时候队列被删除则返回EIDRM,如果进程阻塞并等待消息的时候捕获信号则返回EINTR */
相关文章推荐
- linux常用命令
- linux inode
- CentOS6.8 RPM包安装快速zabbix22
- 有关linux内网渗透的一些笔记
- Linux基础(18)LVM以及应用
- linux 设备树及节点引用
- linux中的守护进程
- 在linux下搭载git服务器
- 《linux学习》之日常小点
- linuxC编程实战-第六章
- centos 安装 mysql
- Linux之守护进程
- CentOS 6搭建LNMP环境 yum安装
- linux安装lnmp
- linux系统服务daemon(1)
- Linux 信号量
- linux运维学习决心书
- Tiny6410学习—Linux命令
- linux系统优化
- Linux系统编程--文件(一)