基本unix服务器客户端IPC(消息队列)问题
我正在处理一个问题,它意味着一个基本的运行服务器客户机(以前做过一个)。问题是我运行的是服务器而不是客户端。我的msg Que已创建,但客户端将我的字符作为输入发送,我得到了确认打印,但我的服务器msgrcv没有响应 s、 c基本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
(通过创建这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");
}