0

我正在编写一个 FUSE 客户端,使用python-fuse.

需要编写的函数之一,模仿 Pythonos.open()函数,我需要测试 flags 参数。

通过使用按位或来组合os.O_*常量,很容易创建这样的参数。

但我不知道如何测试是否设置了特定的。

看到

if flags | os.O_APPEND:
     ...

在 xmp.py 示例中,无法确定这是否正确。是否在测试标志中是否设置了 APPEND 标志?忽略是否​​设置了任何其他标志?

我尝试

if not (flags | os.O_RDONLY):

它似乎不起作用。

绝对是蟒蛇菜鸟。

4

1 回答 1

2

通过掩蔽进行测试&

if flags & os.O_APPEND:

|用于组合标志,使用&(按位与)来测试是否设置了标志。该if flags | os.O_APPEND行很可能是xmp.py示例中的错误,它始终True.

演示:

>>> import os
>>> 0 & os.O_APPEND
0
>>> os.O_APPEND & os.O_APPEND
8
>>> (os.O_RDWR | os.O_CREAT) & os.O_APPEND
0
>>> (os.O_RDWR | os.O_CREAT | os.O_APPEND) & os.O_APPEND
8

因为数字 0 为假而任何其他数值为真,8所以被视为真。

注意os.O_RDONLY0; 这相当于没有设置任何标志。您可以显式地测试它(if not flagsif flags == os.O_RDONLY),或者从其他标志的测试中推断它。

于 2013-08-08T16:34:32.317 回答