我試圖改寫wc -l
顯示部分結果重複,因爲它接收輸入(例如讀取,Linux的緩衝距離STDIO
我現在的版本是一個簡單的
while(!feof(in) &&
//(readc=fread(buf, 1,BUFSIZE,in))) {
(readc=read(0,buf, BUFSIZE))) {
for(i=0;i<readc;i++) {
lines += (buf[i] == '\n');
}
}
問題是我的stdin
仍然是塊緩衝的,這個練習的整個目的是讓輸出不必等待每個4KB的塊填充,我想線緩衝就沒問題了,
示例應用:find | partial_wc
awk 'NR%1000==0 {printf "%d\r",NR} END {print NR}'
有一個類似的輸出,除了我想選擇輸出基於時間(例如每1秒),而不是行。另外,這是一個有趣的學習問題。
我嘗試了why grep is fast中給出的建議,但無法弄清楚要使用哪一組系統調用。
試試fflush()是否工作? –
fflush顯示爲「對於輸入流,fflush()會丟棄從底層文件中獲取但尚未被應用程序使用的任何緩衝數據。」這聽起來不像它會做我想要的。 – zebediah49
注意'while(!feof(x))'幾乎保證是錯誤的。 – caf