day25-IO
三、IO
1.概念
1.IO指intput/output
2.Linux系统中一切皆是文件
3.IO操作的对象是文件
2.文件
1.一段数据的集合
2.文件通常存放在外存中,掉段后数据不会消失
3.分类:
①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.概念
通常用来操作普通文件
2.普通文件类型
①ASCII码文件:文件中所有内容均为能够在屏幕上显示的ASCII码字符
●程序、文本文件均为ASCII码文件
②二进制文件:文件中的所有内容均为数据对应的二进制形式存放
●ASCII码文件也是二进制文件
●图片、音视频、压缩包均为二进制文件
3.标准IO的接口:
1.fopen/fclose
2.fgetc/fputc
3.fgets/fputs
4.fscanf/fprintf
5.fread/fwrite
6.fseek/rewind/ftell
7.操作步骤
①打开文件
②读写文件
③关闭文件
4.文件的打开
1.函数接口
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:文件流指针
●注:putchar()等价于fputc(ch, stdout)
④返回值:
成功返回输出的ASCII码值失败返回EOF
4.fgetc
①原型:int fgetc(FILE *stream);
②功能:读取流中的下一个字符
③参数:
stream:文件流指针
④返回值:
成功返回读到字符的ASCII码值失败或者读到文件末尾返回EOF
●注:ch = getchar()等价于 ch = fgetc(stdin)
5.fputs
①原型:int fputs(const char *s, FILE *stream);
②功能:向流中写入s指向的字符串
③参数:
s:要写入的字符串的首地址stream:文件流指针
④返回值:
成功返回非负数失败返回EOF
●注:fputs不会多打印\n字符,puts会多打印一个\n字符
6.fgets
①原型:char *fgets(char *s, int size, FILE *stream);
②功能:从流中最多读size-1个字节数据放入s指向的空间中,遇到\n读取截止
③参数:
s:存放数据空间的首地址size:最多存放元素的个数stream:文件流指针
④返回值:
成功返回存放数据空间的首地址失败返回NULL读到文件末尾返回NULL
●注:gets会去掉从终端接收的\n字符,fgets不会去掉从终端接收的\n字符
7.fprintf
①原型:int fprintf(FILE *stream, const char *format, ...);
②功能:将格式化的字符串打印在流中
③参数:
stream:文件流指针format:格式化的字符串...:参数
④返回值:
成功返回打印字符的个数失败返回负数
8.fscanf
①原型:int fscanf(FILE *stream, const char *format, ...);
②功能:从流中接收格式化的字符串
③参数:
stream:文件流指针format:格式化字符串...:参数
④返回值:
成功返回匹配的输入控制符的个数失败返回EOF读到文件末尾返回EOF
2.已经打开的三个特殊的流
①stdin:标准输入流
②stdout:标准输出流
③stderr:标准出错流
●printf、puts、putchar都是通过stdout流实现在终端信息打印
●scanf、gets、getchar都是通过stdin流实现获得终端信息
●perror通过stderr流实现在终端打印出错信息
5.标准IO的缓存
1.标准IO缓存
1.标准IO是一种有缓的IO
2.效率高
3.实时性差
2.缓存的类型
1.全缓存(4k):
●缓存区满刷新缓存
●刷新条件:
○缓存区满4k刷新
○fflush函数强制刷新
○fclose或者程序关闭刷新
●与文件建立的缓存一般为全缓存
2. 行缓存 (1k):
●遇到\n刷新缓存区
●刷新条件:
○缓存区满1k刷新
○遇到\n刷新
○fflush函数强制刷新
○fclose或者程序关闭刷新
●与终端建立的缓存一般为行缓存(stdin、stdout均为行缓存)
3. 不缓存 (0k):
●立即刷新不缓存
●刷新条件:
○不缓存立即刷新
●出错处理或者人机交互一般使用不缓存(stderr不缓存)
man手册
1.章节
1.标准命令
2.系统调用
3.库函数
4.设备说明
5.文件格式
6.娱乐
7.杂项
8.管理员命令
2.使用示例
man 章节号 搜索条件