C 为什么Olduame和uname之间有区别?

C 为什么Olduame和uname之间有区别?,c,linux-kernel,system-calls,C,Linux Kernel,System Calls,为什么Olduame和uname之间有区别 我一直在阅读手册页,但我不了解其中的微妙之处。首先,如果您从用户空间调用uname,则不需要考虑差异,也不需要使用olduame或olduname。在用户空间中,使用struct utsname并调用uname()函数 从手册页: 随着时间的推移,utsname结构尺寸的增加导致 uname()的三个连续版本:sys_olduame()(插槽 __NR_oldolduname)、sys_uname()(插槽u NR_olduame)和sys_newun

为什么Olduame和uname之间有区别


我一直在阅读手册页,但我不了解其中的微妙之处。

首先,如果您从用户空间调用
uname
,则不需要考虑差异,也不需要使用olduame或olduname。在用户空间中,使用
struct utsname
并调用
uname()
函数

从手册页:

随着时间的推移,utsname结构尺寸的增加导致 uname()的三个连续版本:sys_olduame()(插槽 __NR_oldolduname)、sys_uname()(插槽u NR_olduame)和sys_newuname()(插槽u NR_uname)。第一个使用长度9表示所有 领域;第二次使用65;第三个也使用65,但添加了 域名字段。glibc uname()包装函数隐藏了这些 来自应用程序的详细信息,调用 内核提供的系统调用


因此,在整个历史过程中,
struct-utsname
的大小和内容略有变化,内核保留了3个不同的版本以保持与用户空间的兼容性,您可以在这里看到内核处理的不同版本:。但是,glibc或linux上的任何C库都会对您隐藏所有这些信息。

uname
是用户代码调用的函数

根据Linux内核的版本,它调用一个内核函数
sys\u newuname
sys\u uname
sys\u olduame
。这两个字段之间的区别是名称字段的长度(在
sys\u olduname
中有9个字符,在其他两个字段中有65个字符),并且
sys\u newuname
向结构中添加了一个额外的
domainname
字段