lock
是使用fcntl()的咨询文件锁定的简单实现。(事实上,几年前,我编写了一个几乎相同的命令行实用程序,它执行单个命令或脚本,同时锁定指定文件。)
fcntl()
如果服务器启用了支持,则锁定适用于远程文件系统。特别是, Linux 上的Samba和NFS服务器绝对具备这种能力。在 NFS 上,它通常被错误配置或完全禁用,因此基于硬链接或锁定目录的锁定方案更为常见。可悲的是。
从技术上讲,fcntl()
锁不是文件锁,而是记录锁:文件中的任何字节范围都可以单独锁定,甚至可以由不同的进程锁定。最常见的用途是锁定整个文件(通过指定零开始和长度,因此即使文件被附加到也将应用锁定)。如果您同时省略和参数,该lock
命令将完全执行此操作。hex-start
hex-length
如果您确实指定了hex-start
to lock
,它指的是锁定区域开始的偏移量。如果省略或使用 zero hex-length
,则锁定适用于文件的其余部分,即使文件已附加或截断。如果您还指定hex-length
,则锁定适用于偏移量 [ hex-start
, hex-start
+ hex-length
)。hex-
前缀显然是指以hexadecimal指定的值。
这些锁是建议性的,因为它们不会阻止对文件的任何访问。每个应用程序都需要调用fcntl()
, 以获得文件的咨询锁;如果所需的锁与同一文件上的其他锁冲突,则调用将阻塞 ( F_SETLKW
) 或失败 ( F_SETLK
)。
问题?