为什么向消息队列发送消息总是失败呢?
有这么个client程序:
#include "sys/types.h"
#include "sys/ipc.h"
#include "sys/msg.h"
#include "stdio.h"
#include "stdlib.h"
static struct msgbuf1
{
long mtype;
char mtext[100];
} sndbuf, rcvbuf, *msgp ;
extern int errno;
main(int argc, char **argv)
{
int rtrn, msqid ;
char name[10];
double balance;
if (argc!=2)
{
fprintf(stderr,"msgreq [01-99]n");
exit(-1);
}
if ( (msqid = msgget(0x888, IPC_CREAT|0660)) == -1 )
{
fprintf(stderr, "msgget 888 failed !n");
exit(-1);
}
msgp=&sndbuf;
sprintf(sndbuf.mtext,"%2.2s",argv[1]);
printf("输入4位帐号:");
scanf("%s",&sndbuf.mtext[2]);
sndbuf.mtext[6]=0;
msgp->mtype=666;
rtrn=msgsnd(msqid,msgp, strlen(sndbuf.mtext), 0);
if (rtrn==-1)
{
perror("msgsnd");
exit(-1);
}
msgp=&rcvbuf;
fprintf(stderr,"等待后台数据处理进程的回答....");
rtrn=msgrcv(msqid,msgp, 100, atoi(argv[1]), 0);
if(rtrn==-1)
{
perror("msgrcv");
exit(-1);
}
sscanf(rcvbuf.mtext,"%[^|]|%lf",name,&balance);
printf("n姓名=%sn",name);
printf("余额=%lfn",balance);
}
这里可以向队列中正常发送消息,server程序也能接收到,server程序如下:
#include "sys/types.h"
#include "sys/ipc.h"
#include "sys/msg.h"
#include "stdio.h"
#include "stdlib.h"
static struct msgbuf1
{
long mtype;
char mtext[100];
} sndbuf, rcvbuf , *msgp;
extern int errno;
main()
{
int rtrn, msgqid ;
char strbuf[100];
if ( (msgqid = msgget(0x888, IPC_CREAT|0600)) == -1 )
{
fprintf(stderr, "msgget 888 failed !n"); exit(-1);
}
while(1)
{
msgp=&rcvbuf;
fprintf(stderr,"等待前台进程的请求....");
rtrn=msgrcv(msgqid, msgp, 100, 666 ,MSG_NOERROR);
if(rtrn==-1)
{
perror("msgrcv");
exit(-1);
}
msgp=&sndbuf;
sprintf(strbuf,"%2.2s",rcvbuf.mtext);
msgp->mtype=atoi(strbuf);
printf("n输入帐号=%4.4s的帐户姓名:",&rcvbuf.mtext[2]);
scanf("%s",sndbuf.mtext);
strcat(sndbuf.mtext,"|");
printf("输入该帐户余额:");
scanf("%s",strbuf);
strcat(sndbuf.mtext,strbuf);
rtrn=msgsnd(msgqid, msgp, strlen(sndbuf.mtext), 0);
if (rtrn==-1)
{
perror("msgsnd");
exit(-1);
}
}
}
可是server里面的msgsnd总是发送失败,出现系统提示的:错误消息。
client的打印信息如下:
./client hh
输入4位帐号:1234
等待后台数据处理进程的回答....
server的打印信息如下:
./server
等待前台进程的请求....
输入帐号=1234的帐户姓名:1234
输入该帐户余额:1234
msgsnd: Invalid argument
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论