Linux文件描述符的“值”是否始终小于打开文件限制?
理论上,系统应重用封闭文件描述符的标识值。在一个进程中打开1021个文件后,默认情况下我应该得到文件描述符值,范围从0,1,2到1023。如果我想打开另一个文件,我必须使用close
发布一些文件描述符,当我再次调用open
时,系统将重新使用这些已发布的身份。因此,在这种情况下,文件描述符的最大整数值应为1023。这是对的吗?
我知道我可以使用ulimit -n
,setrlimit
和/proc/sys/fs/file-max
更改打开的文件限制。我只想知道是否可以使用char
变量存储已打开的套接字文件描述符,如果我使用setrlimit
将打开文件限制减少到128。
答案 0 :(得分:3)
是的,这些值被限制在从getrlimit()返回的当前限制的0到1的范围内。
From the getrlimit() man page:
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.)
From the Open Group Base Specification:
RLIMIT_NOFILE
这是一个大于系统可能分配给新创建的描述符的最大值的数字。如果这个限制是 超出,分配文件描述符的函数将失败 错误设置为[EMFILE]。此限制会限制文件数 进程可以分配的描述符。