gpt4 book ai didi

c - msgget 无法加入 mq

转载 作者:行者123 更新时间:2023-11-30 17:53:03 26 4
gpt4 key购买 nike

我正在使用 SysV 发送/接收消息。

在我的 Server 类的线程函数内部是我创建 key 和 MQ 的地方。这已成功完成,新 MQ 的 mqID 存储在 struct msgbuf 中名为 mtext 的 char[] 变量中

struct msgbuf {
long mtype;
char mtext[100];
};

这就是我在服务器类的线程函数中创建 mqID 的方式:
void *thread_function(void *arg){
int temp; //temp placement for current client
temp=i;
key_t keyT;
struct msgbuf bufT;
keyT=ftok("mcs1.c", 'B'); //create key for client[temp]
if ((client[temp].mqID=msgget(keyT, 0666 | IPC_CREAT))==-1){ //private mq for client[temp]
perror("msgget");
}
bufT.mtype=2; //1. SET MTYPE TO 2
sprintf(bufT.mtext, "%d\n", client[temp].mqID);//2. SET MTEXT TO MQID OF PRIVATE MQ

if (msgsnd(msqid, &bufT, sizeof(bufT.mtext),0)==-1) {perror("msgsnd");} //3. SEND TO CLIENT using global MQ

...
}

我刚刚创建的新 MQ 的 MQID 存储在 bufT 中

在客户端类中,这就是我 rcv MQID 和创建 MQ 的方式:
...
if(msgrcv(msqid, &buf, sizeof(buf.mtext), 2, 0) == -1){ //RECEIVE ACK MSG
perror("msgrcv");
}
else{
printf("ack received\n");
}
key_t key1;
key1=atoi(buf.mtext);
if ((mqT=msgget(key1, 0666)) == -1){
printf("UNABLE TO JOIN PRIVATE MQ");
perror("msgget");
printf("%d", key1);
}
...

每当我运行服务器然后运行客户端时,它都会显示 msgget: No such file or directory在运行客户端程序的终端上。
即使当我在客户端类中打印 key 并且是正确的 key 时,它仍然无法加入 MQ。是否有一个原因?

最佳答案

当指定文件名并且文件应该存在但不存在时,或者当路径名中的目录之一不存在时,不会发生此类文件或目录错误。当 key 不引用任何对象且 IPC_CREAT 标志未设置时,它与 msgget() 一起发生。

关于c - msgget 无法加入 mq,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15854886/

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