1.文件 标准IO库
1.文件 标准IO库
- **1. 标准I/O库概述**
- **2. 文件的概念与类型**
- **3. 标准I/O库的函数分类**
- **4. 缓冲机制**
- **5. 文件操作步骤**
- **6. 文件定位**
- **7. 常见函数详解**
- **8. 练习与作业**
- **9. 其他注意事项**
- **10. 总结**
1. 标准I/O库概述
- 标准I/O库:由Dennis Ritchie在1975年设计,是C语言标准库的一部分,提供了一组用于文件操作的函数。
- 头文件:
stdio.h
,位于/usr/include/stdio.h
。 - 标准输入输出设备:
- 标准输入(
stdin
):默认是键盘(/dev/input
)。 - 标准输出(
stdout
):默认是显示器。
- 标准输入(
- 文件操作:在Linux中,I/O操作都是对文件的操作,标准I/O库是对文件I/O的封装,提供了缓冲机制,减少系统调用的开销。
2. 文件的概念与类型
- 文件的作用:用于存储数据(数据和指令)。
- Linux中的文件类型:
d
:目录-
:普通文件l
:符号链接p
:管道s
:套接字c
:字符设备文件b
:块设备文件
3. 标准I/O库的函数分类
- 文件操作函数:
fopen
:打开文件fclose
:关闭文件
- 字符操作函数:
fgetc
:从文件中读取一个字符fputc
:向文件中写入一个字符
- 行操作函数:
fgets
:从文件中读取一行fputs
:向文件中写入一行
- 块操作函数:
fread
:从文件中读取一块数据fwrite
:向文件中写入一块数据
- 文件定位函数:
fseek
:移动文件指针ftell
:获取当前文件指针的位置rewind
:将文件指针重置到文件开头
4. 缓冲机制
- 行缓冲:
- 缓冲区大小:1KB
- 刷新条件:
- 遇到
\n
- 缓冲区满
- 程序结束
- 调用
fflush(stdout)
- 遇到
- 主要用于终端交互(如
stdout
)。
- 全缓冲:
- 缓冲区大小:4KB
- 刷新条件:
- 缓冲区满
- 程序结束
- 调用
fflush(fp)
- 主要用于文件读写。
- 无缓冲:
- 缓冲区大小:0KB
- 数据直接刷新,不经过缓冲区。
- 主要用于错误信息输出(如
stderr
)。
5. 文件操作步骤
- 打开文件:使用
fopen
函数,返回一个FILE*
指针。 - 读写操作:
- 使用
fgetc
、fputc
、fgets
、fputs
、fread
、fwrite
等函数进行读写。
- 使用
- 关闭文件:使用
fclose
函数关闭文件。
6. 文件定位
- fseek:
- 功能:移动文件指针。
- 参数:
stream
:文件流指针。offset
:偏移量(正数向文件末尾偏移,负数向文件开头偏移)。whence
:起始位置(SEEK_SET
、SEEK_CUR
、SEEK_END
)。
- ftell:
- 功能:获取当前文件指针的位置。
- rewind:
- 功能:将文件指针重置到文件开头。
7. 常见函数详解
- fopen:
- 模式:
r
:只读r+
:读写w
:只写(文件不存在则创建,存在则清空)w+
:写读(文件不存在则创建,存在则清空)a
:追加写(文件不存在则创建,存在则追加)a+
:追加读写(文件不存在则创建,存在则追加)
- 模式:
- fgetc/fputc:
fgetc
:从文件中读取一个字符。fputc
:向文件中写入一个字符。
- fgets/fputs:
fgets
:从文件中读取一行。fputs
:向文件中写入一行。
- fread/fwrite:
fread
:从文件中读取一块数据。fwrite
:向文件中写入一块数据。
8. 练习与作业
- 练习1:使用
fgetc
和fputc
实现类似cat
命令的功能。 - 练习2:使用
fgetc
和fputc
实现文件拷贝功能。 - 练习3:使用
fgets
和fputs
实现用户输入并显示输出,输入quit
时程序结束。 - 作业1:使用
fread
和fwrite
实现文件拷贝功能。 - 作业2:统计文本文件中
a-z
字母出现的次数。
9. 其他注意事项
- 文件结束判断:
- 使用
EOF
宏或feof
函数判断文件是否结束。 feof
函数需要在一次I/O操作后调用。
- 使用
- 错误处理:
- 使用
ferror
检测流是否出错。 - 使用
clearerr
清除错误标记。
- 使用
10. 总结
标准I/O库提供了丰富的函数用于文件操作,理解缓冲机制、文件定位、文件类型等概念对于高效使用这些函数至关重要。通过练习和作业,可以加深对标准I/O库的理解和应用。