获取linux kernel cred结构体中成员变量的value时,根绝kernel版本需要做适配。
linux kernel 3.5以上,获取cred需要如下处理(重点 cred->uid.val):
#if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 5, 0)
printk(KERN_INFO "PROCESS cred info: uid %u ",
cred->uid.val);
#else
printk(KERN_INFO "PROCESS cred info: uid %u",
cred->uid);
#endif
否则报错:
xxx.c: In function ‘xxxxxxx’:
./include/linux/kern_levels.h:5:18: warning: format ‘%u’ expects argument of type ‘unsigned int’, but argument 2 has type ‘kuid_t {aka const struct <anonymous>}’ [-Wformat=]
#define KERN_SOH "\001" /* ASCII Start Of Header */
^
./include/linux/kern_levels.h:14:19: note: in expansion of macro ‘KERN_SOH’
#define KERN_INFO KERN_SOH "6" /* informational *
本文详细介绍了在Linux内核3.5及更高版本中,如何正确获取cred结构体中uid成员的值。文章指出,在不同内核版本下,对cred结构体的访问方式存在差异,特别是在uid成员上。为了确保代码的兼容性和正确性,文中提供了具体的代码示例,展示了条件编译宏的使用,以适应不同内核版本的需求。
1424

被折叠的 条评论
为什么被折叠?



