我正在处理文件状态标志。在执行的测试中,我发现
#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
)只是几个原子标志的总和(与按位“或”相同)那些原子标记)。据我了解,我无法“检测到”任何东西,并且此类标志永远无法设置。(stat & O_RDONLY)
之类的按位运算符始终为false。
相关:
尽管在文档中将它们称为标志,但这三个标志实际上不是可以像其余标志一样组合的原子标志。它们是O_ACCMODE
位的互斥替代值。您不使用stat & RDONLY
进行测试,而是使用(stat & O_ACCMODE) == O_RDONLY
。