如何理解O_RDONLY = 0?

问题描述 投票:4回答:1

我正在处理文件状态标志。在执行的测试中,我发现

#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^nn>=1),“ composite”标志(如O_ACCMODE)只是几个原子标志的总和(与按位“或”相同)那些原子标记)。据我了解,我无法“检测到”任何东西,并且此类标志永远无法设置。(stat & O_RDONLY)之类的按位运算符始终为false。

相关:

How to get the mode of a file descriptor?(我问这个)

c file-descriptor fcntl bitflags
1个回答
5
投票

尽管在文档中将它们称为标志,但这三个标志实际上不是可以像其余标志一样组合的原子标志。它们是O_ACCMODE位的互斥替代值。您不使用stat & RDONLY进行测试,而是使用(stat & O_ACCMODE) == O_RDONLY

© www.soinside.com 2019 - 2024. All rights reserved.