- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我在尝试使用 mq_open() 调用创建 posix mq 时遇到了权限问题。我确实合并了此处提到的更改 mq_open Permission denied我查看了类似这样的其他相关帖子 https://groups.google.com/forum/#!topic/comp.unix.programmer/hnTZf6aPpbE但这也指向同一件事。
此外,在尝试编译时我遇到了未识别 mq 调用的错误,在线显示通过在 gcc 中添加 -lrt 进行编译,帖子能够编译,提到它是因为我不完全了解基本原理它并没有通过阅读帖子理解它:)
gcc server_mq.c -lrt -o 服务器
错误编号为 13
天哪,mqd 出了点问题! 权限被拒绝
#include <stdio.h>
#include <stdlib.h>
#include <sys/stat.h>
#include <mqueue.h>
#include <errno.h>
#include <string.h>
#include "client_server.h"
#define PATH "/tmp/servermq"
int main(void)
{
mqd_t mqd;
mode_t omask;
omask = umask(0);
int flags = O_RDWR | O_CREAT | O_EXCL;
struct mq_attr attr, *attrp;
attr.mq_maxmsg = 5;
attr.mq_msgsize = 1024;
attrp = &attr;
mqd = mq_open(PATH, flags, S_IRUSR | S_IWUSR | S_IWGRP, attrp);
if (mqd == (mqd_t)-1)
{
printf("error number is %d \n ",errno);
printf(" Oh dear, something went wrong with mqd ! %s\n", strerror(errno));
}
umask(omask);
mq_close(mqd);
mq_unlink(PATH);
return 0;
}
最佳答案
你不能使用 /tmp/servermq
作为你的名字...
引用man mq_overvie:
Message queues are created and opened using mq_open(3); this function
returns a message queue descriptor (mqd_t), which is used to refer to
the open message queue in later calls. Each message queue is identi-
fied by a name of the form /somename; that is, a null-terminated string
of up to NAME_MAX (i.e., 255) characters consisting of an initial
slash, followed by one or more characters, none of which are slashes.
您很快就会发现这部分相关:
Mounting the message queue file system
On Linux, message queues are created in a virtual file system. (Other implementations may also provide such a feature, but the details are likely to differ.) This file system can be mounted (by the superuser) using the following commands:# mkdir /dev/mqueue
# mount -t mqueue none /dev/mqueue
The sticky bit is automatically enabled on the mount directory.
关于c - mq_open errno 13 权限被拒绝,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35093655/
我正在尝试使用 mq_open 打开一个简单的队列,但我不断收到错误消息: "Error while opening ... Bad address: Bad address" 我也不知道为什么。 i
我有一个创建消息队列并向该队列发送消息(使用 mq_send())的程序。然后我尝试打开同一个消息队列来读取来自另一个进程的消息。但是 mq_open() 返回 -1。 open_and_write_
我正在尝试编写一个客户端和服务器,它们将使用 POSIX 消息队列交换数据。我试图通过查看我在互联网上看到的示例和类(class)的文档来做到这一点。但是,我被困住了。当我运行它时,出现“打开的文件太
我在尝试使用 C 在 POSIX 中创建消息队列时收到错误号 22。据我所知,通过与网络上可用的示例代码进行比较,我已经正确设置了参数。 这是一个片段: int open_flags;
我正在用 POSIX 消息队列制作简单的程序。我打开了四个队列,但所有返回的描述符都是零(不是 -1,这表示打开过程中出现错误)。而且当我尝试接收或发送时,我收到错误:错误的文件描述符。哪里会出现错误
我正在尝试为在 man page 中找到的 POSIX 消息队列运行示例程序对于 mq_notify。我以 ./mq '/bla' 运行它,它给我错误 mq_open: Invalid argumen
我试图从一个特权进程创建一个POSIX消息队列(等待以后读取),然后从一个非特权进程打开这个消息队列(发送消息),后面的mq_open()返回:EACCES。 如果创建进程和打开进程都是特权进程或都是
我正在尝试使用 POSIX4 消息队列。因此,我使用 mq_open 创建队列,并为我提供给它的所有选项填充一个 struct mq_attr。 当我放置 O_CREATE 标志时,他找不到队列。 这
谁能帮我指出我代码中的错误在哪里? 提前谢谢你。 这是我的代码。我删除了下面代码中的头文件。当我运行这些代码时,我总是收到 :mq_open:invalid argument #define FILE
问题总结 我正在编写一个程序,旨在 fork 多个进程,每个进程都打开一个唯一的消息队列来接收消息。然而,每次我运行我的程序时,每个 fork 进程在使用 mq_open 初始化各自的队列时都会遇到
我在尝试使用 mq_open() 调用创建 posix mq 时遇到了权限问题。我确实合并了此处提到的更改 mq_open Permission denied我查看了类似这样的其他相关帖子 https
我阅读了有关消息队列操作的信息,例如 msgget()、msgsnd() 和 msgrcv()。但是当我在堆栈溢出上搜索消息队列相关问题时,我才知道还有另一组消息队列操作,例如mq_open()、mq
我使用以下代码创建了一个消息队列。前几次它工作正常。 int main() { mqd_t mqdes; char mq_name[10] = "/mq"; int oflag
所有,以前认为我是理智的,现在不太确定了。 我正在尝试创建一个消息队列,其 mq_msgsize 属性不是 8192,这似乎是默认值。我在下面附上了我的代码——它有许多显示值的 printf。如果您能
已关闭。此问题需要 debugging details 。目前不接受答案。 编辑问题以包含 desired behavior, a specific problem or error, and the
即使我在我的 Makefile 中链接了 -lrt,如下所示,我仍然得到 undefined reference to 'mq_open'。请帮忙! all:get1 iserv1 get: get1
我正在尝试打开一个新的消息队列,但由于打开文件过多 (24) 错误而失败。 这是我的示例代码: #define ALERT_Q_NAME "/alert_q_test" mqd_t mqdes; in
我是一名优秀的程序员,十分优秀!