我不能理解C语言中“流”的含义。它是一个抽象(只是一个描述许多操作的名称)吗?它是一个对象(显示器,键盘,硬盘驱动器上的文件),一个程序与它交换数据?或者它是RAM中的一个存储空间,暂时保存交换的数据?想寻求帮助。
zpqajqem1#
流是I/O通道的抽象。它可以Map到一个物理设备,如终端、磁带驱动器或打印机,也可以Map到文件系统中的一个文件、网络套接字或其他东西。Map是如何完成的并不向您(程序员)公开。从代码的Angular 来看,流只是字符(文本流)或字节(二进制流)的源(输入流)或接收器(输出流)。流通过FILE对象和stdio例程进行管理。就您的代码而言,所有流的行为方式都是相同的,无论它们Map到什么。它是一个统一的操作接口,可以有非常不同的实现。
FILE
stdio
des4xlb02#
流只是一段时间内可用的数据序列。例如,它与文件不同,因为您无法设置位置。例如:通过RS232、USB、以太网、IP网络等传输的数据。但我的问题是什么是机器级别的流没什么特别的机器级别不知道流的任何信息。C语言中的流到底是什么?C语言不知道任何关于流的信息。
7ajki6be3#
流是一个未知长度的数据字节序列,它流向程序的输入或输出。
oknrviil4#
在C语言中,当我们使用术语流时,我们表示任何输入源或输出目的地。一些示例可以是:
printf、scanf、gets、puts和getchar等函数是将键盘作为输入流,将屏幕作为输出流的函数。但我们可以创建流文件!stdio.h库支持两种类型的文件,文本文件和二进制文件。在文本文件中,字节表示字符,这使得人类可以读取文件包含的内容。相比之下,在二进制文件中,字节不一定表示字符。总之,文本文件有两个二进制文件没有的东西:文本文件被分成行,每行以一个或两个特殊字符结束。代码显然取决于操作系统。此外,文本文件可以包含文件终止符(END OF FILE)。
q9rjltbz5#
流也特定于正在运行的程序。让我进一步解释一下。当你通过终端(类Unix/Windows)运行一个程序时,它的本质是:1.终端分叉到子进程并运行指定的程序(./name_of_program)。1.所有的printf语句都被提供给fork的父进程的stdout。相同的for,scanf语句,但现在指向分叉的父进程的stdin。1.操作系统处理流的特性,即一次可以向stdin/out传输多少字节。在Unix中,它是4096字节。(提示:使用管道来克服这个问题)。1.在C或任何编程语言中有三种类型的流,缓冲,行缓冲和无缓冲。(提示:在每次printf()调用之间使用delay()函数来了解这意味着什么)现在,对文件的读写访问由OS的其他服务处理,即文件描述符。它们是操作系统用来跟踪打开的文件和端口(如串行端口)的正整数。
5条答案
按热度按时间zpqajqem1#
流是I/O通道的抽象。它可以Map到一个物理设备,如终端、磁带驱动器或打印机,也可以Map到文件系统中的一个文件、网络套接字或其他东西。Map是如何完成的并不向您(程序员)公开。
从代码的Angular 来看,流只是字符(文本流)或字节(二进制流)的源(输入流)或接收器(输出流)。流通过
FILE
对象和stdio
例程进行管理。就您的代码而言,所有流的行为方式都是相同的,无论它们Map到什么。它是一个统一的操作接口,可以有非常不同的实现。
des4xlb02#
流只是一段时间内可用的数据序列。例如,它与文件不同,因为您无法设置位置。例如:通过RS232、USB、以太网、IP网络等传输的数据。
但我的问题是什么是机器级别的流
没什么特别的机器级别不知道流的任何信息。
C语言中的流到底是什么?
C语言不知道任何关于流的信息。
7ajki6be3#
流是一个未知长度的数据字节序列,它流向程序的输入或输出。
oknrviil4#
在C语言中,当我们使用术语流时,我们表示任何输入源或输出目的地。
一些示例可以是:
printf、scanf、gets、puts和getchar等函数是将键盘作为输入流,将屏幕作为输出流的函数。
但我们可以创建流文件!stdio.h库支持两种类型的文件,文本文件和二进制文件。在文本文件中,字节表示字符,这使得人类可以读取文件包含的内容。相比之下,在二进制文件中,字节不一定表示字符。总之,文本文件有两个二进制文件没有的东西:文本文件被分成行,每行以一个或两个特殊字符结束。代码显然取决于操作系统。此外,文本文件可以包含文件终止符(END OF FILE)。
q9rjltbz5#
流也特定于正在运行的程序。让我进一步解释一下。
当你通过终端(类Unix/Windows)运行一个程序时,它的本质是:
1.终端分叉到子进程并运行指定的程序(./name_of_program)。
1.所有的printf语句都被提供给fork的父进程的stdout。相同的for,scanf语句,但现在指向分叉的父进程的stdin。
1.操作系统处理流的特性,即一次可以向stdin/out传输多少字节。在Unix中,它是4096字节。(提示:使用管道来克服这个问题)。
1.在C或任何编程语言中有三种类型的流,缓冲,行缓冲和无缓冲。(提示:在每次printf()调用之间使用delay()函数来了解这意味着什么)
现在,对文件的读写访问由OS的其他服务处理,即文件描述符。它们是操作系统用来跟踪打开的文件和端口(如串行端口)的正整数。