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