C语言标准I/O库详解:文件操作与缓冲区机制
C语言标准I/O库详解:文件操作与缓冲区机制
一、核心结构体:FILE指针
FILE *
:标准I/O操作的核心返回类型fopen(3)
返回的FILE结构体包含:- 文件描述符(File Descriptor)
- 缓冲区地址(Buffer Address)
- 缓冲区大小(Buffer Size)
- 错误状态标志(Error Indicator)
二、标准I/O操作分类
1. 文件打开与关闭
函数 | 作用 |
---|---|
fopen() | 打开文件,返回FILE指针 |
fclose() | 关闭文件并释放资源 |
2. 数据读取函数
函数 | 说明 |
---|---|
fgetc() /getc() | 读取单个字符 |
getchar() | 从标准输入读取字符 |
fgets() | 读取一行字符串 |
getline() | 动态分配读取行(POSIX标准) |
fread() | 二进制数据块读取 |
fscanf() /scanf() | 格式化输入 |
3. 数据写入函数
函数 | 说明 |
---|---|
fputc() /putc() | 写入单个字符 |
putchar() | 向标准输出写入字符 |
fputs() | 写入字符串 |
puts() | 向标准输出写入字符串(自动换行) |
fwrite() | 二进制数据块写入 |
fprintf() /printf() | 格式化输出 |
snprintf() | 安全格式化到缓冲区 |
4. 文件定位操作
函数 | 作用 |
---|---|
fseek() | 设置文件位置指针 |
ftell() | 获取当前文件位置 |
rewind() | 重置文件位置到开头 |
三、缓冲区机制与性能优化
1. 缓冲区核心作用
- 合并多次I/O系统调用,减少频繁操作内核的开销
- 默认缓冲区大小:4KB(依赖系统实现)
2. 三种缓冲类型
类型 | 刷新条件 | 应用场景 |
---|---|---|
行缓冲 | 1. 遇到 \n 2. 缓冲区满 3. 进程正常终止 4. 调用 fflush() | stdin / stdout |
全缓冲 | 1. 缓冲区满 2. 进程终止 3. 显式调用 fflush() | 普通文件(默认) |
无缓冲 | 立即输出 | stderr |
3. 强制刷新缓冲区的四种方式
- 行缓冲模式下遇到换行符
\n
- 缓冲区被写满
- 进程正常退出(如
main()
返回或exit()
) - 调用
fflush(NULL)
强制刷新所有输出流
四、关键函数原型(补充)
// 打开文件
FILE *fopen(const char *path, const char *mode); // 刷新缓冲区
int fflush(FILE *stream); // 安全格式化
int snprintf(char *str, size_t size, const char *format, ...);
原创技术笔记,转载需注明出处。更多系统编程内容持续更新中…