【问题标题】:Why is the difference between oldolduname and uname?为什么 oldolduname 和 uname 有区别?
【发布时间】:2015-09-11 08:33:36
【问题描述】:

为什么 oldolduname 和 uname 有区别?

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

【问题讨论】:

    标签: c linux-kernel system-calls


    【解决方案1】:

    首先,如果你从用户空间调用uname,你不需要关心区别,应该不需要使用olduname或oldolduname。在用户空间中,您使用 struct utsname 并调用 uname() 函数。

    来自手册页:

    随着时间的推移,utsname 结构大小的增加导致 uname() 的三个连续版本: sys_olduname() (slot __NR_oldolduname)、sys_uname()(插槽 __NR_olduname)和 sys_newuname()(插槽 __NR_uname)。第一个使用长度 9 字段;第二个使用 65;第三个也使用 65 但添加了 域名字段。 glibc uname() 包装函数隐藏了这些 来自应用程序的详细信息,调用最新版本的 内核提供的系统调用。

    所以,纵观历史,struct utsname 的大小和内容略有变化,内核保留了 3 个不同的版本以保持与用户空间的兼容性,您可以在此处查看内核处理的不同版本:http://lxr.free-electrons.com/source/include/linux/utsname.h?v=2.6.38#L24。但是 glibc 或 linux 上的任何 C 库都会对您隐藏所有这些。

    【讨论】:

      【解决方案2】:

      uname是用户代码调用的函数。

      它调用内核函数sys_newunamesys_unamesys_olduname 之一,具体取决于Linux 内核的版本。它们之间的区别在于名称字段的长度(sys_olduname 中的 9 个字符,其他两个中的 65 个字符),sys_newuname 在结构中添加了一个额外的 domainname 字段。

      【讨论】:

        猜你喜欢
        • 2018-09-04
        • 2019-12-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-10-02
        • 2011-12-12
        • 2010-09-16
        • 2012-03-14
        相关资源
        最近更新 更多