306 votes

Vous ne savez pas ce que sont stdin, stdout et stderr ?

Je suis assez confus quant à l'utilité de ces trois fichiers. Si ma compréhension est correcte, stdin est le fichier dans lequel un programme écrit dans ses requêtes pour exécuter une tâche dans le processus, stdout est le fichier dans lequel le noyau écrit sa sortie et le processus qui le demande accède à l'information, et stderr est le fichier dans lequel toutes les exceptions sont saisies. En ouvrant ces fichiers pour vérifier si celles-ci se produisent effectivement, je n'ai rien trouvé qui le suggère !

Ce que je voudrais savoir, c'est à quoi servent exactement ces fichiers, une réponse absolument simpliste avec très peu de jargon technique !

12voto

mikek3332002 Points 1989

Stdin

Lit l'entrée par la console (par exemple, l'entrée du clavier). Utilisé en C avec scanf

scanf(<formatstring>,<pointer to storage> ...);

stdout

Produit une sortie sur la console. Utilisé en C avec printf

printf(<string>, <values to print> ...);

stderr

Produit une sortie 'erreur' dans la console. Utilisé en C avec fprintf

fprintf(stderr, <string>, <values to print> ...);

Redirection

La source de stdin peut être redirigée. Par exemple, au lieu de provenir d'une entrée clavier, elle peut provenir d'un fichier ( echo < file.txt ), ou un autre programme ( ps | grep <userid> ).

Les destinations de stdout, stderr peuvent également être redirigées. Par exemple, stdout peut être redirigé vers un fichier : ls . > ls-output.txt dans ce cas, la sortie est écrite dans le fichier ls-output.txt . Stderr peut être redirigé con 2> .

5voto

Sam Points 41

L'utilisation de ps -aux révèle les processus en cours, qui sont tous listés dans /proc/ sous le nom de /proc/(pid)/, en appelant cat /proc/(pid)/fd/0, cela imprime tout ce qui est trouvé dans la sortie standard de ce processus, je pense. Donc peut-être,

/proc/(pid)/fd/0 - Fichier de sortie standard
/proc/(pid)/fd/1 - Fichier d'entrée standard
/proc/(pid)/fd/2 - Fichier d'erreur standard

par exemple my terminal window

Mais cela n'a fonctionné que pour /bin/bash les autres processus n'avaient généralement rien en 0 mais beaucoup avaient des erreurs écrites en 2

4voto

Margach Chris Points 46

Pour des informations faisant autorité sur ces fichiers, consultez les pages de manuel, exécutez la commande sur votre terminal.

$ man stdout 

Mais pour une réponse simple, chaque fichier est pour :

stdout pour un flux sortant

stdin pour une entrée de flux

stderr pour l'impression des erreurs ou des messages de journal.

Chaque programme unix possède chacun de ces flux.

2voto

geekanil Points 21

Stderr ne fera pas de mise en mémoire tampon IO Cache donc si notre application a besoin d'imprimer des informations de messages critiques (certaines erreurs, exceptions) sur la console ou dans un fichier, utilisez-le alors que stdout est utilisé pour imprimer des informations de journal générales car il utilise la mise en mémoire tampon IO Cache. Il y a une chance qu'avant d'écrire nos messages dans le fichier, l'application se ferme, laissant le débogage complexe.

0voto

Un fichier avec une mise en mémoire tampon associée est appelé un flux et est déclaré comme étant un pointeur vers un type défini FILE. La fonction fopen() crée certaines données descriptives pour un flux et renvoie un pointeur pour désigner le flux dans toutes les transactions ultérieures. Normalement, il y a trois flux ouverts avec des pointeurs constants déclarés dans l'en-tête et associés aux fichiers ouverts standard. Au démarrage du programme, trois flux sont prédéfinis et n'ont pas besoin d'être ouverts explicitement : entrée standard (pour la lecture des entrées conventionnelles), sortie standard (pour l'écriture des sorties conventionnelles) et erreur standard (pour l'écriture des sorties de diagnostic). Lorsqu'il est ouvert, le flux d'erreur standard n'est pas entièrement mis en mémoire tampon ; les flux d'entrée et de sortie standard sont entièrement mis en mémoire tampon si et seulement si l'on peut déterminer que le flux ne fait pas référence à un périphérique interactif.

https://www.mkssoftware.com/docs/man5/stdio.5.asp

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X