Linux文件描述符的值是否总是小于打开的文件限制?

Linux文件描述符的“值”是否总是小于打开的文件限制?

理论上,系统应该重新使用封闭文件描述符的标识值。 在一个进程中打开1021个文件之后,我应该得到的文件描述符的值默认为0,1,2到1023。 如果我想打开另一个文件,我必须close一些文件描述符,当我再次open时,系统将重新使用这些已释放的身份。 所以在这种情况下文件描述符的最大整数值应该是1023。 那是对的吗 ?

我知道我可以用ulimit -nsetrlimit/proc/sys/fs/file-max来改变打开的文件限制。 我只是想知道是否我可以存储一个打开的套接字文件描述符与一个charvariables,如果我已经减less打开文件限制为128 setrlimit

是的,这些值被限制在从0到1之间的范围,比getrlimit()返回的当前限制还要小。

从getrlimit()手册页:

  RLIMIT_NOFILE Specifies a value one greater than the maximum file descriptor number that can be opened by this process. Attempts (open(2), pipe(2), dup(2), etc.) to exceed this limit yield the error EMFILE. (Historically, this limit was named RLIMIT_OFILE on BSD.) 

从开放组织基本规范:

RLIMIT_NOFILE
这比系统分配给新创建的描述符的最大值大1。 如果超出此限制,则分配文件描述符的函数将失败,并将errno设置为[EMFILE]。 此限制限制了进程可能分配的文件描述符的数量。