Я хотел бы спровоцировать ситуацию, когда нет дескриптора файла.Как я могу имитировать отсутствие дескриптора файла?
Я думал о 2 возможности:
- не Открытие тысячи файлов в случайном порядке, пока результат ОТКРЫТО -1
- Установите очень низкое количество дескриптора файла, доступный (скажем, STDIN, STDOUT и STDERR).
Как вы это сделаете?
Или использовать ['setrlimit'] (http://linux.die.net/man/2/setrlimit) из C. – o11c
Создает ли оболочка файловые дескрипторы при нерестах внешней программы? Я думаю, что трубопровод, по крайней мере, должен будет использовать 'pipe (2)', и различные виды замещения могут также вызвать проблемы. По крайней мере, вы должны знать, что этот ulimit сильно помешает вашей оболочке. – Kevin
@Kevin, перенаправление может быть выполнено с помощью 'dup (2)', 'dup2 (2)' или 'pipe (2)', но когда оболочка просто запускает программу и просто вилки и использует 'execve (2)' который проходит через первые 3 дескриптора без создания новых подпроцессов. Для фактического перенаправления, независимо от того, что вы используете, создается дескриптор, поскольку дескриптор дублируется до его переназначения/присоединения, поскольку stdin уже привязан к дескриптору stdin оболочки. Предел может быть снова поднят после теста до верхнего предела по умолчанию (см. Значение по умолчанию с 'ulimit -n'). – Matthew