检查文件的访问模式稍微复杂一些,因为 O_RDONLY (0)、O_WRONLY (1) 和 O_RDWR (2) 常量不对应于打开文件状态标志中的单个位。因此,为了进行此检查,我们使用常量 O_ACCMODE 屏蔽标志值,然后使用常量之一测试是否相等:
accessMode = flags & O_ACCMODE;
if (accessMode == O_WRONLY || accessMode == O_RDWR)
printf("file is writable\n");
我想了解表达标志和 O_ACCMODE 是如何工作的
抱歉我用手机写的格式不正确
最佳答案
文件模式是互斥的。你不能是只读和只写,你不能是读写和其他两者中的任何一个。
O_ACCMODE 等于 3,因此第 1 位和第 2 位打开。
00000000 (O_RDONLY)
& 00000011 (O_ACCMODE)
--------
00000000 <-- the result being compared
其中 00000000 等于只读,因此 (accessMode == O_RDONLY) 返回 true。
其他人也一样。
00000001 (O_WRONLY)
& 00000011 (O_ACCMODE)
---------
00000001 <-- the result being compared
O_WRONLY 是 1,所以 (accessMode == O_WRONLY) 是“是 1 等于 1”,它自然返回真。
关于c - 标志掩码读写posix,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/24224845/