flock

Синтаксис

flock FILEHANDLE, OPERATION

Описание

Вызывает системную функцию flock или ее эмуляцию применительно к FILEHANDLE. Возвращает TRUE в случае успеха и FALSE при ошибке. Вызов приведет к фатальной ошибке, если используется в операционной системе, которая не поддерживает механизмов flock, fcntl или lockf.
Сам по себе flock представляет собой переносимый механизм Perl, предназначенный для реализации блокировки и ориентированный на блокировку файлов целиком (а не на уровне записей).
Аргумент OPERATION может принимать одно из значений: LOCK_SH, LOCK_EX или LOCK_UN, возможно в комбинации с LOCK_NB. Эти константы традиционно равны 1, 2, 8 и 4 соответственно.
Назначение операций: · LOCK_SH запрашивает блокировку режима совместного использования; · L ОС К_Е X запрашивает блокировку для личного использования файла; · LOCK_UN освобождает ранее запрошенную блокировку.
В случае если к кодам операции LOCK_SH или LОСК_ЕХ добавляется код LOCK_NB,то функция flock не ожидает завершения операции блокировки, а немедленно возвращает управление в вызвавшую ее программу.
Следует иметь в виду, что эмуляция режима блокировки, реализуемая посредством lockf, не предусматривает режима блокировки для совместного использования и, кроме того, требует, чтобы указатель FILEHANDLE был открыт в режиме записи файла. Впрочем, большая часть операционных систем реализует механизм lockf в соответствии с блокировкой fcntl.
Обратите также внимание, что некоторые версии flock не позволяют обеспечить блокировку в сетевых файловых системах; для решения этой задачи вам потребуется использовать более системно-ориентированные функции fcntl. При желании вы можете заставить Perl игнорировать системную реализацию функции flock и использовать эмуляцию блокировки на основе функции fcntl.
ПРИМЕЧАНИЕ
Для этого потребуется перекомпилировать Perl, сконфигурировав его (программа Configure) с ключом -Ud_flock.

В качестве примера рассмотрим программу работы с почтовым ящиком в UNIX-системе.
use Fcntl ':flock';   # импортируем константы LOCK_*
sub lock {
  flock(MBOX,LOCK_EX);
# и если что-то добавилось, пока мы
# ожидали...
  seek(MBOX, 0, 2);
}
sub unlock {
  flock(MBOX,LOCK_UN);
}
open(MBOX, ">>/usr/spool/mail/$ENV{'USER'}")
  or die "He могу открыть почтовый ящик: $!";
lock();
print MBOX $msg, "\n\n";
unlock();



2011-04-26 00:53:16 lykich

Thanks




Оставить комментарий:
Ваше Имя:
Email:
Антибот: *  
Ваш комментарий: