进程间通信(IPC)3 ------ 消息队列
来源:互联网 发布:excel查找不重复数据 编辑:程序博客网 时间:2024/05/18 21:38
消息队列是一个存放在内核中的消息链表,由消息队列标识符标识。
向消息队列发送消息时,必须组成合理的数据结构。Linux系统定义了一个模板数据结构msgbuf:
#include <linux/msg.h>struct msgbuf{ long mtype; char mtext[1];};
mtype字段代表消息类型。mtext字段指消息内容。
消息队列是随着内核的存在而存在的,每个消息队列在系统范围内对应唯一的键值。要或得一个消息队列的描述符,只需提供该消息队列的键值即可,该键值通常由函数ftok返回。该函数原型:
#include <sys/types.h>#include <sys/ipc.h>key_t ftok(const char *pathname,int proj_id);
ftok函数根据pathname和proj_id这两个参数生成唯一的键值。pathname在系统中一定要存在且进程有权访问,参数proj_id的取值范围是1~255。执行成功会返回一个键值,失败返回-1。
ftok返回的键值可以提供给函数msgget。msgget()根据这个键值创建一个新的消息队列或访问一个已存在的消息队列。msgget函数的原型:
#include <sys/msg.h>int msgget(key_t key, int msgflg);
参数key即为ftok函数的返回值。msgflg是标志参数,一般取值IPC_CREAT,表示创建一个消息队列。
创建消息队列后,就可以对消息队列进行读写了。函数msgsnd用于向消息队列发送(写)数据。
#include <sys/msg.h>int msgsnd(int msgid, struct msgbuf *msgp, size_t msgsz, int msgflg);
上述函数向msgid标识的消息队列发送一个消息msgp。msgsz是消息的大小。msgflg为操作标志位。msgsnd函数成功返回0,失败返回-1。
以下程序演示如何向消息队列发送消息:
#include <stdio.h>#include <stdlib.h>#include <sys/ipc.h>#include <sys/msg.h>#define BUF_SIZE256#define PROJ_ID32#define PATH_NAME"."//当前路径int main(void){/*用户自定义消息缓冲*/struct mymsgbuf {long msgtype;char ctrlstring[BUF_SIZE];} msgbuffer;intqid; /*消息队列标识符*/intmsglen;key_tmsgkey;/*获取键值*/if((msgkey = ftok (PATH_NAME, PROJ_ID)) == -1){perror ("ftok error!\n");exit (1);}/*创建消息队列*/if((qid = msgget (msgkey, IPC_CREAT|0660)) == -1){perror ("msgget error!\n");exit (1);}/*填充消息结构,发送到消息队列*/msgbuffer. msgtype = 3;strcpy (msgbuffer.ctrlstring , "Hello,message queue");msglen = sizeof(msgbuffer) - 4;//要发送的消息大小,不包含消息类型占用的4个字节if(msgsnd (qid, &msgbuffer, msglen, 0) == -1){perror ("msgget error!\n");exit (1);}exit(0);}
运行上述程序,即向消息队列放入了一条消息,可以通过ipcs命令查看,执行结果如下:
阅读全文
0 0
- 进程间通信(IPC)3 ------ 消息队列
- 进程间通信(IPC)3 ------ 消息队列
- 消息队列IPC---------用途:进程间通信
- 4、进程间通信-消息队列IPC
- Linux 进程间通信 (IPC) // 消息队列
- 进程间通信IPC-消息队列
- 进程间通信(IPC)之消息队列
- 进程间通信IPC-消息队列
- 多进程通信(IPC)--消息队列
- 进程间通信(IPC):消息队列(Message Queue)
- linux 进程间通信(IPC)一消息队列
- Linux进程IPC浅析[进程间通信SystemV消息队列]
- Linux C编程--进程间通信(IPC)5--System V IPC 机制1--消息队列
- Linux C编程--进程间通信(IPC)5--System V IPC 机制1--消息队列
- 笔记六:进程间的通信(IPC通信之消息队列)
- Linux 进程间通信(IPC)之一 --- 消息队列
- 进程间通信---IPC对象 之 消息队列
- 进程间通信IPC 主题一 之 消息队列
- 杭电acm1548 A string lift
- nginx location语法使用及一些全局变量
- 《JAVA与模式》之抽象工厂模式
- Spring-MVC框架
- linux下 如何切换到root用户
- 进程间通信(IPC)3 ------ 消息队列
- Linux教程____(1)linux的基本目录结构
- LeetCode 110. Balanced Binary Tree
- 使用Toolbar + DrawerLayout快速实现高大上菜单侧滑
- myeclipse jsp页面中一半彩色一半黑色问题的解决
- 第二周
- 连接器教程---凯利讯半导体
- nexus3创建maven私有仓库(安装windows版)
- [BZOJ4448][Scoi2015]情报传递(树上主席树)