基本上在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,即使它正在使用缓冲区缓存?
答案 0 :(得分:3)
基本上是术语"缓冲"这意味着"在进出内核时存储数据的地方,即为了避免对每个I / O调用进行一次系统调用,缓冲的函数之间使用缓冲区。
内核对数据的作用不是标准库可以做的很多事情。
可以在标准库的级别(即fread()
和朋友)对read()
/ write()
执行1:1的读/写调用映射调用底层文件描述符;缓冲这个术语告诉你不你可以期待什么。
答案 1 :(得分:1)
手册中的“(Un)缓冲”是指用户空间缓冲。内核空间缓冲取决于实现,通常大多数设备都是缓冲的(磁盘,插槽,USB等),硬件端口(GPIO)除外。