、私はこのコードを持っている:読むが、私はCを行使する猫のクローンを記述しようとしています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'を使用しないでください。あなたがファイルの終わりを過ぎて読もうとした*後*までは真ではないので、あなたのループはあまりにも頻繁に実行されるかもしれません。代わりに 'fread'の結果をチェックし、BLOCK_SIZEより小さい場合は' * 'を呼び出してファイルの終わりをチェックする 'feof'を呼び出します。そして 'fwrite'呼び出しの後に' fflush(stdout); 'を追加する必要があります。 –
ここで、正確に512文字を入力しない限り、fread()はほとんど常にゼロバイトになります。 –
@JohnBode私の編集はどのように見えるのですか? – yasar