【发布时间】:2021-11-18 10:52:36
【问题描述】:
我最近查看了 C 中的文件和输入/输出,并很快发现 C 使用称为 FILE 的 typedefed 结构,通常表示为指向结构的指针。
此结构包含有关输入和输出的数据,因此操作系统和内核的较低级别部分可以轻松管理系统上的输入和输出,例如输入数据的大小、数据类型等。
基本上它是故意抽象的,因为它的工作方式非常低级。
我也知道像 FILE* x 这样的东西通常被 C 程序员用来表示输入和输出流。 C 还允许FILE 通常用于指向文件。
为什么 C 允许程序员使用FILE 来表示文件以及输入/输出流?对我来说,这听起来很令人困惑,而且关键字FILE 的字面意思是FILE,我认为它经常会让新程序员误以为它仅用于指向文件。
那么为什么FILE 同时用于文件和输入/输出?
【问题讨论】:
-
因为在 Unix 上“一切都是文件”,而 C 是专门为这个操作系统创建的
-
基本上是故意抽象的... 对。它是一个抽象的 I/O 流。
FILE这个名字有点用词不当。您可以使用FILE *来表示文件、设备、网络流甚至内存中字符串的 i/o。 -
@SteveSummit 所以基本上
FILE可以用来表示计算机上的任何输入/输出设备?因为FILE链接的结构也考虑了所有输入/输出设备? -
@programme3219873 最初,
FILE *是 Unix 文件描述符之上的缓冲方案的“句柄”。实际上,Unix 文件描述符指的是可以“解释所有输入/输出设备”的数据结构。据我所知,这通常仍然是今天的实现方式,尽管它可以有自己的间接级别来处理不同的“设备”。 (通常,FILE *级别的唯一间接级别是在 i/o 到 Unix 文件描述符之间,而不是在 i/o 到字符串之间。) -
@programme3219873:
FILE表示字节流,而不是设备。字节流是字节流,无论该流的源或目标是文件、打印机还是网络流。