如何理解 O_RDONLY = 0?
How to make sense of O_RDONLY = 0?
我正在处理文件状态标志。
在我执行的测试中,我发现
#include <stdio.h>
#include "fcntl.h"
int main() {
const int flag = O_RDONLY;
printf( "*** Flag O_RDONLY = %5d\n", flag);
return 0;
}
产生这个输出
*** Flag O_RDONLY = 0
完全符合
#define O_RDONLY 00
来自 fcntl-linux.h
.
零值如何作为标志?
我希望 "atomic" 标志是 2^n
(n>=1
),而 "composite" 标志(如 O_ACCMODE
)只是几个原子标志(与按位或那些原子标志相同)。
据我所知,我不能 "detect" 任何东西,而且永远不能设置这样的标志。
像 (stat & O_RDONLY)
这样的按位与表达式将始终为假。
相关:
(我问这个)
虽然这些在文档中被称为标志,但这三个实际上并不是可以像其他标志一样组合的原子标志。它们是 O_ACCMODE
位的互斥替代值。你不使用 stat & RDONLY
来测试它,你使用 (stat & O_ACCMODE) == O_RDONLY
.
我正在处理文件状态标志。 在我执行的测试中,我发现
#include <stdio.h>
#include "fcntl.h"
int main() {
const int flag = O_RDONLY;
printf( "*** Flag O_RDONLY = %5d\n", flag);
return 0;
}
产生这个输出
*** Flag O_RDONLY = 0
完全符合
#define O_RDONLY 00
来自 fcntl-linux.h
.
零值如何作为标志?
我希望 "atomic" 标志是 2^n
(n>=1
),而 "composite" 标志(如 O_ACCMODE
)只是几个原子标志(与按位或那些原子标志相同)。
据我所知,我不能 "detect" 任何东西,而且永远不能设置这样的标志。
像 (stat & O_RDONLY)
这样的按位与表达式将始终为假。
相关:
虽然这些在文档中被称为标志,但这三个实际上并不是可以像其他标志一样组合的原子标志。它们是 O_ACCMODE
位的互斥替代值。你不使用 stat & RDONLY
来测试它,你使用 (stat & O_ACCMODE) == O_RDONLY
.