消息队列


#include<mqueue.h>
#include<stdio.h>
#include<unistd.h>
#include<stdlib.h>
#include<string.h>

#define FILE_MODE ((S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH)

struct mq_attr attr;

int main(int argc, char **argv)
{
	
  int c, flags;
  mqd_t mqd;

  flags = O_RDWR | O_CREAT;
  while((c = getopt(argc, argv, "em:z:")) != -1)
  {
    switch(c
    {
      case 'e':
        flags |= O_CREAT;
        break;
      case 'm':
        attr.mq_maxmsg = atol(optarg);
        break;
      case 'z':
        attr.mq_msgsize = atol(optarg);
        break;
     }
 }

	if(optind != argc - 1)
	{
  		 printf("usage: mqcreate [-e] [-m maxmsg -z msgsize] <name>");
  		exit(EXIT_FAILURE);
   }

  if(attr.mq_maxmsg != 0 && attr.mq_msgsize == 0 ||
    (attr.mq_maxmsg == 0 && attr.mq_msgsize != 0))
 {
    printf("must specify both -m maxmsg and -z msgsize");
    exit(EXIT_FAILURE);
 }

  mqd = mq_open(argv[optind], flags, FILE_MODE, NULL);
  mq_close(mqd); 
  exit(0);
  }

输入:
./mqcreate -e -m 1 -z 1 /demo19090400
输出:./mqgetattr /demo19090400

max #msg = 10, max #bytes/msg = 8192, #currently on queue = 0

注意:

  1. mq_xxx()函数不是标准库函数,所以链接时需指定库,通过在最后加上-lrt选项来指定。
  2. 程序运行之后可能会看不到消息队列,要看到创建的Posix消息队列,需执行以下操作:
  3. /需要在/root/bin/目录下创建创建消息队列
mkdir /dev/mqueue

mount -t mqueue none /dev/mqueue

/消息队列

ls -l /dev/mqueue

查看某个消息队列的属性./mqgetattr

#include<stdlib.h>   
#include<stdlib.h>
#include<unistd.h>
#include<stdio.h>
#include<string.h>
#include<mqueue.h>

int main(int argc, char **argv)
{
	mqd_t mqd;
	struct mq_attr attr;
       
	if(argc != 2)
	{
		printf("usage: mqgetattr <name>\n");
		exit(EXIT_FAILURE);
	}
        
	mqd = mq_open(argv[1], O_RDONLY);
	if(mqd == -1)
	{
		printf("mq_open failed!\n");
		exit(EXIT_FAILURE);
	}
        
	mq_getattr(mqd, &attr);
	printf("max #msg = %ld, max #bytes/msg = %ld, "
		"#currently on queue = %ld\n", attr.mq_maxmsg, attr.mq_msgsize, attr.mq_curmsgs);
	
	int mq_cls = mq_close(mqd);
	if(mq_cls == -2)
	{
		printf("mq_close failed!\n");
		exit(EXIT_FAILURE);
	}
	exit(0);
}


参考:
https://blog.youkuaiyun.com/zx714311728/article/details/53197196#

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值