fread()/ fwrite中使用的缓冲区与read()/ write()中使用的缓冲区有何不同?

时间:2013-04-29 09:17:12

标签: unix

fread()的语法是

size_t fread(void *buf,size_t size, size_t, count, FILE *stream);

而对于read(),它是

ssize_t read(int fd, void *buf, size_t len);

它们都使用缓冲区来放置读取数据。这两者有何不同? 我的问题来自于'用于fread()/ fwrite()stdio调用的缓冲I / O而不是用于系统调用。

1 个答案:

答案 0 :(得分:3)

fread可以有自己的缓冲区,而read除了你提供的缓冲区之外没有缓冲区。因此,read是无缓冲的:您只是提供可以进行读取的内存位置,但stdio函数(通常)是为您缓冲的。

例如,fgets不会逐字节读取(因为效率低)。相反,它会读取大块内容,有时可能会读取太多内容,超出换行符。然后,在读缓冲区中会有一些数据等待fread可能在没有系统调用的情况下立即返回。