流和文件有什么区别?

23

C标准涉及流。例如,fopen(3)手册页面指出fopen是一个流打开函数

有人能解释一下到底是什么,以及它们与文件有何关系吗?


你到目前为止的理解是什么?你想过使用谷歌吗? - Sourav Ghosh
3
能否提供该引语的上下文呢?不太清楚它所指的内容;如果您是从书中读取的,更多的背景信息可能有助于我们更好地澄清这个问题。 - Brian Campbell
并非所有文件都具有相同的功能。例如,磁盘文件可以支持随机访问,而某些打印机则不行。 - R__raki__
在“你说的是什么意思”这个语境中,“你”是指谁? - glglgl
这是我发现有用的链接:https://social.msdn.microsoft.com/Forums/vstudio/en-US/924dfa2e-62c1-4c5c-b1ef-04b0d0a3550f/difference-between-file-and-stream?forum=netfxbcl - Andrew Anderson
1个回答

21
在C标准库的上下文中,流(stream)是执行某些I/O操作的通用接口。您可以从流中读取,向流中写入,某些流是可寻址的。将文件作为流打开只是获取流作为应用程序I/O接口的一种方式。
让我引用一下:
“11.1.1 流和文件描述符
当您想要对文件进行输入或输出时,有两种基本机制可以表示程序与文件之间的连接:文件描述符和流。文件描述符表示为类型int的对象,而流表示为FILE *对象。
文件描述符提供原始的低级输入和输出操作接口。文件描述符和流都可以表示与设备(如终端)、用于与另一个进程通信的管道或套接字以及普通文件的连接。[...]”
……更进一步地说:
12.1 流
由于历史原因,表示流的 C 数据结构类型被称为 "FILE" 而不是 "stream"。由于大多数库函数处理的是类型为 "FILE *" 的对象,有时术语 "文件指针" 也用来表示 "流"。这导致许多关于 C 的书籍术语混乱。
C 中 I/O 流的示例:

如需进一步阅读,也请查看以下链接:

流式 API 建立在底层的文件描述符 API 之上,并提供了额外的功能。然而,一些底层特性只能通过更低级别的 API 访问,例如内存映射 I/O、非阻塞 I/O 或“事件驱动”I/O。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接