Linux编程练习 --SystemV消息队列
来源:互联网 发布:知乎引用格式 编辑:程序博客网 时间:2024/06/06 09:24
1.system V ipc
起源于system V IPC 系统,但现在大多数UNIX系统都支持该机制, 在SYSTEM V,AT&T中引入的IPC(交互进程控制的)机制的三种新方式(消息队列,信号灯和共享内存)。
2.IPC 标识符 和IPC关键字
IPC对象:单独的消息队列、信号量、共享内存
IPC关键字:获得唯一的标识符,则必须使用一个IPC关键字,可以用ftok函数产生关键字
#include <sys/ipc.h>
key_t ftok(char* pathname,int id);
pathname:路径名 id:整数标识符
返回:成功返回IPC key
ipc_perm结构
3.消息队列
消息队列是系统内核地址空间中的一个内部的链表,消息可以按照顺序发送到队列中,也可以几种不同方式从队列中读取。每一个消息队列用唯一的IPC标识符表示。在应用时,要自己定义数据结构msgbuf消息缓冲区
/*消息缓冲区*/
struct message
{
long msg_type; //消息标识符
char msg_text[BUFSZ]; //消息,这个字段不但可以存储字符,还可以存储其他类型数据
};
4.消息队列基本系统调用
A.创建消息队列的系统调用语法:
#include<sys/msg.h>
int msgget(key_t key,int flags)
key 消息队列的键值,可以为IPC_PRIVATE,也可以用整数指定一个flags 消息队列权限位。
msgget 调用成功,如果key 用新整数指定,且flags 中设置了IPC_CREAT
位,则返回一个新建立的消息队列标识符。如果指定的整数key 已存在则返
回与key 关联的标识符。成功返回-1。
B.追加一条新消息到消息队列的系统调用语法:
#include <sys.msg.h>
int msgsnd(int msqid, struct msgbuf *msgp, size_t msgsz, int msgflg);
msqid 由消息队列的标识符
msgp 消息缓冲区指针。消息缓冲区结构为:
struct msgbuf {
long mtype; /* 消息类型,必须大于0 */
char mtext[1]; /* 消息数据,长度应于msgsz 声明的一致*/
}
msgsz 消息数据的长度
msgflg 为0表示阻塞方式,设置IPC_NOWAIT 表示非阻塞方式
msgsnd 调用成功返回0,不成功返回-1。
C.从到消息队列中读出一条新消息的系统调用语法:
#include <sys.msg.h>
int msgrcv(int msqid, struct msgbuf *msgp, size_t msgsz, long msgtype, int msgflg);
msqid 由消息队列的标识符
msgp 消息缓冲区指针。消息缓冲区结构为:
struct msgbuf {
long mtype; /* 消息类型,必须大于0 */
char mtext[1]; /* 消息数据,长度应于msgsz 声明的一致*/
}
msgsz 消息数据的长度
msgtype 决定从队列中返回哪条消息:
=0 返回消息队列中第一条消息
>0 返回消息队列中等于mtype 类型的第一条消息。
<0 返回mtype<=type 绝对值最小值的第一条消息。
msgflg 为0表示阻塞方式,设置IPC_NOWAIT 表示非阻塞方式
msgrcv 调用成功返回0,不成功返回-1。
下面练习:
- Linux编程练习 --SystemV消息队列
- Linux编程练习 --SystemV共享内存
- Linux编程练习 --SystemV信号灯(信号量)
- 3、SystemV 消息队列
- linux 进程间通信--systemV 消息队列 实例
- Linux systemV 消息队列 IPC及Stack smashing detected解决方案
- Linux进程IPC浅析[进程间通信SystemV消息队列]
- IPC(SystemV) 之 消息队列
- Linux消息队列编程
- Linux 消息队列编程
- SystemV 消息队列设置不能msqid_ds 和 msginfo 同时设置。
- 后台程序使用SystemV消息队列遇到的资源泄漏问题
- 进程间通信笔记(4)—SystemV 消息队列
- Linux消息队列编程实例
- linux 下消息队列编程
- Linux消息队列编程实例
- linux-消息队列编程实例
- Linux消息队列编程实例
- 设计模式之Composite
- 互动投影原理简单介绍
- 找回Windows XP SP3的桌面IE图标
- 记录安装自己Linux系统
- h.264入门日志(1)
- Linux编程练习 --SystemV消息队列
- IP 电话(VoIP)语音质量的定量分析及测量
- 递归算法常见用例
- 职业生涯5个必经阶段
- HTML的基础知识(一)
- SQL SERVER 不能连接的完美解决方案
- 将阿拉伯数字转换成中文传统表示法
- 对硬盘做镜像,按位与按文件有什么区别?
- 最经典的十大误会