#define MESSAGE_QUEUE_NAME "/project"
int main (int argc, char **argv){
char user_name[USER_NAME_LEN];
mqd_t qd_server;
int flags;
if (argc != 2) {
printf ("Usage: %s user-name\n", argv[0]);
exit (EXIT_FAILURE);
}
strcpy (user_name, argv[1]);
printf ("User %s connecting to server\n", user_name);
if ((qd_server = mq_open (SERVER_QUEUE_NAME, O_WRONLY)) == -1) {
perror ("Client: mq_open (server)");
exit (1);
}
…在向队列发送消息之前,我尝试打开消息队列。在发送消息之前,我需要打开队列服务器,但当我运行它时,错误是:
Client: mq_open (server): No such file or directory我就是不知道发生了什么。
发布于 2020-02-16 14:59:26
根据the man page的说法,您会得到ENOENT错误号,因为“O_CREAT标志没有在oflag中指定,并且不存在具有此名称的队列”。
因此,您可能还没有创建消息队列。如果它不存在,可以通过将对mq_open的调用更改为mq_open(SERVER_QUEUE_NAME, O_CREAT | O_WRONLY, S_IRUSR | S_IWUSR, NULL)来创建它。您可以指定自己的具有最大队列长度和消息大小的mq_attr结构,而不是将NULL作为attr参数传递。
https://stackoverflow.com/questions/60245914
复制相似问题