微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

为什么 fcntl start=0, len=0, whence=2 有效?

如何解决为什么 fcntl start=0, len=0, whence=2 有效?

根据 fcntl 手册,fcntl 锁定 with start=0,len=0,whence=2 应该锁定从文件末尾(whence=2)开始的字节范围,偏移量为 0(start=0),直到文件结尾 (len=0),在我看来,这意味着从 EOF 到 EOF 总共锁定了 0 个字节。

在这种情况下,我希望使用这些参数进行锁定不会锁定任何内容。但是,如果我尝试(使用 python 包装器 fcntl),以下代码确实锁定了某些内容,并且第二个副本正在等待第一个完成:

f = open('some_file','a+')
fcntl.lockf(f,fcntl.LOCK_EX,2)
print('got the lock')
time.sleep(100)

同理,参数whence=2,offset=100,len=0 的代码也可以,即使在这种情况下,字节范围向后[EOF + 100,EOF]。

我在锁定什么?

解决方法

我做了一些测试,答案似乎如下 - whence=2 直到 EOF 才锁定,但直到无穷大,这不是我如何阅读描述中的手册页:

为 l_len 指定 0 有 特殊含义:锁定从该位置开始的所有字节 由 l_whence 和 l_start 指定到文件末尾,没有 不管文件有多大。

?

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。