我正在处理文件状态标志。 在我进行的测试中,我发现
#include <stdio.h>
#include "fcntl.h"
int main() {
const int flag = O_RDONLY;
printf( "*** Flag O_RDONLY = %5dn", flag);
return 0;
}
产生此输出
*** Flag O_RDONLY = 0
这完全符合
#define O_RDONLY 00
从fcntl-linux.h
.
如何将值零用作标志?
我希望"原子"标志是2^n
(n>=1
(,而"复合"标志(如O_ACCMODE
(只是几个原子标志的总和(这与按位或这些原子标志相同(。
据我了解,我无法"检测"任何东西,也无法设置这样的标志。 像(stat & O_RDONLY)
这样的按位和表达式将永远是错误的。
相关:
如何获取文件描述符的模式?(我问这个(
尽管这些在文档中称为标志,但这三个实际上并不是可以像其他标志一样组合的原子标志。它们是O_ACCMODE
位的互斥替代值。您不使用stat & RDONLY
来测试它,而是使用(stat & O_ACCMODE) == O_RDONLY
.