转自己的文章:带缓冲和不带缓冲的io函数

read()是不带缓冲的, fread()是带缓冲的。

使用带缓冲的io函数可以减少陷入内核态的次数,

比如,要读取8000字节的数据,

read (fd, buf, 1)需要陷入内核态8000次;

假如fread()的缓冲区大小为4000,fread(buf, 1, 1, file)虽然也需要调用8000次函数,但是只需要陷入内核态两次。

混用不带缓冲和带缓冲的io函数会有什么问题?

带缓冲的io函数会多读一些数据,如果这时候再用不带缓冲的io函数读一次,中间就会少读一些数据。

updatedupdated2022-02-222022-02-22