我无法理解C语言中“ stream”的含义。它是一个抽象(只是一个名称描述了许多操作)吗?程序与之交换数据的对象(显示器,键盘,硬盘上的文件)吗?还是在RAM中临时存储交换数据的存储空间? 寻求帮助。
答案 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)运行程序时,其本质是:
终端插入一个子进程并运行您指定的程序(./name_of_program)。
所有printf语句都提供给派生的父进程的stdout。与scanf语句相同,但现在到派生的父进程的stdin。
操作系统处理流的特征,即可以一次将多少字节流传输到stdin / out。通常在Unix中为4096字节。 (提示:使用管道可以解决此问题)。
使用C或任何编程语言提供三种类型的流:缓冲流,行缓冲流和非缓冲流。 (提示:在每个printf()调用之间使用delay()函数以了解其含义)
现在,对文件的读写访问由操作系统的其他服务(即文件描述符)处理。它们是OS使用的正整数,用于跟踪打开的文件和端口(例如串行端口)。