从C

时间:2015-12-02 11:14:30

标签: c linux-kernel linux-device-driver

我有一个算法从枚举中选择随机值(用C语言编写)。这是枚举属于Linux内核驱动程序。我用来访问驱动程序提供的几个IOCTL。 IOCTLS在枚举中区分了致命值和非致命值。

我的应用程序从用户那里获得输入"致命"或者"非致命"相应的操作。如果它是致命的,我必须从枚举中随机选择(例如从enum中选择例如2,7,11),对于非致命性也是如此。

问题是,FATAL和非致命的枚举中没有提供区别(所有值都保持在同一个枚举中)。因此,如果用户输入FATAL,我必须从枚举中选择3个FATAL(我不应该选择非致命的),对于非致命性也是如此。

示例,

    enum kern_driver_enum {
                     POWER_OFF,
                     PANIC,
                     OOPS,
                     EXIT,
                     HALT,
                     SIGNALLED    
    };

这里我有POWER_OFF,PANIC,HALT as"致命"因为它导致系统重启。 OOPS,EXIT和SIGNALED为"非致命"。所以我应该根据用户输入进行相应的选择。这只是一个示例枚举,实际枚举有大约30个值。

想法1:我想通过重新排列元素并在用户空间中创建新的枚举来放置标记。这需要转换以使内核驱动程序理解它的价值。

想法2:考虑创建两个中间枚举(一个使用FATAL,另一个使用非致命),但通过在两者之间添加虚拟值来避免内核驱动程序和用户之间的值不匹配空间。

有没有办法在不保留本地枚举的情况下实现这一目标?可能是链接制造者。

0 个答案:

没有答案