Как я могу заблокировать общие файлы в сети Linux в Perl? - PullRequest
1 голос
/ 17 июля 2009

Я смонтировал файл cifs на двух компьютерах с Linux. У меня есть сценарий Perl, который может изменить общий файл. Как мы можем заблокировать файл по сети в этом сценарии?

Ответы [ 4 ]

2 голосов
/ 17 июля 2009

Похоже, мы можем fcntl () для блокировки файлов. Я только нашел его работающим :) эта ссылка может быть полезной

http://www.cpan.org/scripts/file-handling/flock.using.fcntl.example

Спасибо за ваш ответ

_Anandan

1 голос
/ 17 июля 2009

Если ваш файловый сервер Samba, посмотрите также на справочную страницу smb.conf:

...

блокирующие замки (S)

       This parameter controls the behavior of smbd(8) when given a request by a client
       to obtain a byte range lock on a region of an open file, and the request has a
       time limit associated with it.

       If this parameter is set and the lock range requested cannot be immediately
       satisfied, samba will internally queue the lock request, and periodically attempt
       to obtain the lock until the timeout period expires.

       If this parameter is set to no, then samba will behave as previous versions of
       Samba would and will fail the lock request immediately if the lock range cannot
       be obtained.

       Default: blocking locks = yes

...

блокировка (S)

       This controls whether or not locking will be performed by the server in response
       to lock requests from the client.

       If locking = no, all lock and unlock requests will appear to succeed and all lock
       queries will report that the file in question is available for locking.

       If locking = yes, real locking will be performed by the server.

       This option may be useful for read-only filesystems which may not need locking
       (such as CDROM drives), although setting this parameter of no is not really
       recommended even in this case.

       Be careful about disabling locking either globally or in a specific service, as
       lack of locking may result in data corruption. You should never need to set this
       parameter.
1 голос
/ 17 июля 2009

Если вы пытаетесь сделать это через NFS, попробуйте File :: NFSLock .

0 голосов
/ 17 июля 2009

Я не смог найти модуль на CPAN для достижения этой цели. Кажется, что модули, обертывающие libsmbclient, не реализуют часть протокола OPLOCKing.

В источниках smbfs функция smbfs_smb_lock, кажется, делает то, что вам нужно. Либо напишите свой собственный модуль-обертку XS, либо используйте Inline :: C.

...