首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

大牛,(急)待,马下结贴给分

2012-09-27 
大牛,(急)在线等待,马上结贴给分!请问对于C语言中的缓冲区,比如对于文件来说,文件总体就有两个缓冲区,一个

大牛,(急)在线等待,马上结贴给分!
请问对于C语言中的缓冲区,比如对于文件来说,文件总体就有两个缓冲区,一个输入,一个输出,那么对于我们平时用的输入输出函数,是每一个函数都有相应的一个缓冲区呢?还是同在一个库文件的输入(输出)函数有同一个缓冲区,还是别的?望高手支招啊!!!!大牛哥们,谢谢啦!

[解决办法]
不是千篇一律的,比如open/close/read/write等函数是非缓冲的,而fopen/fclose/fread/write是带缓冲区的,getchar是非缓冲的,而getc是带缓冲的。
[解决办法]
每一个被打开的文件句柄会对应着一个或一组缓冲区,具体实现依赖于操作系统。只要使用的是同一个句柄(或文件对象/文件指针),不管它出现在多少个函数里,也只对应同一个/组文件缓冲区。
[解决办法]
缓冲文件系统指系统自动地在内存区为每一个正在使用的文件名开辟一个缓冲区,从内存向磁盘输出数据必须先送到内存中的缓冲区,装满后再一起送到磁盘去。反向也是如此。这里需要说明两个词:“输入”“输出”。输入表示从文件里读数据到程序里,输出表示从程序里写数据到文件中
[解决办法]
缓冲区的概念,可以分别从“硬”和“软”两个方面来理解

硬的方面,对应硬件输入输出接口的,每一个接口都有收发两个缓冲区
这个缓冲区是和接口数量来对应的
具体实现就要看驱动程序了

软的方面,主要是针对 打开的文件、端口、套接字等等
这些缓冲区是个文件指针、描述符等等来对应的
这是协议层的内容
[解决办法]
去看看Unix编程的关于io的基本知识。

所谓缓冲区是关联到“文件”的,而输入输出函数实际上都是作用在文件上的,比如fprintf,就算没有函数参数中没有文件参数,比如printf,其实也有一个隐藏的文件,stdout即标准输出文件。所以不存在说每个函数有个缓冲区,或者一个库有个缓冲区。

[解决办法]
一个FILE里面就一个缓冲区,读写共用它。

所以在写之后如果希望读,无论如何要调用一次fseek/fflush将缓冲区写出, 否则一方面导致缓冲的数据不会被写出, 另一方面导致读到的数据实际是未写出的数据.

读之后希望写, 无论如何要调一次fseek将缓冲区清空, 否则将导致写出缓冲的读数据.
[解决办法]

探讨

一个FILE里面就一个缓冲区,读写共用它。

所以在写之后如果希望读,无论如何要调用一次fseek/fflush将缓冲区写出, 否则一方面导致缓冲的数据不会被写出, 另一方面导致读到的数据实际是未写出的数据.

读之后希望写, 无论如何要调一次fseek将缓冲区清空, 否则将导致写出缓冲的读数据.

[解决办法]
探讨
一个FILE里面就一个缓冲区,读写共用它。

所以在写之后如果希望读,无论如何要调用一次fseek/fflush将缓冲区写出, 否则一方面导致缓冲的数据不会被写出, 另一方面导致读到的数据实际是未写出的数据.

读之后希望写, 无论如何要调一次fseek将缓冲区清空, 否则将导致写出缓冲的读数据.

热点排行