首页 > 解决方案 > 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);

我的问题是:

标签: clinuxsystem-calls

解决方案


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

不,unistd.h当您#include <unistd.h>不是来自 Linux 内核时使用的文件(即使它确实有一些具有该名称的文件)。它来自您的 libc,可能是glibchttps ://sourceware.org/git/?p=glibc.git;a=blob;f=include/unistd.h;hb=HEAD 。

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

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


推荐阅读