繁体   English   中英

文件描述符 go 的值能否超出最大打开文件描述符软限制?

[英]Can value of a file descriptor go beyond max opened file descriptor softlimit?

在我的程序中,我使用文件描述符作为索引将一些与文件描述符相关的数据存储在一个数组中。 因此,如果我创建一个大小等于打开文件描述符的软限制的数组,我将拥有从 0 到(软限制-1)的数组索引。 我的问题是文件描述符 go 的值可以超出这个索引范围吗? (我正在使用 ubuntu 20.4 和 c 语言)。

是的,它可以。 软限制是你可以通过调用ulimit(2)系统调用来改变的东西......所以你可以把它放在实际打开文件的数量之下,这意味着open(2)将在下一次打开时失败,但是它不会影响您现在打开的实际打开文件数。 无论如何......让我们想象一下这种情况:

  • 你打开 97 个文件(加上标准输入、标准输出和标准错误,这使得 100 个打开的描述符从 0 到 99)
  • 您关闭描述符 0 到 49(您仍然打开 50 到 99)。 (注意这个例子不允许你打印任何东西,因为你已经关闭了标准输入、标准输出和标准错误)
  • 您将软限制减少到 75。

您仍然可以再打开 25 个文件(您现在有 50 个打开的文件)......并且 go 的范围在 0 到 24 之间,但其他文件继续从 50 到 99 打开。而且您无法打开更多文件,因为你用完了打开文件的限制。

顺便说一句,您从系统打开的系统调用中获得的描述符始终是可获得的最小值……因此,如果您避免触及 ulimits 最大打开文件数,那么您可以做您想做的事。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM