web-dev-qa-db-fra.com

Qu'est-ce que cela signifie d'écrire sur stdout en C?

Un programme qui écrit sur "stdout" écrit-il dans un fichier? l'écran? Je ne comprends pas ce que cela signifie d'écrire sur stdout.

28
user2227422

Cela signifie que vous imprimez une sortie sur le périphérique de sortie principal pour la session ... quelle qu'elle soit. La console de l'utilisateur, une session tty, un fichier ou qui sait quoi. La nature de ce périphérique dépend de la manière dont le programme est exécuté et de son emplacement.

La commande suivante écrira sur le périphérique de sortie standard (stdout) ...

printf( "hello world\n" );

Ce qui est juste une autre façon, en substance, de faire cela ...

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

Dans ce cas, stdout est un pointeur sur un flux FILE qui représente le périphérique de sortie par défaut de l'application. Vous pouvez aussi utiliser

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

dans ce cas, vous enverriez la sortie vers le périphérique de sortie d'erreur standard de l'application qui peut être identique ou non à stdout - comme avec stdout, stderr est un pointeur sur un flux FILE représentant le périphérique de sortie par défaut messages d'erreur.

44
K Scott Piel

Ça dépend.

Lorsque vous vous engagez à envoyer la sortie à stdout, vous laissez essentiellement le soin à l'utilisateur de décider où cette sortie doit aller.

Si vous utilisez printf(...) (ou l'équivalent fprintf(stdout, ...)), vous envoyez le résultat à stdout, mais le résultat final peut dépendre de la façon dont j'appelle votre programme.

Si je lance votre programme depuis ma console comme ceci, je verrai la sortie sur ma console:

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

Cependant, je pourrais lancer le programme comme ceci, ne produisant aucune sortie sur la console:

$ prog > hello.txt

mais j'aurais maintenant un fichier "hello.txt" avec le texte "Hello, World!" à l'intérieur, grâce à la fonctionnalité de redirection du shell.

Qui sait - je pourrais même brancher un autre appareil et la sortie pourrait y aller. Le fait est que lorsque vous décidez d’imprimer sur stdout (par exemple, en utilisant printf()), vous ne saurez pas exactement où il va avant que vous ne voyiez comment le processus est lancé ou utilisé.

12
akivajgordon

stdout signifie flux de sortie standard et il s’agit d’un flux qui est disponible pour votre programme par le système d’exploitation lui-même. Il est déjà disponible pour votre programme depuis le début avec stdin et stderr.

Ce qu'ils indiquent (ou à partir de) peut être n'importe quoi, en réalité, le flux fournit simplement à votre programme un objet qui peut être utilisé comme interface pour envoyer ou récupérer des données. Par défaut, il s’agit généralement du terminal, mais il peut être redirigé où vous le souhaitez: d’un fichier, d’un tuyau à un autre processus, etc.

2
Jack

stdout est le flux de fichier de sortie standard. De toute évidence, c'est le premier et le pointeur par défaut sur la sortie est l'écran, mais vous pouvez le diriger vers un fichier comme vous le souhaitez!

Lisez s'il vous plaît:

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

C++ est très similaire au C, cependant, orienté objet.

2
Alex Cutajar

stdout est le flux de sortie standard sous UNIX. Voir http://www.gnu.org/software/libc/manual/html_node/Standard-Streams.html#Standard-Streams . Lors de l'exécution dans un terminal, vous verrez les données écrites dans stdout le terminal et vous pouvez le rediriger comme bon vous semble.

1
A.E. Drew