文件
1.IO输入输出,操作对象是文件
2.Linux文件类型:
b block 块设备文件
按块扫描设备信息的文件
存储设备
c character 字符设备文件
按字符扫描设备信息的文件
d directory 目录文件
存放文件
- 普通文件
存放数据
图片、音视频、压缩包、文本文件
l link 链接文件
快捷方式
s socket 套接字文件
用来套接字通信
p pipe 管道文件
用来进程间通信
3.普通文件:
1.ASCII码文件
文件中所有的字符均为能够在终端上显示的字符
文本文件、程序.c
2.二进制文件
文件中存放数据的二进制形式
图片、音视频、压缩包
ASCII码文件是特殊的二进制文件
ASCII码文件
'2''0''2''4'
00110010 00110000 00110010 00110100 //字符2对应的二进制
二进制文件
2024
00000000 00000000 00000111 11101000 //2024的二进制形式
4.标准IO、文件IO
定义:
标准IO:标准IO是库函数,库函数:针对系统调用的封装,使用方便灵活
文件IO:文件IO是系统调用,系统调用:功能强大,应对复杂场景不够灵活
区别:
1.标准IO是库函数,是对系统调用的封装
2.文件IO是系统调用,是Linux内核中的函数接口
3.标准IO是有缓存的
4.文件IO是没有缓存的
5.标准IO可以在Windows或者Linux平台使用
6.文件IO只能在Linux系统平台使用
标准IO和文件IO分别可操作的文件:
标准IO可操作的文件(-)
文件IO可操作的文件(b、c、d、l、s、p)
5.标准IO:
getchar、putchar、scanf、printf、gets、puts ---> 标准IO
fopen、fclose、fgetc、fputc、fgets、fputs、fread、fwrite、fprintf、fscanf --> 标准IO
得使用头文件 :#include <stdio.h>
6.文件IO:
open、close、read、write -->文件IO
7.从文件中读写数据的流程:
打开文件 -> 读写文件 -> 关闭文件
fopen fclose
fgetc/fputc 单个字符的读写
fgets/fputs 字符串的读写
fscanf/fprintf 格式化字符串的读写
fread/fwrite 二进制文件的读写
8.文件流:
1.具有方向性(读写)
2.具有连续性
3.具有顺序性
句柄:操作对象的一个抽象
9.特殊的三个流:
stdin 标准输入流 从终端读取数据
stdout 标准输出流 向终端打印数据
stderr 标准出错流 向终端打印数据
getchar、scanf、gets 通过stdin来读取终端数据
putchar、printf、puts通过stdout来向终端输出数据
perror通过stderr来向终端输出数据
10.标准IO缓存:
缓存分为3类:
1.全缓存
定义:与文件建立的缓存
刷新条件:
1.缓存区存满刷新(全缓存大小:4096)
2.fflush函数强制刷新
3.程序结束/fclose刷新
存满所占的空房间大小:4k
2.行缓存
定义:与终端建立的缓存 stdin stdout
刷新条件:
1.缓存区存满刷新(行缓存大小:1024)
2.遇到\n刷新
3.fflush函数强制刷新
4.程序结束/fclose刷新
存满所占的空房间大小:1k
3.不缓存
直接刷新
缓存区大小: 0k stderr
人机交互、界面控制、出错处理
4.setvbuf
格式:
int setvbuf(FILE *stream, char *buf, int mode, size_t size);
功能:
改变一个流的缓存类型
参数:
stream:文件流指针
buf:指定缓存空间的首地址
mode:
_IONBF 不缓存
_IOLBF 行缓存
_IOFBF 全缓存
size:
设定缓存区的大小
返回值:
成功返回0
失败返回非0