我想寫一個貓克隆鍛鍊C,我有這樣的代碼:到stdout用C
#include <stdio.h>
#define BLOCK_SIZE 512
int main(int argc, const char *argv[])
{
if (argc == 1) { // copy stdin to stdout
char buffer[BLOCK_SIZE];
while(!feof(stdin)) {
size_t bytes = fread(buffer, BLOCK_SIZE, sizeof(char),stdin);
fwrite(buffer, bytes, sizeof(char),stdout);
}
}
else printf("Not implemented.\n");
return 0;
}
我試圖echo "1..2..3.." | ./cat
和./cat < garbage.txt
,但我沒有看到終端的任何輸出。我在這裏做錯了什麼?
編輯: 根據意見和答案,我終於實現了這一點:
void copy_stdin2stdout()
{
char buffer[BLOCK_SIZE];
for(;;) {
size_t bytes = fread(buffer, sizeof(char),BLOCK_SIZE,stdin);
fwrite(buffer, sizeof(char), bytes, stdout);
fflush(stdout);
if (bytes < BLOCK_SIZE)
if (feof(stdin))
break;
}
}
不要使用'feof'作爲你的循環條件;它將不會返回true,直到*你試圖讀取文件末尾之後,所以你的循環可能會經常執行一次。請檢查'fread'的結果,如果它小於BLOCK_SIZE,*然後*調用'feof'來檢查文件結束。你需要在'fwrite'調用之後添加'fflush(stdout);'。 – 2012-04-12 18:14:50
這裏fread()幾乎總是導致零字節,除非你輸入正好512個字符。 – 2012-04-12 18:17:56
@JohnBode我的編輯看起來如何? – yasar 2012-04-12 18:32:15