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


         

Описание


uses linux;

Function Select(Nfds:Longint; var readfds,writefds, errorfds:PFDset;

                Var Timeout): Longint;

Первый параметр nfds задает число дескрипторов файлов, которые могут представлять интерес для сервера. Например, если дескрипторы файлов с номерами 0, 1 и 2 присвоены потокам stdin, stdout и stderr соответственно, и открыты еще два файла с дескрипторами 3 и 4, то можно присвоить параметру nfds значение 5. Программист может определять это значение самостоятельно или воспользоваться постоянной FD_SETSIZE, которая определена в файле stdio. Значение постоянной FD_SETSIZE равно максимальному числу дескрипторов файлов, которые могут быть использованы вызовом select.

Второй, третий и четвертый параметры вызова select являются указателями на битовые маски (bit mask), в которых каждый бит соответствует дескриптору файла. Если бит включен, то это обозначает интерес к соответствующему дескриптору файла. Набор readfds определяет дескрипторы, для которых сервер ожидает возможности чтения; набор writefds – дескрипторы, для которых ожидается возможность выполнить запись; набор

errorfds определяет дескрипторы, для которых сервер ожидает появление ошибки или исключительной ситуации, например, по сетевому соединению могут поступить внеочередные данные. Так как работа с битами довольно неприятна и приводит к немобильности программ, существует абстрактный тип данных fdset, а также макросы или функции (в зависимости от конкретной реализации системы) для работы с объектами этого типа. Вот эти макросы для работы с битами файловых дескрипторов:

uses linux;

(* Инициализация битовой маски, на которую указывает fds *)

Procedure FD_ZERO(var fds:fdSet);

(* Установка бита fd в маске, на которую указывает fds *)

Procedure FD_Set(fd:longint;var fds:fdSet);

(* Установлен ли бит fd в маске, на которую указывает fds? *)

Function FD_IsSet(fd:longint;var fds:fdSet):boolean;

(* Сбросить бит fd в маске, на которую указывает fds *)

Procedure FD_Clr(fd:longint;var fds:fdSet);




Содержание  Назад  Вперед