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