流和文件有啥区别?
Posted
技术标签:
【中文标题】流和文件有啥区别?【英文标题】:What is the difference between a stream and a file?流和文件有什么区别? 【发布时间】:2014-01-23 03:04:09 【问题描述】:C 标准讨论了流。例如fopen(3)
手册页告诉fopen
是一个流打开函数。
谁能解释一下流到底是什么,以及它们与文件有何关系?
【问题讨论】:
到目前为止你的理解是什么?你想过用谷歌吗? 您能提供该引用的上下文吗?目前尚不清楚它指的是什么;如果您在一本书中阅读它,更多的上下文可能会帮助我们更好地阐明它。 并非所有文件都具有相同的功能。例如,磁盘文件可以支持随机访问,而某些打印机则不能。 在“你的意思...”的上下文中,“你”是谁? 【参考方案1】:在 C 标准库的上下文中,流是用于执行某些 I/O 操作的通用接口。您可以从流中读取,写入流,某些流是可搜索的。将文件作为流打开只是将流作为应用程序的 I/O 接口的一种方法。
Let me quote:
11.1.1 流和文件描述符
当您想要对文件进行输入或输出时,您可以选择两种基本机制来表示程序与文件之间的连接:文件描述符和流。文件描述符表示为
int
类型的对象,而流表示为FILE *
对象。文件描述符为输入和输出操作提供了一个原始的低级接口。文件描述符和流都可以表示与设备(例如终端)的连接,或用于与另一个进程通信的管道或套接字,以及普通文件。 [...]
... and further:
12.1 流
由于历史原因,表示流的 C 数据结构的类型称为
FILE
而不是“流”。由于大多数库函数都处理FILE *
类型的对象,因此有时术语文件指针 也用于表示“流”。这导致许多关于 C 的书籍中的术语令人遗憾地混淆。
C 中的 I/O 流示例:
标准流: https://linux.die.net/man/3/stdin 文件流: https://linux.die.net/man/3/fopen 管道: https://linux.die.net/man/3/popen 流套接字: https://linux.die.net/man/2/socket如需进一步阅读,请查看以下链接:
https://www.gnu.org/software/libc/manual/html_mono/libc.html#I_002fO-Overview https://www.gnu.org/software/libc/manual/html_mono/libc.html#I_002fO-on-Streams基于流的 API 建立在低级 文件描述符 API 之上,并提供额外的功能。然而,一些低级功能只能通过低级 API 使用,例如,内存映射 I/O、非阻塞 I/O 或“事件驱动”输入/输出:
https://www.gnu.org/software/libc/manual/html_node/Memory_002dmapped-I_002fO.html https://linux.die.net/man/2/poll https://linux.die.net/man/4/epoll【讨论】:
以上是关于流和文件有啥区别?的主要内容,如果未能解决你的问题,请参考以下文章