我一直在讨论像__KERNEL__
这样的小公约。
在这种情况下,__
是内核开发人员使用的命名约定,还是以这种方式命名宏的语法特定原因?
整个代码中有很多例子。
例如,某些函数和变量以_
或__
开头。
这是否有特定原因?
它似乎被广泛使用,我只需要澄清一下这些东西是否具有语法目的,还是只是一个命名约定。
此外,我看到很多用户声明的类型,例如uid_t。我再次假设这是一个命名约定,告诉读者它是用户定义的类型?
答案 0 :(得分:4)
有几种情况:
/usr/include/linux
下的任何内容,标准指定应定义哪些符号,并且系统特定的任何其他符号应以下划线和大写字母或两个字母开头下划线。这特别是__KERNEL__
的原因,因为它用在内核和libc中都包含的头文件中,并且一些声明是不同的。__something
是something
的主力,不包括某些管理,通常是锁定。这就是__d_lookup
之类的原因。类似的系统调用约定是sys_something
是系统调用入口点,它处理与内核之间的上下文切换,并调用do_something
来完成实际工作。_t
后缀是typedef的标准库约定。例如。 size_t
,ptrdiff_t
,foff_t
等。对于它的内部类型,内核代码遵循此约定。答案 1 :(得分:0)
有几个__函数,例如__alloc_pages_nodemask()似乎也已导出。同样,__function也是静态的,静态内联的或全局的。顺便说一句,观察__alloc_pages_nodemask()仅从mm代码调用,在其他地方,此类功能可能意味着某些内核框架的“内部”。