我怎么能模拟缺少文件描述符?

ano*_*est 20 c linux file-descriptor

我想挑起一个没有文件描述符的情况.

我一直在考虑两种可能性:

  1. 随机打开数千个文件,直到打开结果为-1
  2. 设置一个非常低数量的文件描述符(比如stdin,stdout和stderr).

你会怎么做?

Mat*_*hew 31

您可以使用ulimit限制进程在Linux下打开的文件描述符的数量.

执行ulimit -n 3运行你的C程序应该让错误打开任何文件之前,因为标准输入,标准输出,和stderr占用前3个描述符.

一个例子:

$ ulimit -n 3
$ echo > /dev/null
zsh: too many open files: /dev/null
Run Code Online (Sandbox Code Playgroud)

shell进程本身会尝试打开/ dev/null来重定向stdout,然后将其关闭,因此会出错.第一次调用fopen,open,socket等(或任何分配新文件描述符的东西)时,你的C程序将被输入完全相同的错误.