我在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/