c-流和文件之间的区别是什么



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

  • 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

相关内容

  • 没有找到相关文章

最新更新