x64 系统 运行 Ubuntu 19.10 中文件描述符的大小(以位为单位)是多少?

What is the size in bits of a file descriptor in an x64 system running Ubuntu 19.10?

标准输入和标准输出等文件描述符的比特大小是多少,是32位整数吗?

如果您谈论的是 Linux 系统调用返回(并用于)的实际文件描述符,请按照@JonathanLeffler 的建议查看 open 等的联机帮助页。

例如:

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.

鉴于类 Unix 系统是 LP64,int 因此文件描述符是 32 位宽。

但是,请注意,内核会为您提供尽可能小的整数 ,您通常会在此之前达到极限(参见 Limits on the number of file descriptors)到内核​​全局限制或 soft/hard 限制。

这意味着,如果您确实需要它,理论上您可以使用较小的整数来存储您的文件描述符,例如int16_tint8_t(假设您的进程一次不使用那么多文件描述符)。


如果您指的是 stdin 等,则这些不是文件描述符,而是 C 标准定义的文件流。

它们是扩展为具有指针类型 (FILE *) 的表达式的宏,在典型的 64 位平台(如 x86_64 中,指针是 64 位宽的。

参见 7.21p3 (Input/output <stdio.h>):

stdin
stdout
stderr

which are expressions of type ‘‘pointer to FILE’’ that point to the FILE objects associated, respectively, with the standard error, input, and output streams.