【C语法学习】14 - 流和文件

news2024/11/27 17:43:22

文章目录

  • 1 流
    • 1.1 概念
    • 1.2 优点
    • 1.3 分类
      • 1.3.1 输入流和输出流
      • 1.3.2 标准流和文件流
        • 1.3.2.1 标准流
        • 1.3.2.2 文件流
      • 1.3.3 文本流和二进制流
  • 4 文件
    • 4.1 分类
    • 4.2 区别

1 流

1.1 概念

"流"的概念比较抽象,经典C语言书籍《C Primer Plus》中是这样描述的:流(stream)是一个理想化的数据流,实际输入或输出映射到这个数据流。网络上关于"流"的解释也是五花八门、见仁见智。

个人理解如下:
(1)"流"是外设(如键盘、屏幕、打印机、磁盘等)在程序中的映射或镜像;
(2)程序不关心外设的具体形态,而是使用"流"的概念将外设抽象化,然后通过对"流"的操作来实现对外设读写访问的标准化和归一化;
(3)程序从键盘输入、向屏幕输出、读写磁盘文件等功能都是通过输入/输出函数对输入/输出"流"的操作来实现的;
(4)"流"在程序中的具象化是一个指向FILE类型结构的指针;
在这里插入图片描述

1.2 优点

"流"的优点主要体现在对磁盘文件的读写操作上:

  1. "流"的使用可以简化对文件的操作,提供了统一的接口来处理不同类型的输入输出;
  2. 通过使用"流",可以实现对文件的逐行读取、格式化输入输出等操作,方便了程序的编写和维护;
  3. "流"提供了缓冲区的功能,可以提高文件的读写效率。

1.3 分类

1.3.1 输入流和输出流

“流”*按照流动方向可分为输入流和输出流:流入程序的字节序列称为输入流;流出程序的字节序列称为输出流。

1.3.2 标准流和文件流

"流"按照操作对象可分为标准流和文件流。

1.3.2.1 标准流

标准流包括标准输入流(stdin)、标准输出流(stdout)和标准错误流(stderr)。标准流在程序开始执行时被自动打开,在程序结束执行时自动关闭。标准流在程序中可以直接使用(#include stdio.h)。

与标准流相关的外设如下图所示:
在这里插入图片描述
与标准流相关的常用库函数有:

  1. 输入函数:getchar()、gets()和scanf()等;
  2. 输出函数:putchar()、puts()和printf()等;
1.3.2.2 文件流

文件流是用于读写磁盘文件的"流",这类"流"需要程序设计人员显示的指定。

首先,打开文件流就是创建文件流和文件关联起来;
其次,使用输入/输出函数操作文件流对文件进行读写,如fgets()函数、fputs()函数等;
最后,关闭文件流。

注意:程序无法直接打开文件,只能打开文件流;“打开文件"和"关闭文件"其实是指"打开文件流"和"关闭文件流”;也就是说,fopen创建与文件关联的文件流并打开文件流,fclose关闭文件流。

1.3.3 文本流和二进制流

"流"按照承载内容可分为文本流和二进制流。

文件可分为文本文件和二进制文件;文本流和文本文件相关联,二进制流和二进制文件相关联。

4 文件

4.1 分类

C语言将文件分为文本文件和二进制文件。主要目的是为了提供不同的读取和写入方式,以适应不同类型文件的特点和需求。文本文件适合存储和处理可读的文本数据,而二进制文件适合存储和处理各种类型的数据,包括非文本数据。

文本文件
文本文件是由字符组成的文件,其中的字符可以是可打印字符(如字母、数字、标点符号等)和控制字符(如换行符、制表符等)。文本文件通常以ASCII码或Unicode编码进行表示。在读取和写入文本文件时,C语言提供了一些特定的函数(如fgets()、fputs()、fprintf()等)来处理字符的输入和输出。

二进制文件
二进制文件是由字节组成的文件,其中的字节可以表示任意类型的数据,包括整数、浮点数、结构体等。二进制文件不使用特定的字符编码,而是直接按照字节的形式存储数据。在读取和写入二进制文件时,C语言提供了一些特定的函数(如fread()、fwrite()等)来处理字节的输入和输出。

注意:

  1. 二进制文件可以存储文本数据,因为二进制文件是以字节流的形式存储数据,可以表示任意类型的数据,包括文本数据;
  2. 文本文件不太适合存储二进制数据,因为二进制数据可能包含不可打印的字符,如控制字符、非ASCII字符等,这些字符在文本文件中可能会被转换或丢失,导致数据损坏。

4.2 区别

在C语言中,文本文件和二进制文件是根据文件中存储的数据类型和存储方式的不同进行区分的。

  1. 数据类型:文本文件中存储的是可打印字符,如字母、数字、标点符号等,而二进制文件中存储的是字节流,可以表示任意类型的数据,包括整数、浮点数、结构体等。

  2. 存储方式:文本文件使用字符编码(如ASCII码或Unicode编码)来表示字符,每个字符占用一个或多个字节,而二进制文件直接以字节的形式存储数据,没有特定的字符编码。

  3. 可读性:文本文件可以直接使用文本编辑器打开查看,内容可以被人类读取和理解。而二进制文件不可直接被人类读取和理解,需要使用特定的程序进行解析和处理。

  4. 大小:由于文本文件使用字符编码来表示字符,每个字符占用一个或多个字节,所以文本文件的大小通常会比二进制文件大。

  5. 兼容性:文本文件在不同操作系统之间具有较好的兼容性,因为字符编码是通用的。而二进制文件的兼容性较差,因为不同操作系统可能使用不同的字节顺序和数据格式。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1168994.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

两分钟搞定MySQL安装——极速mysql5.7安装教程

一、下载mysql mysql官网传送带: MySQL :: Download MySQL Community Server 选择好版本后直接下载即可,版本格式为zip格式。 二、安装mysql 1、解压zip安装包 ps:解压缩的路径里面不要出现中文哦! 2、设置配置文件 新建data…

字节10年经验,花3个月熬夜整理的超全面试真题(附答案)

软件测试工程师,和开发工程师相比起来,虽然前期可能不会太深,但是涉及的面还是比较广的。前期面试实习生或者一年左右的岗位,问的也主要是一些基础性的问题比较多。涉及的知识主要有MySQL数据库的使用、Linux操作系统的使用、软件…

一、修改Ubuntu的IP

1、配置虚拟机 三台虚拟机,分别为node1、node2、node3,内存分别为4G、2G、2G,现存最好为(>40G),如下: 2、修改主机名 分别打开三台虚拟机,root用户输入一下命令: no…

too many open files(打开的文件过多)解决办法

我们java服务报java.net.SocketException: 打开的文件过多 由于我们文件服务用的是minio 所以排查思路应该是进入文件服务器查看minio的pid ps -ef |grep minio lsof -p 11956 | wc -l 由此可以看出已经打开数为1950了 所以我们要提升打开文件数(openfile&#…

matlab矩阵的输入

一段时间不操作感觉有些模糊;下面复习一下; 矩阵的数字之间用空格分开,每一行以分号结尾; 空格多几个也是可以识别的; 数字也可以用逗号隔开,只要一行的结尾是分号即可; 空格多输入几个是可…

Rust编程基础核心之所有权(上)

1.什么是所有权? Rust 的核心功能(之一)是 所有权(ownership)。虽然该功能很容易解释,但它对语言的其他部分有着深刻的影响。 所有程序都必须管理其运行时使用计算机内存的方式。一些语言中具有垃圾回收机制&#x…

【李群李代数】【manif 】基于固定信标的2D机器人定位 (Error State Kalman Filter)...

demo演示 运行结果 我们考虑一个机器人在平面上被少量的准时地标或_信标 包围。 机器人以轴向速度和角速度的形式接收控制动作,并且能够测量信标相对于其自身参考系的位置。 机器人位姿 X 在 SE(2) 中,信标位置 b_k 在 R^2 中, | cos th -si…

配置Raspberry自动连接WIFI,在无法查看路由器的校园网情况下使用自己电脑热点

1、开启电脑热点,并共享电脑WLAN2 打开控制面板->网络和Internet->网络连接 选择自己的校园网,我这里是WLAN2,右键属性,如下操作: 如果没有看到 本地连接*10类似的图标 则按如下操作:winx键&#x…

国家统计局教育部各级各类学历教育学生情况数据爬取

教育部数据爬取 1、数据来源2、爬取目标3、网页分析4、爬取与解析5、如何使用Excel打开CSV1、数据来源 国家统计局:http://www.stats.gov.cn/sj/ 教育部:http://www.moe.gov.cn/jyb_sjzl/ 数据来源:国家统计局教育部文献教育统计数据2021年全国基本情况(各级各类学历教育学…

网络协议的基本概念

网络协议的基本概念 随处可见的协议 在计算机网络与信息通信领域里,人们经常提及“协议”一词。互联网中常用的具有代表性的协议有IP、TCP、HTTP等。 “计算机网络体系结构”将这些网络协议进行了系统归纳。TCP/IP就是IP、TCP、HTTP等协议的集合。现在&#xff0…

【MATLAB源码-第67期】基于麻雀搜索算法(SSA)的无人机三维地图路径规划,输出最短路径和适应度曲线。

操作环境: MATLAB 2022a 1、算法描述 ​麻雀搜索算法(Sparrow Search Algorithm, SSA)是一种新颖的元启发式优化算法,它受到麻雀社会行为的启发。这种算法通过模拟麻雀的食物搜索行为和逃避天敌的策略来解决优化问题。SSA通过模…

常用的网站扫描工具

破壳扫目录 7KB扫目录 safe3扫漏洞

怎样做好金融投资翻译

我们知道, 金融投资翻译所需的译文往往是会议文献、年终报表、信贷审批等重要企业金融资料,其准确性事关整个企业在今后一段时期内的发展战略与经营成效。尤其像年报,对于上市公司来说更是至关重要的。那么,怎样做好金融投资翻译&…

【C语言初学者周冲刺计划】5.1C语言知识点小总结

目录 1知识点一: 2知识点二: 3知识点三: 4代码: 5总结: 1知识点一: 1 C语言中要求对变量作强制定义的主要理由是( )。 便于确定类型和分配空间 2 【单选题】若有定义:int m7; float x…

利用稳定扩散快速修复图像

推荐Stable Diffusion自动纹理工具: DreamTexture.js自动纹理化开发包 什么是InPainting? 图像修复是人工智能研究的一个活跃领域,人工智能已经能够提出比大多数艺术家更好的修复效果。 这是一种生成图像的方式,其中缺失的部分已…

【音视频 | Ogg】libogg库详细介绍以及使用——附带libogg库解析.opus文件的C源码

😁博客主页😁:🚀https://blog.csdn.net/wkd_007🚀 🤑博客内容🤑:🍭嵌入式开发、Linux、C语言、C、数据结构、音视频🍭 🤣本文内容🤣&a…

RIP路由配置

RIP路由配置步骤与命令: 1.启用RIP路由:router rip 2.通告直连网络:network 直连网络 3.启用RIPv2版本:version 2 4.禁用自动汇总:no auto-summary 注意:静态路由通告远程网络,动态路由通告…

天空卫士在全球和中国两大报告中被Gartner列为推荐和代表性供应商

DLP连续五年被Gartner 列为推荐厂商的理由 Gartner2023年9月份发布的《Gartner全球企业数据防泄露市场指南》中,天空卫士被列为DLP领域代表供应商,包括EDLP、IDLP和云原生DLP。 这已经是天空卫士第五次入选《Gartner全球企业数据防泄露市场指南》。天空…

[极客大挑战 2019]LoveSQL 1

题目环境:判断注入类型是否为数字型注入 admin 1 回显结果 否 是否为字符型注入 admin 1 回显结果 是 判断注入手法类型 使用堆叠注入 采用密码参数进行注入 爆数据库1; show database();#回显结果 这里猜测注入语句某字段被过滤,或者是’;被过滤导致不能…

突破性的多语言代码大模型基CodeShell:北京大学与四川天府银行联合打造,引领AI编程新时代

项目设计集合(人工智能方向):助力新人快速实战掌握技能、自主完成项目设计升级,提升自身的硬实力(不仅限NLP、知识图谱、计算机视觉等领域):汇总有意义的项目设计集合,助力新人快速实…