2017-01-25 5 views
5

Das folgende ist ein einfaches C Programm:Warum druckt printf() nicht in eine Datei, wenn stdout in diese Datei umgeleitet wird?

#include <unistd.h> 
#include <stdio.h> 

int main(void) 
{ 
     while (1) 
     { 
       printf("Hello World\n"); 
       sleep(1); 
     } 
} 

Erstellen und führen Sie es, die "Hello World" im Terminal ausgedruckt werden:

$ ./a.out 
Hello World 
Hello World 
Hello World 

Aber wenn die stdout in eine Datei umgeleitet wird, Nach einer Weile, gibt es immer noch nichts in der Datei:

$ ./a.out > log.txt 
^C 
$ cat log.txt 
$ 

Warum nicht die printf Ausgabe in die Datei, die stdout umgeleitet wird?

+9

Es tut sicherlich, aber Sie spülen es nicht. –

+2

Zeilenpufferung (also das Leeren jeder Zeile) oder vollständiger ungepufferter Inhalt erfolgt automatisch auf vielen Plattformen, die zu einem TTY gehen, aber nicht in eine Datei gehen. –

+0

"Strg + C" auch nicht bündig? –

Antwort

0

Für Terminal nur standardmäßig ist es Zeilenpuffer. Hier hast du den stdout in die Datei umgeleitet. Also, jetzt zeigt der Stdout kein Terminal an. Es zeigt eine Datei an. Für die Datei ist es standardmäßig vollständig gepuffert. Also, du hast den stdout nach dem schreiben weggespült.

Finden Sie die Antwort für diese question.

Wie @ js1, sagte, müssen Sie nach dem Schreiben fflush (stdout) aufrufen.

Verwandte Themen