Мне нужно создать очень много файлов (около 50 000) и держать их потоки (FILE* f) в памяти чтобы в любой момент писать в них данные, пишу много, потому выгоднее держать их открытыми. Но возникает ситуация что fopen успешно завершается почему то 509 раз, больше файлы создавать не хочет. Почему так происходит, можно ли каким то образом увеличить чисто открытых фалов?
Прошу тех у кого знания ограничены, кто набирает посты или религия не позволяет ответить по существу не писать в этом топике. Хорошо, пусть будет 510 файлов, их нужно открыть, почему fopen может открыть только 509? Можно ли увеличить чисто одновременно открытых файлов? Как?
На fopen распространяется ограничение FOPEN_MAX. Используйте CreateFile напрямую, но 50000 одновременно открытых файлов - это... мягко говоря, не резонно.
samba Закрывай и открывай каждый раз при записи. Сейчас кеш если только на клавиатуру не ставят. Оверхед будет незначительный (если вобще ты его заметишь).
samba Компилятор укажи. Судя по 509 - MSVC. Если да, то анализ crt показывает, что функцией _setmaxstdio можно увеличить количество открываемых файлов до с 512 до 2048 при этом три файла всегда заняты под stdin, stdout и stderr, отсюда 509. Дальнейшее увеличение если и возможно, то только перекомпиляцией crt. Quantum На fopen распространяется ограничение FOPEN_MAX. Наверное, так должно быть в теории.
_DEN_, Quantum Не подходит. К тому же функции stdio держат блоки по 4кб в памяти и защет этого быстрее идет чтение/запись q_q К сожалению действительно можно увеличить чисто открытых потоков в stdio до 2048 максимум - ч-з _setmaxstdio(2048), что ж придется обойтись меньшим количеством файлов. Всем спасибо.
Да в любом случае, открывать более 500 файлов это бред да и даже ближе 400-500 это жесть, кошмар и иж0с. при программном кеше это 4-5 файлов...