Это определено в исходном коде вашей библиотеки C.Обычно вам нужны только заголовки для компиляции, но вы можете найти исходный код для многих стандартных библиотек с открытым исходным кодом (например, glibc).
В glibc он определен в libio/stdio.c
следующим образом:
_IO_FILE *stdin = (FILE *) &_IO_2_1_stdin_;
Что, в свою очередь, определяется с использованием макроса в libio/stdfiles.c
следующим образом:
DEF_STDFILE(_IO_2_1_stdin_, 0, 0, _IO_NO_WRITES);
Определение макроса DEF_STDFILE
варьируется в зависимости от нескольких вещей, но оно более или менееустанавливает соответствующую FILE
структуру с использованием файлового дескриптора 0
(который является стандартным входом для Unix).
Определение может (и, конечно, меняется) в зависимости от вашей библиотеки C и, конечно, от платформы,При желании вы можете продолжить погоню за различными частями компонента ввода / вывода вашей стандартной библиотеки.