it-swarm.com.de

Was bedeutet es, in c stdout zu schreiben?

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

28
user2227422

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

Der folgende Befehl schreibt auf das Standardausgabegerät (stdout) ...

printf( "hello world\n" );

Welches ist nur eine andere Möglichkeit, dies zu tun ...

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

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

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

in diesem Fall würden Sie die Ausgabe an das Standardfehlerausgabegerät für die Anwendung senden, die stdout sein kann oder nicht. Die Variable stdout ist wie bei stderr ein Zeiger auf einen FILE-Stream, der das Standardausgabegerät für darstellt Fehlermeldungen.

44
K Scott Piel

Es hängt davon ab, ob.

Wenn Sie sich zum Senden von Ausgaben an stdout verpflichten, überlassen Sie es grundsätzlich dem Benutzer, zu entscheiden, wohin die Ausgabe gehen soll.

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

Wenn ich Ihr Programm so von meiner Konsole aus starte, sehe ich die Ausgabe auf meiner Konsole:

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

Ich könnte das Programm jedoch so starten, ohne auf der Konsole auszugeben:

$ 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. Wenn Sie sich entscheiden, in stdout zu drucken (z. B. mit printf()), werden Sie nicht genau wissen, wohin es gehen wird, bis Sie sehen, wie der Prozess gestartet oder verwendet wird.

12
akivajgordon

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

Worauf sie (oder von) zeigen, kann alles sein, tatsächlich bietet der Stream Ihrem Programm lediglich ein Objekt, das als Schnittstelle zum Senden oder Abrufen von Daten verwendet werden kann. Standardmäßig ist dies normalerweise das Terminal, es kann jedoch umgeleitet werden, wo immer Sie möchten: eine Datei, eine Pipe-Verbindung zu einem anderen Prozess und so weiter.

2
Jack

stdout ist der Standardausgabedateistrom. Offensichtlich ist dies der erste Zeiger und der Standardzeiger für die Ausgabe ist der Bildschirm. Sie können ihn jedoch wie gewünscht auf eine Datei zeigen!

Lesen Sie bitte:

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

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

2
Alex Cutajar

stdout ist der Standardausgabestrom in UNIX. Siehe http://www.gnu.org/software/libc/manual/html_node/Standard-Streams.html#Standard-Streams ..__ Wenn Sie in einem Terminal laufen, werden in stdout geschriebene Daten angezeigt das Terminal und Sie können es nach Belieben umleiten.

1
A.E. Drew

@K Scott Piel schrieb eine tolle Antwort hier , aber ich möchte einen wichtigen Punkt hinzufügen.

Beachten Sie, dass der stdout -Stream normalerweise zeilenweise gepuffert ist. Damit die Ausgabe tatsächlich gedruckt wird und nicht nur im Puffer bleibt, der darauf wartet, geschrieben zu werden, müssen Sie must Puffer leeren, indem Sie entweder Ihre printf -Anweisung mit einem \n beenden

Ex:

printf("hello world\n");

oder

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

oder ähnlich, OR Sie müssen fflush(stdout); nach Ihrem printf -Aufruf aufrufen.

Ex:

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

Lesen Sie hier mehr darüber: Warum wird printf nach dem Aufruf nicht gelöscht, es sei denn, eine neue Zeile enthält die Formatzeichenfolge?

0
Gabriel Staples