[英]Multiline message sending in C doesn't work
我在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
所有行?
with while (fgets(str, MSGMAX, p)){ strcpy (mymsg.text, str); }
while (fgets(str, MSGMAX, p)){ strcpy (mymsg.text, str); }
,您將用fgets
讀取的每一行替換mymsg.txt
的內容。 我建議寫類似...
strcpy(mymsg.text,"");
while (fgets(str, MSGMAX, p)){ strcat (mymsg.text, str); }
或者您將緩沖區發送到循環內的服務器,即,發送每行分別讀取的內容。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.