簡體   English   中英

在C中發送多行消息不起作用

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM