什么是C语言中的流?

时间:2020-06-08 18:34:23

标签: c

我无法理解C语言中“ stream”的含义。它是一个抽象(只是一个名称描述了许多操作)吗?程序与之交换数据的对象(显示器,键盘,硬盘上的文件)吗?还是在RAM中临时存储交换数据的存储空间? 寻求帮助。

4 个答案:

答案 0 :(得分:1)

流是I / O通道的抽象。它可以映射到诸如终端机或磁带驱动器或打印机之类的物理设备,也可以映射到文件系统中的文件,网络套接字或其他任何东西。程序员不会向您透露如何完成映射。

从代码的角度来看,流只是字符(文本流)或字节(二进制流)的源(输入流)或宿(输出流)。流通过FILE对象和stdio例程进行管理。

就您的代码而言,所有流的行为均相同,无论它们映射到什么。它是操作的统一接口,可以有截然不同的实现。

答案 1 :(得分:0)

流只是一段时间内可用的数据序列。例如,它与文件不同,因为您无法设置位置。例如:数据通过RS232,USB,以太网,IP newworks等传入/传出。

但是我的问题是,在机器级别上到底是什么流

没什么特别的。机器级别对流一无所知。

什么是C语言中的流?

相同-C语言对流一无所知。

答案 2 :(得分:-1)

在C语言中,我们使用术语流表示任何输入源或输出目标。

一些例子可能是:

  • stdin(标准输入,默认情况下为键盘)

  • stdout(标准输出,默认情况下为屏幕)

  • stderr(默认错误,默认为屏幕错误)

printf,scanf,gets,puts和getchar之类的功能都是以键盘作为输入流而将屏幕作为输出流的功能。

但是我们可以创建流到文件! stdio.h库支持两种类型的文件,文本文件和二进制文件。在文本文件中,字节代表字符,这使人类可以读取文件中包含的内容。相反,在二进制文件中,字节不一定代表字符。总而言之,文本文件具有二进制文件没有的两件事:文本文件分为几行,每行以一个或两个特殊字符结尾。该代码显然取决于操作系统。另外,文本文件可以包含文件终止符(END OF FILE)。

答案 3 :(得分:-1)

流也特定于正在运行的程序。让我进一步解释一下。

通过终端(类似于Unix / Windows)运行程序时,其本质是:

  1. 终端插入一个子进程并运行您指定的程序(./name_of_program)。

  2. 所有printf语句都提供给派生的父进程的stdout。与scanf语句相同,但现在到派生的父进程的stdin。

  3. 操作系统处理流的特征,即可以一次将多少字节流传输到stdin / out。通常在Unix中为4096字节。 (提示:使用管道可以解决此问题)。

  4. 使用C或任何编程语言提供三种类型的流:缓冲流,行缓冲流和非缓冲流。 (提示:在每个printf()调用之间使用delay()函数以了解其含义)

现在,对文件的读写访问由操作系统的其他服务(即文件描述符)处理。它们是OS使用的正整数,用于跟踪打开的文件和端口(例如串行端口)。