__u18 __s16等新版本

时间:2013-11-04 18:08:04

标签: c linux api types linux-kernel

我正在使用linux内核的Joystick API编写一些代码。在自述文件的示例中,它说使用这种语法:

    struct js_event {
    __u32 time;  
    __s16 value;   
    __u8 type;   
    __u8 number;    
};

然而,当我使用gcc构建我编写的代码时,会产生错误。我实际上并不知道__u32部分意味着什么。 然后我用Google搜索了一下,发现了这个

  
    

如果包含stdint.h,那么你得到int8_t,uint8_t,int16_t,uint16_t等。它们是标准的C,即使它是较新的,实现较少的标准。如果可以的话,我建议使用stdint.h,因为它比__u8这样的类型更少系统特定。

  

那么有人可以给我一份新类型列表及其含义吗?同时也是对类型实际具有的角色的缩减。

1 个答案:

答案 0 :(得分:2)

__u32和朋友是<asm/types.h>中定义的特定于Linux内核的整数类型。

__u32是无符号的32位整数 __s16是带符号的16位整数 __u8是无符号的8位整数,依此类推。

当您使用Linux内核API编写代码时,您不需要关心可移植性,而应该坚持使用Linux API和类型。

请不要忘记

#include <asm/types.h>

另见pointer to __u32 in a header file