Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
基本unix服务器客户端IPC(消息队列)问题_C_Unix_Client_Ipc - Fatal编程技术网

基本unix服务器客户端IPC(消息队列)问题

基本unix服务器客户端IPC(消息队列)问题,c,unix,client,ipc,C,Unix,Client,Ipc,我正在处理一个问题,它意味着一个基本的运行服务器客户机(以前做过一个)。问题是我运行的是服务器而不是客户端。我的msg Que已创建,但客户端将我的字符作为输入发送,我得到了确认打印,但我的服务器msgrcv没有响应 s、 c (通过创建这3个文件,您可以自己测试它。欢迎您提出任何想法,也许我遗漏了什么)您应该这样做,以验证发送没有失败 if(msgsnd(qt, &m,sizeof(struct msg),0)) < 0) { perror("Msg send erro

我正在处理一个问题,它意味着一个基本的运行服务器客户机(以前做过一个)。问题是我运行的是服务器而不是客户端。我的msg Que已创建,但客户端将我的字符作为输入发送,我得到了确认打印,但我的服务器msgrcv没有响应

s、 c


(通过创建这3个文件,您可以自己测试它。欢迎您提出任何想法,也许我遗漏了什么)

您应该这样做,以验证发送没有失败

 if(msgsnd(qt, &m,sizeof(struct msg),0)) < 0) {
    perror("Msg send error");
  }
if(msgsnd(qt,&m,sizeof(struct msg),0))<0){
perror(“消息发送错误”);
}
您还应注意msgsnd的文档:

The msgp argument is a pointer to caller-defined structure of the following general form: struct msgbuf { long mtype; /* message type, must be > 0 */ char mtext[1]; /* message data */ }; msgp参数是指向调用方定义的 一般形式如下: 结构msgbuf{ long mtype;/*消息类型必须大于0*/ char mtext[1];/*消息数据*/ }; 也就是说,您必须将发送的消息中的mtype设置为>0。目前它尚未初始化,因此您应该执行以下操作:

m.mtype = 1;
if(msgsnd(qt, &m,sizeof(struct msg),0)) < 0) {
   perror("Msg send error");
}
m.mtype=1;
if(msgsnd(qt,&m,sizeof(struct msg),0))<0){
perror(“消息发送错误”);
}

谢谢,我意识到了我必须执行的错误
m.mtype=getpid()m.mtype的值是多少?它目前尚未定义。如果恰好为0或负值,则msgsend将失败。谢谢。这就是忘记初始化mtype的问题。是的,我看到你在我发布之前8分钟发现了错误。自从90年代中后期以来,我就没有使用过ipc.h,所以在我发布任何东西之前,我必须阅读手册页来更新我的知识。
 if(msgsnd(qt, &m,sizeof(struct msg),0)) < 0) {
    perror("Msg send error");
  }
The msgp argument is a pointer to caller-defined structure of the following general form: struct msgbuf { long mtype; /* message type, must be > 0 */ char mtext[1]; /* message data */ };
m.mtype = 1;
if(msgsnd(qt, &m,sizeof(struct msg),0)) < 0) {
   perror("Msg send error");
}