我在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的结果)。但是,当我尝试在服务器部分中打印此字符串时,它只撤消了整个字符串的最后一行:

    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

最佳答案

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

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


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

关于c - 用C语言发送多行消息不起作用,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/52281232/

10-11 23:18
查看更多