Системное программирование в UNIX средствами Free Pascal

       

а затем открывает его для


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.


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.

Содержание раздела