Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 如何理解Ordonly=0?_C_File Descriptor_Fcntl_Bitflags - Fatal编程技术网

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