Quelle est la différence entre l'entrée standard stdin et STDIN_FILENO?
Ce qui est de la pratique, la différence, le cas échéant, entre stdin
et STDIN_FILENO
en C?
- Une discussion intéressante sur le sujet. Vous devriez peut-être aussi se demander pourquoi
fileno(stdin)
diffère deSTDIN_FILENO
. - Votre lien est malheureusement mort.
- Ce lien fonctionne rtems.org/ml/rtems-users/2011/march/thrd1.html#00101
- votre lien est mort ainsi 🙁 quelqu'un a une lecture intéressante sur le sujet?
- rtems garder la rupture des liens. Voici le nouvel emplacement du rtems.org/rtems/maillistArchives/rtems-users/2011/march/...
- lien mort..
- Dernier lien semble être: lists.rtems.org/pipermail/users/2011-March/023277.html
- Je suis de régler cette question une fois pour toutes: web.archive.org/web/20180127193256/https://lists.rtems.org/...
Vous devez vous connecter pour publier un commentaire.
L'interface. Comme tout le monde l'a dit,
stdin
est unFILE *
tel que défini par la bibliothèque standard c. Vous pouvez utiliser certains de la hausse du niveau des interfaces commefread
,fwrite
, etfprintf
. D'autre part,STDIN_FILENO
est juste un descripteur de fichier (presque certainement 0). Il utilise une légère baisse au niveau de l'interface par le biais de l'aime deread
etwrite
.STDIN_FILENO
est une macro définie dans<unistd.h>
. Au moins pour un compatible POSIX système, il n'est pas juste "presque certainement 0"; elle doit être définie comme 0. De même,STDOUT_FILENO
est 1 etSTDERR_FILENO
est 2.<unistd.h>
en-tête [...] et les deux constantesSTDIN_FILENO
etSTDOUT_FILENO
font partie de la norme POSIX [...]. Cet en-tête contient les prototypes de fonction pour de nombreux UNIX system services, tels que laread
etwrite
fonctions que nous appelons. Les constantesSTDIN_FILENO
etSTDOUT_FILENO
sont définis dans<unistd.h>
et de préciser les descripteurs de fichier pour l'entrée standard et la sortie standard. Ces valeurs sont0
et1
, respectivement, tel que requis par la norme POSIX.1, mais nous allons utiliser les noms pour des raisons de lisibilité. -- Source: Advanced Programming in the Unix ® de l'Environnement - 2e édition page 9stdin
est un pointeur de FICHIER par défaut utilisé pour obtenir l'entrée de rien d'autre que la norme dans.STDIN_FILENO
est le standard par défaut, le fichier d'entrée numéro de descripteur qui est0
. C'est essentiellement un définies directive pour une utilisation générale.De
/usr/include/stdio.h
,De
/usr/include/unistd.h
Ex,
stdin
(_IO_FILE
défini dans/usr/include/libio.h
) est une structure de données.STDIN_FILENO
est une macro constante, qui pointe vers un descripteur de fichier utilisé par le noyau.stdin : 1. Un pointeur de fichier (* FICHIER)
2. Le fichier descripteur de table organise son adresse lorsque le processus est
créée.
3. présent dans /usr/include/stdio.h
STDIN_FILENO : 1. Il s'agit d'une macro
2. Ce n'est rien, mais un tableau d'index d'une table de descripteurs de fichier
(0 par défaut).
3.présent dans /usr/include/unistd.h
Pourrait être plus clair par le code suivant.