Date: Sat, 19 Jun 2004 19:49:36 +0600
From: Yar Tikhiy <yar@comp.chem.msu.su.>
Newsgroups: ftn.ru.unix.bsd
Subject: Методы блокировки файлов в Unix
AM> Граждане!!! Hу Будьте милосердны, скажите какими средствами блокировать
AM> открытые файлы. А то перенес файл сервер с виндовса на FreeBSD и за два
AM> дня три потерянных файла.
AM> Пользователи привыкли что если файл кем то открыт то он у них
AM> открывается в режиме только чтение, а тут такая подстава - хоть обратно
AM> на виндовс откатывайся.
AM> Вы мне только направление скажите - ман чего, или читать там-то, а
AM> дальше я найду.
Почему это ты в повторном вопле об NFS умолчал? ;-)
AM> Hе дайте погибнуть
Что тут можно сказать? OpenOffice sucks, коль он не умеет сам
блокировать свои файлы (то, что называется блокировка на уровне
приложения -- application-level file locking). Ведь давно
известно, что:
а) в большинстве Unix нет таких средств блокировки файлов, чтобы
файл вообще нельзя было открыть;
б) предлагаемые разными интерфейсами блокировки на уровне системы
(flock, lockf, fcntl) являются "совещательными" (advisory), то
есть, они могут закрыть доступ к файлу или его части только тем
процессам, которые послушно используют ту же схему блокировки
-- зловредный или невежественный процесс все равно может открыть
файл и делать с ним все, что заблагорассудится;
в) далеко не во всех системах Unix, предлагающих несколько интерфейсов
к блокировке на уровне системы, эти интерфейсы могут правильно
взаимодействовать друг с другом, когда разные процессы используют
разные вызовы: в FreeBSD, к примеру, с этим все в порядке, а вот
в Linux, насколько мне известно, с некой версии ядра flock и fcntl
больше не видят блокировок друг друга;
г) даже эти средства блокировки на уровне системы чаще всего не
работают по NFS, потому что блокировка в NFS до сих пор остается
незавершенным экспериментом (как вам этот абзац из rpc.lockd(8)
FreeBSD?):
The current implementation provides only the server side of
the protocol (ie. clients running other OS types can establish
locks on a FreeBSD fileserver, but there is currently no means
for a FreeBSD client to establish locks).
Разве что если все Unix в сети будут называться Solaris, блокировка
по NFS, надеюсь, заработает.
В твоем конкретном случае можно пересадить всех юзеров за Windows
в надежде, что тогда они хотя бы через Samba друг друга блокировать
будут. Или поставить перед каждым по X-терминалу (например, запустив
X-серверы под Unix и Windows) и сказать юзерам, чтобы те запускали
свои OpenOffice на одном и том же хосте, опять-таки в надежде, что
OpenOffice тогда сможет использовать "совещательные блокировки"
(на ум приходит красивое словосочетание "сервер приложений").
А может, я зря на OpenOffice гоню и все дело в его неудачной
настройке. Hо тогда, опять же, копать надо в сторону
"application-level file locking".
Прошу прощения за многословность -- просто мне кажется, что данная
проблема затрагивает самые разные аспекты использования Unix, от
построения пользовательских сетей до написания прикладных программ.