Создание файлов ч-з fopen

Тема в разделе "LANGS.C", создана пользователем samba, 3 апр 2007.

  1. samba

    samba New Member

    Публикаций:
    0
    Регистрация:
    24 авг 2003
    Сообщения:
    65
    Адрес:
    England
    Мне нужно создать очень много файлов (около 50 000) и держать их потоки (FILE* f) в памяти чтобы в любой момент писать в них данные, пишу много, потому выгоднее держать их открытыми.
    Но возникает ситуация что fopen успешно завершается почему то 509 раз, больше файлы создавать не хочет. Почему так происходит, можно ли каким то образом увеличить чисто открытых фалов?
     
  2. rain

    rain New Member

    Публикаций:
    0
    Регистрация:
    22 апр 2006
    Сообщения:
    976
    А зачем так много то обойтись никак нельзя? 50 000 файлов то это мнооого )
     
  3. samba

    samba New Member

    Публикаций:
    0
    Регистрация:
    24 авг 2003
    Сообщения:
    65
    Адрес:
    England
    Прошу тех у кого знания ограничены, кто набирает посты или религия не позволяет ответить по существу не писать в этом топике.


    Хорошо, пусть будет 510 файлов, их нужно открыть, почему fopen может открыть только 509? Можно ли увеличить чисто одновременно открытых файлов? Как?
     
  4. Quantum

    Quantum Паладин дзена

    Публикаций:
    0
    Регистрация:
    6 янв 2003
    Сообщения:
    3.143
    Адрес:
    Ukraine
    На fopen распространяется ограничение FOPEN_MAX. Используйте CreateFile напрямую, но 50000 одновременно открытых файлов - это... мягко говоря, не резонно.
     
  5. _DEN_

    _DEN_ DEN

    Публикаций:
    0
    Регистрация:
    8 окт 2003
    Сообщения:
    5.383
    Адрес:
    Йобастан
    samba

    Закрывай и открывай каждый раз при записи. Сейчас кеш если только на клавиатуру не ставят. Оверхед будет незначительный (если вобще ты его заметишь).
     
  6. q_q

    q_q New Member

    Публикаций:
    0
    Регистрация:
    5 окт 2003
    Сообщения:
    1.706
    samba
    Компилятор укажи.
    Судя по 509 - MSVC. Если да, то анализ crt показывает, что функцией _setmaxstdio можно увеличить количество открываемых файлов до с 512 до 2048 при этом три файла всегда заняты под stdin, stdout и stderr, отсюда 509. Дальнейшее увеличение если и возможно, то только перекомпиляцией crt.

    Quantum
    На fopen распространяется ограничение FOPEN_MAX.
    Наверное, так должно быть в теории.
     
  7. samba

    samba New Member

    Публикаций:
    0
    Регистрация:
    24 авг 2003
    Сообщения:
    65
    Адрес:
    England
    _DEN_, Quantum
    Не подходит. К тому же функции stdio держат блоки по 4кб в памяти и защет этого быстрее идет чтение/запись

    q_q
    К сожалению действительно можно увеличить чисто открытых потоков в stdio до 2048 максимум - ч-з _setmaxstdio(2048), что ж придется обойтись меньшим количеством файлов.

    Всем спасибо.
     
  8. ShadoWich

    ShadoWich New Member

    Публикаций:
    0
    Регистрация:
    11 фев 2007
    Сообщения:
    35
    Да в любом случае, открывать более 500 файлов это бред
    да и даже ближе 400-500 это жесть, кошмар и иж0с.
    при программном кеше это 4-5 файлов...
     
  9. PE_Kill

    PE_Kill New Member

    Публикаций:
    0
    Регистрация:
    16 янв 2006
    Сообщения:
    107
    ИМХО проще свою обертку для CreateFileA написать типа fopenx