gpt4 book ai didi

c - msgid 创建错误

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

我想创建一个消息队列,但在创建 id 时遇到错误。有人可以为我提供更好的 msgget 创建 id 解决方案吗?

 msgid=msgget((key_t)1234,0666 | IPC_CREAT);

我收到 msgid==-1

  #include<stdio.h>
#include<stdlib.h>
#include<sys/ipc.h>
#include<sys/msg.h>
struct msg_buf{
long msg_type;
char msg_txt[100];
}message;

int main()
{
//key_t key;
int msgid;
//key=ftok("progfile",65);
msgid=msgget((key_t)1234,0666 | IPC_CREAT);
if(msgid==-1)
{
printf("[-]Error in creating id:\n");
exit(1);
}
printf("[+]MSGID created:\n");
message.msg_type=1;
printf("Write data:");
scanf("%s",message.msg_txt);
if(msgsnd(msgid,&message,sizeof(message),0)==-1)
{
printf("[-]Error while semnding message:\n");
exit(1);
}
printf("Data send is: %s \n",message.msg_txt);
return 0;
}

输出:

root@DESKTOP-UFTQBQ8:/mnt/c/Users/BRAHMA JAISWAL/Desktop# ./b
[-]Error in id creation:

最佳答案

我想创建一个消息队列,但在创建 ID 时遇到错误?我在创建消息队列部分的代码中没有看到任何错误。通过 ipcrm -q id 删除消息队列并再次运行您的代码。

或者,您可以使用 POSIX IPC mq_openmq_sendmq_receive,因为所有 POSIX IPC 都是线程安全的。来自 mq_open

的手册页

mq_open() creates a new POSIX message queue or opens an existing queue. The queue is identified by name. For details of the construction of name, see mq_overview(7).

示例代码

int main(void) {
mqd_t fd;
char buf[30];

printf("\nEnter message you wanna send :\n");
fgets(buf,sizeof(buf),stdin);
fd = mq_open("/my_mq",O_RDWR|O_CREAT,0777,NULL);
if(fd == -1){
perror("mq_open");
exit(0);
}
if(mq_send(fd,buf,sizeof(buf),0) == -1){
perror("mq_send");
exit(0);
}
return 0;
}

阅读此内容 difference between msgget() and mq_openSystem V IPC vs POSIX IPC

关于c - msgid 创建错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50093675/

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