C 为什么Olduame和uname之间有区别?
为什么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
我一直在阅读手册页,但我不了解其中的微妙之处。首先,如果您从用户空间调用
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
字段