flock
не поддерживается через NFS или другие сетевые файловые системы для всех версий unix (даже Linux не поддерживал до 2.6.12).С другой стороны, O_CREAT|O_EXCL
гораздо надежнее во многих других файловых системах и работает намного дольше.
Даже в системах, которые поддерживают flock
в сетевых файловых системах (или в случаях, когда вы неэта гибкость необходима), O_CREAT|O_EXCL
вместе с flock
очень полезны, потому что они различают чистое отключение и не чистое отключение.flock
услужливо уходит автоматически, но также бесполезно не различает почему он ушел.
Флокирование самого файла предотвращает атомарную запись (копирование, удаление старого, переименование)или любой другой случай, когда вы можете стереть существующий файл.Иногда «фактический файл» не всегда имеет один и тот же индекс во время всего запуска программы.Так что отдельный файл гораздо удобнее и в этих случаях.Это очень распространено в тех случаях foo.lck
, потому что часто вы блокируете foo
на короткий промежуток времени и можете удалить его в процессе.