C标准讨论流。例如,fopen(3)
手册页告诉fopen
是流打开函数。
有人能解释流到底是什么,以及它们与文件的关系吗?
在C标准库的上下文中,流是用于执行某些I/O操作的通用接口。你可以从流中读取,向流中写入,有些流是可查找的。将文件作为流打开只是将流作为应用程序的I/O接口的一种方法。
让我引用:
11.1.1流和文件描述符
当您想对文件进行输入或输出时,您可以选择两种基本机制来表示程序和文件之间的连接:文件描述符和流。文件描述符表示为类型为
int
的对象,而流表示为FILE *
对象。文件描述符为输入和输出操作提供了一个基本的、低级的接口。文件描述符和流都可以表示与设备(如终端)的连接,或用于与另一个进程通信的管道或套接字,以及普通文件。[…]
。。。以及:
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-概述
- https://www.gnu.org/software/libc/manual/html_mono/libc.html#I_002fO-关于流
基于流的API构建在低级文件描述符API之上,并提供附加功能。然而,一些低级功能仅通过较低级别的API可用,例如,内存映射I/O、非阻塞I/O