Qual è la differenza pratica, se esiste, tra stdin
e STDIN_FILENO
in C?Qual è la differenza tra stdin e STDIN_FILENO?
risposta
L'interfaccia. Come tutti gli altri hanno detto, stdin
è un FILE *
come definito dalla libreria c standard. È possibile utilizzare alcune delle interfacce di livello superiore come fread
, fwrite
e fprintf
. D'altra parte, STDIN_FILENO
è solo un descrittore di file (quasi certamente 0). Questo utilizza una leggera interfaccia di livello inferiore attraverso i Mi piace di read
e write
.
Nessuna delle risposte indica che 'STDIN_FILENO' è una macro definita in'
@KeithThompson grazie, cercava questo! – KGCybeX
stdin
è un puntatore predefinito di file utilizzato per ottenere input da nientemeno che standard.
STDIN_FILENO
è il numero di descrittore predefinito di serie di file di input che è 0
. È essenzialmente una direttiva definita per uso generale.
Da /usr/include/stdio.h
,
/* Standard streams. */
extern struct _IO_FILE *stdin; /* Standard input stream. */
extern struct _IO_FILE *stdout; /* Standard output stream. */
extern struct _IO_FILE *stderr; /* Standard error output stream. */
/* C89/C99 say they're macros. Make them happy. */
#define stdin stdin
#define stdout stdout
#define stderr stderr
Da /usr/include/unistd.h
/* Standard file descriptors. */
#define STDIN_FILENO 0 /* Standard input. */
#define STDOUT_FILENO 1 /* Standard output. */
#define STDERR_FILENO 2 /* Standard error output. */
Ex, stdin
(_IO_FILE
definito /usr/include/libio.h
) è una struttura di dati. STDIN_FILENO
è una costante macro, che punta a un descrittore di file utilizzato dal kernel.
#include <stdio.h>
#include <unistd.h>
void
stdin_VS_STDIN_FILENO(void)
{
printf("stdin->_flags = %hd\n", stdin->_flags);
printf("STDIN_FILENO : %d\n", STDIN_FILENO);
}
int
main(void)
{
stdin_VS_STDIN_FILENO();
return 0;
}
- 1. Qual è la differenza tra <stdin> e <STDIN>?
- 2. Qual è la differenza tra = e: =
- 3. Qual è la differenza tra Verilog! e ~?
- 4. Qual è la differenza tra? : e ||
- 5. qual è la differenza tra [[], []] e [[]] * 2
- 6. Qual è la differenza tra $ e $$?
- 7. Qual è la differenza tra ("") e (null)
- 8. Qual è la differenza tra dict() e {}?
- 9. Qual è la differenza tra " " e ""?
- 10. Qual è la differenza tra {0} e ""?
- 11. Qual è la differenza tra `##` e `hashCode`?
- 12. Qual è la differenza tra {0} e +?
- 13. Qual è la differenza tra .ToString() e + ""
- 14. qual è la differenza tra:.! e: r !?
- 15. Qual è la differenza tra ">" e "&>" in bash?
- 16. Qual è la differenza tra "è Nessuno" e "== Nessuno"
- 17. Unix: Qual è la differenza tra la fonte e l'esportazione?
- 18. Qual è la differenza tra il callback e la promessa
- 19. Qual è la differenza tra la sezione .got e .got.plt?
- 20. Qual è la differenza tra la lista() e []
- 21. Qual è la differenza tra GHC e la piattaforma Haskell?
- 22. Qual è la differenza tra sé e la finestra?
- 23. Qual è la differenza tra la cartella vim72 e vimfiles?
- 24. Qual è la differenza tra la serratura e RLock
- 25. Qual è la differenza tra la funzione() {}() e function() {}()
- 26. Qual è la differenza tra la crittografia SHA e AES?
- 27. Qual è la differenza tra la [OptionalField] e [NonSerialized]
- 28. Qual è la differenza tra Chisel e Lava e CLaSH?
- 29. Qual è la differenza tra queste funzioni
- 30. Qual è la differenza tra queste funzioni?
[Una discussione interessante sull'argomento] (http://www.rtems.com/ml/rtems-users/2011/march/msg00101.html). Forse dovresti anche chiedere perché 'fileno (stdin)' differisce da 'STDIN_FILENO'. – user7116
@ user7116 Purtroppo il tuo link è morto. –
Questo link funziona http://www.rtems.org/ml/rtems-users/2011/march/thrd1.html#00101 – pixelbeat