IO
学习IO目的:为了将数据存储以及对于文件的操作
标准IO:
- ANSI(美国标准协会)联合ISO(国际化标准组织)所形成的的一个C标准
(C标准:属于C库,含有一些列输入输出函数),只要操作系统支持C库,就可以使用这一类标准IO提供的函数----》移植性比较高
- 操作的文件一般是普通文件
- 属于高级磁盘IO--》存在缓冲区,减少了用户态切换至内核态,最后又返回用户态这样的频繁操作,意味着减少了系统开销。
- 通过文件流(FILE *)操作文件(打开文件时,系统会自动将该文件的信息定义结构体类型struct FILE 来进行存储,因此可以通过FILE *文件指针来操作文件)
文件IO
POSIX(可移植操作系统接口)推出的对于支持POSIX标准的系统可以操作文件的一系列函数(UNIX系统一般都会支持POSIX的标准)---》移植性不高(只能应用于UNIX系统)
- 操作的文件可以普通文件或者设备文件(硬件)
- 低级磁盘IO---》没有缓冲区,每一次都是系统调用,都会存在用户空间和内核空间的频繁切换工作,好处就是可以直接对于设备进行读写操作。
- 通过文件描述符来(非负的数字)操作文件
概念:文件被打开时,创建的结构体名为FILE的结构体指针,形象的称为“流”
分析:为啥称结构体指针为流?
--》因为标准IO存在缓冲区,所以每一次向缓冲区不断放入数据(每一次的放入数据:均是需要通过文件指针来进行读写指向的文件),存在三个特点:
- 有源头:APP
- 有目的:缓冲区
- 持续性:不断放入数据到缓冲区
---》一旦具备以上3个特点,就会形成流,所以通过文件指针操作文件可以理解为是通过操作流来操作文件
特性函数:
- perror(“string”);---》可以输出出错的原因
- feof(FILE* Stream);
作用:判断文件是否抵达末尾(不管是文本文件还是二进制文件,都可以判断)
返回值:
抵达文件末尾---》返回值为非零
未抵达文件末尾---》返回值0
操作文件IO:open close read write
头文件:
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
打开文件
函数原型:
int open(const char *pathname, int flags);
功能:打开指定的文件