系统调用 open() 中的标志组合如何工作?
How does the combination of flags in system call open() work?
fd = open(pathname, O_WRONLY | O_CREAT | O_TRUNC, mode);
我的学费告诉我,这个 O_WRONLY | O_CREAT | O_TRUNC
意味着系统调用允许写入 and
创建(如果有)and
截断文件(如果有)。
但是 |
不是位运算符之一,意思是 OR
吗?
系统如何解释组合?我试图用我学到的按位运算知识来解释这种组合,但我迷路了。有人可以解释一下吗?
按位 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_1
AND FLAG_3
.
给定flags
的值,可以通过按位AND
.
检查是否设置了FLAG_3
if ( flags & FLAG_3 != 0 )
{
// FLAG_3 has been set.
}
将标志组合为 O_WRONLY | O_CREAT | O_TRUNC
。
时使用相同的逻辑
有关位掩码的更多信息,请访问 http://en.wikipedia.org/wiki/Mask_(computing)。
fd = open(pathname, O_WRONLY | O_CREAT | O_TRUNC, mode);
我的学费告诉我,这个 O_WRONLY | O_CREAT | O_TRUNC
意味着系统调用允许写入 and
创建(如果有)and
截断文件(如果有)。
但是 |
不是位运算符之一,意思是 OR
吗?
系统如何解释组合?我试图用我学到的按位运算知识来解释这种组合,但我迷路了。有人可以解释一下吗?
按位 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_1
AND FLAG_3
.
给定flags
的值,可以通过按位AND
.
FLAG_3
if ( flags & FLAG_3 != 0 )
{
// FLAG_3 has been set.
}
将标志组合为 O_WRONLY | O_CREAT | O_TRUNC
。
有关位掩码的更多信息,请访问 http://en.wikipedia.org/wiki/Mask_(computing)。