Qu'est-ce que “l'entrée standard”?
J'ai été chargé de la création d'un programme de test en C
qui lit le contenu de la entrée standard et ensuite de les imprimer.
Mais j'ai un petit doute: quel est exactement entrée standard?
Est-ce que je dois taper dans le clavier? C'est un fichier que j'ai à lire?
Toutes les deux?
Et il en va de même pour standard output
: est-il de la console? un fichier?
Ceci pourrait aider.
Merci pour le lien. Mais,
En C l'entrée standard est
mais shoulend-ils pas être traités différemment? Si l'entrée est à partir d'un fichier ne devrait-elle pas être ouvert en premier?
double possible de confus au sujet de stdin, stdout et stderr?
Merci pour le lien. Mais,
Unless redirected, input is expected from the keyboard which started the program
. Que redirected
... cela signifie que l'entrée peut être à partir d'un fichier?En C l'entrée standard est
stdin
et la sortie standard est stdout
, tous deux définis dans <stdio.h>
; le fait qu'ils sont "clavier" ou "fichier" n'est pas pertinent...mais shoulend-ils pas être traités différemment? Si l'entrée est à partir d'un fichier ne devrait-elle pas être ouvert en premier?
double possible de confus au sujet de stdin, stdout et stderr?
OriginalL'auteur Kio Marv | 2013-10-23
Vous devez vous connecter pour publier un commentaire.
Le C standard (par exemple, C99 ou C11) définit ce qui doit être prévu à partir de la norme
<stdio.h>
en-tête (après avoir convenablement#include
-d). Voir stdio(3) page de man.Ensuite, vous avez la
stdin
etstdout
etstderr
descripteurs de fichiers (des pointeurs vers certainsFILE
qui est un type abstrait de données).Le fait que
stdin
est lié à un périphérique (par exemple un clavier) est de mise en œuvre spécifiques.Vous pouvez (mais qui serait contraire à l'éthique et/ou de l'inefficacité) de mettre en œuvre la norme C avec, par exemple, d'une salle d'esclaves humains (qui est contraire à l'éthique, si vous utilisez des travailleurs rémunérés qui serait seulement inefficace), au lieu d'utiliser un ordinateur. Souvent, les ordinateurs qui donne à votre certains la mise en œuvre de la norme C page à l'aide de quelques système d'exploitation.
Vous voudrez peut-être savoir, à l'intérieur de votre programme C, si
stdin
est un "clavier" ou redirigé depuis quelques "fichier". Malheureusement, autant que je sache, il n'y a pas de C99-standard moyen de le savoir.Comme vous le mentionnez,
stdin
,stdout
etstderr
devraient être disponibles dans votre programme au démarrage (c'est à dire après l'entréemain
....). Donc, à moins que vousfclose
lastdin
flux, vous pouvez le lire (avecgetchar
,scanf
,getline
,fgets
,fscanf
... et les amis), sans aucun préalable des soins (si vous n'avez pas besoin defopen
vous-même).Sur Linux ou sur la plupart des systèmes Posix, vous pouvez l'utiliser comme une approximation
isatty(STDIN_FILENO)
- voir isatty(3) pour plus d' - pour tester sistdin
"est" le "clavier" (par des tests si c'est une ats). Voir aussi cette & que.At program startup, three text streams are predefined and need not be opened explicitly
OK. Donc, si c'est un fichier ou une entrée au clavier, je peux lire lestdin
tout de suite, sans vérifier si il est ouvert, à droite?OriginalL'auteur Basile Starynkevitch
Oui, l'entrée standard (stdin) est entrée exepected à partir du clavier. Oui, peut être sous la forme de la saisie de l'utilisateur d'un programme de base ou à partir d'un argument de ligne de commande. La sortie Standard (stdout) est la sortie du code, généralement, à la fenêtre de terminal. Vous pourriez à la sortie de votre code de presque n'importe où, c'est à dire à un fichier, à une zone de texte, navigateur, mais la norme est la sortie standard (stdout), qui est le terminal.
Espère que ça aide.
OriginalL'auteur
Normalement, l'entrée standard est le clavier et la sortie standard de l'écran. Cependant, vous pouvez rediriger dans la ligne de commande à l'aide de la "<" et ">" symboles. Une ligne de commande comme
va changer la sortie standard de la commande dir pour être le fichier spécifié. Donc, tous sortie passe à ce fichier. La demande ou la commande en elle-même n'avez normalement pas le même avis, la différence.
ls -R > Tree.txt
Droit, mais la syntaxe est identique (au moins pour les cas faciles)
Aha. Et dans cette redirection, cela signifie que la sortie de la chaîne de
dir
est écrit dans le fichier?Oui, exactement. De l'essayer.
OriginalL'auteur PMF
sortie standard (ou
stdout
) se réfère à la standardisation des flux de données qui sont produites par des programmes en ligne de commande (c'est à dire, de tous les programmes en mode texte sous Linux), et d'autres systèmes de type Unix.OriginalL'auteur Farouk Jouti
stdin est le descripteur de fichier 0, vous pouvez obtenir un fichier stdin par:
de même pour la sortie standard (descripteur de fichier 1)
et stderr (fd 2)
si vous avez un programme qui prend un fichier, mais ne gère pas les stdin, vous pouvez utiliser les formats ci-dessus en faisant cela (en supposant que f-si le fichier d'entrée argument)
myprog -f /dev/stdin
OriginalL'auteur technosaurus