c - 一些 Linux 内核 C 代码

标签 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) 如果你有一个

#define __ something

在某个地方,那么它就意味着什么。
否则,它只是名称 _KERNEL__

的一部分

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

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

4) arg 后是否有三个点?然后它是一个可变参数宏。即。
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, )
尾随的逗号是不同的,它会导致编译器错误。
逗号只有在使用 ## 时后跟参数时才会出现。

关于c - 一些 Linux 内核 C 代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22017268/

相关文章:

objective-c - 是否可以对比 int 所能容纳的更多的值进行位掩码?

c - 如何减少多个输出

linux - 跟踪加载到 linux 内存中的图像的内存地址

c - 允许创建多少个 netlink 协议(protocol)?

c - if (!strcmp() ... 中的感叹号有什么作用?

c - 奇怪的结果采用XOR的逻辑非

java - 通过 Active Directory 连接到 Azure SQL Server 在 Linux 上部署 Java 应用程序

android - 有什么方法可以让 Android 应用程序在 Linux 上运行?

linux - unix awk 命令没有列出多个匹配的模式

c - 错误代码如何返回给用户程序?