前几天分析udev实现自动在/dev下创建节点时,看到内核源码中定义actions的数组形式,觉得很奇怪。
static const char *kobject_actions[] = {
[KOBJ_ADD] = "add",
[KOBJ_REMOVE] = "remove",
[KOBJ_CHANGE] = "change",
[KOBJ_MOVE] = "move",
[KOBJ_ONLINE] = "online",
[KOBJ_OFFLINE] = "offline",
};
写了个用户态程序测试了一下,
#include <stdio.h>
#include <stdlib.h>
enum kobject_action {
KOBJ_ADD,
KOBJ_REMOVE,
KOBJ_CHANGE,
KOBJ_MOVE,
KOBJ_ONLINE,
KOBJ_OFFLINE,
KOBJ_MAX
};
static const char *kobject_actions[] = {
[KOBJ_ADD] = "add",
[KOBJ_REMOVE] = "remove",
[KOBJ_CHANGE] = "change",
[KOBJ_MOVE] = "move",
[KOBJ_ONLINE] = "online",
[KOBJ_OFFLINE] = "offline",
};
static const char *kobject_acti[] = {
[0] = "add",
[1] = "remove",
[2] = "change",
[3] = "move",
[4] = "online",
[5] = "offline",
};
int main()
{
int i;
for(i=0;i<6;i++)
{
printf("kobject_actions[%d]=%s/n",i,kobject_actions[i]);
printf("kobject_actions[%d]=%s/n",i,kobject_acti[i]);
}
return 0;
}
wuting@wuting-desktop:test$ gcc enum.c
wuting@wuting-desktop:test$ ./a.out
kobject_actions[0]=add
kobject_actions[0]=add
kobject_actions[1]=remove
kobject_actions[1]=remove
kobject_actions[2]=change
kobject_actions[2]=change
kobject_actions[3]=move
kobject_actions[3]=move
kobject_actions[4]=online
kobject_actions[4]=online
kobject_actions[5]=offline
kobject_actions[5]=offline
从打印的信息可以看出,它是对二维数组赋值的不同形式。