打印

对C语言输入输出流的深入理解

[复制链接]
456|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主

流(stream)是一个很抽象的概念,《C程序设计语言》中这样定义:流与磁盘或其它外围设备关联的数据的源或目的地。


  在Unix/Linux中,文本流和二进制流是相同的,但在Windows中,稍有差异,所以C标准库提供了这两种类型的流。


  文本流是由文本行组成的序列,每一行包含0个或多个字符,并以'\n'结尾。在某些环境中, 可能需要将文本流转换为其它表示形式(例如把'\n'映射成回车符和换行符),或从其它表示形式转换为文本流。


  二进制流是由未经处理的字节构成的序列,这些字节记录着内部数据, 并具有下列性质:如果在同一系统中写入二进制流,然后再读取该二进制流,则读出和写入 的内容完全相同。


  在操作系统中,为了统一对各种硬件的操作,简化接口,不同的硬件设备都被映射成一个文件。对这些文件的操作,等同于对磁盘上普通文件的操作。

                  


  打开一个流,将把该流与一个文件或设备连接起来,关闭流将断开这种连接,打开一个文件将返回一个指向FILE结构体类型的指针,该指针记录了控制该流的所有必要信息,在不引起歧义的情况下,我们在下文中将不再区分“文件指针”和“流”。


  程序开始执行时,默认会打开 stdin、stdout和stderr三个文件,所以我们使用 scanf()、printf() 等函数时就不需要再使用 fopen() 显式打开这些文件。


  C语言打开文件时,先将文件内容载入缓冲区(缓存),并返回一个指向FILE结构体的指针,接下来对文件的操作,都映射成对缓冲区的操作,只有当强制刷新缓冲区、关闭文件或程序运行结束时,才将缓冲区中的内容更新到文件。就像编辑word文档,并不是立刻将编辑好的内容写入到磁盘上的文件,而是对缓存中的副本进行操作,只有当保存文件时,才将副本同步到磁盘上的文件。


  缓冲区有很多类型,我们这里指的缓冲区是主存(内存条)上的一块特殊区域,专门用来缓存数据,供程序读写。


  而由于硬件不同,将缓冲区的内容同步到文件的过程可能比较繁杂,不易操作,这些都由操作系统完成,对编程人员不可见,编程人员只要能操作接口简单的缓冲区即可。


使用特权

评论回复
沙发
tpgf| | 2023-5-17 15:22 | 只看该作者
“流”即是流动的意思,是物质从一处向另一处流动的过程,是对一种有序连续且具有方向性的数据( 其单位可以是bit,byte,packet )的抽象描述。

使用特权

评论回复
板凳
wakayi| | 2023-5-17 15:39 | 只看该作者
流的特性是:有序连续、具有方向性。

使用特权

评论回复
地板
wowu| | 2023-5-17 15:55 | 只看该作者
“流”:是指信息从外部输入设备(如键盘)向计算机内部(如内存)输入和从内存向外部输出设备(显示器)输出的过程。这种输入输出的过程被形象的比喻为“流”。  

使用特权

评论回复
5
木木guainv| | 2023-5-17 16:40 | 只看该作者
这里的数据流肯定也是一股一股的 这个连续的界定是什么呢

使用特权

评论回复
6
paotangsan| | 2023-5-17 16:52 | 只看该作者
对于单片机来说 既然有数据流 那么必然存在缓存的处理问题啊

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

380

主题

1871

帖子

2

粉丝