c语言笔记之文件操作

16 文件操作



嵌入式开发中基本用不上,这章不重要

aimg


字符集:泛泛意义上的文本文件中的数据与磁盘中保存的二进制之间的映射关系。

常见的字符集:ASCLL,Latin,GB2312,GBK,UTF-8

解码过程:从看不懂到看得懂的过程。

​ 如果操作时文本文件,则对应的时解码集。

编码过程:解码时逆过程,从看得懂的转换为看不懂的过程。

​ 如果操作的是文本文件,则对应的解码集。

乱码问题:由于我们解码时使用的字符集不是当初编码时使用的字符集导致的!

避免乱码:解码时使用的字符集必须与当初编码时使用的字符集一致。

C程序中,文件中数据的输入/输出操作以“”的方式进行,可以看做是一种数据的流动。

输入流:数据从数据源(文件,键盘)到程序(内存)的传输路径

输出流:数据从程序(内存)到数据源(文件,屏幕等)传输路径

要站在内存的角度

16.2.2 标准文件
标准文件文件指针设备
标准输入stdin键盘
标准输出stdout屏幕
标准错误stderr屏幕
16.2.4 getchar()和putchar()

getchar()函数是从标准输入流读取一个字符,在同一个时间内只会读取一个单一的字符。

int getchar(void);

putchar()函数将一个字符写入到标准输入流,这个字符在同一时间只会输出一个单一的字符。

int putchar(int character);
16.2.5 gets()和puts函数

gets()函数是从标准输入流读取一行文本,并将其存储在一个字符数组中,直到遇到换行为止。

char *gets(char *str);

puts()函数用于将字符串输出到标准输出流,并自添加换行符,它接受一个资格字符作为参数,并显示在屏幕上。

int puts(const char *str);

写入失败他会返回一个特殊值EOF,EOF是一个定义在stdio.h头文件的常量,他的值是-1.

写入成功,会返回写入的字符数。

16.3 文件读写

16.3.1 打开文件

fopen():来创建一个新的文件,或者打开一个已有的文件(有该文件就打开,没有该文件就创建再打开)

头文件:

stdio.h
FILE *fopen(const char *filename,const char *mode);

FILE *表示文件流,如果打开失败就会返回一个空指针(NULL)

mode是指文件打开的模式

模式描述
r只读模式
w只写模式:文件存在,清楚文件的内容从头写,如果文件不存在,创建一个新文件从头写。
a追加模式:文件不存在会创建一个新的文件,文件存在,会在文件内容后面追加写入。
rb只读二进制模式
wb只写二进制模式:文件存在,清楚文件的内容从头写,如果文件不存在,创建一个新文件从头写。
ab追加二进制模式:文件不存在会创建一个新的文件,文件存在,会在文件内容后面追加写入。
r+读写模式
w+读写模式:文件存在,清楚文件的内容从头写,如果文件不存在,创建一个新文件从头写。
a+读写模式:文件不存在会创建一个新的文件,文件存在,会在文件内容后面追加写入。
rb+读写二进制模式:打开一个二进制文件,允许读写文件。
r+b读写二进制模式:打开一个二进制文件,允许读写文件。
wb+读写二进制模式:打开一个二进制文件,从头读写文件。如果文件不存在,则会创建一个新文件并读写;如果文件存在,则清空文件并从头读写。
w+b读写二进制模式:打开一个二进制文件,从头读写文件。如果文件不存在,则会创建一个新文件并读写;如果文件存在,则清空文件并从头读写。
ab+读写二进制模式:打开一个二进制文件,读取或追加写入文件。如果文件不存在,则会创建一个新文件并读写;如果文件存在,读取或在已有内容后面追加写入。
a+b读写二进制模式:打开一个二进制文件,读取或追加写入文件。如果文件不存在,则会创建一个新文件并读写;如果文件存在,读取或在已有内容后面追加写入。
16.3.2 关闭文件

fclose()

头文件

stdio.h
int fclose(FILE *stream);

返回一个整数值,表示成功

返回EOF,失败

16.3.3 写入文件

fputc():逐字符写入文件

头文件

stdio.h
int fput(int character,FILE *stream);

写入失败返回EOF

fputs()将字符串写入文件

stdio.h
int fputs(const char *str,FILE *stream);

写入失败返回EOF

fprintf()格式化写入文件

头文件

stdio.h
int fprintf(FILE *stream,const char *format,...);

写入失败返回EOF

16.3.4 读取文件

fgetc()用于从文件中逐字符读取。

stdio.h
int fgetc(FILE *stream);

读取失败,返回EOF

fgets():从文件中逐行读取,遇到换行符结束,读取的内容包括换行符。

stdio.h
char *fgets(char *str,int num,FILE *stream);

读取失败,返回一个空指针

fscanf():从文件中解析数据并存储到变量中,使用空白字符(空格、制表符、换行符等)分隔内容赋值给不同的变量。

stdio.h 
int fscanf(FILE *stream, const char *format, ...);

读取失败返回EOF

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

02Docker容器卷

Docker容器卷 1.数据卷是什么 简而言之: 就是Docker用来存储数据的,在镜像被删除的时候,卷中数据不会被删除,就是相当于一个数据库备份数据,相当于Windows中的目录或文件 2.目的 解决数据持久化 独立容器的生存周期,帮助容器间继承和共享数据 3.数据卷的使用 1.直接添加 doc…

Linux 多线程(C语言) 备查

基础 1)线程在运行态和就绪态不停的切换。 2)每个线程都有自己的栈区和寄存器 1)进程是资源分配的最小单位,线程是操作系统调度执行的最小单位 2)线程的上下文切换的速度比进程快得多 3)从应用程序A中启用应…

【UE】制作地月全息投影

效果 步骤 1. 在必应国际版上搜索“purlin noise”,下载如下所示图片 再搜索“Earth Map”,下载如下所示图片 再搜索“Moon 360”,下载如下所示图片 这三张图片的资源链接如下: 链接:https://pan.baidu.com/s/1b_50q…

Leetcode每日一题学习训练——Python3版(最小化旅行的价格总和)

版本说明 当前版本号[20231206]。 版本修改说明20231206初版 目录 文章目录 版本说明目录最小化旅行的价格总和理解题目代码思路参考代码 原题可以点击此 2646. 最小化旅行的价格总和 前去练习。 最小化旅行的价格总和 现有一棵无向、无根的树,树中有 n 个节点…

【Spark学习笔记】- 5.1 IO基本实现原理

IO基本实现原理 Input& Output 字节流 InputStream in new FileInputStream("path") int i -1while ( (i in.read()) ! -1 ) {println(i); }上述为字节流 需要一个字节一个字节读取数据,读一个打印一个。功能可以实现,效率不高。 缓…

9_企业架构队列缓存中间件分布式Redis

企业架构队列缓存中间件分布式Redis 学习目标和内容 1、能够描述Redis作用及其业务适用场景 2、能够安装配置启动Redis 3、能够使用命令行客户端简单操作Redis 4、能够实现操作基本数据类型 5、能够理解描述Redis数据持久化机制 6、能够操作安装php的Redis扩展 7、能够操作实现…

AI跨界学习,不再是梦!

大家好!今天给大家推荐的 GPTs 是【行业知识脉络】,帮助大家快速了解某个领域的脉络,并提供足够的学习资料和建议。 在AI时代,从小白到专家的1万小时定律即将失效,用少于1千小时掌握行业知识树和其核心概念是如何学习的…

内核无锁队列kfifo

文章目录 1、抛砖引玉2、内核无锁队列kfifo2.1 kfifo结构2.2 kfifo分配内存2.3 kfifo初始化2.4 kfifo释放2.5 kfifo入队列2.6 kfifo出队列2.7 kfifo的判空和判满2.8 关于内存屏障 1、抛砖引玉 昨天遇到这样一个问题,有多个生产者,多个消费者&#xff0c…

使用Java网络编程,窗口,线程,IO,内部类等实现多人在线聊天1.0

1.整体思路 思路图 整体思路如上: 涉及知识点:线程网络编程集合IO等 TCP 协议 2.代码实现过程 服务端 import javax.swing.*; import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.KeyAdapter; import jav…

SQL手工注入漏洞测试(Sql Server数据库)-墨者

———靶场专栏——— 声明:文章由作者weoptions学习或练习过程中的步骤及思路,非正式答案,仅供学习和参考。 靶场背景: 来源: 墨者学院 简介: 安全工程师"墨者"最近在练习SQL手工注入漏洞&#…

大模型应用设计的10个思考

技术不是万能的,但没有技术却可能是万万不能的,对于大模型可能也是如此。基于大模型的应用设计需要聚焦于所解决的问题,在自然语言处理领域,大模型本身在一定程度上只是将各种NLP任务统一成了sequence 到 sequence 的模型。利用大…

使用 Webshell 访问 SQL Server 主机并利用 SSRS

本文将指导您使用RDS SQL Server实例的主机账号登录和管理SQL Server Reporting Services(SSRS)数据库。 背景信息 RDS SQL Server提供Webshell功能,用户可以通过Web界面登录RDS SQL Server实例的操作系统。通过Webshell,用户可…

一次重新加载所有 maven 项目产生的 OOM

1、解决什么问题? 忘了截图了,用文字描述就是由于Reload All Maven Projects导致的 OOM 异常。 2、尝试与解决 2.1、尝试 2.1.1、尝试清理idea缓存(无效) 2.1.2、重启idea(无效) 2.1.3、重启电脑&am…

硬件连通性测试对象与实施过程

硬件连通性测试是一种系统性的测试方法,用于验证硬件设备之间的连接、通信和协作是否正常。这包括各种硬件组件,如计算机、网络设备、传感器、打印机等。测试的目的是确保硬件设备在其设计和运行环境中能够正确地交互和通信。 一、硬件连通性测试对象 网…

Slurm集群管理系统

Slurm集群管理系统 Slurm(Simple Linux Utility for Resource Management,https://slurm.schedmd.com/)是一个开源的、容错的、高度可扩展的集群管理和作业调度系统,适用于大型和小型高性能计算(HPC)集群。…

憋了个大招_群发版

大家好,我是良许。 憋了个大招,兄弟们!我花了两个月的时间,搭建了一个自己的网站啦~ 不卖关子,网站链接为: www.lxlinux.net/e/ 网站首页截图如下: 这个网站全部都是关于嵌入式及…

【JavaWeb学习笔记】6 - Tomcat

项目代码 零、在线文档 Apache Tomcat 8 (8.0.53) - Documentation Index WEB开发 1. WEB,在英语中web表示网/网络资源(页面,图片,css,js)意思,它用于表示WEB服务器(主机)供浏览器访问的资源 2. WEB服务器(主机)上供外界访问的Web资源分为: 静态web…

动手学习深度学习-跟李沐学AI-自学笔记(3)

一、深度学习硬件-CPU和GPU 芯片:Intel or AMD 内存:DDR4 显卡:nVidia 芯片可以和GPU与内存通信 GPU不能和内存通信 1. CPU 能算出每一秒能运算的浮点运算数(大概0.15左右) 1.1 提升CPU利用率 1.1.1 提升缓存…

Vite4、Vue3、Axios 针对请求模块化封装搭配自动化导入(简单易用)

针对请求模块化封装搭配自动化导入(简单易用) 目标目录目标代码前提步入正题src / utils / index.jssrc /api / index.jssrc /api / request.jssrc /api / service.jssrc /api / utils.jssrc /api / modules / demo.js 自动化配置vite.config.jseslint 校…

2023中医药国际传承传播大会暨中医药图片和非遗艺术展隆重揭幕

由世界针灸学会联合会、中新社国际传播集团、中国新闻图片网、中国民族医药学会、中国针灸学会联合主办的“2023中医药国际传承传播大会”3日在广东省深圳市举办,“中医药国际传承传播图片展”与“非遗艺术展”在大会举办期间开展迎客。会议聚焦非遗健康、非遗传承等…