Ответ 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, открыть, сокет и т.д. (Или что-либо, что выделяет новый файловый дескриптор).