标准I/O和文件I/O的区别

一、标准I/O和文件I/O的定义

标准I/O:标准I/O是ANSI C中定义的用于I/O操作的一系列函数,具有一定的可移植性。标准I/O库处理很多细节。例如缓存分配,以优化长度执行I/O等。标准的I/O提供了三种类型的缓存

  1. 全缓存:当填满标准I/O缓存后才进行实际的I/O操作。 磁盘上的普通文件,用标准I/O打开时默认是全缓冲的
  2. 行缓存:当输入或输出中遇到换行符时,标准I/O库执行I/O操作。 标准输入/输出流就是使用行缓冲的典型例子
  3. 不带缓存:不对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 可移植操作系统接口规范

猜你喜欢

转载自blog.csdn.net/Chuangke_Andy/article/details/108262466