誰かが私のコードのどこにエラーがあるのかを教えてもらえますか?
ありがとうございます。 mq_open:無効な引数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の検索ここで
は私code.Iは、私はいつも
を受け、私はこれらのコードを実行したbelow.Whenコードのヘッダファイルを削除していますこの質問は何も私を助けません。
ありがとうございます。
どのコマンドライン引数がプログラムに渡されたか教えてください。 – kaylum
私はこれらのコードをコンパイルするためにgccを使います:gcc -g mqcreate.c -o mqcreate -lrtそして、-e -m 1024 -z 8192 ./foobarでmqcreateを実行します。これらのコードはunp値2のものです。 –
'。/ foobar'ではなく'/foobar'を試してください。 [mq_overview man page](https://linux.die.net/man/7/mq_overview): "各メッセージキューは*/somename *という形式の名前で識別されます。つまり、NULLで終了する文字列です"NAME_MAX(すなわち、255)までの最初のスラッシュとそれに続く1つ以上の文字で構成され、いずれもスラッシュではありません。" – kaylum