ACC_MODE详解
ACC_MODE详解
分析内核源码时碰到了ACC_MODE宏定义,查看定义如下
···
#define O_ACCMODE 0003
#define ACC_MODE(x) ("\000\004\002\006"[(x)&O_ACCMODE])
···
- 其中\0表示转移字符
- ACC_MODE 定义了一个字符串数组内容为[0,4,2,6]
- &0003 表示与上八进制的3,取了参数x的最低两位,范围为0-3
写代码验证
代码内容如下
#define ACC_MODE(x) ("\000\004\002\006"[(x)&O_ACCMODE])
#define O_ACCMODE 0003
#include <stdio.h>
int main ()
{
int i=0;
for(i=00; i<4;i++)
{
printf("acc_mode[%d]=%d \n",i,ACC_MODE(i));
}
for(i=0;i<4;i++)
{
printf("%c \n","abcd"[i]);
}
return 0;
}
- 运行结果如下
cc_mode[0]=0
acc_mode[1]=4
acc_mode[2]=2
acc_mode[3]=6
a
b
c
d