1.1, Сергей (??), 17:08, 20/01/2005 [ответить]
| +/– |
А если чужой файл появился в промежутке между
if (-f $cfg_glob_lock){
и
open(LOCK,">$cfg_glob_lock"); ?
man 2 open
/EX
Все другие варианты, к сожалению, нерабочие ;( | |
|
2.2, Maxim Chirkov (ok), 23:22, 20/01/2005 [^] [^^] [^^^] [ответить]
| +/– |
>А если чужой файл появился в промежутке между
>if (-f $cfg_glob_lock){
>open(LOCK,">$cfg_glob_lock"); ?
Полностью согласен, поправил в контексте использования sysopen(LOCK,$cfg_glob_lock, O_CREAT|O_EXCL|O_WRONLY), можно также вариант блокировки хардлинками привести.
Для борьбы с использованием Race Condition в плане безопасности еще хорошо помогает монтирование world writable разделов с nosymfollow и создание локов/временных файлов в недоступных для посторонних местах.
| |
|
3.3, Сергей (??), 09:06, 21/01/2005 [^] [^^] [^^^] [ответить]
| +/– |
Ещё (я не зануда ;-):
лучше всё-таки использовать символьные константы O_CREAT и прочие, они от юникса к юниксу отличаются, а мы же боремся за переносимость ;)
И по поводу хардлинков не всё так просто: на монтированных файловых системах, типа той же самбы, их не будет, что приведёт к очевидным проблемам.
Впрочем, вариант с open тоже имеет трудности на некоторых реализациях NFS, но этим, пожалуй, уж точно можно пренебречь. | |
|
4.4, Maxim Chirkov (ok), 10:01, 21/01/2005 [^] [^^] [^^^] [ответить]
| +/– |
>лучше всё-таки использовать символьные константы O_CREAT и прочие, они от юникса к
>юниксу отличаются, а мы же боремся за переносимость ;)
Поправил.
>И по поводу хардлинков не всё так просто: на монтированных файловых системах,
>типа той же самбы, их не будет, что приведёт к очевидным
>проблемам.
>Впрочем, вариант с open тоже имеет трудности на некоторых реализациях NFS, но
>этим, пожалуй, уж точно можно пренебречь.
А для samba разделов open лок точно без проблем работает ? Просто на них тот же File::Find без рукоприкладства ($File::Find::dont_use_nlink=1) неработоспособен.
Впринципе, для локов хардлинками на CPAM есть готовый модуль File::NFSLock.
| |
|
5.5, Сергей (??), 15:12, 21/01/2005 [^] [^^] [^^^] [ответить]
| +/– |
Да, open точно работает, по крайней мере на C я проверял. Perl тоже должен, обвязка же в итоге сводится к вызову open(2) AFAIK.
Не работает для платформ DOS-OS2-Win, там только через rename, потому что очень сильно зависит от реализации библиотеки, да и в случае хорошей библиотеки нельзя закладываться на это ;-(
Мака под рукой нету, VMS тоже, на них не проверял ;-) | |
|
|
|
|
1.6, Критик (?), 13:50, 24/02/2005 [ответить]
| +/– |
Пародон, а чем use Proc::Lock::File; уже устарел??? | |
|