首页 > 代码库 > C标准I/O缓冲区:全缓冲和行缓冲
C标准I/O缓冲区:全缓冲和行缓冲
ISO C标准I/O提供了全缓冲和行缓冲
全缓冲:在进行I/O操作时,只有当I/O缓冲区被填满时,才进行真正的I/O操作。所以对于全缓冲的缓冲区可由标准I/O例程自动刷新,即当缓冲区填满时,还有一种方法就是调用函数fflush进行刷新。
行缓冲:在I/O操作时,输入输出遇到换行符时进行,进行真正的I/O操作。对于行缓冲,标准I/O每一行缓冲区的长度是固定的,所以只要填满了缓冲区,即使没有遇到换行符,也换刷新缓冲区。
当然标准I/O还提供了不带缓冲的类型,就是不对字符进行缓冲操作。
那么全缓冲和行缓冲都用在I/O操作的哪些地方呢。
ISO C要求:
- 当且仅当标准输入和输出不涉及交互式设备(终端设备)时,它们才是全缓冲。
- 标准出错不是全缓冲。
但是这并没有告诉我们当涉及到交互式设备时,标准输入输出是行缓冲还是不带缓冲,以及标准出错时行缓冲还是不带缓冲。很多系统(FreeBSD,Linux,Mac OS,Solaris)默认使用下面类型缓冲:
- 如果标准输入输出涉及终端设备,则它们是行缓冲,否则是全缓冲。
- 标准出错不带缓冲。
我们都知道shell为每个进程都定义了三个文件描述符:0,1,2。这三个文件描述符分别与进程的标准输入,标准输出和标准出错输出相关联。在unistd.h头文件中这三个常量分别替换成STDIN_FILENO,STDOUT_FILENO,STDERR_FILENO符号。在ISO C中分别对应与stdin,stdout,stderr。
C标准I/O缓冲区:全缓冲和行缓冲
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。