标准io(带缓存IO)

带缓存IO也叫标准IO,符合ANSI C 的标准IO处理,不依赖系统内核,所以移植性强。

我们使用标准IO操作很多时候是为了减少对read()和write()的系统调用次数,带缓存IO其实就是在用户层再建立一个缓存区,这个缓存区的分配和优化长度等细节都是标准IO库代你处理好了,不用去操心。

 标准IO操作数据流向路径:

                      数据——流缓存区——内核缓存区——磁盘

非标准IO(不带缓冲)操作数据流向路径:

                      数据——内核缓存区——磁盘

————————————————————————————————————

标准的 C 库函数建立在底层系统调用之上,即 C 函数库文件访问函数的实现中使用了文件 I/O 系统调用。 标准的 C 库中的文件处理函数为了减少使用系统调用的次数,提高效率,根据应用的不同,如图所示采用缓冲区机制,这样,在对磁盘文件进行读操作时,可以一次性地从文件中读出大量数据到缓冲区中,以后对这部分数据的访问就不需要再使用系统调用了。在对磁盘文件进行操作时,可以先将内容存储在文件缓冲区中,待文件缓冲区满后再用系统调用将该文件一次写入到磁盘。
根据使用领域的不同需求,标准 C 函数使用了全缓冲、行缓冲和无缓冲 3 种缓冲区处理方式。
全缓冲:这种情况下,在填满标准I/O缓冲区后才进行实行I/O操作。
行缓冲:在这种情况下,当在输入和输出中遇到换行符时,标准I/O库执行I/O操作。当流涉及一个终端时,通常使用行缓冲。
不带缓冲:标准I/O库不对字符进行缓冲存储。
更改缓冲类型Void setbuf(FILE *fp, char * buf)
  Int setvbuf(FILE *fp, char *buf, int mode, size_t size)
  返回值:成功返回0,出错返回非0值
这些函数一定要在流已被打开后调用,而且也应该在对流执行任何其他操作之前调用。
 
标准I/O流都有一个与其相关联的文件描述符,可以对一个流调用fileno函数以获得其描述符
   int fileno(FILE *fp)
   注意:fileno不是ISO C标准部分,而是POSIX支持的扩展。
posted @ 2013-04-13 12:15  oucaijun  阅读(649)  评论(0编辑  收藏  举报
下载TeamViewer完整版 下载TeamViewer