Зворотний зв'язок

Ідея буферизації

Розглянемо програму посимвольного копіювання файлів:

program StupidCopy;

var f, g : file of char; c : char; s : string;

begin

writeln('Задайте ім'я початкового файла');

readln(s); assign(f, s);

writeln('Задайте ім'я цільового файла');

readln(s); assign(g, s);

reset(f); rewrite(g);

while not eof(f) do

begin

read(f, c); write(g, c);

end;

close(f); close(g);

end.Здається, що при виконанні цієї простенької програмки все гаразд, оскільки за рахунок використання буферів фізичні файли читаються-записуються порціями по кілька блоків, пристрої при цьому працюють найкращим чином, а переміщення інформації відбуваються головним чином усередині оперативної пам' яті, тобто швидко.

Спробуйте запустити її на виконання, указавши вхідним файл розміром у кілька сотень кілобайтів - виконання займе секунди й десятки секунд. Напрошується висновок, що при її виконанні дещо здійснюється не найкращим чином. Розглянемо один із способів прискорення роботи з файлами.

Система Турбо Паскаль дозволяє створити додатковий власний буфер і власноруч описати його застосування. Це виявляється набагато ефективнішим від використання буферів, що забезпечуються системою. А реалізується це за допомогою безтипових файлів.

Тип безтипових файлів задається словом file. Файлову змінну цього типу, як і всіх інших файлових типів, треба спочатку зв' язати з фізичним файлом і відкрити, установивши в початковий стан для читання чи запису. Процедури відкривання RESET і REWRITE тут мають по 2 параметри. Крім імені файлової змінної, у їх виклику вказується розмір "зовнішнього буфера" в байтах. Цей буфер ще називається блоком і явно в Паскаль-програмі не позначається. Через нього дані копіюються з фізичного файла до "внутрішнього буфера". Розмір блока може бути в межах від 1 до 65535. Як не дивно, найкраще встановити його рівним 1:

ReSet(f, 1) або ReWrite(g, 1).

Чому саме так, ми скажемо далі.

Уся подальша обробка безтипового файла описується зовсім іншими засобами.


Реферати!

У нас ви зможете знайти і ознайомитися з рефератами на будь-яку тему.







Не знайшли потрібний реферат ?

Замовте написання реферату на потрібну Вам тему

Замовити реферат