【发布时间】:2019-07-18 06:01:17
【问题描述】:
我正在阅读一些关于 z/OS 的 blocked IO 概念的信息。它指出:
阻塞 I/O 是对 ISO 标准的扩展。对于以块格式打开的文件,z/OS® XL C/C++ 一次读取和写入一个块。如果您尝试向块中写入的数据多于该块可以容纳的数据,则数据将被截断。对于阻塞的 I/O,z/OS XL C/C++ 只允许使用 fread() 和 fwrite() 来读取和写入文件。
然后说:
fflush() 函数对阻塞的 I/O 文件无效。
但是,在another 文章中,它说:
对于终端,因为 I/O 总是畅通的,所以行缓冲是 相当于完全缓冲。
对于记录 I/O 文件,缓冲是 仅对 z/OS UNIX 中的阻塞文件或记录 I/O 文件有意义 使用完全缓冲的文件系统。对于未阻塞的文件,缓冲区是 每次写入后已满,因此立即写入,离开 没有什么可冲洗的。对于被阻止的文件或完全缓冲的 UNIX 文件系统 文件,但是,缓冲区可以包含一个或多个记录 没有被刷新并且需要刷新操作才能进入 系统。
对于阻塞的 I/O 文件,缓冲总是没有意义的。
我对这一切感到非常困惑。如果 I/O 是畅通的,那么行缓冲如何等同于全缓冲?为什么刷新不会对块 I/O 产生影响?另外,阻塞的 I/O 导致缓冲总是没有意义是什么意思?任何关于阻塞和非阻塞 I/O 发生了什么以及它如何影响缓冲效果的直觉都将不胜感激。
【问题讨论】: