Если вы говорите о фактических файловых дескрипторах, возвращаемых (и используемых для) Linux системных вызовов, то взгляните на справочную страницу для open
et c. как предлагает @JonathanLeffler.
Например:
int open(const char *pathname, int flags);
Возвращаемое значение open()
- это дескриптор файла, небольшое неотрицательное целое число, которое используется в последующих системных вызовах , [...] Файловым дескриптором, возвращаемым при успешном вызове, будет дескриптор файла с наименьшим номером, который в данный момент не открыт для процесса.
Учитывая, что Unix -подобные системы являются LP64, int
и, следовательно, файловые дескрипторы имеют ширину 32 бита.
Однако учтите, что ядро выдаст вам как можно меньше целых чисел и , которых вы обычно достигнете предельным способом до этого ( см. Ограничения на количество файловых дескрипторов ) либо из-за глобального ограничения ядра, либо из-за мягких / жестких ограничений.
Это означает, что если вам действительно это нужно теоретически вы можете использовать меньшее целое число для хранения файловых дескрипторов, например int16_t
или int8_t
(при условии, что ваш процесс не использует столько дескрипторов файлов одновременно).
Если вместо этого вы имеете в виду stdin
et c., Это не дескрипторы файлов, а файловые потоки, определенные стандартом C.
Это макросы, которые расширяются до выражений с указателем t Тип (FILE *
) и указатели в типичной 64-битной платформе, такой как x86_64, имеют ширину 64 бит.
См. 7.21p3 (Ввод / вывод <stdio.h>
):
stdin
stdout
stderr
, которые являются выражениями типа '' указатель на FILE
'', которые указывают на FILE
объекты, связанные соответственно со стандартной ошибкой, входными и выходными потоками.