8.标准IO

标准IO指的是ANSI C中定义的用于IO操作的一系列函数
1、io分类:
1)标准io:也叫高级io、缓存io
读数据:磁盘数据>>内核缓存区>>流缓存区>>标准io函数使用
写数据:数据>>流缓存区>>内核缓存区
2)文件io:也叫低级io、非缓存io
文件io与标准io的区别:文件io没有流缓存区
缓存:暂时存放数据的空间
linux结构:硬件、内核、应用层
2、缓存区分类:
1)全缓存:当填满io缓存区后或执行flush操作才进行io操作,(对于存放在磁盘上的普通文件用标准io打开默认全是全缓存的。输入输出条件1、缓存区满2、使用fflush函数)
2)行缓存:标准输入输出流就是使用行缓存的典型例子,在输入输出中遇到换行符时执行io操作。输入输出条件:缓存区满、遇见\n 、使用fflush函数
3)不带缓存:不对io操作进行缓存,即对流的读写时立即操作实际的文件,标准出错流就是不带缓存的。
3、标准io函数
1)流的打开
FILE *fopen (const char *parth,const char *mode):指定c打开的文件名和打开模式;返回值成功则返回指向FILE的指针,失败返回NULL
fopen打开文件模式分类
r权限:只读特性,如果文件不存在报错,文件存在指针指向文件头
r+权限:读写特性,如果文件不存在报错,文件存在指针指向文件头
w权限:只写特性,文件不存在创建,文件存在清空(打开的时候清空一次)。注意:在打开的时候清空
w+权限:读写特性,文件不存在创建,文件存在清空(打开的时候清空一次)。注意:在打开的时候清空
a:追加模式写数据,文件不存在创建,文件存在追加
a+:追加模式读写数据,文件不存在创建;文件存在:如果先读再写,无论指针指向文件哪个位置,只要写一定写在文件尾部;先写再读,一定从文件尾部读
2)流的关闭
int fclose (FILE *stream):将流的缓存区内的数据全部写入文件中(刷新缓存区),并释放相关资源。程序结束后会自动释放所以打开的流。成功返回0,失败返回EOF。
3)错误处理函数
void perror(const char* s): 打印错误信息,无返回值
char *strerror(int errnum): 打印错误信息
4)流的读写
按字符输入输出:
int fgetc(FILE *stream): 一次只从指定的流中读一个字符
int fputc(int c,FILE *stream ): 向指定的流中输出一个字符
按行输入输出:
char *fgets(char *s,int size,FILE *stream): 从指定的流中读取一个字符串,当遇到.\n或读取了size-1个字符后返回
char *fputs(char *s,FILE *stream): 写字符串到指定的流中
5)以指定单位读写文件
size_t fread(void *ptr,size_t size,size_t nmenb,FILE *stream): 对打开的文件流按指定大小为单位进行读操作
size_t fwrite(const void *ptr,size_t size,size_t nmenb,FILE *stream): 对打开的文件流按指定大小为单位进行写操作
6)流的定位
int fseek(FILE *stream,long offset,int whence): 对流进行定位操作
7)格式化输入输出
int fprintf(FLIE *stream,const char *format.......):写内容到输出流中
int sprintf(char *buf,const char *format......):写内容到数组中
int fscanf(FILE *fp,const char *format.....)从输入流中读取内容
sscanf(char *buf,const char *format......):从数组中读取内容

feof(FILE *stream):返回fgets(fgetc): 对指定的流读取完成与否的结果,读取完返回非0数,否则返回0

空洞:预留空间,提高效率

猜你喜欢

转载自blog.csdn.net/qq_33575901/article/details/80958357