Ich versuche, eine Katze Klon zu schreiben C zu trainieren, ich habe diesen Code:von stdin Schreib Lesen in 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;
}
Ich versuchte echo "1..2..3.." | ./cat
und ./cat < garbage.txt
aber ich sehe keinen Ausgang an der Klemme . Was mache ich hier falsch?
Edit: Laut Kommentare und Antworten, landete ich dies bis zu tun:
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;
}
}
Verwenden Sie 'feof' nicht als Schleifenbedingung; es wird erst nach * nach * wahr zurückgegeben, nachdem Sie versucht haben, über das Ende der Datei hinaus zu lesen, sodass Ihre Schleife möglicherweise zu oft ausgeführt wird. Überprüfen Sie stattdessen das Ergebnis von "fread", und wenn es kleiner als BLOCK_SIZE ist, * dann rufen Sie 'feof' auf, um nach dem Dateiende zu suchen. Nach dem 'fwrite'-Aufruf müssen Sie' fflush (stdout); 'hinzufügen. –
Hier ergibt fread() fast immer null Bytes, wenn Sie nicht exakt 512 Zeichen eingegeben haben. –
@JohnBode Wie sieht meine Bearbeitung aus? – yasar