Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1064077
  • 博文数量: 284
  • 博客积分: 8223
  • 博客等级: 中将
  • 技术积分: 3188
  • 用 户 组: 普通用户
  • 注册时间: 2008-12-01 13:26
文章分类

全部博文(284)

文章存档

2012年(18)

2011年(33)

2010年(83)

2009年(147)

2008年(3)

分类: C/C++

2009-07-01 11:45:54

   今天进行了消息队列的学习,总结出一个posix消息队列的程序:
#include
#include
#include
#include
#include
#include
#include
void main(int argc, char **argv[])
{
   mqd_t fd;
   char msg[100]="i am cai";
   struct mq_attr att;
   unsigned int i;
   bzero(&att, sizeof(att));
   att.mq_msgsize = 20;
   att.mq_maxmsg = 20;
   att.mq_flags = O_NONBLOCK;
  
   fd = mq_open("/tmp.1", O_CREAT|O_RDWR, S_IWUSR|S_IRUSR, &att);
  
   bzero(&att, sizeof(att));
   mq_getattr(fd, &att);
   printf("msgsize=%lu, maxmsg=%lu, flags=%lu, curmsg=%lu\n", att.mq_msgsize, att.mq_maxmsg, att.mq_flags, att.mq_curmsgs);
   mq_send(fd, msg, strlen(msg), 1);
   bzero(&att, sizeof(att));
   mq_getattr(fd, &att);
   printf("msgsize=%lu, maxmsg=%lu, flags=%lu, curmsg=%lu\n", att.mq_msgsize, att.mq_maxmsg, att.mq_flags, att.mq_curmsgs);
   bzero(msg, 100);
   mq_receive(fd, msg, 100, &i);
   printf("now pri:%d\n", i);
   bzero(&att, sizeof(att));
   mq_getattr(fd, &att);
   printf("recv:%s\n", msg);
   printf("msgsize=%lu, maxmsg=%lu, flags=%lu, curmsg=%lu\n", att.mq_msgsize, att.mq_maxmsg, att.mq_flags, att.mq_curmsgs);
   mq_close(fd);
   mq_unlink("/tmp.1");
}
编译:cc -o msg msg.c -lrt
编程注意:
  一开始编写的程序里面没有注意mq_open的第一个参数,结果mq_open执行总是返回-1,errno=22,后来在网上查了好些资料才知道,原来这个参数只能使用/开头,并且其中只能包含一个/。按照这个方法修改程序,才执行成功。
阅读(1033) | 评论(2) | 转发(0) |
0

上一篇:数据库培训感

下一篇:多线程练习

给主人留下些什么吧!~~

chinaunix网友2009-12-28 14:15:24

:)

chinaunix网友2009-12-27 18:49:43

赞~这个问题我调了快一天,看了你的blog才搞掂的。tx