Подтвердить что ты не робот

Как я могу имитировать отсутствие файлового дескриптора?

Я хотел бы спровоцировать ситуацию, когда не осталось файла-дескриптора.

Я думал о двух возможностях:

  • Открытие тысяч файлов произвольно, пока результат open не будет равен -1
  • Установите очень малое количество доступных дескрипторов файлов (скажем, stdin, stdout и stderr).

Как вы это сделаете?

4b9b3361

Ответ 1

Вы можете ограничить количество дескрипторов файлов, которые процесс может открыть в Linux с помощью ulimit.

Выполнение ulimit -n 3 перед запуском вашей программы C должно сделать ошибку, чтобы открыть больше файлов, поскольку stdin, stdout и stderr занимают первые 3 дескриптора.

Пример:

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

Сам процесс оболочки пытается открыть /dev/null для перенаправления stdout перед его закрытием, поэтому он получает ошибку. Ваша программа C будет получать ту же самую ошибку при первом вызове fopen, открыть, сокет и т.д. (Или что-либо, что выделяет новый файловый дескриптор).