Многострочная отправка сообщений в C не работает - PullRequest
0 голосов
/ 11 сентября 2018

Я использую очередь сообщений в 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 part, она восстановила только последнюю строку всей строки:

    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 голосов
/ 11 сентября 2018

С while (fgets(str, MSGMAX, p)){ strcpy (mymsg.text, str); } вы переопределяете содержимое mymsg.txt с каждой новой строкой, читаемой fgets. Я бы предложил написать что-то вроде ...

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

или вы отправляете буфер на сервер в цикле, т. Е. Отправляете каждую строку отдельно для чтения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...