繁体   English   中英

glibc如何管理缓冲区?

[英]how glibc manages buffers?

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

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

作为使用标准库的程序员,您不必在意它的实现细节。

如果您想研究GNU libc的当前实现,可以免费获得

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

依靠任何API的内部实现都是非常危险的。 不要做任何其他假设,而只能做那些可以从文档/规范/手册页中获取的假设。 其他事情可能不再是最新的,您甚至都不知道,因为内部更改不会影响API记录的行为。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM