【发布时间】:2021-11-13 00:18:34
【问题描述】:
数据流如何为硬盘驱动器上的文件和打印机工作?在“流”之前是否有一个抽象层将设备与它们各自的属性分开?
【问题讨论】:
-
linux内核中有很多高级概念;一个中心概念是用 C 实现的
polymorphism。但是许多其他概念用于在 linux 中实现流。流的概念也与thunk的概念密切相关......
数据流如何为硬盘驱动器上的文件和打印机工作?在“流”之前是否有一个抽象层将设备与它们各自的属性分开?
【问题讨论】:
polymorphism。但是许多其他概念用于在 linux 中实现流。流的概念也与thunk 的概念密切相关......
流是抽象(或至少是抽象的一部分)。标准库为您提供了一个单一的、一致的接口,用于进行流操作,无论目标是您的控制台、磁盘上的文件、打印机还是其他目的地。您只需拨打fopen、fscanf、fwrite 等,无需担心细节。
fopen、fread、fwrite 等的实现,对系统特定的调用进行必要的操作文件或打开其他设备的 I/O 通道。甚至那些通常是文件系统和设备驱动程序提供的更高级别的抽象。当然,Windows 上的实现与 *nix 上的实现和 MacOS 上的实现等调用不同。
【讨论】:
在“流”之前是否有一个抽象层将设备及其各自的属性分开?
您已标记 C 并在问题标题中提到它,但这不是 C 语言或标准库的特征。 C 通过流提供 I/O,但它没有说明以这种方式为哪种设备提供服务。
“一切都是文件”范式是 UNIX 的一个特征(您也已标记)。这就是抽象所在的地方。在 UNIX 上的托管 C 实现中运行的程序可以通过流访问不同类型的设备,因为操作系统提供了它。它还可以为所有这些设备使用相同的一组 POSIX 低级 I/O 函数,因为操作系统再次提供了它。这实际上是设备驱动程序和操作系统内核要求它们提供的接口的领域。
【讨论】: