前言
在 Linux 世界里,'一切皆文件'是最核心的设计哲学之一。小到终端输入输出,大到网络通信、设备交互,底层都依赖基础 IO完成数据流转。无论你是后端开发、嵌入式工程师,还是内核爱好者,掌握基础 IO 的底层逻辑,都是打通 Linux 开发任督二脉的关键一步。
一、理解'文件'
'文件'的概念远比我们想象的宽泛,这是理解 IO 的前提:
- 狭义文件:磁盘上的永久性存储文件,由**
属性(元数据)+ 内容**组成,即使是 0KB 的空文件,也会占用磁盘空间存储属性; - 广义文件:
Linux 下'一切皆文件',键盘、显示器、网卡、进程等都被抽象为文件,统一通过 IO 接口操作,在之后的学习中会深入理解这一概念; - 系统角度:文件操作的本质是**
进程对文件的操作**,磁盘由操作系统管理,任何文件读写最终都要通过系统调用接口实现,C 库函数只是封装层。
二、温故知新:C 标准库的文件 IO 操作
在学习 Linux 系统 IO 之前,我们大多已经接触过 C 标准库的文件操作——这是跨平台的'上层工具',也是理解底层原理的起点。
C 标准库提供了**fopen、fclose、fread、fwrite、fprintf等封装好的函数,它们最大的特点是自带用户态缓冲区**,并通过标准化接口实现了跨平台兼容。
举个简单的例子,用 C 库写入文件:
#include <stdio.h>
int main() {
FILE* fp = fopen("test.txt", "w");
if (fp == NULL) return -1;
fputs("Hello Linux IO\n", fp);
fclose(fp);
return 0;
}
2.1 C 语言文件操作常用函数
这类函数封装了底层系统调用,自带用户态缓冲区,可在 Windows、Linux、macOS 等平台使用。
| 功能分类 | 函数名 | 函数原型(核心简化版) | 功能说明 | 关键备注 |
|---|---|---|---|---|
| 打开 / 关闭 | fopen | FILE *fopen(const char *path, const char *mode); |


