系统调用open()中的标志组合如何工作?

时间:2015-04-21 21:13:53

标签: c posix

fd = open(pathname, O_WRONLY | O_CREAT | O_TRUNC, mode);

我的学费告诉我,O_WRONLY | O_CREAT | O_TRUNC表示系统调用允许写and创建(如果有)and截断文件(如果有的话)。

但不是|是位运算符之一并且意味着OR

系统如何解释组合?我尝试使用我学习的按位操作来解释这个组合,但我只是迷路了。有人可以解释一下吗?

1 个答案:

答案 0 :(得分:3)

按位OR和标志有点不直观。

假设您有以下标志:

int FLAG_1 = 0x1; // in binary, 0001
int FLAG_2 = 0x2; // in binary, 0010
int FLAG_3 = 0x4; // in binary, 0100

使用时:

int flags = FLAG_1 | FLAG_3;

二进制文件中flags的值为0101。这意味着,已设置以下标志:FLAG_1FLAG_3

根据flags的值,您可以使用按位FLAG_3检查是否已设置AND

if ( flags & FLAG_3 != 0 )
{
   // FLAG_3 has been set.
}

将标志组合为O_WRONLY | O_CREAT | O_TRUNC时使用相同的逻辑。

有关位掩码的更多信息,请访问http://en.wikipedia.org/wiki/Mask_(computing)