Скачать Открытие более 15 файлов в Паскале

04.01.1994
Скачать файл (1,21 Кб)




Возможно, некоторым из работающих в 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);