管道 ("bitwise OR") 调用 fcntl.lockf()
pipe ("bitwise OR") in call to fcntl.lockf()
This answer 包含以下行:
fcntl.lockf(fp, fcntl.LOCK_EX | fcntl.LOCK_NB)
管道,在Python一个"bitwise OR"
我已经检查了 Python 文档中的 fcntl.lockf(fd, cmd, len=0, start=0, whence=0),它说 cmd 是以下之一:
LOCK_UN – unlock
LOCK_SH – acquire a shared lock
LOCK_EX – acquire an exclusive lock
也一直在阅读这些变量here
有没有人了解那一行及其作用,以及它是否可以仅使用一个参数而不使用管道符号?
LOCK_NB 甚至没有在 Python 文档中提及..
这些名称是数字常量,每个都是 2 的幂。这意味着它们是具有 单个位集的整数。
您可以将这些数字与 |
结合起来生成一个具有多个位集的整数,每个位代表一个特定的选项:
>>> import fcntl
>>> fcntl.LOCK_SH # bit 1 set
1
>>> fcntl.LOCK_EX # bit 2 set
2
>>> fcntl.LOCK_NB # bit 3 set
4
>>> fcntl.LOCK_UN # bit 4 set
8
>>> fcntl.LOCK_SH | fcntl.LOCK_UN # combine bits 1 and 4
9
>>> format(fcntl.LOCK_SH | fcntl.LOCK_UN, '04b')
'1001'
这是在系统调用中传递设置配置的一种非常常见的方式。 fctnl.lock()
就是一个这样的例子,但还有更多例子适用于相同的技术。 os.open()
call is another example, as are the re
module flags.
重要的是要认识到这些 只是整数。您可以传入 6
:
而不是使用 fcntl.LOCK_EX | fcntl.LOCK_NB
设置标志(设置位 2 和 3)
fcntl.lockf(fp, 6)
就lockf()
函数而言,没有区别。使用命名常量的要点在于,使用这些可以生成 自文档化代码 .
This answer 包含以下行:
fcntl.lockf(fp, fcntl.LOCK_EX | fcntl.LOCK_NB)
管道,在Python一个"bitwise OR"
我已经检查了 Python 文档中的 fcntl.lockf(fd, cmd, len=0, start=0, whence=0),它说 cmd 是以下之一:
LOCK_UN – unlock
LOCK_SH – acquire a shared lock
LOCK_EX – acquire an exclusive lock
也一直在阅读这些变量here
有没有人了解那一行及其作用,以及它是否可以仅使用一个参数而不使用管道符号?
LOCK_NB 甚至没有在 Python 文档中提及..
这些名称是数字常量,每个都是 2 的幂。这意味着它们是具有 单个位集的整数。
您可以将这些数字与 |
结合起来生成一个具有多个位集的整数,每个位代表一个特定的选项:
>>> import fcntl
>>> fcntl.LOCK_SH # bit 1 set
1
>>> fcntl.LOCK_EX # bit 2 set
2
>>> fcntl.LOCK_NB # bit 3 set
4
>>> fcntl.LOCK_UN # bit 4 set
8
>>> fcntl.LOCK_SH | fcntl.LOCK_UN # combine bits 1 and 4
9
>>> format(fcntl.LOCK_SH | fcntl.LOCK_UN, '04b')
'1001'
这是在系统调用中传递设置配置的一种非常常见的方式。 fctnl.lock()
就是一个这样的例子,但还有更多例子适用于相同的技术。 os.open()
call is another example, as are the re
module flags.
重要的是要认识到这些 只是整数。您可以传入 6
:
fcntl.LOCK_EX | fcntl.LOCK_NB
设置标志(设置位 2 和 3)
fcntl.lockf(fp, 6)
就lockf()
函数而言,没有区别。使用命名常量的要点在于,使用这些可以生成 自文档化代码 .