C语言中的流到底是什么?

eqoofvh9  于 2023-06-28  发布在  其他
关注(0)|答案(5)|浏览(161)

我不能理解C语言中“流”的含义。它是一个抽象(只是一个描述许多操作的名称)吗?它是一个对象(显示器,键盘,硬盘驱动器上的文件),一个程序与它交换数据?或者它是RAM中的一个存储空间,暂时保存交换的数据?想寻求帮助。

zpqajqem

zpqajqem1#

流是I/O通道的抽象。它可以Map到一个物理设备,如终端、磁带驱动器或打印机,也可以Map到文件系统中的一个文件、网络套接字或其他东西。Map是如何完成的并不向您(程序员)公开。
从代码的Angular 来看,流只是字符(文本流)或字节(二进制流)的源(输入流)或接收器(输出流)。流通过FILE对象和stdio例程进行管理。
就您的代码而言,所有流的行为方式都是相同的,无论它们Map到什么。它是一个统一的操作接口,可以有非常不同的实现。

des4xlb0

des4xlb02#

流只是一段时间内可用的数据序列。例如,它与文件不同,因为您无法设置位置。例如:通过RS232、USB、以太网、IP网络等传输的数据。
但我的问题是什么是机器级别的流
没什么特别的机器级别不知道流的任何信息。
C语言中的流到底是什么?
C语言不知道任何关于流的信息。

7ajki6be

7ajki6be3#

流是一个未知长度的数据字节序列,它流向程序的输入或输出。

oknrviil

oknrviil4#

在C语言中,当我们使用术语流时,我们表示任何输入源或输出目的地。
一些示例可以是:

  • stdin(标准输入,默认为键盘)
  • stdout(标准输出,默认为屏幕)
  • stderr(标准错误,默认为屏幕)

printf、scanf、gets、puts和getchar等函数是将键盘作为输入流,将屏幕作为输出流的函数。
但我们可以创建流文件!stdio.h库支持两种类型的文件,文本文件和二进制文件。在文本文件中,字节表示字符,这使得人类可以读取文件包含的内容。相比之下,在二进制文件中,字节不一定表示字符。总之,文本文件有两个二进制文件没有的东西:文本文件被分成行,每行以一个或两个特殊字符结束。代码显然取决于操作系统。此外,文本文件可以包含文件终止符(END OF FILE)。

q9rjltbz

q9rjltbz5#

流也特定于正在运行的程序。让我进一步解释一下。
当你通过终端(类Unix/Windows)运行一个程序时,它的本质是:
1.终端分叉到子进程并运行指定的程序(./name_of_program)。
1.所有的printf语句都被提供给fork的父进程的stdout。相同的for,scanf语句,但现在指向分叉的父进程的stdin。
1.操作系统处理流的特性,即一次可以向stdin/out传输多少字节。在Unix中,它是4096字节。(提示:使用管道来克服这个问题)。
1.在C或任何编程语言中有三种类型的流,缓冲,行缓冲和无缓冲。(提示:在每次printf()调用之间使用delay()函数来了解这意味着什么)
现在,对文件的读写访问由OS的其他服务处理,即文件描述符。它们是操作系统用来跟踪打开的文件和端口(如串行端口)的正整数。

相关问题