【发布时间】:2015-06-05 14:43:33
【问题描述】:
我在尝试使用 C 在 POSIX 中创建 message_queue 时收到 errno 22。 据我所知,通过与网络上提供的示例代码进行比较,我已经正确设置了参数。
这是一个sn-p:
int open_flags;
mqd_t mqfd;
int bytes_per_msg;
struct mq_attr attr;
unsigned int* msgbuff;
printf("from 1 to 400, what is N? : ");
scanf("%d", &n);
bytes_per_msg = (n + 1) * (sizeof(unsigned int));
msgbuff = (unsigned int*)malloc(bytes_per_msg);
open_flags = O_CREAT|O_RDWR;
attr.mq_maxmsg = n;
attr.mq_msgsize = bytes_per_msg;
attr.mq_flags = 0;
mqfd = mq_open("/myqueue", open_flags, 0666, &attr);
if(mqfd == -1){
printf("queue creation failed, ERRNO: %d\n",errno);
}
编辑:我很抱歉没有更清楚。 Errno 22 是无效参数。 --错误号的含义见errno.h
【问题讨论】:
-
用
perror()检查errno所指的内容。 -
您可以在 errno.h 上查找 errno 的含义。使用 perror 得出相同的结论:错误 22:无效参数> 我试图找出我的参数无效的内容。我不记得我在哪里找到没有错误的 errno @WilliamPursell
-
@Chris:我们无法在您的机器上查看
errno.h— POSIX 中没有任何内容说“errno 22 应为 EINVAL — 无效参数”。因此,您必须为我们翻译;您可以访问您的机器并且可以这样做。 -
所以 errno.h 可能因机器而异?这也是我没有意识到的。我发现的每个显示 errno.h 内容的网页都是一样的。
-
errno.h在不同的操作系统上可能不同。 SunOS4/Sparc 可能与 Linux/x86-64 和 IIRC 不同,Linux/ARM 和 Linux/x86-64 也不同
标签: c posix message-queue