为什么需要标准IO?
每一个系统,对文件的管理接口是不一样的
Linux:read,write,open,close
windows:winOpen
C语言标准委员会就觉得有义务统一对文件的管理接口,由此开发出了标准IO库
文件分为普通文件和二进制文件:普通文件有.txt .c .s .sh 以字符的ASCII码来解析文件
二进制文件有:.jepg .bmp .mp3 .hex ...... 有特定格式的文件 按照特定的格式去解析
在标准IO库中,用结构体FILE来描述或者表示一个文件 在这个结构体中,会创建两个缓冲区、读缓冲和写缓冲 struct FILE{char *in;char *out;}还提供了对“文件”的操作接口函数:
fopen/fclose/fread/fwrite/flseek/....
puts/gets/fputs/fgets/scanf/printf/......
标准IO带缓冲的IO,IO流,stream . 它的效率要比系统IO要高,why?
系统IO:
read 1byte
APP(read) -> 内核(.....) -> 硬件(从硬盘中读一个字节出来)
.....
APP(read) -> 内核(.....) -> 硬件(从硬盘中读一个字节出来)
标准IO:
fread 1byte
它会从硬盘上读取一块(512Bytes)出来,放到标准IO的读缓冲区。
#include <stdio.h>
FILE *fopen(const char *pathname, const char *mode);
@pathname : 要打开的那个文件的文件名(带路径)
@mode : 打开的那个文件的方式,如下几种方式:
"r" :只读打开。文件不存在,则报错;
打开后,光标在开头
"r+" : 读写打开。文件不存在,则报错;
打开后,光标在开头
"w" : 只写打开。文件不存在,则创建;
打开后,文件内容截短(文件内容被清空)
"w+" : 读写打开。文件不存在,则创建;
打开后,文件内容截短(文件内容被清空)
"a" : append 追加打开。文件不存在,则创建;
打开后,光标在末尾。文件内容不会截短。
"a+" : 读写打开。文件不存在,则创建;
原始读的位置在开头,原始写的位置在末尾。
(只有一个光标,先读->开头
先写 -> 末尾)
成功返回一个文件流指针 FILE*
冲洗一个文件流
fflush 同步一个文件流
fflush: 把缓冲区的内容做一次与硬件同步。