C 如何理解Ordonly=0?
我正在处理文件状态标志。 在我进行的测试中,我发现C 如何理解Ordonly=0?,c,file-descriptor,fcntl,bitflags,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; } 这是完全一致的 #define O_RDONLY 00 从fcntl linux.h 如何将值零用作标志? 我希望“原子”
#include <stdio.h>
#include "fcntl.h"
int main() {
const int flag = O_RDONLY;
printf( "*** Flag O_RDONLY = %5d\n", flag);
return 0;
}
这是完全一致的
#define O_RDONLY 00
从fcntl linux.h
如何将值零用作标志?
我希望“原子”标志是2^n
(n>=1
),而“复合”标志(如O_ACCMODE
)只是几个原子标志的总和(这与按位或“叠加”这些原子标志相同)。据我所知,我无法“检测”任何东西,而且这样的标志永远无法设置。 像
(stat&ordonly)
这样的按位and'ed表达式将始终为false
相关的:
(我问了这个问题)尽管这些在文档中被称为标志,但这三个标志实际上并不是可以像其他标志一样组合的原子标志。它们是
O_ACCMODE
位的互斥替代值。您不需要使用stat&RDONLY
来测试它,您可以使用(stat&O_ACCMODE)==O_RDONLY
如果您无法对文件执行其他操作,那么文件状态标志不是位掩码。它们只是3个可选选项:O_RDONLY=0、O_WRONLY=1、O_RDWR=2 O_标志的值使用按位包含的方式构造OR@AndreasDM不,他们不是<代码>O|RDONLY | O|WRONLY!=O_RDWRTrue:\u O_RDONLY
打开一个文件以只读。无法使用\u O\u RDWR
或\u O\u WRONLY
指定。太好了!实际上,手册页首先描述了文件访问模式,然后添加了“此外,零个或多个文件创建标志和文件状态标志可以是按位的,也可以是按位的”,但没有提到文件访问模式可以按位操作。对我来说,“旗帜”这个词绝对是一个用词不当的词,具有误导性。相关的,你能检查一下并给出你的见解吗?
#define O_RDONLY 00