主页 > 开源代码  > 

linux进程间通信的posix消息队列应用记录

linux进程间通信的posix消息队列应用记录

一、头文件

需要包含系统头文件

mqueue.h

二、数据结构

struct mq_attr { long mq_flags; long mq_maxmsg; long mq_msgsize; long mq_curmsgs; };

该数据结构配置消息队列参数,具体说明如下:

1、mq_flags

接收数据是否阻塞标志,0:阻塞;1:不阻塞;mq_open()这个接口忽略它,对于这个接口,这个参数可以配置,所以忽略该标志;

2、mq_maxmsg

队列中消息的最大数量;

3、mq_msgsize

单条消息的最大允许大小,以字节为单位

4、mq_curmsgs

当前队列中的的消息数量;mq_open()这个接口忽略它;

三、接口

1、打开消息队列

该功能提供两个接口,具体定义如下:

mqd_t mq_open(const char *name, int oflag); mqd_t mq_open(const char *name, int oflag, mode_t mode, struct mq_attr *attr);

参数定义如下:

name:消息队列的名称,注意,该名称中,只能有一个“/”,并且该队列,在系统中并不能显示;

oflag:可以是O_RDONLY,O_WRONLY,O_RDWR,也可以按位或O_CREATE,O_EXCL,O_NONBLOCK等标志;

mode:如果oflag指定了O_CREATE,需要设置mode,主要是相关的权限;

attr:如果oflag指定了O_CREATE,需要设置以下attr,否则会用系统默认,比如,系统默认mq_maxmsg为3,mq_msgsize为8192;

2、接收数据

该接口具体定义如下:

ssize_t mq_receive(mqd_t mqdes, char *msg_ptr, size_t msg_len, unsigned *msg_prio);

参数定义如下:

mqdes:消息队列描述符;

msg_ptr:接收消息存放的内存,该内存要大于消息队列中,每个消息的最大长度;

msg_len:接受消息的最大长度,该值要大于消息队列中,每个消息的最大长度,否则接收会一直报错;

msg_prio:接收到的消息的优先级,我暂时没有用到,我传输的消息的优先级是一样的;

3、发送数据

该接口具体定义如下:

mqd_t mq_send(mqd_t mqdes, const char *msg_ptr, size_t msg_len, unsigned msg_prio);

参数定义如下:

mqdes:消息队列描述符;

msg_ptr:要发送的消息数据内存;

msg_len:要发送的消息数据的长度;

msg_prio:要发送的消息的优先级;

4、其他接口暂时没用,暂不记录;

四、注意事项

1、消息队列创建以后,该消息队列的参数已经固定,如果修改参数,只能重启系统,重新配置,才能生效;

2、在发送和接收数据的接口中,msg_ptr只是一片内存,不特指char字符串,可以是任意数据格式,可以是结构体、整形、浮点数等,使用该接口时,只要强转一下就可以了,但是要注意,数据长度是按字节的长度;

标签:

linux进程间通信的posix消息队列应用记录由讯客互联开源代码栏目发布,感谢您对讯客互联的认可,以及对我们原创作品以及文章的青睐,非常欢迎各位朋友分享到个人网站或者朋友圈,但转载请说明文章出处“linux进程间通信的posix消息队列应用记录