一些Linux内核C代码

时间:2014-02-25 14:33:44

标签: c linux kernel

ifdef _KERNEL__

1) KERNEL 的__对编译器意味着什么?

#define namei(pathname) __namei(pathname, LOOKUP_FOLLOW)

2)这是什么__namei?

#define FIBMP __IO(0x00, 1)

3)这是什么__IO?

#define pr_info(fmt, arg..) |
printfk(KERN_INFO fmt, ##arg)

4)这是什么##?

1 个答案:

答案 0 :(得分:2)

1)如果你有

#define __ something
在某个地方,那意味着什么 否则,它只是名称_KERNEL__

的一部分

2)这只会用namei(pathname)替换每个__namei(pathname, LOOKUP_FOLLOW) Latter是函数调用代码和参数中的某个函数。

3)同样的。用FIBMP替换每个__IO(0x00, 1)
这是一个函数或#define其他地方

4)arg之后有三点吗?然后它是一个可变宏。 IE浏览器。
pr_info(a)替换为printfk(KERN_INFO a)
pr_info(a, b)替换为printfk(KERN_INFO a, b)
pr_info(a, b, c)替换为printfk(KERN_INFO a, b, c)
等等。没有##,它将是
pr_info(a)替换为printfk(KERN_INFO a, )
pr_info(a, b)替换为printfk(KERN_INFO a, b, )
pr_info(a, b, c)替换为printfk(KERN_INFO a, b, c, )
尾随逗号是差异,它会导致编译器错误 只有在使用##时后跟参数后才有逗号。