1. 概述
这里所说的是标准I/O库。以标准二字限定,是因为接下来介绍的I/O函数由ISO C标准说明并在诸多操作系统上都进行了实现,包括UNIX like OS, Linux, Mac, Windows等。标准I/O库处理了很多细节,例如缓冲区分配,以优化长度执行I/O等。这些处理使得用户不必担心如何使用正确的块长度,从而大大提高了开发效率。
标准I/O库实际上就是在我在上一片博客(Linux系统C语言读写文件总结 (一))中提到的基本I/O操作函数(read,write等)的一个封装。标准I/O函数操作对应的是于文件相关的流(用文件指针FILE *进行表示),而不是文件描述符(fd)。一个FILE结构中包括了实际操作文件的文件描述符,指向用于该流缓冲区的指针,缓冲区的长度,当前在缓冲区中的字符数以及出错标志等等。
此外流的定向分为面向单字节的和多字节字符集。freopen函数可以用来清除流的定向,fwide函数可以用来设置流的定向。
2. 标准输入,标准输出和标准出错
有几个特殊的流,对应于标准输入,标准输出和标准出错。他们的文件指针分别是stdin, stdout和stderr,并被定义在头文件<stdio.h>中。到这儿了就可以回想下这三个特殊文件对应的文件描述符。
3. 缓冲
标准I/O提供了三种类型的缓冲:
(1)全缓冲。
(2)行缓冲。
(3)不带缓冲。
4. 打开和关闭流
打开流,成功返回文件指针,否则返回NULL
#include<stdio.h>
FILE *fopen(const char *restrict pathname, const char *restrict type);
FILE *freopen(const char *restrict pathname, const char *restrict type, FILE *restrict fp);
FILE *fdopen(int filedes, const char *type);
type指定对该I/O流的读写方式,ISO C规定该参数有15种不同的值,如下
type 说明 r或rb
w或wb
a或ab
r+或r+b或rb+
w+或w+b或wb+
a+或a+b或ab+为读而打开
把文件截短至0长,或为写而创建
添加;为在文件尾写而打开,或为写而创建
为读和写而打开