Скачиваний:
65
Добавлен:
08.01.2014
Размер:
2.6 Mб
Скачать

11.14. Вспомогательные процедуры

Этот раздел будет посвящен краткому описанию различных дополнительных процедур стандартной библиотеки ввода/вывода. Более подробная информация содержится в справочном руководстве системы.

11.14.1. Процедуры freopen и fdopen Описание

uses stdio;

function freopen(filename:pchar; _type:pchar; oldstream:pfile):pfile;

function fdopen(fildes:longint; _type:pchar):pfile;

Процедура freopen закрывает поток oldstream, а затем открывает его для ввода из файла filename. Параметр _type определяет режим доступа к новой структуре TFILE и принимает те же значения, что и аналогичный аргумент процедуры fopen (строки r, w и др.). Процедура freopen обычно используется для перенаправления stdin, stdout или stderr, например:

if freopen('new.input', 'r', stdin) = nil then

fatal('Невозможно перенаправить stdin');

Процедура fdopen связывает новую структуру TFILE с целочисленным дескриптором файла filedes, полученным при выполнении одного из системных вызовов fdcreat, fdopen, assignpipe или dup2.

В случае ошибки обе процедуры возвращают nil.

11.14.2. Управление буфером: процедуры setbufи setvbuf Описание

uses stdio;

procedure setbuf(stream:pfile; buf1:pchar);

function setvbuf(stream:pfile; buf1:pchar; _type:longint; size:longint):

integer;

Эти процедуры позволяют программисту в некоторой степени управлять буферами потоков. Они должны использоваться после открытия файла, но до первых операций чтения или записи.

Процедура setbuf подставляет буфер buf1 вместо буфера, выделяемого стандартной библиотекой ввода/вывода. Размер сегмента памяти, на который указывает параметр buf1, должен быть равен константе BUFSIZ, определенной в файле stdio.

Процедура setvbuf позволяет осуществлять более тонкое управление буферизацией, чем процедура setbuf. Параметр buf2 задает адрес нового буфера, а параметр size – его размер. Если вместо адреса буфера передается значение nil, то используется буферизация по умолчанию. Параметр _type в процедуре setvbuf определяет метод буферизации потока stream. Он позволяет настроить поток для использования с конкретным типом устройства, например, для дисковых файлов или терминальных устройств. Возможны три значения _type, они определены в файле stdio:

_IOFBF

Поток файла буферизуется полностью. Этот режим включен по умолчанию для всех потоков ввода/вывода, не связанных с терминалом. Данные при этом будут записываться или считываться блоками размером BUFSIZ байтов для обеспечения максимальной эффективности

_IOLBF

Вывод буферизируется построчно, и буфер сбрасывается при записи символа перевода строки. Он также очищает буфер вывода при его заполнении или при поступлении запроса на ввод. Этот режим включен по умолчанию для терминалов и служит для поддержки интерактивного использования

_IOBNF

Ввод и вывод не буферизуются. В этом случае параметры buf2 и size игнорируются. Этот режим иногда необходим, например, для записи диагностических сообщений в файл протокола

Обратите внимание, что при задании недопустимого значения любого из параметров type или size процедура setvbuf возвращает ненулевое значение. В случае успеха возвращается 0.

Соседние файлы в папке Полищук, Семериков. Системное программирование в UNIX средствами Free Pascal