【发布时间】:2016-06-17 22:22:29
【问题描述】:
我正在根据我在某些元文件中设置的权限检查发送到 open(2) 调用的标志。这里的 perms 与通常发送给 chmod 之类的调用的八进制值有关。我希望在 perms 与相关标志不匹配时输入 if 块。
if((perms == 4 && !(flags & O_RDONLY)) ||
(perms == 2 && !(flags & O_WRONLY)) ||
(perms == 6 && !(flags & O_RDWR)))
我希望这可以工作,并且在 O_WRONLY 和 O_RDWR 中运行良好。但是,O_RDONLY 的实际值为 0,因此 & 运算符将为每个值返回 false。不幸的是,删除否定将导致每个 perms 值 4 跳过 if 块的不良行为。我怎样才能在这里实现我的目标?
【问题讨论】:
-
使用
((flags&O_ACCMODE)==O_RDONLY)等 -
虽然
flags参数可以包含标志,但打开模式本身是非标志。 -
@JoachimPileborg flags 这里等于开放系统参数
int flags。
标签: c unix system-calls bitwise-operators