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

Проверка блокировки


При неудачной попытке программы установить блокировку, задав параметр F_SETLK в вызове fcntl, вызов установит значение переменной linuxerror равным Sys_EAGAIN или Sys_EACCESS (в спецификации XSI определены оба эти значения). Если блокировка уже существует, то с помощью команды F_GETLK можно определить процесс, установивший эту блокировку:

uses linux, stdio;

.

.

.

fcntl(fd, F_SETLK, longint(@alock));

if linuxerror <> 0 then

begin

  if (linuxerror = Sys EACCES) or (linuxerror = Sys_EAGAIN) then

  begin

    fcntl(fd, F_GETLK, longint(@b_lock));

    writeln(stderr, 'Запись заблокирована процессом ', b_lock.l_pid);

  end

  else

    perror('Ошибка блокировки');

end;



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