1

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

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

我知道我可以使用 、 和 更改打开文件ulimit -nsetrlimit限制/proc/sys/fs/file-max。我只想知道是否可以使用char变量存储打开的套接字文件描述符,如果我已将打开文件限制减少到 128个setrlimit

4

1 回答 1

3

是的,这些值限制在 0 到比 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
这是一个大于系统可以分配给新创建的描述符的最大值的数字。如果超出此限制,分配文件描述符的函数将失败,并将 errno 设置为 [EMFILE]。此限制限制了进程可以分配的文件描述符的数量。

于 2012-09-25T15:01:56.653 回答