【问题标题】:Streams and abstraction流和抽象
【发布时间】:2021-11-04 18:48:12
【问题描述】:

我正在研究 C (ANSI) I/O 和 C (Unix) I/O,我有以下问题:

如果没有抽象的计算机上的一切都是数据流(或数据流,你想怎么称呼它),无论它来自文件还是套接字,为什么我需要一个称为流的抽象层来处理这个?

【问题讨论】:

  • 你不需要抽象层。它比其他选择更简单。您还有什么建议?
  • 但是......你需要它只是因为有几个共同点。参照。音乐和视频的“播放”按钮 - 这是计算机之前的常见界面。 (但你不能“播放”图像)。你可以直接看胶卷,然后就明白了,但是你会想要那个“播放”按钮。其他人说:如果我在轻轻拉动那条带的同时不断眨眼……

标签: c stream


【解决方案1】:

机器内部没有抽象。抽象都在你的脑海里。 “数据流”是您用来思考非常不同的机制的抽象;如果您查看“没有抽象”的计算机,您将看不到任何“数据流”。

“抽象层”是一个具体的接口,旨在使一堆复杂且特殊的机制以与您用于设计程序的抽象相对应的方式可控。

【讨论】:

  • 抱歉耽搁了。我理解你所说的,我从一个错误的前提开始:这个数据流以某种方式存在。
【解决方案2】:

我正在研究 C ansi I/O 和 C unix I/O,我有以下内容 问题:

如果计算机上没有抽象的一切都是数据流(或 数据流,随便叫它),不管它是否来自 文件或套接字,为什么我需要一个称为流的抽象层来 处理这个?

我认为您对关键抽象在哪里感到困惑:它正是“一切都是文件”的 UNIX 设计理念的体现,部分原因在于一组低级 POSIX I/O函数处理所有设备。使用这些 I/O 函数不是在没有(设备)抽象的情况下访问计算机。

在 POSIX 系统上,您不需要 流,但使用它们通常很方便,至少因为

  1. 它们提供比原始 I/O 更丰富、更高级别的抽象,并且
  2. 它们更易于移植到非 POSIX 系统。

在非 POSIX 系统上,您可能确实需要流,因为可能不存在低级 POSIX I/O 函数。后者不是由 C 语言标准指定的,而是由 POSIX 指定的。

【讨论】:

  • 是的,我现在明白了,由于 posix 模式,“一切都是文件”的想法已经是一个抽象。感谢您的回答。我现在的问题是“一切都是文件的想法”是如何产生的?有 inode + fs-unix 的想法吗?谢谢。
  • 那将是一个单独的问题,@joavictorRosmaninho,可能与 SO 无关。它可能更适合Retrocomputing SE,但您可能应该考虑一下您真正想知道的内容。毕竟,这个想法是如何产生的,答案最终只能归结为刚刚提出这个想法的人。另请注意,它与 i-nodes 没有特别的关系,尽管它与 UNIX 的单根分层文件系统有关。
猜你喜欢
  • 2021-11-13
  • 1970-01-01
  • 2016-10-14
  • 2019-03-21
  • 2011-07-23
  • 1970-01-01
  • 2010-09-30
  • 1970-01-01
  • 2017-02-19
相关资源
最近更新 更多