2010-10-25 66 views
1

我正在熟悉C編程,並且想編寫一個類似於expand的程序。命令行工具首先讀取來自stdin的每個輸入,對其進行處理並將完整結果寫入stdout。我怎樣才能以優雅的方式實現這一目標?如何緩衝stdout,直到標準輸入關閉?

目前我的代碼看起來像這樣。這在處理文件時是完美的,但當用戶輸入每一個換行符後,他顯然當inputstdin時,他立即得到輸入行的結果。

char buffer[1024]; 
while (fgets(&buffer[0], sizeof(buffer)/sizeof(char), input) != NULL) 
{ 
    /* do something */ 
    printf("output"); 
} 

最好的問候,
奧利弗Hanappi

+1

這就是命令行工具預期的工作方式。如果你想在一個地方輸出所有的輸出,請嘗試將輸出重定向到一個文件。 – casablanca 2010-10-25 23:26:24

回答

1

將所有輸出寫入臨時文件而不是stdout,然後在程序執行結束時從此臨時文件複製到stdout

0

那麼,是什麼讓你覺得stdin將永遠關閉? :)

您可以使用isatty(STDIN_FILENO)來確定stdin是否連接到用戶輸入。 (如果是,函數返回非零值。)如果是這種情況,可以相應地改變你的行爲。