glibc如何管理缓冲区?

时间:2014-05-05 12:42:06

标签: c glibc

我想了解glibc中fread()fwrite()函数的缓冲是如何工作的。可以说,我正在使用fread()fwrite()在随机位置阅读和撰写文件。当我读取某个偏移量时,读取调用中涉及的块被复制到glibc缓冲区中,对吗?然后如果我在文件中的另一个位置读取,这个缓冲区将替换为新数据,这是如何在glibc中缓冲工作的?我的意思是,只有一个缓冲区,数据从内核复制到缓冲区空间之外的任何fread() / fwrite()上的用户空间。

我正在寻找的功能是,glibc将拥有N个缓冲区,并且能够保存我正在其内部空间中读取的块,因此当随机fread()必须访问某个位置时文件,它不必使read()系统调用再次读取磁盘块。这个功能是用glibc实现的,还是可能是另一个libc实现?

2 个答案:

答案 0 :(得分:0)

作为使用标准库的程序员,您不应该关心它的实现细节。

如果你想研究它的当前实现,那么GNU libc的源代码是freely available

也就是说,操作系统有效地处理I / O缓冲区,因此fread()fwrite()通常不需要。

答案 1 :(得分:0)

依赖任何API的内部实现是非常危险的。不做任何其他假设,但只能从文档/规范/手册页中获取。其他事情可能会停止流动,你甚至不会知道这一点,因为内部变化不会影响API的记录行为。