Подтвердить что ты не робот

В чем разница между stdin и STDIN_FILENO?

Какова практическая разница, если таковая имеется, между stdin и STDIN_FILENO в C?

4b9b3361

Ответ 1

Интерфейс. Как и все остальные, stdin - это FILE *, как определено стандартной библиотекой c. Вы можете использовать некоторые интерфейсы более высокого уровня, такие как fread, fwrite и fprintf. С другой стороны, STDIN_FILENO является всего лишь файловым дескриптором (почти наверняка 0). Это использует небольшой интерфейс нижнего уровня, например, read и write.

Ответ 2

stdin - это указатель FILE по умолчанию, используемый для ввода ввода нестандартного значения.

STDIN_FILENO - стандартный номер дескриптора входного файла по умолчанию, который равен 0. Это по существу определенная директива для общего использования.

Ответ 3

От /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

От /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, определенный в /usr/include/libio.h), является структурными данными. STDIN_FILENO - это макрокоманда, которая указывает на файловый дескриптор, используемый ядром.

#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;
}