mq_open错误:无效的参数
任何人都可以帮助我指出我的代码中的错误在哪里?
预先感谢您。mq_open错误:无效的参数
这里是我的code.I删除头文件中的代码below.When我跑了这些代码,我总是收到
: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;
}
我搜索了计算器这个问题,但没有人帮助我。
谢谢。
./foobar
不是mq名称的有效值。 mq_overview man page:
每个消息队列由form/somename的名称标识; 是一个由NAME_MAX(即255)字符 组成的以NULL结尾的字符串,其中包含一个初始斜杠,后跟一个或多个字符,其中没有一个是斜线。
因此,运行名称为arg /foobar
而不是./foobar
的程序。
但是我在哪里可以找到由mq_open创建的mesage队列文件? –
请阅读手册页:“挂载消息队列文件系统:在Linux上,消息队列在虚拟文件系统中创建.....” – kaylum
好的,再次感谢您。 –
请告诉我们什么命令行参数传递给程序。 – kaylum
我使用gcc来编译这些代码:gcc -g mqcreate.c -o mqcreate -lrt,我运行mqcreate和-e -m 1024 -z 8192 ./foobar。这些代码来自unp值2. –
尝试'/ foobar'而不是'。/ foobar'。 [mq_overview手册页说](https://linux.die.net/man/7/mq_overview):“每个消息队列由*/somename *形式的名称标识,即以空终止的字符串最多包含NAME_MAX(即255个)的字符,其中包含一个初始斜杠,后跟一个或多个字符,其中没有一个是斜杠。“ – kaylum