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

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

Розмір внутрішнього буфера текстів установлюється в системі програмування у 128 байтів. Програміст має можливість змінити його в межах від 1 до 65536 байтів викликом процедури SETTEXTBUF вигляду

settextbuf(f, Buf, Bufsize)

або

settextbuf(f, Buf),

де f - ім' я файлової змінної типу text, Buf - ім' я змінної, тип якої несуттєвий, а Bufsize - вираз цілого типу зі значенням у межах 1..65535. Такий виклик слід записувати після зв' язування файла перед установленням його в початковий стан (читання чи запису).

Змінна Buf використовується як внутрішній буфер, тому доцільно, щоб її довжина була кратною довжині блоку. Якщо розмір буфера (у байтах) Bufsize у виклику не вказано, то він визначається довжиною змінної Buf. Якщо Bufsize указано і менше довжини змінної Buf, то воно задає довжину буфера в межах змінної Buf. Але якщо Bufsize більше довжини Buf, то змінні, розташовані в пам' яті безпосередньо за Buf, використовуються під буфер, і це може призвести до непередбачених наслідків.Приклад 15.1. Розглянемо програму

program GreatBufferManager;

var f : text; Hugebuf : array[1..2]of char;

x, y : char; s : string[4];

begin

assign(f, 'huge.dat'); settextbuf(f, hugebuf, 4);

x:='x'; y:='y';

reset(f); readln(f, s);

writeln('x=', x, '; y=', y);

readln;

end.

Якщо першим рядком тексту в файлі huge.dat є 'qwer', то за виконання цієї програми на екрані з' явиться зовсім не очікуване

x=x; y=y,

а на перший погляд досить дивне

x=e; y=r.

Справа в тім, що змінні x і y фізично розташовані безпосередньо за масивом Hugebuf, і читання чотирьох символів рядка файла в цей буфер призводить до заповнення не тільки масиву, а й змінних за ним. Якщо зробити рядок у файлі трошки довшим, то, запевняємо читача, результати будуть ще несподіванішими. Але не захоплюйтесь, це може стати небезпечним для програми GreatBufferManager.

При виведенні в текст символи накопичуються у внутрішньому буфері, який скидається в зовнішній буфер у разі заповнення або виконання процедури writeln чи close. Можна також задати примусове скидання внутрішнього буфера тексту f викликом процедури FLUSH(f). Його варто записувати для періодичного виконання, а також після всіх виведень у файл. Підкреслимо, що за виклику процедури flush лише скидається внутрішній буфер у зовнішній. Скидання зовнішнього буфера при цьому відбувається лише у випадку його заповнення.


Реферати!

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







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

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

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