Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/selenium/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
File 在编程中,流中的引擎盖下是什么?_File_Sockets_Input_Stream_Output - Fatal编程技术网

File 在编程中,流中的引擎盖下是什么?

File 在编程中,流中的引擎盖下是什么?,file,sockets,input,stream,output,File,Sockets,Input,Stream,Output,在几种语言中,我们都可以使用输入/输出流进行某些操作,例如从套接字读写,但是,物理流到底是什么?如果使用文件流,它是如何连接到套接字或文件的? 我们中的大多数人都将流视为连接到文件或套接字的神奇连接线,但到底是什么在幕后?一种语言如何“连接到这样的结构以输入和输出数据?”? 谢谢大家!流本身实际上只是一个固定大小的字节队列,可能实现为。在这个队列的一侧是您的程序,它使用fwrite()将字节放入缓冲区(或类似),或者对于输入流,使用fread()从缓冲区中删除字节,等等 队列的另一端是操作系统软

在几种语言中,我们都可以使用输入/输出流进行某些操作,例如从套接字读写,但是,物理流到底是什么?如果使用文件流,它是如何连接到套接字或文件的? 我们中的大多数人都将流视为连接到文件或套接字的神奇连接线,但到底是什么在幕后?一种语言如何“连接到这样的结构以输入和输出数据?”?
谢谢大家!

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

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

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

就语言如何连接到这些操作系统机制而言,它实际上与您可能使用的任何其他代码库没有太大区别——正如有人定义了您的代码所使用的fwrite()/fread()API一样,还有人定义了一个fread()和fwrite()的实现者可以调用的函数(嗯,确实是这样,但就我们的目的而言,它们类似于函数)。而操作系统API反过来可以调用内核用来与硬件进行通信的API,等等,只要认为是工作所必需的层就可以调用


一直以来都是海龟:)

它不是一个“物理流”。它是一个逻辑流,通过软件实现,根据流、语言、底层连接等不同的方式。唯一物理的东西是磁盘或网络。谢谢,我仍然不明白“流”是什么“是。。。每个人都把它当作一个神话般的存在来解释,这种联系是如何实现的,没有人能确切地解释。这是一个神话。这是一个伪装的阴谋,那里只有一个字节流,由不同的软件层实现。在低层有物理磁盘块、网络包等,在真正低层有电子、伽马波等。连接由软件完成。如果不深入到特定流的特定实现的血淋淋的细节,就没有什么可以解释的了,你的问题也不是关于这两个方面的具体问题。没有表达或暗示的讽刺。我真的不知道你在这里说什么。我从你的帖子中得到了更好的理解,我真的很感激。