2

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。

4

1 回答 1

3

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

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

于 2013-04-29T09:22:51.680 回答