一、标准I/O和文件I/O的定义
标准I/O:标准I/O是ANSI C中定义的用于I/O操作的一系列函数,具有一定的可移植性。标准I/O库处理很多细节。例如缓存分配,以优化长度执行I/O等。标准的I/O提供了三种类型的缓存
- 全缓存:当填满标准I/O缓存后才进行实际的I/O操作。 磁盘上的普通文件,用标准I/O打开时默认是全缓冲的
- 行缓存:当输入或输出中遇到换行符时,标准I/O库执行I/O操作。 标准输入/输出流就是使用行缓冲的典型例子
- 不带缓存:不对I/O操作进行缓冲,即在对流的读写时会立刻操作实际的文件。比如标准出错流stderr,使得出错信息可以立即显示在终端上
文件I/O:文件I/O称之为不带缓存的IO(unbuffered I/O)。不带缓存指的是每个read,write都调用内核中的一个系统调用。也就是一般所说的低级I/O
二、二者的区别
标准I/O | 文件I/O |
带缓冲 | 无缓冲 |
高级磁盘I/O,遵循ANSI C相关标准 | 低级磁盘I/O,遵循POSIX相关标准 |
读写文件时,先读写缓冲区。必要时再访问实际文件,从而减少了系统调用的次数 | 读写文件时,每次都会执行相关系统调用。能直接读写实际文件,但是增加了系统开销 |
用FILE(流)表示一个打开的文件,通常只能访问普通文件 | 用文件描述符表示一个打开的文件,可访问普通文件、设备文件和管道文件等 |
POSIX: Portable Operation System Interface 可移植操作系统接口规范
关注我的公众号,共同交流学习嵌入式开发相关技术: