提问人:programme3219873 提问时间:9/25/2021 最后编辑:Jorengarenarprogramme3219873 更新时间:9/25/2021 访问量:292
为什么 C 将 FILE 用于 stdin/stdout 流以及文件操作?
Why does C use FILE for stdin/stdout streams as well as file operations?
问:
我最近研究了 C 中的文件和输入/输出,并很快发现 C 使用了一种称为 ed 结构的结构,该结构通常表示为指向结构的指针。
此结构包含有关输入和输出的数据,因此操作系统和内核的较低级别部分可以轻松管理系统上的输入和输出,例如输入数据的大小、数据类型等。 基本上,它是故意抽象的,因为它的工作方式非常低级。typedef
FILE
我还知道 C 程序员通常使用类似的东西来表示输入和输出流。C 还允许通常用于指向文件。FILE* x
FILE
为什么 C 允许程序员用来表示文件以及输入/输出流?对我来说,这听起来很令人困惑,因为这个关键字是字面意义上的,我认为它经常会让新程序员感到困惑,认为它只用于指向文件。FILE
FILE
FILE
那么,为什么同时用于文件和输入/输出呢?FILE
答:
尽管它的名字,与文件无关。例如,不能使用 .您无法使用 .FILE
FILE
FILE
FILE
始终表示流。此流是否与纯文件、管道或套接字相关联无关紧要。
评论
FILE
FILE
在 Linux 系统上,您可以研究 GNU glibc 的源代码。它是开源代码。
然后将 a 定义为指向 some 的指针,其中包含打开的文件描述符编号、some 缓冲区等......FILE
struct
这个简称是历史性的。发明于 Unix 计算机内存不到 256 KB 和旋转硬盘仅几兆字节的时代。阅读维基百科上关于Unix历史的文章。FILE
由于名称错误,因此它不表示文件。它表示可以读取和写入的内容。读取和写入可以以单个字符大小(流)或批量(块)完成。FILE
因此,如果您想要键盘输入,为什么不从键盘缓冲区读取呢?如果要发送 Web 请求,为什么不将一个请求写入出站网络缓冲区?你会用什么来做到这一点?
一旦 UNIX 和 C 的设计者意识到许多项目的核心共同特性集是读取和写入的能力,他们就将该模式重用于许多人们不认为是文件的东西。这就是 UNIX“一切都是文件”口号背后的动机。目录是文件,包含其他文件的名称和位置。磁盘是文件,需要遵循文件系统布局约束的写入。屏幕是文件,需要终端控制代码和文本。
文件发生了什么,这个强大想法的开始?它们仍然存在,但 C 语言中的构造更像是内核中的一个 ID,用于可能从中读取或写入的东西,并且不能保证回到磁盘上文件的常规概念。FILE
评论
FILE
在许多系统(如 Linux)中(几乎),一切都是一个文件。终端、网卡、随机数生成器、设备树等等。Stream(或文件)对于几乎任何:)都是一个非常好的抽象
评论
FILE
FILE *
FILE
FILE
FILE *
FILE *
FILE