C 语言的输入输出流以及数据缓冲

本文介绍了C语言中的数据流和缓冲区概念,包括数据流的意义、缓冲区的分类及其特点。讨论了全缓冲、行缓冲和不带缓冲的区别,并详细解释了常用输入输出函数如scanf()、printf()、getchar()、putchar()、gets()和puts()的工作原理及使用示例。
摘要由CSDN通过智能技术生成

1. 数据流与缓冲区的概念

在这里插入图片描述

1.1数据流

  • 数据流的意义
数据流是一串连续不断的集合,就像水管里的水流,在水管的一端一点一点的地供水,而在水管的另一端看到的是一股连续不断的水流。

对数据写入程序是一段、一段地向数据流管道写入数据,这些数据会按先后顺序被整合形成一个长的数据流。

对数据读取程序而言,看不到数据流在写入时的分段情况。
每次读取都可以读取**任意长度**的数据,但只能先读取前面的数据后,再读取后面的数据,不管写入时是将数据分多次写入,读取时的效果都是完全一样的。
  • 数据流的特点
在Unix/Linux中,文本流和二进制流是相同的,但在Windows中,稍有差异,所以C标准库提供了这两种类型的流。

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

二进制流是由未经处理的字节构成的序列,这些字节记录着内部数据, 并具有下列性质:如果在同一系统中写入二进制流,然后再读取该二进制流,则读出和写入 的内容完全相同。
  • 数据流的映射
在操作系统中,为了统一对各种硬件的操作,简化接口,不同的硬件设备都被映射成一个文件。对这些文件的操作,等同于对磁盘上普通文件的操作。
文件 硬件设备
stdin 标准输入设备(键盘):如 scanf()、getchar() 等函数从 stdin 获取输入。
stdout 标准输出设备(显示器);printf()、putchar() 等函数向 stdout 输出数据。
stderr 标准错误输出设备(显示器);perror() 等函数向 stderr 输出数据。
stdprn 标准打印设备(打印机)
stdaux 标准辅助输入输出设备(异步串行口)。

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

  • C语言数据流的映射过程
  1. 编译时打开一个流。系统将会把该流与一个文件或设备连接起来,如我要打开一个zyx.txt或从键盘输入一段数据,这时候会将该stdin流与该文件或键盘连接起来。其中在打开文件的时候,先将文件载入缓冲区,并返回一个指向FILE结构体类型的指针,该指针记录了所有控制该流的所有必要信息。
  2. 接下来对这个文件zyx.txt的所有操作,将会映射成对缓冲区的操作,如我要修改文件中的一个字,只要修改该缓冲区的一个字。
  3. 只有当强制刷新缓冲区、关闭文件或程序运行结束时,才将缓冲区的内容更新到文件中。
  • 采用数据流的目的
    采用数据流的目的就是使得输出输入独立于设备。
    Input Stream不关心数据源来自何种设备(键盘,文件,网络);Output Stream不关心数据的目的是何种设备(键盘,文件,网络)。

1.2 缓冲区

  • 缓冲区的意义
>缓冲区又称为缓存,它是内存空间的一部分,用来存储输入和要输出的数据,可以加速对
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

从零开始的智障生活

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值