按块扫描设备信息的文件
存储设备
按字符扫描设备信息的文件
存放文件
存放数据
图片、音视频、压缩包、文本文件
快捷方式
用来套接字通信
用来进程间通信
文件中所有的字符均为能够在终端上显示的字符
文本文件、程序.c
文件中存放数据的二进制形式
图片、音视频、压缩包
ASCII码文件是特殊的二进制文件
标准IO是库函数
文件IO是系统调用
系统调用:功能强大,应对复杂场景不够灵活
库函数:针对系统调用的封装,使用方便灵活
标准IO可以在Windows或者Linux平台使用
文件IO只能在Linux系统平台使用
getchar、putchar、scanf、printf、gets、puts ---> 标准IO
得使用头文件 :#include
打开文件 -> 读写文件 -> 关闭文件
fopen fclose
fgetc/fputc 单个字符的读写
fgets/fputs 字符串的读写
fscanf/fprintf 格式化字符串的读写
fread/fwrite 二进制文件的读写
FILE *fopen(const char *pathname, const char *mode);
功能:
打开pathname对应的文件并与其建立一个文件流
参数:
pathname:要打开文件路径的字符串
mode:
r 只读 文件不存在报错,文件存在只读打开
r+ 读写 文件不存在报错,文件存在读写打开
w 只写 文件不存在创建,文件存在将文件内容清空,只写打开
w+ 写读 文件不存在创建,文件存在将文件内容清空,写读打开
a 追加只写 文件不存在创建,文件存在追加只写打开
a+ 追加写读 文件不存在创建,文件存在追加写读打开
返回值:
成功返回打开的文件流指针
失败返回NULL
int fclose(FILE *stream);
功能:
关闭文件,释放文件流指针
参数:
stream:文件流指针
返回值:
成功返回0
失败返回EOF(-1)
1.具有方向性(读写)
2.具有连续性
3.具有顺序性
句柄:操作对象的一个抽象
检测是否有 ????????valgrind --tool=memcheck --leak-check=full ./a.out
stdin 标准输入流 从终端读取数据
stdout 标准输出流 向终端打印数据
stderr 标准出错流 向终端打印数据
getchar、scanf、gets 通过stdin来读取终端数据
putchar、printf、puts通过stdout来向终端输出数据
perror通过stderr来向终端输出数据
缓存分为3类:
定义:与文件建立的缓存
刷新条件:
1.缓存区存满刷新(全缓存大小:4096)
2.fflush函数强制刷新
3.程序结束/fclose刷新
存满所占的空房间大小:4k
定义:与终端建立的缓存 stdin stdout
刷新条件:
1.缓存区存满刷新(行缓存大小:1024)
2.遇到\n刷新
3.fflush函数强制刷新
4.程序结束/fclose刷新
存满所占的空房间大小:1k
直接刷新
缓存区大小: 0k stderr
人机交互、界面控制、出错处理
int setvbuf(FILE *stream, char *buf, int mode, size_t size);
功能:
改变一个流的缓存类型
参数:
stream:文件流指针
buf:指定缓存空间的首地址
mode:
_IONBF 不缓存
_IOLBF 行缓存
_IOFBF 全缓存
size:
设定缓存区的大小
返回值:
成功返回0
失败返回非0
int fputc(int c, FILE *stream);
功能:
向流中写入一个字符
参数:
c:写入字符的ASCII码值
stream:文件流指针
返回值:
成功返回写入字符的ASCII码值
失败返回EOF
注意:
1.fputc只能写入一个字符,写入多个字符需要多次调用fputc
2.fputc只能写入字符
作业:
1.利用fputc向文件file.txt中写入字符串"hello world"
2.搜索fgetc的功能,参数,返回值含义,实现读取文件中所有的内容并显示在界面上