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