1.IO
1.1 概念
- IO指input / output
- Linux系统中一切皆是文件
- IO操作的对象是文件
1.2 文件
- 一段数据的集合
- 文件通常存放在外存中,掉电后数据不会消失
b | block | 块设备文件 | 按块(512字节)扫描设备信息 | 文件IO |
c |
character | 字符设备文件 | 按字符扫描设备信息 | 文件IO |
d | directory | 目录文件 | 存放文件的文件夹 | 目录IO/文件IO |
– | 普通文件 | 存放信息 | 标准IO/文件IO | |
l | link | 链接文件 | 类似于windows的快捷方式 | 链接IO/文件IO |
s | socket | 套接字文件 | 用来进程间通信 | 文件IO |
p |
pipe | 管道文件 | 用来进程间通信 | 文件IO |
1.3 标准IO
1.概念
通常用来操作普通文件
2.普通文件类型
1.ASCII码文件:文件中的所有内容均为能够在屏幕上显示的ASCII码字符
- 程序、文本文件均为ASCII码文件
2.二进制文件:文件中的所有内容均为数据对应的二进制形式存放(包含一些不能在界面上显示的内容)
- ASCII文件也是二进制文件
- 图片、音视频、压缩包均为二进制文件
3.标准IO的接口
fopen/fclose |
fgetc/fputc |
fgets/fputs |
fscanf/fprintf |
fread/fwrite |
fseek/rewind/ftell |
操作步骤
- 打开文件
- 读写文件
- 关闭文件
4.文件的打开
fopen
原型:FILE *fopen(const char *pathname, const char *mode);
功能:fopen() 函数打开由 pathname 指向的字符串所指定的文件,并将其与一个流相关联。
参数:
pathname:要打开的文件路径字符串
mode:打开的方式
r:只读 文件存在只读打开,文件不存在报错
r+:读写 文件存在读写打开,文件不存在报错
w:只写 文件存在清0,文件不存在创建,只写打开
w+:读写 文件存在清0,文件不存在创建,写读打开
a:追加 文件存在追加,文件不存在创建,只读打开
a+:追加读写 文件存在追加,文件不存在创建,写读打开
返回值:
成功返回FILE*指针
失败返回NULL
fclose
原型:int fclose(FILE *stream);
功能:关闭已经打开的流
参数:
stream:文件流指针
返回值:
成功返回0
失败返回EOF(-1)
fputc
原型:int fputc(int c, FILE *stream);
功能:将字符c写入流中
参数:
c:要写入的字符
stream:文件流指针
返回值:
成功返回输出的ASCII码值
失败返回EOF(-1)
注意:ch = putchar()等价于fputc(ch, stdout)
fgetc
原型:int fgetc(int c, FILE *stream);
功能:读取流中的下一个字符
参数:
stream:文件流指针
返回值:
成功返回输出的ASCII码值
失败返回EOF(-1)
注意:ch = getchar()等价于fgetc(ch, stdin)
fputs
原型:int fputs(const char *s, FILE *stream);
功能:向流中写入s指向的字符串
参数:
s:要写入字符串的首地址
stream:文件流指针
返回值:
成功返回非负数
失败返回EOF
注意:fputs不会多打印\\n字符、puts会多打印一个\\n字符
fgets
原型:char *fgets(const char *s, int size, FILE *stream);
功能:从流中最多读size-1个字节数据放入s指向的空间中,遇到\\n读取截至
参数:
s:存放数据空间的首地址
size:最多存放元素的个数
stream:文件流指针
返回值:
成功返回存放数据空间的首地址
失败返回NULL
读到文件末尾返回NULL
注意:gets会去掉从终端接收的\\n字符、fgets不会去掉从终端接收的\\n字符
fprintf
原型:int fprintf(FILE *stream, const char *format, …);
功能:将格式化的字符串打印在流中
参数:
stream:文件流指针
format:格式化的字符串
…:参数
返回值:
成功返回打印字符的个数
失败返回负数
fscanf
原型:int fscanf(FILE *stream, const char *format, …);
功能:从流中接收格式化的字符串
参数:
stream:文件流指针
format:格式化的字符串
…:参数
返回值:
成功返回匹配的输入控制符的个数
失败返回EOF
读到文件末尾返回EOF
已经打开的三个特殊的流
stdin:标准输入流
stdout:标准输出流
stderr:标准出错流
- printf、puts依赖于stdin
- gets、scanf、getchar依赖于stdout
- perror依赖于stderr
5.标准IO的缓存
标准IO缓存
- 标准IO是一种有缓存的IO
- 效率高
- 实时性差
缓存的类型
1.全缓存:缓存区满(4k)刷新缓存、fflush函数强制刷新、fclose或者程序关闭刷新
- 与文件建立的缓存一般为全缓存
2.行缓存:遇到\\n刷新缓存区、缓存区满(1k)刷新缓存、fflush函数强制刷新、fclose或者程序关闭刷新
- 与终端建立的缓存一般为行缓存(stdin、stdout均为行缓存)
3.不缓存:立即刷新,不缓存(0k)
- 出错处理或者人机交互一般不缓存(stderr不缓存)
评论前必须登录!
注册