为什么无缓冲的read()/ write()操作使用缓冲区缓存?

时间:2016-03-23 15:12:14

标签: c unix io

基本上在UNIX上,read()write()函数是无缓冲的I / O,

并且有标准I / O,它是缓冲I / O.

但是,read()write()函数在执行实际I / O(实际设备的I / O)之前使用内核中的缓冲区缓存,并且真正的I / O使用缓冲区缓存发生。它使用缓冲区。

我听说无缓冲的I / O意味着I / O发生在char-by-char到真实设备上。

那么,为什么read()write()函数是无缓冲的I / O,即使它正在使用缓冲区缓存

2 个答案:

答案 0 :(得分:3)

基本上是术语"缓冲"这意味着"在进出内核时存储数据的地方,即为了避免对每个I / O调用进行一次系统调用,缓冲的函数之间使用缓冲区。

内核对数据的作用不是标准库可以做的很多事情。

可以在标准库的级别(即fread()和朋友)对read() / write()执行1:1的读/写调用映射调用底层文件描述符;缓冲这个术语告诉你你可以期待什么。

答案 1 :(得分:1)

手册中的“(Un)缓冲”是指用户空间缓冲。内核空间缓冲取决于实现,通常大多数设备都是缓冲的(磁盘,插槽,USB等),硬件端口(GPIO)除外。