世界杯logo

Linux 上的 C 库从哪来?

问题背景: 最近涉及到这方面的问题,很是疑惑,有两点: 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 并不直接依赖某个特定操作系统,而是通过 抽象层 和 特定平台的实现 与操作系统交互。