Это может быть жестким ограничением вашего libc. Некоторые версии solaris имеют аналогичное ограничение, поскольку они хранят fd
как unsigned char
в структуре FILE
. Если это касается и вашего libc, вы, возможно, не сможете делать то, что хотите.
Насколько я знаю, такие вещи, как setrlimit
, влияют только на то, сколько файлов вы можете открыть с помощью open
(fopen почти наверняка реализован в терминах open
). Поэтому, если это ограничение находится на уровне libc, вам понадобится альтернативное решение.
Конечно, вы всегда можете не использовать fopen
и вместо этого использовать системный вызов open
, доступный практически для каждого варианта unix.
Недостатком является то, что вы должны использовать write
и read
вместо fwrite
и fread
, которые не выполняют такие функции, как буферизация (это все делается в вашей libc, а не самой ОС) , Так что это может стать узким местом в производительности.
Можете ли вы описать сценарий, который требует 400 файлов, открытых ** одновременно **? Я не говорю, что нет такого случая, когда это необходимо. Но если вы опишите ваш вариант использования более четко, то, возможно, мы можем порекомендовать лучшее решение.