手册页、系统调用和 libc

手册页、系统调用和 libc

为什么epoll_create没有被列为库函数(手册页,第 3 节),但是accept却被列为库函数?虽然这两个函数都是由内核系统调用提供的libc并且都引用内核系统调用?

我知道“为什么”问题通常不受欢迎,但这是我要求更好地了解这些概念之间的关系以及向第 2 和/或第 3 节添加某些内容的标准之间的关系以及 libc 之间的关系的方式。和系统调用(因为毕竟 libc 是为 C 程序实现与内核本身的接口的人。因此,据我了解,所有系统调用都是库函数,因为 libc 库提供了所有这些函数;或者有例外吗?我的解释?)。

答案1

至少在 Linux 手册页项目中,哪个部分应该记录给定函数的主要标准在第3节简介:

本手册的第 3 节描述了除第 2 节中描述的实现系统调用的库函数(系统调用包装器)之外的所有库函数。

手册accept您可能在“3p”部分遇到过:它是 POSIX 程序员手册的一部分。 POSIX 不区分“纯”C 库函数和系统调用;它描述了系统接口不关心自己在哪里它们已实施。

至于你的附属问题,一些系统调用没有库函数。作为一般规则,新的系统调用不会立即获得包装器;而是会立即获得包装器。最重要的是,一些系统调用,例如init_module根本就注定不会获得包装器,至少在 GNU C 库中不会。

相关内容