C头文件是否包含在Linux内核中并由它们维护



查看此页面上的Linux系统调用:

https://man7.org/linux/man-pages/dir_section_2.html

大多数sys调用都有一个可供使用的libc wrapper函数。让我们以gettid为例:https://man7.org/linux/man-pages/man2/gettid.2.html

#include <unistd.h>
pid_t gettid(void);

我的问题是:

  • <unistd.h>是由Linux内核本身提供和维护的,还是由libc或其他项目提供和维护?这些与kernel headers相同吗?

  • 如果它是由Linux自己提供的,那么他们为什么不提供定义,为什么只提供函数原型,并将实现留给libc等其他库?

  • 如果不是由Linux本身提供的,那么为什么要麻烦把函数原型放在这里呢?libc应该能够随心所欲地实现它。

<unistd.h>是由Linux内核本身提供和维护的,还是由libc或其他项目提供和维护?这些与kernel headers相同吗?

不,#include <unistd.h>时使用的unistd.h文件不是来自Linux内核(尽管它确实有一些同名文件(。它来自您的libc,可能是glibc:https://sourceware.org/git/?p=glibc.git;a=斑点;f=包含/unistd.h;hb=水头。

如果不是由Linux自己提供的,那么为什么要麻烦把函数原型放在这里呢?libc应该能够随心所欲地实现它。

约定是系统调用的libc包装器应该镜像系统调用本身的名称和参数,因此libc之间确实没有偏差的空间。

最新更新