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


         

тип последнего параметра может меняться


uses linux;
/* Примечание: тип последнего параметра может меняться */
Function Fcntl(filedes:longint;Cmd:Integer):integer;
Function Fcntl(var filedes:Text;Cmd:Integer):integer;
Procedure Fcntl(Fd:text;Cmd:Integer;Arg:longint);
Procedure Fcntl(Fd:longint;Cmd:longint;Arg:Longint);
Системный вызов fcntl работает с открытым файлом, заданным дескриптором файла filedes. Конкретная выполняемая функция задается выбором одного из значений параметра cmd из модуля linux. Тип третьего параметра зависит от значения параметра cmd. Например, если вызов fcntl используется для установки флагов статуса файла, тогда третий параметр будет целым числом. Если же, как можно будет увидеть позже, вызов fcntl будет использоваться для блокировки файла, то третий параметр будет указателем на структуру lock. Иногда третий параметр вообще не используется.
Некоторые из этих функций относятся к взаимодействию файлов и процессов, и мы не будем рассматривать их здесь; тем не менее две из этих функций, заданные значениями F_GETFL и F_SETFL параметра cmd, представляют для нас сейчас интерес.
При задании параметра F_GETFL вызов fcntl возвращает текущие флаги статуса файла, установленные вызовом fdopen. Следующая функция filestatus использует fcntl для вывода текущего статуса открытого файла.
(*
 * Функция filestatus описывает текущий статус файла
 *)
uses linux;
function filestatus(filedes:integer):integer;
var
  arg1:integer;
begin
  arg1 := fcntl (filedes, F_GETFL);
  if arg1 = -1 then
  begin
    writeln('Ошибка чтения статуса файла');
    filestatus := -1;
    exit;
  end;
  write('Дескриптор файла ', filedes, ': ');
  (*
   * Сравнить аргумент с флагами открытия файла.
   *)
  case (arg1 and Open_ACCMODE) of
    Open_WRONLY:
      write('Только для записи');
    Open_RDWR:
      write('Для чтения-записи');
    Open_RDONLY:
      write('Только для чтения');
    else
      write('Режим не существует');
  end;
  if (arg1 and Open_APPEND)<>0 then

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