一.文件的分类
1.概念
文件存在硬盘上,整个系统是一个文件系统。
在Linux中,很多的操作都是通过文件来实现。
Linux中一切皆文件
2.分类
Linux中一共有7种文件类型
(1)普通文件(-)
用于存储文件数据
(2)目录(d)
放子文件和子文件夹,用来形成整个文件系统的层次结构
(3)链接文件(l)
指的是软链接
(4)字符设备文件(C)
代表一个字符设备,通过访问字符设备文件来访问字符设备
(5)块设备文件(b)
代表一个块设备,通过访问块设备文件来访问块设备
(6)管道文件(p)
用于进程间管道通信
(7)套接字文件(s)
用于网络中本地通信
3.文件IO的层次关系
4.文件缓冲区
由于系统调用消耗时间相对较长,所以我们会设计缓冲区将多个文件操作合并,最后一起通过系统调用来实现。
通过缓冲区调用系统调用的时机可以将文件缓冲分为三类:
①无缓冲:没有缓冲区
②行缓冲:遇到换行符刷新缓冲区
③全缓冲:当缓冲区满了刷新缓冲区
标准IO默认使用行缓冲,文件IO无缓冲,标准输出(printf)使用行缓冲,标准错误输出无缓冲
printf会刷新缓冲区的条件:
①遇到'\n'
②程序正常结束
③使用fflush强制刷新
④缓冲区满了
文件缓冲的修改 -------- setbuf/setvbuf
#include <stdio.h>
void setbuf(FILE *stream,char *buf);
//等价于setvbuff(stream,buf,buf ? _IOFBF : _IONBF,BUFSIZ);
int setvbuf(FILE *stream,char *buf,int mode,size_t size);
参数:
stream:代表一个文件
buf:指向缓冲区
mode:使用哪种缓冲(三选一)
_IONBF unbuffered(无缓冲)
_IOLBF line buffered(行缓冲)
_IOFBF fully buffered(全缓冲)
size:缓冲区大小
缓冲区如果太小效率很低;很大浪费空间,容易造成数据丢失;缓冲区一般设为 512bytes —— 4Kbytes之间