博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
posix消息队列(1)
阅读量:6991 次
发布时间:2019-06-27

本文共 2265 字,大约阅读时间需要 7 分钟。

1.消息队列也可以认为是消息链表,《unix网络编程卷二》中用下图表示了消息队列的可能分布。

2.关于消息队列的函数如下所示:

#include 
//创建,打开或删除IPC的函数mqd_t mq_open(const char *name,int flag,/*mode_t mode,struct mq_attr *attr */);int mq_close(const char *name);int mq_unlink(const char *name);//控制IPC操作的函数int mq_getattr(mqd_t mqdes,struct mq_attr *attr);int mq_setattr(mqd_t mqdes,const struct mq_attr *attr,struct mq_attr *oattr);//ipc操作函数int mq_send(mqd_t mqdes,const char *ptr,size_t len,unsigned int prio);int mq_receive(mqd_t mqdes,char *ptr,size_t len, unsigned int *priop);int mq_notify(mqd_t mqdes,const struct sigevent *notification);

3.例子

环境为ubuntu+eclipse

出现的的问题:

a, undefined reference to `mq_open'

   …………………………………………………………

解决方法:

       可以在工程属性里面加上链接rt库

      具体:如图所示

#include 
#include
#include
#define FILE_MODE (S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH)int main(void) { int flag; mode_t mode=FILE_MODE; mqd_t mq; int prio; struct mq_attr attr; char name[]="/test"; char msg[]="I'm a test"; int receive_size; char *ptr; flag=O_RDWR|O_CREAT; mq=mq_open(name,flag,mode,NULL); //查看消息队列的属性 mq_getattr(mq,&attr); printf("max #msgs=%ld,max #bytes/msg=%ld,#currently on queue=%ld\n",attr.mq_maxmsg, attr.mq_msgsize,attr.mq_curmsgs); //发送消息 printf("发送的消息为:msg=%s\n",msg); mq_send(mq,msg,sizeof(msg)+1,120); //发送消息后,查看消息队列的属性 mq_getattr(mq,&attr); printf("max #msgs=%ld,max #bytes/msg=%ld,#currently on queue=%ld\n",attr.mq_maxmsg, attr.mq_msgsize,attr.mq_curmsgs); //接受消息 ptr=(char *)malloc(sizeof(char)*attr.mq_msgsize); receive_size=mq_receive(mq,ptr,attr.mq_msgsize,&prio); printf("接收的消息为:receive_size =%d,ptr=%s,prio=%d\n",receive_size,ptr,prio); //接收消息后,查看消息队列的属性 mq_getattr(mq,&attr); printf("max #msgs=%ld,max #bytes/msg=%ld,#currently on queue=%ld\n",attr.mq_maxmsg, attr.mq_msgsize,attr.mq_curmsgs); mq_unlink(name); return EXIT_SUCCESS;}

 运行结果为:

max #msgs=10,max #bytes/msg=8192,#currently on queue=0发送的消息为:msg=I'm a testmax #msgs=10,max #bytes/msg=8192,#currently on queue=1接收的消息为:receive_size =12,ptr=I'm a test,prio=120max #msgs=10,max #bytes/msg=8192,#currently on queue=0

 

转载于:https://www.cnblogs.com/sklww/p/3490857.html

你可能感兴趣的文章
如何在微信公众号下载保存图片??
查看>>
Spring读书笔记——bean解析
查看>>
算法练习(5)数字列表中 连续最大的和
查看>>
C# 导出 不保存 直接显示
查看>>
bzoj4445&&dtoj#2348. 小凸想跑步(convex)
查看>>
常见模块设计--权限管理(一)
查看>>
[Docker]容器镜像
查看>>
stl学习之模板
查看>>
元学习 - Learning How to Learn - 第一课:集中与发散思维
查看>>
一种具有细节保留功能的磨皮算法。
查看>>
排序算法7--选择排序--堆排序
查看>>
iOS开发规范&建议
查看>>
[原]如何为SqlServer2008数据库分配用户
查看>>
【leetcode】Basic Calculator III
查看>>
回归到jquery
查看>>
Visual Studio 2008常见问题
查看>>
【洛谷 P4254】 [JSOI2008]Blue Mary开公司(李超线段树)
查看>>
scrapy初体验 - 安装遇到的坑及第一个范例
查看>>
OC内存管理
查看>>
C#中Split用法
查看>>