linux 下消息队列发送后没有信息
2014-05-12 19:18
288 查看
在使用消息队列时,调用
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/msg.h>
struct mymsg
{
long mytype;
char even[32];
};
#define VALUE (key_t)0x1fff
int main()
{
struct mymsg msg;
int msgid,res;
msgid = msgget (VALUE, 0666 | IPC_CREAT);
res =msgsnd(msgid, &msg, sizeof(msg), 0);
}
执行上面的程序后,没有报错。
使用ipcs -q查看消息队列,里面的message是0。
找了半天,原来是自己在使用msgsnd()函数的时候,结构体中的mytype没有赋值。导致了进入不了消息队列。
在msgget()函数上面加上这句:
msg.mytype = 1;
编译运行可以看到消息队列中有消息了。
还有一个使用msgsnd()函数需要注意的问题,就是如果你 memset (&msg, 0, sizeof(msg));后,mytype=0
这个是不对的,mytype=0的情况只能是msgrcv()时设置,意思是接收所有消息。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/msg.h>
struct mymsg
{
long mytype;
char even[32];
};
#define VALUE (key_t)0x1fff
int main()
{
struct mymsg msg;
int msgid,res;
msgid = msgget (VALUE, 0666 | IPC_CREAT);
res =msgsnd(msgid, &msg, sizeof(msg), 0);
}
执行上面的程序后,没有报错。
使用ipcs -q查看消息队列,里面的message是0。
找了半天,原来是自己在使用msgsnd()函数的时候,结构体中的mytype没有赋值。导致了进入不了消息队列。
在msgget()函数上面加上这句:
msg.mytype = 1;
编译运行可以看到消息队列中有消息了。
还有一个使用msgsnd()函数需要注意的问题,就是如果你 memset (&msg, 0, sizeof(msg));后,mytype=0
这个是不对的,mytype=0的情况只能是msgrcv()时设置,意思是接收所有消息。
相关文章推荐
- 0905使用msgsnd函数向消息队列中发送一个字符串数据信息“Hello!This is a te
- Linux消息队列的使用:实现server和client相互发送消息
- IPC--消息队列 message queue(消息队列的创建,信息的发送和接收)
- [Linux管道和IPC]消息队列发送客户端
- 使用netconsole发送linux驱动程序调试信息和kernel panic消息
- stm32基于Ucos消息队列的空闲中断信息读取储存和发送
- PHP 命令行模式实战之cli+mysql 模拟队列批量发送邮件(在Linux环境下PHP 异步执行脚本发送事件通知消息实际案例)
- Linux系统 给用户发送消息 设置登陆提示信息
- C语言 LINUX 环境下 socket UDP 服务器客户端发送信息
- PHP下操作Linux消息队列完成进程间通信的方法
- linux消息队列进程通信
- Linux进程通信IPC--消息队列MessageQueue
- Linux环境进程间通信(三):消息队列
- linux消息队列
- 多队列网卡简介以及Linux通过网卡发送数据包源码解读
- Linux进程间通信-消息队列
- linux 系统之间,网络编程,消息发送与接收
- WebSphere MQ 将消息发送至远程队列
- Linux进程间通信——使用消息队列
- Linux进程IPC浅析[进程间通信SystemV消息队列]