检查文件的访问模式稍微复杂一些,因为 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/

10-14 14:16