Может кто-нибудь помочь мне указать, где ошибки в моем коде?
Спасибо заранее.ошибка в 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;
}
Я ищу StackOverflow для этот вопрос, но никто мне не помогает.
Спасибо.
Пожалуйста, сообщите нам, какие аргументы командной строки были переданы программе. – kaylum
Я использую gcc для компиляции этого кода: gcc -g mqcreate.c -o mqcreate -lrt, и я запускаю mqcreate с -e -m 1024 -z 8192 ./foobar. Этот код не имеет значения 2. –
Попробуйте '/ foobar' вместо'./Foobar'. На странице [mq_overview man] указано (https://linux.die.net/man/7/mq_overview): «Каждая очередь сообщений идентифицируется по имени формы */somename *, то есть строка с завершающим нулевым символом до NAME_MAX (т. е. 255) символов, состоящих из начального косая черта, за которым следуют один или несколько символов, ни одна из которых не является слэшем ». – kaylum