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
|