yılında stdout Stdin yazma başlayarak oku, Bu kodu vardır: Ben echo "1..2..3.." | ./cat
ve ./cat < garbage.txt
denedikBen C egzersiz bir kedi klonu yazmaya çalışıyorum 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;
}
ama terminalde herhangi bir çıktı görmüyorum . Burada ne yapıyorum?
Düzenleme: i bana göre bir cevap alıntı
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;
}
}
Döngü koşulunuz olarak 'feof' kullanmayın; Dosyanın sonunu okumaya çalıştığınızda * bu kadar * true olmayacak, böylece döngü çok sık bir kez yürütülebilmektedir. Bunun yerine 'fread' sonucunu kontrol edin ve BLOCK_SIZE'dan daha küçükse, * dosya sonu için kontrol etmek için * feof'i arayın. Ve 'fwrite' çağrısından sonra 'fflush (stdout); –
burada fread() neredeyse 512 karaktere yazılmadıkça neredeyse her zaman sıfır bayttır. –
@JohnBode Düzenlemem nasıl görünüyor? – yasar