透视文件IO:从C库函数的‘表象’到系统调用的‘本质’
作为一名开发者,我们每天都在和文件打交道。`fopen`, `fread`, `fwrite`, `fclose` 这些 C 语言标准库函数就像老朋友一样熟悉。我们通过它们读写数据,看似轻松简单。但你是否曾想过,当我们调用 `fwrite(“Hello World”)` 时,这串字符究竟经历了怎样的冒险才最终安然抵达磁盘?
这背后是一场发生在 **用户空间** 的便捷“表象”与 **内核空间** 的硬核“本质”之间的精彩对话。今天,就让我们拿起“显微镜”和“手术刀”,一层层剥开文件 I/O 的外衣,直击其最深处的内核奥秘。
### 第一层:便捷的表象 - C 标准库(stdio)
当我们使用 C 标准库进行文件操作时,我们享受的是极致便利。库函数帮我们处理了无数的细节。
```c
#include <stdio.h>
int main() {
// 1. 打开文件 - “表象”:一个简单的函数调用
// “本质”:它内部可能调用了多个系统调用,不仅打开了文件,还分配了一个缓冲区
FILE *file_ptr = fopen("example.txt", "w");
if (file_ptr == NULL) {