【问题标题】:Is the value of a Linux file descriptor always smaller than the open file limits?Linux 文件描述符的值是否总是小于打开文件的限制?
【发布时间】:2012-09-25 13:25:09
【问题描述】:

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

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

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

【问题讨论】:

    标签: linux


    【解决方案1】:

    是的,值限制在 0 到比 getrlimit() 返回的当前限制小一的范围内。

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

    【讨论】:

    • 谢谢。我电脑上 getrlimit() 的手册页只写了“RLIMIT_NOFILE:此进程的最大打开文件数。”
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-16
    • 2012-10-09
    • 2011-01-31
    • 1970-01-01
    • 2011-04-28
    • 1970-01-01
    相关资源
    最近更新 更多