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而不是用于系统调用。
答案 0 :(得分:3)
fread
可以有自己的缓冲区,而read
除了你提供的缓冲区之外没有缓冲区。因此,read
是无缓冲的:您只是提供可以进行读取的内存位置,但stdio函数(通常)是为您缓冲的。
例如,fgets
不会逐字节读取(因为效率低)。相反,它会读取大块内容,有时可能会读取太多内容,超出换行符。然后,在读缓冲区中会有一些数据等待fread
可能在没有系统调用的情况下立即返回。