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_t
或 int8_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.
标准输入和标准输出等文件描述符的比特大小是多少,是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_t
或 int8_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 theFILE
objects associated, respectively, with the standard error, input, and output streams.