【问题标题】:Usage of smbclient locksmbclient锁的使用
【发布时间】:2013-09-21 14:26:57
【问题描述】:

来自here,我得到了以下信息......

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

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

【问题讨论】:

    标签: linux smb


    【解决方案1】:

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

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

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

    如果您指定hex-start 到lock,它指的是锁定区域开始的偏移量。如果您省略或使用零 hex-length,则锁定适用于文件的其余部分,即使文件被追加或截断。如果您还指定hex-length,则锁定适用于偏移量[hex-start,hex-start+hex-length)。 hex- 前缀显然是指hexadecimal 中指定的值。

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

    问题?

    【讨论】:

    • 就我而言,当我连接到 Windows PC 并尝试像 lock file_name r 0 0 这样的锁定命令时,它会返回 lock failed 0: NT_STATUS_UNSUCCESSFUL。是Windows PC的问题还是命令的问题?
    • @MichaelLaw:我不知道该错误是来自 smbclient 还是来自服务器。确保文件file_name 不为空或不被其他程序打开,然后尝试lock file_name r 和lock file_name r 0 9。
    猜你喜欢
    • 2015-02-28
    • 1970-01-01
    • 1970-01-01
    • 2013-11-17
    • 1970-01-01
    • 2014-10-10
    • 1970-01-01
    • 1970-01-01
    • 2016-12-17
    相关资源
    最近更新 更多