我如何模拟缺少文件描述符?

How could I simulate a lack of file descriptor?

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

我一直在想两种可能:

  1. 随机打开数千个文件,直到打开结果为-1
  2. 设置非常少的可用文件描述符(比如标准输入、标准输出和标准错误)。

你会怎么做?

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

在 运行 之前执行 ulimit -n 3 你的 C 程序应该会导致打开更多文件时出错,因为标准输入、标准输出和标准错误占用前 3 个描述符。

一个例子:

$ ulimit -n 3
$ echo > /dev/null
zsh: too many open files: /dev/null

shell 进程本身尝试打开 /dev/null 以在关闭它之前重定向标准输出,因此它会出错。您的 C 程序在第一次调用 fopenopensocket 时将出现完全相同的错误等(或任何分配新文件描述符的东西)。