目录
1.标准IO和文件IO区别:
1.标准IO:
- 标准IO是由ANSIC(ANSI美国国家标准协会及国际标准化组织(ISO))标准定义
- 只要操作系统安装了C库,标准I/O函数就可以调用,具有更好的移植性好。
- 标准I/O可以减少系统调用(缓冲机制)的次数,提高系统效率。
- 标准I/O的核心对象是流,每打开一个文件,就会创建FILE结构体描述该文件,我们把FILE称为流,标准I/O函数都基于流进行各种操作。
2. 文件IO:
- 遵循POSIX相关标准,任何兼容POSIX标准的操作系统上都支持文件I/O
- 文件I/O每次操作都会执行系统调用,好处:直接读写实际文件.坏处:频繁的系统调用会增加系统开销.
- 文件描述符,(一个非负整数),每打开一个文件系统会自动分配一个文件描述符
3.系统调用
不带OS系统开发: 裸机开发(C语言+位运算) 带OS系统开发: 应用开发 驱动开发
4. 缓冲机制
全缓冲
在这种情况下,当填满标准I/O缓冲区后才进行实际I/O操作.对于存放在磁盘上的普通文件,用标准I/O打开时默认时全缓冲的.
行缓冲
在这种情况下,当在输入和输出时遇到换行符时执行I/O操作。标准输入流和标准输出流使用行缓冲的典型例子。
无缓冲
不对I/O操作进行缓冲,即在对流的读写时会立刻操作实际的文件.
2.标准IO
文件流:
文本流:
二进制流:
Windows:
文本流换行 ‘\r\n’
1023 ‘1’ ‘0’ ‘2’ ‘3’ --->分别转换成二进制存进去
二进制流换行 ‘\n’
1023 --->转成二进制
Linux下 文本流和二进制流无区别:
1.打开和关闭文件流
1.打开fopen
参数1:文件名(可包含文件路径)
参数2:打开方式
返回值:打开成功返回文件流指针,失败则返回NULL
FILE * fopen (const char *path, const char *mode);
2.关闭文件fclose
2.读写文件流
-
按字符读写文件
fputc()
fgetc()
按行读写文件
fgets()
参数1:缓冲区的首地址
参数2:读取的字节数
参数3:文件流的指针
- 遇到’\n’结束,’\n’也读进了缓冲区
- 读取SIZE-1结束
fputs()
按对象读写文件
1.fwrite()
2.fread()
按格式化读写文件
fprintf()按格式化写入文件
fscanf()读取文件
3.文件流其他相关函数
1.feof()判断文件流是否到文件末尾
2.fflush()收到清理缓冲区
3.ftell()获得文件流的读写位置
4.fseek()移动文件流的读写位置
fseek(fp,0,SEEK_SET); //将文件流的读写位置移动的文件开头
5.rewind()