0

这里,我得到了以下信息....

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

但是,我没有找到该命令的示例......根据
我的理解,[filenum] 是文件名,[r|w] 是读和/或写锁。
但我不知道 [hex-start] 和 [hex-len] 是什么.....有人可以帮忙吗?

4

1 回答 1

1

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

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

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

如果您确实指定了hex-startto lock,它指的是锁定区域开始的偏移量。如果省略或使用 zero hex-length,则锁定适用于文件的其余部分,即使文件已附加或截断。如果您还指定hex-length,则锁定适用于偏移量 [ hex-start, hex-start+ hex-length)。hex-前缀显然是指以hexadecimal指定的值。

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

问题?

于 2013-10-03T06:41:44.030 回答