I have mounted a cifs file on two Linux machines. I have a Perl script which can modify the shared file. How do we lock the file over network in this scenario?
我在两台Linux机器上安装了一个cifs文件。我有一个可以修改共享文件的Perl脚本。在这种情况下,我们如何通过网络锁定文件?
4 个解决方案
#1
Looks like we can fcntl() for locking files. I just found its working :) this link might be useful
看起来我们可以用fcntl()来锁定文件。我刚刚发现它的工作:)这个链接可能有用
http://www.cpan.org/scripts/file-handling/flock.using.fcntl.example
Thanks for your response
感谢您的答复
_Anandan
#3
If your file server is Samba, then look also at the smb.conf man page:
如果您的文件服务器是Samba,那么请查看smb.conf手册页:
...
blocking locks (S)
阻塞锁(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
...
locking (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.
#4
I couldn't find a module on CPAN to achieve this. It seems that the modules wrapping libsmbclient do not implement the OPLOCKing portion of the protocol.
我无法在CPAN上找到一个模块来实现这一目标。似乎包装libsmbclient的模块没有实现协议的OPLOCKing部分。
In the smbfs sources, the function smbfs_smb_lock
appears to do what you need. Either write your own XS wrapper module, or use Inline::C.
在smbfs源代码中,函数smbfs_smb_lock似乎可以满足您的需求。编写自己的XS包装器模块,或使用Inline :: C。
#1
Looks like we can fcntl() for locking files. I just found its working :) this link might be useful
看起来我们可以用fcntl()来锁定文件。我刚刚发现它的工作:)这个链接可能有用
http://www.cpan.org/scripts/file-handling/flock.using.fcntl.example
Thanks for your response
感谢您的答复
_Anandan
#2
If you're trying to do this over NFS, try File::NFSLock.
如果您尝试通过NFS执行此操作,请尝试File :: NFSLock。
#3
If your file server is Samba, then look also at the smb.conf man page:
如果您的文件服务器是Samba,那么请查看smb.conf手册页:
...
blocking locks (S)
阻塞锁(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
...
locking (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.
#4
I couldn't find a module on CPAN to achieve this. It seems that the modules wrapping libsmbclient do not implement the OPLOCKing portion of the protocol.
我无法在CPAN上找到一个模块来实现这一目标。似乎包装libsmbclient的模块没有实现协议的OPLOCKing部分。
In the smbfs sources, the function smbfs_smb_lock
appears to do what you need. Either write your own XS wrapper module, or use Inline::C.
在smbfs源代码中,函数smbfs_smb_lock似乎可以满足您的需求。编写自己的XS包装器模块,或使用Inline :: C。