ANSI C-buffered I/O(标准I/O)

一.标准I/O是什么?

标准I/O指的是ANSI C中定义的用于I/O操作的一系列函数。

二.为何要用标准I/O?

1.可移植性好。操作系统中只要安装了C库,源代码不需要修改就可以在操作系统下编译运行。

2.减少了系统调用,提高了系统效率。标准I/O带缓冲机制,使用时在用户空间创建缓冲区,读写时先操作缓冲区,在合适时机通过系统调用访实际文件。

三、什么是流(stream)?

流是程序输入或输出的一个连续的字节序列,设备(例如鼠标、键盘、磁盘、屏幕、调制解调器和打印机)的输入和输出都是用流来处理的。

在C语言中,所有的流均以文件的形式出现----不一定是物理磁盘文件,还可以是对应于某个输入/输出源的逻辑文件。

此外,stdin并不一定来自键盘,stdout也并不一定显示在屏幕上,它们都可以重定向到磁盘文件或其它设备上。

标准I/O打开一个文件时,就会创建一个FILE*结构体描述该文件,类似文件I/O中的文件描述符,这个FILE*结构体形象的被称为流。

 

四、标准I/O中流的3种缓冲类型

1.全缓冲

 当填满标准I/O缓冲区后才执行实际I/O操作。

对于标准I/O打开的磁盘的普通文件默认是全缓冲。当缓冲区已满或执行fflush()才会进行磁盘操作。

标准输入和标准输出默认是全缓冲,但是如果和终端相关就是行缓冲。

2.行缓冲

 当在输入和输出中遇到换行符时,标准I/O库函数将会执行系统调用操作。

 当所操作的流涉及一个终端时(例如标准输入和标准输出),使用行缓冲方式。

 因为标准I/O库每行的缓冲区长度是固定的,所以只要填满了缓冲区,即使还没有遇到换行符,也会执行I/O系统调用操作,默认行缓冲区的大小为1024。 

3.无缓冲

 对流的读写立刻操作实际文件。标准出错不带缓冲。

 标准输入和标准输出设备:当且仅当不涉及交互作用设备时,标准输入流和标准输出流才是全缓冲的。

posted @ 2014-06-22 18:17  CloudPing  阅读(203)  评论(0编辑  收藏  举报