FUKS
Зарегистрирован: 14.04.2002 Сообщения: 148 Откуда: Москва
|
Добавлено: Пн Авг 02 2004 16:26 Заголовок сообщения: Как на Perl'е открыть файл-семафор? |
|
|
Несколько потоков хотят открывать несколько файлов из списка (по одному). Если первый файл уже открыт, поток должен получать ошибку типа access denied, не блокируясь, и пытаться открыть следующий файл. Попробовал открыть его в одном и том же потоке для чтения-записи несколько раз подряд:
Код: | for (1..13) {
$r = open (FILE, "+<filename");
print $r?"FILE=".ord(FILE)."\n":"Ошибка: $!\n"
} |
При этом он все 13 раз открывается и рисует одно и то же значение полученного дескриптора. И в случае повторного открытия из другого потока тоже будет открываться без ошибки?
Порыл в man flock и уловил, что надо сначала открыть файл, а потом его зафлочить со значением LOCK_EX | LOCK_NB, тогда если он уже открыт и зафлочен, следующая попытка так же зафлочить его не будет блокироваться. Однако повторный flock этого файла в том же потоке опять же проходит так же успешно, как и первый.
Где же истина? |
|