What is the size in bits of a file descriptor such as standard input and standard output, is it a 32-bit integer?
Advertisement
Answer
If you are talking about the actual file descriptors returned by (and used for) Linux syscalls, then take a look at the manpage for open etc. as @JonathanLeffler suggests.
For instance:
int open(const char *pathname, int flags);The return value of
open()is a file descriptor, a small, nonnegative integer that is used in subsequent system calls. […] The file descriptor returned by a successful call will be the lowest-numbered file descriptor not currently open for the process.
Given that Unix-like systems are LP64, int and therefore the file descriptors are 32-bit wide.
However, note that the kernel will give you as small integers as possible and that you will typically reach a limit way before that (see Limits on the number of file descriptors) either due to the kernel global limit or the soft/hard limits.
This means that, if you really needed it, you could in theory use a smaller integer to store your file descriptors, e.g. an int16_t or an int8_t (assuming that your process does not use that many file descriptors at a time).
If, instead, you are referring to stdin etc., those are not file descriptors but file streams defined by the C standard.
They are macros which expand to expressions with pointer type (FILE *), and pointers in a typical 64-bit platform like x86_64 are 64-bit wide.
See 7.21p3 (Input/output <stdio.h>):
stdin stdout stderrwhich are expressions of type ‘‘pointer to
FILE’’ that point to theFILEobjects associated, respectively, with the standard error, input, and output streams.