IPC--消息队列 message queue(消息队列的创建,信息的发送和接收)
2011-11-13 22:12
531 查看
注意 :在消息得发送和接受时,可能会重置errno的值,如果发送和接受函数返回-1,要检查errno来确定具体的出错信息消息的发送
#include <stdio.h>#include <sys/msg.h>#include <string.h>#include <errno.h>#include <stdlib.h>#include <unistd.h>#define KEY 0x1234/** step 1 : 自定义msgbuf结构(存放消息的类型和数据本身),类比与msg.h中的struct msgbuf* 要求 message type 必须是long类型 ,* 数据可以自定义为任何类型,并且对数据变量的数量没有要求*/struct mymsg {long mtype;char data[1024];};int main(int argc, char **argv) {int msqid;//step 2 : 初始化msg变量 存放消息信息struct mymsg msg;//step 3 : 打开(创建)消息队列对象 ,KEY是消息队列的关键字(16进制数),//成功返回消息队列ID,失败返回-1if ((msqid = msgget(KEY, 0666 | IPC_CREAT)) < 0) {fprintf(stderr, "get message queue %X failed\n", KEY);exit(1);}while (strncmp(msg.data, "exit", 4)) {memset(&msg, 0, sizeof(msg));//从标准输入获得消息数据msg.mtype = getpid();fgets(msg.data, sizeof(msg.data), stdin);/** 发送消息msg到消息队列msqid,消息长度是消息数据长度* 成功返回0;失败返回 -1 ;errno被置为相应的值*/while (msgsnd(msqid, &msg, strlen(msg.data), 0) < 0) {//step 4 :发送判断if (errno == EINTR) {continue;} else {fprintf(stderr, "send message error!");exit(1);}}}return消息的接收
#include <stdio.h>#include <sys/msg.h>#include <unistd.h>#include <errno.h>#include <string.h>#include <stdlib.h>//接受消息队列信息//自定义消息结构,与发送的消息结构相对应struct mymsg {long mtype;char data[1024];};int main(int argc, char **argv) {struct mymsg msg;int msqid;int result;/** 打开(创建)KEY为0x1234的消息队列,成功返回消息队列得ID,失败返回-1*/if ((msqid = msgget(0x1234, 0666 | IPC_CREAT)) < 0) {fprintf(stderr, "open message queue %X error", 0x1234);exit(1);}while (strncmp(msg.data, "exit", 4)) {//清空msg内存,进行初始化memset(&msg, 0, sizeof(msg));while ((result = msgrcv(msqid, &msg, sizeof(msg), 0, 0)) < 0) {if (errno == EINTR) {continue;} else {perror("msgrcv");exit(1);}}fprintf(stderr, "Message from msqid=%d , size=%d,type=%ld,data=%s\n",msqid, result, msg.mtype, msg.data);}return 0;}
相关文章推荐
- MSMQ消息通知系统之消息队列创建、发送、接收
- IPC--消息队列 message queue --msgctl 函数(创建 删除 查看 综合运用)
- \t\tMSMQ 消息队列 安装MSMQ 创建发送接收队例消息
- MSMQ 消息队列 安装MSMQ 创建发送接收队例消息
- [Linux管道和IPC]使用msgget创建消息队列
- ipc 消息队列message queue
- 使用JAVA向微软消息队列(MSMQ)发送和接收消息
- IPC研究(6) -- 消息队列(message queue)
- [Linux管道和IPC]消息队列发送客户端
- SpringBoot的RabbitMQ消息队列: 一、消息发送接收第一印象
- IPC通信:Posix消息队列的创建,关闭,删除
- C#操作MSMQ向本地消息队列发送和接收消息
- [Linux管道和IPC]消息队列接收服务器端
- 消息队列发送数据和接收数据
- stm32基于Ucos消息队列的空闲中断信息读取储存和发送
- 消息的创建发送和接收
- 0905使用msgsnd函数向消息队列中发送一个字符串数据信息“Hello!This is a te
- IPC--消息队列 message queue --msgctl函数(get 指定msqid的消息队列)
- java调用rabbitmq消息队列发送和接收消息实例
- PHP发送队列消息接收队列消息