一、标准IO
标准I/O指的是ANSIC中定义的用于I/O操作的一系列函数,所需头文件:#include<stdio.h>
流:
标准I/O都是基于流进行操作,当用标准I/O打开一个文件时,就会创建一个FILE结构体来描述这个文件,我们把这个结构体形象地称为流。
流的打开和关闭:
使用标准I/O打开流的函数有:fopen()/fdopen()/freopen(),它们可以以不同模式打开文件,都返回一个指向FILE的指针,该指针指向对应的I/O流。关闭流的函数fclose(),将流的缓冲区的数据全部写入文件中,并释放相关资源。
二、文件IO
文件I/O指的是由POSIX标准来定义的用于I/O操作的一系列函数。
三、标准IO与文件IO的区别
标准IO和文件IO都可以用来访问文件,那么他们之间有什么区别呢?
1、文件IO又称为低级磁盘IO,遵循POSIX相关标准,任何支持POSIX标准的操作系统上,都支持文件IO。
2、标准IO又称为高级磁盘IO,遵循ANSIC相关标准,只要开发环境中有标准C库,都支持标准IO。
Linux中使用的是glibc,它是标准C库的超集,不仅包含POSIX标准定义的函数,还包含ANSIC中定义的函数,所以在Linux下,既可以使用标准IO,也可以使用文件IO。
通过文件IO读写文件时,每次操作都会执行相关系统调用。这样处理的好处是可以直接读写实际文件,坏处是频繁地系统调用会增加系统开销;而标准IO可以看做是在文件IO的基础上封装了缓冲机制,先读写缓冲区,必要时再访问实际文件,从而减少系统调用次数。
文件IO中用文件描述符表示一个打开的文件,可以访问不同类型的文件(如普通文件、设备文件和管道文件)。而标准IO中用FILE(流)表示一个打开的文件,通常只用来访问普通文件。