【问题标题】:where to find select() source code in glibc source?在 glibc 源代码中哪里可以找到 select() 源代码?
【发布时间】:2011-09-15 09:57:15
【问题描述】:

我正在尝试在 glibc 源代码中查找 select() 源代码(linux、i386 arch), 但我找不到任何东西(与上述架构相关)

谁能指出 select() 源代码?

【问题讨论】:

    标签: c linux kernel glibc


    【解决方案1】:

    mh 的回答还不错,但我会尽量具体一点:

    select 是 Linux 系统调用,而不是 libc 函数。它的源代码可以在here找到。

    libc 只有调用(执行)linux 系统调用的包装器。 select syscall 的包装器是在构建时动态创建的,因为 select 位于 syscalls.list 文件中。

    【讨论】:

      【解决方案2】:

      select() 不是 libc 的函数,而是内核函数,所以需要查看内核源码。

      您可以通过查看手册页来判断:如果它在第 2 节中,它是一个内核函数,如果它在第 3 节中,它是标准 C 库的一个函数,在您的例子中是 glibc。

      编辑:就像其他人说得对的一样(谢谢!),第 2 节中描述的函数被正式称为 系统调用,它实际上是对包装操作系统的库的调用实际调用界面。

      【讨论】:

      • 请注意,这个 2/3 划分仍然大部分适用,但有时 libc 必须提供“第 2 节”函数的重要部分/包装以符合现代 POSIX 要求,尤其是在涉及到信号和线程之间的交互。因此,有时即使函数在手册的第 2 节中,您也需要查看 libc 源代码。但 select 不是其中一种情况。
      • 什么是核函数?用户空间访问内核的唯一方法是通过系统调用。但是要启动系统调用,您必须在 libc 中进行一些包装。对吗?
      • 关键是 glibc 函数是微不足道的 - 它没有做任何有趣的事情(除非您对架构上的 5 参数系统调用的调用约定感兴趣)。最终,在 glibc 中,许多系统调用在源代码中根本没有定义——它们是在构建时从 syscalls.list 生成的。
      • 谢谢。我自己也发现了:-)
      • 感谢大家的回答,这正是我想要的
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-08-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多