[文件描述符,例如标准输入和标准输出的位的大小是多少,它是32位整数吗?
[如果您正在谈论由Linux系统调用返回(并用于)Linux系统调用的实际文件描述符,那么请参阅open
等手册页,如@JonathanLeffler所建议。
例如:
int open(const char *pathname, int flags);
open()
的返回值是一个文件描述符,这是一个小的非负整数,在后续系统调用中使用。 [...]成功调用返回的文件描述符将是当前未为该进程打开的编号最小的文件描述符。
鉴于类Unix系统是LP64,int
,因此文件描述符为32位宽。
但是,请注意内核会给您尽可能小的整数和由于内核全局限制或软/硬限制,您通常会在此之前达到极限方式(请参阅Limits on the number of file descriptors) 。
这意味着,如果您[确实]需要它,则理论上可以使用较小的整数来存储文件描述符,例如int16_t
或int8_t
(假设您的进程一次不使用那么多文件描述符)。
如果相反,您指的是stdin
等,则这些不是文件描述符,而是C标准定义的文件流。
它们是扩展为具有指针类型(FILE *
)的表达式的宏,并且在典型的64位平台(如x86_64)中,指针的宽度为64位。
请参阅7.21p3(输入/输出<stdio.h>
):
stdin stdout stderr
是“指向FILE
的指针”类型的表达式,指向分别与标准错误,输入和输出流相关联的FILE
对象。