为什么向消息队列发送消息总是失败呢?

发布于 2022-07-19 21:22:55 字数 4957 浏览 7 评论 0

有这么个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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文