【发布时间】:2016-07-10 23:08:48
【问题描述】:
基本上在 UNIX 上,read() 和 write() 函数是无缓冲 I/O,
还有Standard I/O,也就是缓冲I/O。
但是,read() 和 write() 函数使用 buffer cache,它在进行真正的 I/O(I/O 到真实设备)之前位于内核中,而真正的 I/O 使用 em>缓冲缓存。它正在使用缓冲区。
我听说无缓冲 I/O 意味着 I/O 逐个字符地发生在真实设备上。
那么,为什么read() 和write() 函数是无缓冲I/O,即使它使用缓冲缓存?
【问题讨论】:
-
您从哪里得知
read()和write()是无缓冲的? -
另外,
sync调用 (sync) 的存在是有原因的。 -
这本书unix环境中的高级编程显示标题为'unbuffered i/o'
-
@A.Cho 这只意味着
read()和write()没有必要缓冲。至少在 Linux 中,除非指定了O_DIRECT,否则默认情况下它们会被缓冲;我无法与 BSD 或其他 Unices 交谈。