gpt4 book ai didi

c - POSIX4消息队列 "mq_open: No such file or directory"

转载 作者:行者123 更新时间:2023-11-30 15:06:06 31 4
gpt4 key购买 nike

我正在尝试使用 POSIX4 消息队列。因此,我使用 mq_open 创建队列,并为我提供给它的所有选项填充一个 struct mq_attr

当我放置 O_CREATE 标志时,他找不到队列。

这是我的代码(无缩进的行是调试代码):

...
/***
* Queues' names
*/
#define GUI_QUEUE "/guiQ"
...
struct mq_attr attrAct; /* Queue parameters */
/***
* Message queue to send action
*/
attrAct.mq_maxmsg=1;
attrAct.mq_msgsize=sizeof(gui_action);
attrAct.mq_flags=0;
attrAct.mq_curmsgs=0;

printf("serveur first sizeof(gui_action) : %lu\tmsgsize : %lu\n", sizeof(gui_action), attrAct.mq_msgsize);
if ((guiQue=mq_open(GUI_QUEUE, O_CREAT | O_NONBLOCK | O_WRONLY
, S_IWUSR | S_IRUSR , &attrAct))!=0) {
perror("mq_open");
exit(EXIT_FAILURE);
}
if (mq_getattr(guiQue, &attrAct)!=0) {
perror("mq_getattr");
}
else {
printf("serveur second sizeof(gui_action) : %lu\tmsgsize : %lu\n", sizeof(gui_action), attrAct.mq_msgsize);
}
struct mq_attr new;
new=attrAct;
new.mq_msgsize=sizeof(gui_action);
printf("serveur third sizeof(gui_action) : %lu\tmsgsize : %lu\n", sizeof(gui_action), new.mq_msgsize);
if (mq_setattr(guiQue, &new, &attrAct)!=0) perror("mq_setattr");
if (mq_getattr(guiQue, &attrAct)!=0) {
perror("mq_getattr");
}
else {
printf("serveur fourth sizeof(gui_action) : %lu\tmsgsize : %lu\n", sizeof(gui_action), attrAct.mq_msgsize);
}
...

这是输出:

serveur first sizeof(gui_action) : 16   msgsize : 16
mq_open: No such file or directory

我做错了什么?

最佳答案

mq_open returns (mqd_t) -1 on failure and a message queue descriptor on success.

您将 mq_open 的成功返回(实际上,它是一个 >= 0 的整数)误认为是失败,并且 perror 正在报告一些先前的系统调用的 错误号

关于c - POSIX4消息队列 "mq_open: No such file or directory",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39430447/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com