2013-05-07 16 views
24

Schreibt ein Programm, das auf "stdout" schreibt, in eine Datei? der Bildschirm? Ich verstehe nicht, was es bedeutet, auf stdout zu schreiben.Was bedeutet es, auf stdout in C zu schreiben?

+1

Es bedeutet, es schreibt Descriptor 1. 'stdout' Datei ist wie eine Konstante Variablennamen, etwas, das jeder benutzt, so dass Sie nicht haben zu erinnern, dass die tatsächliche FD-Nummer ist 1. Zum Beispiel, als ich das zuerst schrieb, dachte ich, es war FD 0 ... :) – CivFan

Antwort

41

Das bedeutet, dass Sie die Ausgabe auf dem Hauptausgabegerät für die Sitzung drucken ... was auch immer das sein mag. Die Konsole des Benutzers, eine Sitzung, eine Datei oder wer weiß was. Was dieses Gerät sein kann, hängt davon ab, wie das Programm ausgeführt wird und von wo.

Der folgende Befehl zu dem Standardausgabegerät schreibt (stdout) ...

printf("hello world\n"); 

die nur eine andere Art und Weise ist im Wesentlichen vor, dies zu tun ...

fprintf(stdout, "hello world\n"); 

In Dieser Fall stdout ist ein Zeiger auf einen FILE Stream, der das Standard-Ausgabegerät für die Anwendung darstellt. Sie könnten auch

fprintf(stderr, "that didn't go well\n"); 

, in dem Fall, dass Sie würde das Senden die Ausgabe an das Standardfehlerausgabegerät für die Anwendung, die kann oder auch nicht, die gleichen wie stdout verwenden könnten - wie bei stdout, stderr ist ein Zeiger auf einen FILE Stream, der das Standardausgabegerät für Fehlermeldungen darstellt.

+0

Gibt es ein Beispiel in C des Befehls auf stdout schreiben? Wird eine einfache printf-Anweisung in stdout geschrieben? Was ist mit dem Schreiben in eine Datei mit write()? – user2227422

+2

'printf' schreibt standardmäßig auf' stdout', wenn Sie in einen bestimmten Stream schreiben möchten, sollten Sie 'fprintf' verwenden, das eine' FILE * 'als Zielstream akzeptiert. – Jack

+1

sehe meine Bearbeitungen ... hoffentlich helfen sie dir zu klären –

2

stdout steht für standard output stream und es ist ein Stream, der für Ihr Programm vom Betriebssystem selbst verfügbar ist. Es steht Ihrem Programm bereits von Anfang an zusammen mit stdin und stderr zur Verfügung.

Was sie zeigen (oder von), kann alles sein, tatsächlich stellt der Stream Ihrem Programm nur ein Objekt zur Verfügung, das als Schnittstelle zum Senden oder Abrufen von Daten verwendet werden kann. Standardmäßig ist es normalerweise das Terminal, aber es kann umgeleitet werden, wo immer Sie wollen: eine Datei, ein Pipe goint zu einem anderen Prozess und so weiter.

1

stdout ist der Standard-Ausgabedateistream. Offensichtlich ist es der erste und Standardzeiger, um den Bildschirm auszugeben, aber Sie können es auf eine Datei wie gewünscht zeigen!

Bitte lesen:

http://www.cplusplus.com/reference/cstdio/stdout/

C++ ist sehr ähnlich zu C jedoch objektorientiert.

9

Kommt drauf an.

Wenn Sie sich verpflichten, die Ausgabe an stdout zu senden, überlassen Sie es dem Benutzer im Grunde, zu entscheiden, wohin diese Ausgabe gehen soll.

Wenn Sie printf(...) (oder das Äquivalent fprintf(stdout, ...)), sind Sie die Ausgabe an stdout senden, aber wo das tatsächlich kann landet davon abhängen, wie ich Ihr Programm aufrufen.

Wenn ich Ihr Programm aus der Liste meiner Konsole wie folgt starten, werde ich die Ausgabe auf meiner Konsole sehen:

$ prog 
Hello, World! # <-- output is here on my console 

aber ich könnte das Programm wie folgt starten, auf der Konsole keine Ausgabe erzeugt:

$ prog > hello.txt 

aber ich hätte jetzt eine Datei "hello.txt" mit dem Text "Hallo, Welt!" innen, dank der Umleitungsfunktion der Shell.

Wer weiß - ich könnte sogar ein anderes Gerät anschließen und die Ausgabe könnte dorthin gehen. Der Punkt ist, dass, wenn Sie sich entscheiden, unter stdout zu drucken (z. B. mit printf()), dann werden Sie nicht genau wissen, wohin es gehen wird, bis Sie sehen, wie der Prozess gestartet oder verwendet wird.

0

@K Scott Piel schrieb eine great answer here, aber ich möchte einen wichtigen Punkt hinzufügen.

Beachten Sie, dass der stdout Strom usually line-buffered ist, so dass der Ausgang, um sicherzustellen, tatsächlich gedruckt wird und nicht nur links im Puffer sitzen noch geschrieben werden Sie müssen den Puffer leeren, indem Sie entweder Ihre printf Anweisung mit einem \n

endet

Ex:

printf("hello world\n"); 

oder

printf("hello world"); 
printf("\n"); 

oder ähnlich, ODER müssen Sie nach Ihrem printf Anruf anrufen .

Ex:

printf("hello world"); 
fflush(stdout); 

Lesen Sie mehr hier: Why does printf not flush after the call unless a newline is in the format string?