Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C++ Builder > Максимальное число одновременно открытых файлов


Автор: vlad2 10.8.2011, 18:35
Для открытия файла используется функция fopen. Если количество одновременно открытых файлов превышает максимум, то fopen не работает. По умолчанию установлено ограничение на 50 файлов:
в stdio.h стоит "#define FOPEN_MAX (_NFILE_)", а в _nfile.h - "#define _NFILE_ 50". 
Как обойти это ограничение, или увеличить порог?
Спасибо.

Автор: Alca 10.8.2011, 19:00
Скорее всего, никак

Добавлено @ 19:02
А билдер здесь где?

Добавлено @ 19:02
Цитата

The running environment supports at least FOPEN_MAX files open simultaneously;

Автор: vlad2 10.8.2011, 19:16
Цитата(Alca @  10.8.2011,  19:00 Найти цитируемый пост)
А билдер здесь где?

Программирую на BCB 2006. В моём случае другие функции не подходят или почти не подходят. 50 файлов - это старое ограничение, странно, что оно ещё осталось даже в RAD Studio XE.

Автор: Alca 10.8.2011, 19:33
У дебилдера есть  что-то вроде TFilestream

Добавлено через 4 минуты и 38 секунд
Цитата

странно


Linux user-exm-5 2.6.38-10-generic #46-Ubuntu SMP Tue Jun 28 15:05:41 UTC 2011 i686 i686 i386 GNU/Linux

Код

define FOPEN_MAX 16

Автор: vlad2 11.8.2011, 10:08
Цитата(Alca @  10.8.2011,  19:33 Найти цитируемый пост)
У дебилдера есть  что-то вроде TFilestream
Да, есть. Таких ограничений на открытые файлы там нет, но есть большой минус - отсутствие построчного считывание текстового файла, в который каждую секунду добавляются новые строки.

Автор: Alca 11.8.2011, 10:56
глянь здесь http://bcbjournal.org/articles/vol2/9803/File_I_O.htm?PHPSESSID=20dcb6985671b5fb18b5bc225da381b7

Автор: vlad2 11.8.2011, 11:30
Спасибо, Alca, за ссылку. Первые два способа мне не подходят по причине ограничений на количество одновременно открытых файлов (50), а в TFilestream нет построчного считывания, нужны дополнительные действия, которые замедлят обработку: каждую секунду в открытые по сети файлы добавляются новые строки (другим пользователем), и мне нужно сразу же отображать эти изменения. И таких файлов много, пока около 60, а будет больше. 

Автор: Alca 11.8.2011, 12:45
WInAPI пробывал?

Добавлено через 3 минуты и 4 секунды
Цитата

нет построчного считывания

так сделай

Автор: vlad2 11.8.2011, 12:53
Цитата(Alca @  11.8.2011,  12:45 Найти цитируемый пост)
WInAPI пробывал?
 Нет, но построчного считывания там тоже нет.

Цитата(Alca @  11.8.2011,  12:45 Найти цитируемый пост)
так сделай
Только это и остаётся.

Автор: Alca 11.8.2011, 18:32
Допили это http://www.viksoe.dk/code/atlfile.htm под себя

Автор: vlad2 11.8.2011, 19:02
Спасибо, Alca, посмотрю.  Список функций и исходник глянул, но построчного считывания там тоже, вроде, нет, надо ручками.
Сейчас моя задача сильно упростилась - строки постоянной длины, поэтому обошёлся просто считыванием буфера постоянной длины. Использую функции из SysUtils (подобные TFileStream). Уже проверил, работает.
Потом, если понадобится сделать универсальную задачу, буду думать.
Думаю, тему можно пока закрыть. Спасибо за помощь.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)