问题背景: 最近涉及到这方面的问题,很是疑惑,有两点: 1.Linux 用的 C库是 glibc,而 glibc 是 GNU 维护的,那 glibc 就不可能只给 Linux 一个操作系统用,那 C 库里的系统调用是如何准确调用的? 2.Linux 源码中貌似没有 glibc,那么为什么我编译出的 Linux 内核可以直接使用,并且能跑 C 程序呢,这个 C 程序用的 glibc 是什么时候出现的,又是什么版本的,是随linux内核源码一起发布的吗? 这两个问题涉及 Linux 操作系统和 C 标准库之间的关系,以及它们的工作原理和历史背景。让我们逐一深入分析: 问题 1:glibc 是如何准确调用 Linux 系统调用的? 背景:glibc 和系统调用的关系 glibc 是什么? glibc 是 GNU C Library 的简称,是 GNU 项目实现的一种 C 标准库。它是一个高层的库,提供了许多功能,包括字符串操作、文件 I/O、内存管理和线程操作等。 它不仅为 Linux 提供支持,还支持其他一些类 Unix 系统(如 Hurd、Solaris 等)。 系统调用(syscall)是什么? 系统调用是用户空间程序与内核交互的接口。C 标准库中的许多功能(如文件操作 fopen)最终都会通过系统调用与操作系统内核交互(如 open 系统调用)。 glibc 如何与内核交互? glibc 并不直接依赖某个特定操作系统,而是通过 抽象层 和 特定平台的实现 与操作系统交互。