Информационный сервер для программистов: Исходники со всего света. Паскальные исходники со всего света
  Powered by Поисковый сервер Яndex: Найдется ВСЁ!
На Главную Исходники Форум Информер Страны мира
   Файловые Утилиты    >>    maxfiles
   
 
 Открытие более 15 файлов в Паскале   Виктор Вагнер 04.01.1994

Функция, позволяющая открыть много файлов одновременно



1k 
 

From: Vitus B. Wagner <vitus@agropc.msk.su> Organization: Agroecological problems Center Возможно, некоторым из работающих в Turbo-Pascal приходилось встречаться с Runtime error 4 - too many open files. В help по этому поводу написано: >DOS never allows more than 15 open files per >process. При этом совершенно непонятно, зачем мы пишем в CONFIG.SYS FILES=40 или что-то вроде этого. Могу вас обрадовать, дорогие коллеги. Вышеприведенная цитата из Help просто неверна. DOS allows по меньшей мере столько open files per process, сколько указано в CONFIG.SYS. Ее только нужно об этом явно попросить. Для этого можно применить следующую коротенькую функцию: function MaxFiles ( FileCount:Integer ):integer;assembler; asm MOV AH,67H MOV BX,FileCount INT 21H JC @@ERROR SUB AX,AX @@ERROR: end; Эта функция получает в качестве параметра число файлов, которое вы хотите открыть и возвращает 0 в случае успеха и код ошибки DOS в случае ошибки. (см. Help по переменной DosError). Утверждается, что при наличии свободной памяти эта функция позволяет открыть даже больше файлов, чем указано в CONFIG.SYS. Я попробовал - не получилось. (Примечание. Задавая FileCount учитывайте, что всегда открыто 5 стандартных файлов: StdIn, StdOut, StdErr, StdPrn и StdAux) Для тех, кто пользуется Turbo Pascal версии 5.x и не имеет возможности вос- пользоваться встроенным ассемблером, приведу текст той же функции в виде inline (сомневаюсь, что вы будете вызывать ее более, чем из одного места программы) Function MaxFiles (FileCount:Integer):Integer; inline($B4/$67/$5B/$CD/$21/$72/$02/$29/$C0); Vitus Wagner vitus@agropc.msk.su