当你想明确指定缓冲区大小时,你应该使用 fread/fwrite 还是 read/write 系统调用?

should you use fread/fwrite or read/write system calls when you want to specify the buffer size explicitly?

我有一个应用程序,我想 read/write 数据 from/to 一个硬盘,但同时我想指定要按顺序使用的缓冲区的大小使应用程序更高效(I/O 相关)。

我实现了两个版本,一个使用 read/write 系统调用,一个使用 fread/fwrite 函数来指定缓冲区大小 我调用了 setvbuf 函数。

但是我注意到大输入的 运行 次有差异,数量级为 2。

这引发了一些问题,即当您想利用从磁盘传输数据块的能力以最小化 [=23] 的总量时,是否应该始终首选使用 read/write 系统调用=]s.

这取决于read/write的数据量,如果将缓冲区设置得非常小,read/write大量数据时效率低下。

Here是对比