任何人都可以帮我指出代码中的错误在哪里?
提前谢谢。
这是我的代码。我在下面的代码中删除了头文件。当我运行这些代码时,我总是收到
: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这个问题,但没有人帮助我 谢谢。
答案 0 :(得分:1)
./foobar
不是mq名称的有效值。 mq_overview man page:
每个消息队列都由表单名称/ somename标识;那 是一个以NAME_MAX(即255)个字符结尾的以空字符结尾的字符串 由一个初始斜杠组成,后跟一个或多个字符, 没有一个是斜杠。
因此,请运行名称为/foobar
而非./foobar
的程序。