Описание тега netbsd
Еще один, прямо из Linux-NFS в чаво: nfs.sf.net
Я пытаюсь использовать функции Flock()/БСД замки для блокировки файлов, используемых на нескольких клиентах, но файлы повреждены. Почему? А. стайку()/БСД замков действовать только локально на клиентах NFS в Linux до 2.6.12. Использование вызова fcntl()/POSIX и замки, чтобы убедиться, что блокировка файла видимы для других клиентов.
Вот несколько способов, чтобы сериализовать доступ к файл NFS.
Используйте вызов fcntl()/в POSIX API захвата. Этот тип блокировки обеспечивает блокирование байтового диапазона между несколькими клиентами по протоколу НЛМ или через в NFSv4. Использовать отдельный файл, и создать жесткие ссылки на него. Смотрите описание в разделе o_excl у созда(2) Man-странице. Стоит отметить, что до начала ядрах 2.6, указывает создает не атомные клиентов NFS в Linux. Не используйте указывает создает и ожидать атомной поведения между несколькими клиент NFS, если вы используете ядро новее, чем 2.6.5.
Это известная проблема, что Perl использует функции Flock()/БСД замок по умолчанию. Это может нарушить программ портированы с других операционных систем, таких как Solaris, которые ожидают стая/БСД замки как замки с POSIX.
На Linux, с помощью блокировки файла, а не жесткая ссылка имеет дополнительное преимущество создания контрольных точек кэше клиента с сервером. Когда блокировка файла приобретается, клиент будет очистить кэш страницы для этого файла таким образом, что любое последующее считывание получить новые данные с сервера. При снятии блокировки файла, любые изменения в файле на этом клиенте записываются обратно на сервер пока блокировка не будет освобождена, так что другие клиенты ждут, чтобы зафиксировать, что файл может увидеть изменения.
Клиент NFS в 2.6.12 обеспечивает поддержку функции Flock()/БСД замки на NFS файлы, подражая в стиле BSD замки в плане блокировки диапазона байтов в POSIX. Других NFS-клиентов, которые используют тот же механизм эмуляции, или что использовать вызов fcntl()/в POSIX замков, то увидите те же замки, что клиент NFS для Linux видит.
На локальных файловых систем Linux, блокировку POSIX и BSD замки невидимы друг другу. Таким образом, из-за этой эмуляции приложений, работающих на Linux сервер NFS будет по-прежнему видеть файлы, заблокированные клиенты NFS как заблокированный с вызова fcntl()/POSIX и блокировки, ли приложение на клиент использует BSD-стиля или стиля POSIX, блокировка. Если приложение-сервер использование Flock()в BSD замки, он не увидит блокирует клиентов NFS использовать.