今天进行了消息队列的学习,总结出一个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,后来在网上查了好些资料才知道,原来这个参数只能使用/开头,并且其中只能包含一个/。按照这个方法修改程序,才执行成功。
阅读(1062) | 评论(2) | 转发(0) |