我正在阅读linux工具badblocks的源代码.他们在read()
那里使用这个功能.标准C fread()
功能有区别吗?(我不认为这些论点是不同的.)
read()是低级无缓冲读取.它在UNIX上进行直接系统调用.
fread()是C库的一部分,并提供缓冲读取.它通常通过调用read()来实现,以填充其缓冲区.
Family read() - > open,close,read,write
Family fread() - > fopen,fclose,fread,fwrite
是系统调用
没有格式化IO:我们有一个非格式化的字节流
是标准C库(libc)的功能
使用内部缓冲区
其中一些是格式化的IO(带有"%.."参数)
始终使用Linux缓冲区缓存
这里有更多细节,但请注意这篇文章包含一些不正确的信息.
read
是一个系统调用,而是fread
C标准库中的一个函数.
我记得它的read()级API不做缓冲 - 所以如果你一次读取()1个字节,那么与使用fread()做同样的事情相比,你会有很大的性能损失.当你要求它时,fread()会拉出一个块然后把它抽出来.对于每次调用,read()都会进入内核.