mq_open中的错误:无效的参数

时间:2016-09-19 02:53:43

标签: linux message-queue

任何人都可以帮我指出代码中的错误在哪里?
提前谢谢。

这是我的代码。我在下面的代码中删除了头文件。当我运行这些代码时,我总是收到

  

:mq_open:无效参数

#define FILE_MODE S_IRUSR|S_IWUSR|S_IRGRP|S_IROTH
struct mq_attr attr;
int main (int argc,char **argv)
{
    int c;
    int flags;
    mqd_t mqd;

    flags = O_RDWR|O_CREAT;

    while ( (c = getopt (argc,argv,"em:z:")) != -1) {
        switch (c) {
            case 'e':
                flags |= O_EXCL;
                continue;

            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 maxseg -z msgsize] <name>\n");
        exit (1);
    }

    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\n");
        exit (1);
    }

    if (attr.mq_msgsize == 0 && attr.mq_maxmsg == 0)
    {
        attr.mq_msgsize = 10;
        attr.mq_maxmsg = 10;
    }


    mqd = mq_open (argv[optind],flags,FILE_MODE,&attr);
    if (mqd == -1) {
       perror ("mq_open");
       exit (1);
   }

   mq_close (mqd);

   return 0;
}

我搜索stackoverflow这个问题,但没有人帮助我 谢谢。

1 个答案:

答案 0 :(得分:1)

./foobar不是mq名称的有效值。 mq_overview man page

  

每个消息队列都由表单名称/ somename标识;那   是一个以NAME_MAX(即255)个字符结尾的以空字符结尾的字符串   由一个初始斜杠组成,后跟一个或多个字符,   没有一个是斜杠。

因此,请运行名称为/foobar而非./foobar的程序。