什么' stream'在C?

时间:2016-07-29 07:28:42

标签: c file stream terminology

我正在阅读“C Primer Plus”中的一节'它处理文件,流和键盘输入。作者将流的概念与文件连接起来,并按如下方式定义流:

  

从概念上讲,C程序处理流而不是直接处理文件。 流是实际输入或输出映射到的理想化数据流。这意味着具有不同属性的各种输入由具有更均匀属性的流表示。打开文件的过程然后变为将流与文件相关联,并且通过流进行读取和写入

作者对粗体句的意思是什么?文件和流之间的联系是什么?

6 个答案:

答案 0 :(得分:5)

设计C的人想要一种统一的方式来连接不同的顺序数据源,如文件,套接字,键盘,USB端口,打印机等等。

因此他们设计了一个可以应用于所有这些界面的界面。此接口使用所有这些属性共有的属性。

为了便于讨论可以通过界面使用的内容,他们为这些内容提供了通用名称​​ streams

使用相同界面的美妙之处在于,可以使用相同的代码从键盘或套接字读取文件。

答案 1 :(得分:0)

流是处理不同数据媒体/来源的C way。这些 可以包括说

  1. 文件
  2. 插座
  3. 等等。作为界面的stream可以帮助您忘记数据的管理方式并专注于预期的目标。

答案 2 :(得分:0)

是一个逻辑实体,代表文件设备,可以接受输入或<强>输出即可。标准C中的所有输入和输出功能都在数据流上运行。流可以分为文本,流和二进制流。

答案 3 :(得分:0)

当我第一次遇到相同的问题时,我一直在努力。 :)但请注意,文件和流是完全不同的东西。文件只是字节序列。现在,另一方面,任何程序(大多数程序)通常都需要与它们的环境进行交互(可以是文件,可以是设备,可以是网络等),因此流很好地出现在这里。

流是一个界面(一个简单的“面孔”,可以处理与我们无关的许多细微之处,就像电视遥控器一样!)用于触发数据的输入/输出流,或从任何可能成为该输入/输出数据的目的地或源的事物中提取信息,从而隐藏了程序员对OS方法论和硬件设计的众多可能性的实现细节(作为程序员,您实际上并不了解关于各种操作系统如何处理低级文件,它们如何与网络套接字或监视器交互等等,对吗?

因此,例如,如果要读取/写入文件,则首先需要一个流。您可以使用标准输入/输出库中的fopen()函数为该文件(在C中)创建一个流。返回的内容当然是指向FILE的指针,但这是流(https://www.gnu.org/software/libc/manual/html_node/Streams.html)的传统“单词的错误选择”,因此,是的,C中的FILE类型确实是表示流的数据结构! (我明白了,疯了!)

另外,作为另一个示例,您的程序可以从键盘获取输入的方式是如何发生的?这是通过操作系统在运行时为任何程序生成的隐藏(自动生成)流完成的,而标准C输入/输出库再次使您可以通过称为“ stdout”的指针(stdout是指针)进行访问。到输出流,即操作系统在运行时为您的程序自动生成的流。

再以C ++世界为例,您知道那里是类和对象而不是结构,因此(例如)您会遇到一个名为“ cout”的对象,它实际上是一个输出流“ object” ”。如果使用监视器的“ <<”方法(默认为重载运算符),它将被触发以在监视器上显示某些内容(默认情况下)。您会看到,您无需再编写任何代码即可将某些内容从程序发送到监视器!您知道cout已经准备好并与之连接!太棒了,不是吗?

如果您需要进一步阅读,这里的解释也很不错:http://www.qnx.com/developers/docs/6.5.0/topic/com.qnx.doc.dinkum_en_c99/lib_file.html

HTH。

答案 4 :(得分:0)

如果有帮助,我的C编程学位将使用以下说明: “流是文件的抽象,它为程序员提供了一致的接口,而与实际设备无关。”

答案 5 :(得分:0)

简单来说,流是FILE * 像函数C FILE * fopen(const char * filename,const char * mode) 此函数返回一个文件*

文件:

对象包含控制流的信息 对象类型,用于标识流并包含对其进行控制所需的信息,包括指向其缓冲区的指针,其位置指示符及其所有状态指示符。