嵌入式初学-C语言-二七

文件操作

概述:

什么是文件:

是保存在外存储器(磁盘,u盘,移动硬盘等等)上的数据的集合。

文件操作体现在哪几个方面:
  1. 文件内容的读取
  2. 文件内容的写入

数据的读取和写入可被视为针对文件进行输入输出的操作,此时数据就像水流一样从外存储器流向内存,或者从内存流向外存储器,所以系统形象的称文件操作为文件流

C语言程序对文件的操作采用“文件缓冲机制”,就是说在程序中对文件数据读写并不是直接操作文件中的数据,而是系统会为文件在内存中创建“文件缓冲区”程序对文件的操作,其实是在缓冲区进行的

文件的分类:

根据数据的存储方式划分:
  1. 文本文件(ASCII文件)
  2. 二进制文件

文件标识

  1. 文件系统中:路径+文件名,举例:d:/aa/bb.txt
  2. C语言程序中:文件指针(文件类型指针)语法:FILE*指针变量名

文件操作的步骤

  1. 打开文件
  2. 文件处理(读写文件)
  3. 关闭文件

 

文件的操作

  1. 打开文件,让系统为文件创建文件缓冲区
    1. 函数名:fopen
    2. 头文件:‘#include <stdio.h>’
    3. 函数原型:FILE *fopen(const char *path,const char *mode)
    4. 函数功能:打开文件,并为文件创建缓冲区
    5. 函数参数
      1. path:目标文件的路径
      2. mode:文件打开的方式(读,写,读写)
    6. 返回值:
      1. 成功:返回文件指针File*(缓冲区的首地址)
      2. 失败:返回NULL
  2. 文件关闭,文件使用完一定要记得释放
    1. 函数名:fclose
    2. 头文件:‘#include <stdio.h>’
    3. 函数原型:Int fclose(FILE*fp)
    4. 函数功能:关闭文件,释放缓冲区
    5. 函数参数:
      1. fp:已经打开的文件指针
    6. 返回值:
      1. 成功:返回0
      2. 失败:返回EOF(-1)

文件打开与关闭案例

/**
* 文件的打开与关闭
*/
#include <stdio.h>
int main(int argc,char** argv)
{
// 在命令行执行./a.out的时候,传递一个需要打开的目标文件的地址
if(argc < 2)
{
printf("输入有误,请按照<%s 文件路径>格式输入\n",argv[0]);return -1;
}
// 根据提供的文件路径,打开文件,mode(r,w,rw)
FILE* fp = fopen(argv[1],"r");
// 校验文件是否读取成功
if(!fp)
{
perror("文件打开失败!");
return -1;
}
puts("文件打开成功!");
// 关闭打开的文件
int ret = fclose(fp);
// 校验文件是否关闭成功(很多时候这一步会省略掉)
if(ret == -1)
{
perror("文件关闭失败!");
return -1;
}
puts("文件关闭成功!");
return 0;
}

 

文件的读写

单字符的读写

  1. 函数名:fgetc
  2. 头文件:#include <stdio.h>
  3. 函数原型:int fgetc(file *fp);
  4. 函数的功能:从fp代表的文件中获取一个字符
  5. 函数参数:
    1. fp:我们需要操作的文件的描述
  6. 返回值:
    1. 成功:返回读取到的字符
    2. 失败:或者文件末尾,返回EOF(-1)

方式1: 

/**
* 单字符的读取
*/
#include <stdio.h>
int main(int argc,char **argv)
{
if(argc < 2)
{
printf("输入有误,请按照<%s 文件路径>格式输入\n",argv[0]);
return -1;
}
// 打开文件
FILE* fp = fopen(argv[1],"r");
// 非空校验
if(!fp)
{
perror("文件打开失败!");
return -1;
}
// 单字符读取文件
int re = 0;
while(re != -1 && re != '\n')
{
re = fgetc(fp);
printf("%c",re);
}
printf("\n");
// 关闭文件
fclose(fp);
return 0;
}

 方式2:

/**
* 单字符读取
*/
#include <stdio.h>
int main(int argc,char **argv)
{
// 获取外部输入
if(argc < 2)
{
printf("输入有误,请按照<%s 文件路径>格式输入\n",argv[0]);
return -1;
}
// 打开文件
FILE* fp = fopen(argv[1],"r");
if(!fp)
{
perror("文件打开失败!");
return -1;
}
// 读取文件
char ch;
while((ch = fgetc(fp)) != EOF)
{
printf("%c",ch);
}
printf("\n");
// 关闭文件
fclose(fp);
return 0;
}

多字符读取

  1. 函数名:fgets()
  2. 头文件:#include <stdio.h>
  3. 函数原型:char *fgets(char *buf,int size,FILE *fp)
  4. 函数功能:从fp代表的文件中获取size个字符,放置在buf代表的内存中
  5. 函数参数:
    1. Buf:内存空间首地址,用于存放读取的字节
    2. Size:待读取的字符,实际读取size-1
    3. Fp:已打开的文件指针
  6. 返回值:
    1. 成功:返回buf
    2. 失败:文件末尾,返回NULL;

案例:

/**
* 多字符读取
*/
#include <stdio.h>
#include <string.h>
int main(int argc,char **argv)
{
if(argc < 2)
{
printf("输入有误,请按照<%s 文件路径>格式输入\n",argv[0]);
return -1;
}
FILE* fp = fopen(argv[1],"rw");
if(!fp)
{
perror("文件打开失败!");
return -1;
}
// 多字符读取
// 创建缓冲区大小
char buf[64] = {0};
while(fgets(buf,64,fp)!=NULL)
{
printf("%s",buf);
// 给buf赋初始值
memset(buf,0,sizeof(buf));
}
printf("\n");
fclose(fp);
return 0;
}

 

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Day42 | 739. 每日温度 496.下一个更大元素 I 503.下一个更大元素II

语言 Java 739. 每日温度 每日温度 题目 给定一个整数数组 temperatures &#xff0c;表示每天的温度&#xff0c;返回一个数组 answer &#xff0c;其中 answer[i] 是指对于第 i 天&#xff0c;下一个更高温度出现在几天后。如果气温在这之后都不会升高&#xff0c;请在该…

关于windows环境使用nginx的一些性能问题

遇到的问题 最近在一个windows环境中部署nginx&#xff0c;遇到了以下问题&#xff1a; 1. nginx启动了九个线程&#xff08;1master8woekr&#xff09;&#xff0c;但是所有链接都被1个woker接收&#xff0c;其余worker不工作 2. 用户端访问web很慢&#xff0c;登录服务器使…

k8s搭建

环境&#xff1a; 操作系统&#xff1a;win10 虚拟机&#xff1a;virtual box linux发行版&#xff1a;CentOS7.9 linux内核(使用uname -r查看)&#xff1a;3.10.0-957.el7.x86_64 master和node节点通信的ip(master)&#xff1a; 10.0.0.198 0.检查配置 本次搭建的集群共三个节…

deepspeed的并行模式介绍笔记

1.整体框架 2.并行模式 1.数据并行DDP 数据切分以后&#xff0c;分开单张卡训练得到参数&#xff0c;然后综合在单卡计算。 要点&#xff1a;前向计算和反向计算两步骤走并汇总。 1.前向计算 需要留一块主卡一定空间用于综合。 2.反向传播 利用前向传播的汇总参数得到各个…

Leetcode Java学习记录——动态规划基础

概念 首先想到递归、分治。动态规划本质也一样。 共性&#xff1a;找到重复子问题 差异性&#xff1a;有最优子结构&#xff0c;中途可以淘汰次优解。 动态规划是分治最优子结构。 例题 斐波那契数列 递归实现&#xff0c;时间复杂度是指数级。 最基础的写法为 int fib(i…

Linux CentOS java JDK17

1. 下载 cd /usr/local/ wget https://download.oracle.com/java/17/latest/jdk-17_linux-x64_bin.tar.gz 2. 解压 tar -zxf jdk-17_linux-x64_bin.tar.gz 3.配置环境变量 vim /etc/profile // 在末尾处添加 export JAVA_HOME/usr/local/jdk-17.0.12 #你安装jdk的路径&…

idea和jdk的安装教程

1.JDK的安装 下载 进入官网&#xff0c;找到你需要的JDK版本 Java Downloads | Oracle 中国 我这里是windows的jdk17&#xff0c;选择以下 安装 点击下一步&#xff0c;安装完成 配置环境变量 打开查看高级系统设置 在系统变量中添加两个配置 一个变量名是 JAVA_HOME …

大模型日报|10 篇必读的大模型论文

大家好&#xff0c;今日必读的大模型论文来啦&#xff01; 1.斯坦福推出大模型网络安全能力和风险评估框架 Cybench 用于网络安全的语言模型智能体&#xff08;agent&#xff09;能够自主识别漏洞并执行漏洞利用&#xff0c;有可能对现实世界造成影响。政策制定者、模型提供者…

vue通过iframe预览 pdf、word、xls、ppt、txt文件

vue通过iframe预览 pdf、word、xls、ppt、txt文件 iframe中预览只能直接打开pdf文件&#xff0c;其他文件需要通过office365预览。 效果&#xff1a; 组件代码&#xff1a; <!--* fileName: 文件预览-FileView.vue* date: yanghaoxing-2024-08-16 09:32:24 !--> <…

ModuleNotFoundError: No module named ‘pywin32_bootstrap

ModuleNotFoundError: No module named ‘pywin32_bootstrap 欢迎来到英杰社区https://bbs.csdn.net/topics/617804998 欢迎来到我的主页&#xff0c;我是博主英杰&#xff0c;211科班出身&#xff0c;就职于医疗科技公司&#xff0c;热衷分享知识&#xff0c;武汉城市开发者社…

4.展示功能的测试及缓冲-《篮球比赛展示管理系统》现场管理员角色操作手册

本平台属于富客户端类型&#xff0c;展示元素包括精美图片、高级动画、透明视频等&#xff0c;所以为了保证画面的呈现速度&#xff0c;一定要在比赛之前&#xff0c;把所有的展示功能在电脑过一遍&#xff0c;浏览器自动产生一个数据缓冲&#xff0c;便于提高现场画面的展示放…

springboot的学习(三):开发相关

简介 一些开发测试时用到的技术。 springboot 热部署 修改了代码&#xff0c;服务器不需要重启可以直接看到新的修改的效果。仅仅加载当前开发者自定义开发的资源&#xff0c;不加载jar资源。 在pom.xml配置文件中添加&#xff1a; <dependency><groupId>org.s…

飞书操作—学习笔记

1&#xff1a;推荐飞书的理由 这几年越来越多的公司开始使用飞书这一款软件&#xff0c;即是是一些大厂&#xff0c;也开始边缘化内部的通讯交流软件。那么飞书有那些功能能得到这样的青睐喃&#xff1f; 我个人总结&#xff0c;飞书有如下优势 1&#xff1a;飞书功能相对来…

24年银行从业资格考试报名照规格要求

24年银行从业资格考试报名照规格要求 #银行从业 #银行从业资格证 #银行从业考试 #银行从业资格考试 #银行从业资格证报名照片 #银从

Linux | 深入探究Linux进程控制:从fork函数到进程等待再到进程替换

目录 1、进程的创建&#xff1a;fork函数 2、父子进程的奇怪现象&#xff1a;为什么同一个地址有不同的值&#xff1f;——区分内存的虚拟地址和物理地址 代码&#xff1a;利用fork函数的返回值进行父子进程分流&#xff0c;执行不同的代码块 虚拟地址和物理地址&#xff1…

推荐编译器插件:Fitten Code 更快更好的AI助手

✨✨ 欢迎大家来访Srlua的博文&#xff08;づ&#xffe3;3&#xffe3;&#xff09;づ╭❤&#xff5e;✨✨ &#x1f31f;&#x1f31f; 欢迎各位亲爱的读者&#xff0c;感谢你们抽出宝贵的时间来阅读我的文章。 我是Srlua小谢&#xff0c;在这里我会分享我的知识和经验。&am…

【Linux 驱动】IMX6ULL gpio驱动

1. 概述 如果 pinctrl子系统将一个 PIN 复用为 GPIO 的话&#xff0c;那么接下来要用到 gpio 子系统了。gpio 子系统顾名思义&#xff0c;就是用于初始化 GPIO 并且提供相应的 API 函数&#xff0c;比如设置 GPIO为输入输出&#xff0c;设置读取 GPIO 的值等。 gpio 子系统的主…

MAE论文详解

文章目录 前言一、MAE理论二、MAE整体框架三、MAE简单实现四、实验总结 前言 MAE是Facebook团队在2021年11月发布的一篇论文&#xff0c;《Masked Autoencoders Are Scalable Vision Learners》&#xff0c;带掩膜的自编码器是可扩展的视觉学习器&#xff0c;MAE就是Masked Aut…

SpringBoot整合Liquibase

1、是什么&#xff1f; Liquibase官网 Liquibase是一个开源的数据库管理工具&#xff0c;可以帮助开发人员管理和跟踪数据库变更。它可以与各种关系型数据库和NoSQL数据库一起使用&#xff0c;并提供多种数据库任务自动化功能&#xff0c;例如数据库迁移、版本控制和监控。Li…

文本分类任务算法演变(二)

文本分类任务算法演变 1.深度学习-pipeline1.1fastText1.2LSTM1.2.1公式详解1.2.2可视化 1.3TextCNN1.4Gated CNN1.5TextRCNN1.6Bert1.6.1取[cls] token对应的向量1.6.2将整句话的向量取max/average pooling1.6.3将Bert编码后的向量再输入LSTM或CNN1.6.4将Bert中间层的结果取出…