预分配数据结构的最大文件描述符数

Maximum number of file descriptors for pre-allocating a data structure

我想创建一个数据结构来保存有关进程已打开的每个文件描述符的信息,但我想一次性调整此数据结构的大小并且永远不会更改它。我也想要恒定时间随机访问,所以这个数据结构很可能是一个由 fd 值索引的数组。

有没有办法可靠地确定进程在运行时的最大可能 fd 值是多少?如果此值不完全是可能的最大值也没关系,但只能在特殊情况下更改(例如 root 将值写入 /proc/ 中的文件,尽管知道这些可能是什么情况会很好。

我决定反对这个设计,但这个问题的正确答案是使用 sysconf(_SC_OPEN_MAX) 来确定文件描述符的当前软限制。

Unix 的其他各个方面都将文件句柄限制为 [0, <文件描述符的最大数目>) 范围内的数字。例如,select 调用假设每个文件描述符都可以表示为连续位集中的单个位,因此假设文件描述符落在这个范围内是一个很好的假设。

当然,软限制是可以改变的,但这需要进程在启动后自己改变它,所以这是可以接受的。