Linux SMB客户端锁的使用

Linux SMB客户端锁的使用,linux,smb,Linux,Smb,从中,我得到了以下信息 锁定[filenum][r|w][hex start][hex len] 此命令取决于支持CIFS UNIX扩展的服务器,如果服务器不支持,则该命令将失败。尝试在给定范围内设置给定类型的POSIX fcntl锁。用于内部Samba测试目的 但是,我没有找到此命令的示例…… 据我所知,[filenum]是文件名,[r|w]是读写锁。 但我不知道[hex start]和[hex len]是什么。。。。。 有人能帮上忙吗?lock是使用。(事实上,几年前,我编写了一个几乎相同的

从中,我得到了以下信息

锁定[filenum][r|w][hex start][hex len]
此命令取决于支持CIFS UNIX扩展的服务器,如果服务器不支持,则该命令将失败。尝试在给定范围内设置给定类型的POSIX fcntl锁。用于内部Samba测试目的

但是,我没有找到此命令的示例……
据我所知,[filenum]是文件名,[r|w]是读写锁。
但我不知道[hex start]和[hex len]是什么。。。。。
有人能帮上忙吗?

lock
是使用。(事实上,几年前,我编写了一个几乎相同的命令行实用程序,它在锁定指定文件的同时执行单个命令或脚本。)

fcntl()
如果服务器启用了支持,则远程文件系统可以使用锁。特别是,Linux上的服务器肯定有这种能力。在NFS上,它通常被错误配置或完全禁用,因此基于硬链接或锁定目录的锁定方案更常见。可悲的是

从技术上讲,
fcntl()
锁不是文件锁,而是记录锁:文件中的任何字节范围都可以单独锁定,即使是通过不同的进程。最常见的用法是锁定整个文件(通过指定零开始和长度,这样即使附加了文件,也会应用锁定)。如果同时省略
hex start
hex length
参数,则
lock
命令将完全执行此操作

如果确实指定了从
十六进制开始
锁定
,则它指的是锁定区域开始的偏移量。如果省略或使用零
十六进制长度
,则锁定将应用于文件的其余部分,即使文件被追加或截断。如果还指定了
hex-length
,则锁将应用于偏移量[
hex-start
hex-start
+
hex-length
)。前缀显然是指中指定的值

锁是建议性的,因为它们不会阻止对文件的任何类型的访问。每个应用程序都需要调用
fcntl()
,以获得文件上的建议锁;如果所需的锁与同一文件上的其他锁冲突,则调用将阻塞(
F_SETLKW
)或失败(
F_SETLK


问题?

在我的情况下,当我连接到Windows PC并尝试锁定命令(如
lock file\u name r 0 0
)时,它返回
lock failed 0:NT\u STATUS\u UNSUCCESSFUL
。这是Windows PC上的问题还是命令上的问题?@Michaellow:我无法判断该错误是来自smbclient还是来自服务器。请确保文件名不为空或未被其他程序打开,请尝试锁定文件名r,并锁定文件名r 0 9。