Что за и против блокировки реального файла против пустого файла блокировки? - PullRequest
0 голосов
/ 12 марта 2019

Моя программа пишет в двоичный файл, и может быть несколько экземпляров программы, получающих доступ к одному и тому же двоичному файлу для одного и того же пользователя. В Unix / Linux я вижу, что некоторые программы (в частности, процессы-демоны) блокируют пустой файл блокировки вместо реальных общих данных, которые необходимо заблокировать (поэтому вместо блокировки ~/.data/foo они блокируют ~/.data/foo.lck). Каковы плюсы и минусы блокировки действительного файла по сравнению с пустым файлом блокировки?

Ответы [ 2 ]

1 голос
/ 12 марта 2019

flock не поддерживается через NFS или другие сетевые файловые системы для всех версий unix (даже Linux не поддерживал до 2.6.12).С другой стороны, O_CREAT|O_EXCL гораздо надежнее во многих других файловых системах и работает намного дольше.

Даже в системах, которые поддерживают flock в сетевых файловых системах (или в случаях, когда вы неэта гибкость необходима), O_CREAT|O_EXCL вместе с flock очень полезны, потому что они различают чистое отключение и не чистое отключение.flock услужливо уходит автоматически, но также бесполезно не различает почему он ушел.

Флокирование самого файла предотвращает атомарную запись (копирование, удаление старого, переименование)или любой другой случай, когда вы можете стереть существующий файл.Иногда «фактический файл» не всегда имеет один и тот же индекс во время всего запуска программы.Так что отдельный файл гораздо удобнее и в этих случаях.Это очень распространено в тех случаях foo.lck, потому что часто вы блокируете foo на короткий промежуток времени и можете удалить его в процессе.

0 голосов
/ 12 марта 2019

Я вижу три минуса пустого файла блокировки:

  • Пользовательские разрешения каталога должны позволять вам создавать файл.
  • В случае проблем с дисковым пространством, этоможет произойти сбой.
  • В случае сбоя вашей программы файл блокировки все еще присутствует.

Я вижу один довод в пользу изменения имени фактического файла:

  • В случае сбоя вашей программы ваш файл был изменен (только имя файла, но это может привести к путанице).

Очевидно, я вижу одно большое преимущество пустого файла блокировки:

  • Ваш исходный файл не изменяется вообще.

Кстати, я считаю, что этот вопрос лучше подходит для сообщества SoftwareEngineering .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...