Linux软件编程--IO
1、概念
- I / O指 input / output
- IO操作的对象是文件,在 Linux 系统中一切都是文件
2、文件
文件是一段数据的集合,通常存放在外存中,掉电不会丢失去
文件的分类
- b( block ,块设备文件)
- 按块扫描信息的文件称为块设备文件,存储类型的设备通常为块设备文件(磁盘等)
- 一般通过文件IO操作块设备文件
- c( character ,字符设备文件)
- 按字符扫描信息的文件称为字符设备文件,一般设备通常为字符设备文件
- 一般通过文件IO来操作字符设备文件
- d( directory ,目录文件)
- 存放目录的文件
- 一般通过目录IO或文件IO操作目录文件
- -(普通文件)
- 存放信息的文件
- 一般通过标准IO或文件IO操作
- l( link ,链接文件)
- 操作链接文件等价于操作链接文件所连接的文件
- 通常通过链接IO或文件IO操作
- s( socket ,套接字文件)
- 用于进程间通信的文件
- 通常通过文件IO操作
- p( pipe ,管道文件)
- 用于进程间通信
- 常通过文件IO操作
3、标准IO
1.缓存与标准IO
标准IO
- 用来操作普通文件的IO
- 是一种有缓存的IO,具有效率高、时效性差的特点
缓存的类型
- 缓存:当缓存区满时,将缓存区数据送入内核进行处理
- 全缓存
- 刷新条件
- 缓存区满刷新(缓存区满内存为 4kb )
- 调用函数刷新,如 fflush 强制刷新、fclose 或者关闭程序刷新
- 与文件建立的缓存一般是全缓存
- 刷新条件
- 行缓存
- 刷新条件
- 缓存区满刷新(行缓存区满内存为 1kb )
- 调用函数刷新,如 fflush 强制刷新、fclose 或者关闭程序刷新
- 与终端建立的缓存一般为行缓存
- 刷新条件
- 不缓存
- 立即刷新
- 出错处理与人机交互一般不缓存
2、普通文件的类型
- ASCLL码文件:文件中的内容均为能在屏幕上显示的ASCLL字符
- 程序、文本文件均为ASCLL码文件
- 二进制文件:文件中的所有内容均为数据对应的二进制形式存放(包含一些不能在界面上显示的内 容)
- ASCII码文件也是二进制文件
- 图片、音视频、压缩包均为二进制文件
3、标准IO的接口
1.fopen
原型:FILE *fopen(const char *pathname, const char *mode);
功能: 打开pathname指向字符串对应的文件,并且和它建立一个流
参数: pathname:要打开的文件路径字符串
mode:打开的方式 r 只读 文件存在只读打开,文件不存在报错
r+ 读写 文件存在读写打开,文件不存在报错
w 只写 文件存在清0,文件不存在创建,只写打开
w+ 写读 文件存在清0,文件不存在创建,写读打开
a 追加 文件存在追加,文件不存在创建,只写打开
a+ 追加读写 文件存在追加,文件不存在创建,写读打开
返回值: 成功返回FILE*指针 失败返回NULL
2.fclose
原型:int fclose(FILE *stream);
功能: 关闭已经打开的流
参数: stream:文件流指针
返回值: 成功返回0,失败返回EOF(-1)
3.fputc
原型:int fputc(int c, FILE *stream);
功能: 将字符c写入流中
参数: c:要写入的字符 stream:文件流指针
返回值: 成功返回输出的ASCII码值 失败返回EOF
4.fgetc
原型:int fgetc(FILE *stream);
功能: 读取流中的下一个字符
参数: stream:文件流指针
返回值: 成功返回读到字符的ASCII码值 失败或者读到文件末尾返回EOF
5.fputs
原型:int fputs(const char *s, FILE *stream);
功能: 向流中写入s指向的字符串
参数: s:要写入的字符串的首地址 stream:文件流指针
返回值: 成功返回非负数 失败返回EOF
6.fgets
原型:char *fgets(char *s, int size, FILE *stream);
功能: 从流中最多读size-1个字节数据放入s指向的空间中,遇到\n读取截止
参数: s:存放数据空间的首地址 size:最多存放元素的个数 stream:文件流指针
返回值: 成功返回存放数据空间的首地址 失败返回NULL 读到文件末尾返回NULL
7.fprintf
原型:int fprintf(FILE *stream, const char *format, ...);
功能: 将格式化的字符串打印在流中
参数: stream:文件流指针 format:格式化的字符串 ...:
参数 返回值: 成功返回打印字符的个数 失败返回负数
8.fscanf
原型:int fscanf(FILE *stream, const char *format, ...);
功能: 从流中接收格式化的字符串
参数: stream:文件流指针 format:格式化字符串 ...:参数
返回值: 成功返回匹配的输入控制符的个数 失败返回EOF 读到文件末尾返回EOF