抽象流 C

Abstraction Stream C

数据流如何既适用于硬盘上的文件又适用于打印机?在“Stream”之前是否有一个抽象层将设备与它们各自的属性分开?

Is there an abstraction layer before the "Stream" that separates the devices with their respective properties?

您已经标记了 C 并在问题标题中提到了它,但这不是 C 语言或标准库的特性。 C 通过流提供 I/O,但它没有说明以这种方式服务的设备类型。

“一切皆文件”范式是 UNIX 的一个特征(您也已标记)。这就是抽象所在的地方。 UNIX 上托管 C 实现中的程序 运行 可以通过流访问不同类型的设备,因为操作系统提供了它。它还可以对所有这些设备使用同一组 POSIX low-level I/O 函数,因为 OS 再次提供了它。这实际上是设备驱动程序和 OS 内核要求它们提供的接口的领域。

抽象(或至少是抽象的一部分)。标准库为您提供了一个单一的、一致的 接口 来进行流操作,无论目标是您的控制台、磁盘上的文件、打印机还是其他一些目标。您只需调用fopenfscanffwrite等,无需担心细节。

fopenfreadfwrite 等的 实现 ,对必要的操作文件进行所有特定于系统的调用或打开 I/O 通道到其他设备。甚至那些通常是由文件系统和设备驱动程序提供的更高级别的抽象。当然,Windows 上的实现与 *nix 上的实现和 MacOS 等上的实现不同