【发布时间】:2020-09-07 10:41:33
【问题描述】:
我正在处理文件状态标志。 在我进行的测试中,我发现
#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。
如何将零值用作标志?
我希望“原子”标志是 2^n (n>=1),而“复合”标志(如 O_ACCMODE)只是几个原子标志的总和(与按位或相同) 'ing 那些原子标志)。
据我了解,我无法“检测”任何东西,也无法设置这样的标志。
像(stat & O_RDONLY) 这样的按位与表达式将始终为假。
相关:
【问题讨论】:
-
如果您对文件无能为力,那剩下的呢?
-
文件状态标志不是位掩码。它们只是 3 个替代选项:O_RDONLY = 0、O_WRONLY = 1、O_RDWR = 2
-
o_flags 的值是使用按位或运算构造的
-
@AndreasDM 不,他们不是。
O_RDONLY | O_WRONLY != O_RDWR -
True:
_O_RDONLY打开一个只读文件。不能用_O_RDWR或_O_WRONLY指定。
标签: c file-descriptor fcntl bitflags