在C中发送多行消息不起作用

时间:2018-09-11 17:27:09

标签: c unix

我在C中使用消息队列,并将所有文件(在当前文件夹中)的信息从客户端发送到服务器(MSGMAX定义为4096)。 客户代码:

    int mq_id;
    struct { long type; char text[MSGMAX]; } mymsg;
    mq_id = msgget(12, IPC_CREAT | 0666);
FILE* p;
char str[MSGMAX];
p = popen("ls -l", "r");
while (fgets(str, MSGMAX, p)){ strcpy (mymsg.text, str); }
pclose(p);
mymsg.type = 1;
msgsnd(mq_id, &mymsg, sizeof(mymsg), IPC_NOWAIT);
}

在这一部分,mymsg.text返回正确的多重行字符串(结果为ls -l)。但是,当我尝试在 server 部分中打印此字符串时,它只撤消了整个字符串的最后一行:

    int mq_id;
    struct { long type; char text[MSGMAX]; } mymsg;
    mq_id = msgget(12, 0);
    if (msgrcv(mq_id, &mymsg, sizeof(mymsg), 0, 0) < 0)
    perror("\nMsg error!");
    else
    printf("%s", mymsg.text);

如何使用所有行完全发送mymsg.text

1 个答案:

答案 0 :(得分:1)

使用while (fgets(str, MSGMAX, p)){ strcpy (mymsg.text, str); }mymsg.txt读取的每一行都将覆盖fgets的内容。我建议写类似...

strcpy(mymsg.text,"");
while (fgets(str, MSGMAX, p)){ strcat (mymsg.text, str); }

或者您将缓冲区发送到循环中的服务器,即,将每行分别读取。