gpt4 book ai didi

file - 编程中流的底层原理是什么?

转载 作者:行者123 更新时间:2023-12-03 11:49:52 25 4
gpt4 key购买 nike

在几种语言中,我们有能力使用输入/输出流来进行诸如从套接字读取或写入之类的事情,但是,物理流究竟是什么,如果使用文件流,它是如何连接到套接字或文件的?
我们大多数人都将流视为连接到文件或套接字的魔线,但到底是什么以及语言如何“连接到这样的结构以输入和输出数据?
谢谢大家!

最佳答案

流本身实际上只是一个固定大小的 FIFO字节队列,可能实现为 circular buffer .该队列的一侧是您的程序,它使用 fwrite()(或类似方法)将字节放入缓冲区,或者对于输入流,使用 fread() 等从缓冲区中删除字节。

队列的另一边是操作系统软件的某些部分;对于可能是文件系统层的文件;对于套接字,它将是 TCP 堆栈;对于标准输出,它可能是 tty 或伪 tty 驱动程序。在您的程序将一些字节写入流后,另一端的 OS 代码被唤醒,它从 FIFO 的另一端获取这些字节并对其进行适当的处​​理(例如将它们写入磁盘,或将它们放入 TCP 数据包并将该数据包发送到以太网卡,等等)

流的内部机制故意尽可能地对您隐藏,这样您的代码就不会依赖于流是如何实现的任何细节。这样,如果操作系统更改,或者您为不同的操作系统重新编译,您的代码(希望)不会中断并需要重写,因为您的代码从未做出任何可能不再正确的假设。

至于语言如何连接到这些操作系统机制,它与您可能使用的任何其他代码库实际上并没有太大区别——就像有人定义了您的代码使用的 fwrite()/fread() API,其他人定义了operating system API fread() 和 fwrite() 的实现者可以调用函数(好吧,实际上它们是 system calls ,但就我们的目的而言,它们类似于函数)。而该操作系统 API 又可以调用 device driver API内核用来与硬件通信的层,等等,对于使事情正常工作所需的尽可能多的层。

一路下来都是乌龟:)

关于file - 编程中流的底层原理是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22341101/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com