C语言常见的文件操作函数总结
目录
前言
一、打开和关闭
1.fopen
细节
2.fclos
基本用法示例
二、读写
1.fputc和fgetc
1)fputc
细节
基本用法示例
2)fgetc
细节
基本用法示例
2.fputs和fgets
1)fputs
细节
基本用法示例
2)fgets
细节
基本用法示例
3)puts的使用,以及为什么不推荐使用gets
基本用法示例
不推荐使用gets的原因
3.fscanf和fprintf
1)fscanf
细节:
fscanf和scanf的区别与联系
基本用法示例
补充
2)fprintf
细节
基本用法示例
4.sprintf和sscanf
1)sprintf
细节
基本用法示例
2)sscanf
细节
基本用法示例
总结
前言
以下函数均在头文件"stdio.h"中。
一、打开和关闭
1.fopen
fopen(),这个函数很简单,也不容易忘。两个参数一是文件名或者路径,二是打开方式。
如果文件就在当前路径下的话,那直接输入“文件名”即可,记得用双引号。如果不是当前路径,那就把目标的路径输进去。如下图:
(什么是当前路径?就是你创建源文件.c或者.cpp的那个文件夹)
打开当前路径下文件的方式:
打开其他路径下文件的方式:
这里列出常用的,注意打开方式也要用双引号括起来
细节
上述参数带不带加号有什么区别呢?带 +
的模式支持读写:
一句话总结
带 +
:允许读写,但不同模式对文件处理方式不同(r+
保留内容,w+
清空内容,a+
强制末尾追加)。
不带 +
:只能读或写,功能单一,部分模式会清空文件(如 w
)。
一打开文件后都要测试一些打开成功没,防止野指针操作
FILE * P;
//方法一
assert(P);
//方法二
if(!P)
{printf("FILE ERROR");return 1;
}
常用的如assert(P);这个函数的作用是检查括号内的值是否为真,否则就报错停止程序。但需要包上“assert.h”头文件。
当然if(!P)也是简单好用,如果打开文件失败,则P为NULL,!P就为真。
2.fclos
fclos( ),这个很简单,直接将指针放进去就好了,如fclos(P),一般是不会失败的
基本用法示例
#include<stdio.h>
#include<assert.h>int main()
{FILE* w = fopen("log.txt", "w");assert(w);//检查w是否为空。如果为空则打印错误并停止运行//你的过程fclose(w);return 0;
}
二、读写
1.fputc和fgetc
1)fputc
作用:向stream,目标文件流 写入单个字符。
参数有两个,一是int char,即要写入的字符,二是要写入文件的指针。
fputc写入成功时返回写入的字符的ASCII码,失败时返回EOF。
ASCII_百度百科
细节
由于fputc接受int型参数,故当把char类型传入时,其实发生了隐形的转换,也就是从char型转换为int型(该字符所对应的ASCII码)。
至于为什么将fgetc的参数设置为int型有以下几个原因:
①兼容与文件相关EOF,EOF为文件结束的标志,通常定义为-1;
②char
类型在不同平台上的符号性可能不同,使用 int
类型可以绕过符号性问题,确保所有 0
到 255
的字符值都能正确传递。
③整数提升规则:在 C 语言中,当 char
类型作为参数传递给函数时,会自动提升为 int
类型。
基本用法示例
void test1w()
{FILE* w = fopen("log.txt", "w");assert(w);char* str = "hello ,this is a test\n";char* tem = str;for (int i = 5; i > 0; --i){while (*str != '\0')fputc(*str++, w);str = tem;}//printf("%s\n", str);fclose(w);
}
结果:
2)fgetc
作用:从文件、字符串或其他中读单字符。
函数参数就一个stream,目标文件流 文件指针。
读取成功返回该字符的ASCII码(int),失败则EOF,当读取到文件末尾返回EOF(-1),fgetc一般配合循环使用。
细节
①在从文件读取时判断结束的条件是EOF,但从字符串读取时,判断条件则为'\0'(字符串默认以'\0'结尾);
②注意缓冲区溢出问题,如下方示例中以char [200]数组sbuffer接受读取到的字符,接受的字符不能大于等于num(这里即199)——因为字符串默认以'\0'结尾,所以这里还要我们手动添加\0。
如果事先不知道文件中有多少字符,该如何设置缓冲区大小?
①可以用动态增容数组——malloc和realloc;
②可以循环打印,比如当缓冲区快满时,将缓冲区打印或者放到其他什么容器里吗,然后将下标置为0。
基本用法示例
void test1r()
{FILE* r = fopen("log.txt", "r");assert(r);char sbuffer[200];int t;int i = 0;while ((t=fgetc(r))!=EOF){sbuffer[i++] = (char)t;if (i == sizeof(sbuffer) - 1)break;}sbuffer[i] = '\0';printf("%s", sbuffer);fclose(r);
}
结果:
2.fputs和fgets
1)fputs
作用:写入字符串到文件或其他,按行写入。
参数:str,待写入的字符串(需以 \0
结尾)。stream,目标文件流 文件指针或stdout
。
返回值:成功返回非负整数,失败返回EOF。
细节
①fputs
不会自动添加换行符,如:
fputs("Line 1", fp); fputs("Line 2", fp);
文件写入的实际内容为Line 1Line 2。需要手动添加,如fputs("Line 1\n", fp)。
②fputs不会检查字符串是否以\0结尾,如果传入的字符串没有 \0
结尾,可能导致缓冲区溢出或写入乱码。需要手动添加\0,如char str[] = { 'h','h','h' ,'\0'};
基本用法示例
void test2w()
{FILE* w = fopen("log.txt", "w");assert(w);char str[] = "hello\nworld\nC&C++\n";printf("%d", fputs(str, w));fclose(w);
}
结果:
2)fgets
作用:从文件或其他读取num-1个字符串到str缓冲区中。
参数:str,用于存储读取数据的字符数组(缓冲区);num,要读取的最大字符数;stream,输入流如 stdin
或文件指针。
返回值:成功返回str指针,失败返回NULL。
细节
1)fgets遇到以下情况会停止读取:
①读取了num-1个字符;
②遇到了换行符;
如果文件或者字符串中有很多\n应该怎么读完呢?——循环读取如下示例
③到达文件末尾 (EOF)。
2)读取的字符串会以 \0
结尾
3)为什么读取num-1个字符?因为要给\0留一个
如果事先不知道文件中有多少字符,该如何设置缓冲区大小?
①可以用动态增容数组——malloc和realloc;
②可以循环打印,比如当缓冲区快满时,将缓冲区打印或者放到其他什么容器里吗,然后将下标置为0。
基本用法示例
void test2r()
{FILE* r = fopen("log.txt", "r");assert(r);char s[100];char str[100];int total = 0;while (fgets(s, 100, r) != NULL && total + strlen(s) < 100){strcpy(str+total, s);total += strlen(s);}printf("%s", str);fclose(r);
}
结果
3)puts的使用,以及为什么不推荐使用gets
作用:将字符串 str
输出到标准输出(通常是屏幕),并自动追加换行符 \n。
返回值:成功时返回非负值(通常是输出的字符数,包括换行符),失败返回 EOF
。
细节
传入的指针必须指向以 \0
结尾的字符串,否则会导致未定义行为(如输出乱码)。
基本用法示例
char str[] = "Hello World";
puts(str); // 输出 "Hello World" 并换行
不推荐使用gets的原因
缓冲区溢出风险。fgets相比,gets并没有指定读取多少字符,有缓冲区溢出的风险。
如:
char buffer[5];
gets(buffer); // 输入 "123456" 时,buffer 溢出(仅能容纳4字符+1个\0)
由上述原因,从C11标准开始,gets
被正式从C语言标准库中移除。若使用gets函数,编译器会给出警告,并推荐使用fges。
3.fscanf和fprintf
1)fscanf
首先明确的是fscanf与scanf非常相似,故使用方法上也会有相似之处。
作用:从文件读取格式化输入,即从文件中读取数据。
参数:stream,输入文件流(如 FILE *p
);format,格式化字符串(与 scanf
格式相同,类似于scanf的第一个参数);…表示format可以有多个。
返回值:成功,返回成功匹配和赋值的参数个数。失败或到文件尾返回EOF。
细节:
①fscanf与scanf类似都是从文件流中读取数值到某个容器中,故读取顺序不能更改否则类型不匹配;
②若用fscanf读取字符串,则需要留一位给\0,比如字符数组20,则只能读19——%19s;
fscanf和scanf的区别与联系
①fscanf可以从任意文件流中读取,而scanf只能从stdin标准输入流中读取;
②fscanf需要检查文件指针是否有效;
③scanf是fscanf的特例——fscanf(stdin,……);
基本用法示例
void test3r()
{FILE* r = fopen("log.txt", "r");int date, dat, ret;char name[2][20];ret=fscanf(r, "%19s %d %d %19s", &name[0], &date, &dat,&name[1]);if (ret == 4)printf("ret=%d, %d %d\n %s %s", ret, date, dat, name[0], name[1]);elseprintf("fscanf读取有误,匹配到:%d\n", ret);fclose(r);
}
补充
一些方便的格式:
%[^ x]
:读取直到遇到x代表的符号,如%[ ^ ,]读取直到遇到' , ';
%*d
:跳过整数。
2)fprintf
作用:从文件写入格式化输出,即从文件中写入数据。
参数:stream,目标文件流(如文件指针或 stdout
/stderr
);format,format,格式化字符串(与 printf格式相同);…表示format可以有多个。
返回值:成功,返回写入的字符数。失败返回负数。
细节
①参数类型要匹配,即写入顺序不能更改;
②与fscanf不同的是,fprintf是朝文件写入,若只是写入字符串则可以不用加上后面的变量,如:
fprintf(p, "Hello World");//将字符串写入文件P;
③fprintf
可指定输出目标,printf
固定输出到 stdout。
基本用法示例
void test3w()
{FILE* w = fopen("log.txt", "w");assert(w);char name[15] = "zhangsan";int date1 = 1, date2 = 2, date3 = 3;fprintf(w, "%s %d %d \n", name, date1, date2);fprintf(w, "hello\nsee you");fclose(w);
}
结果
4.sprintf和sscanf
1)sprintf
作用:sprintf
用于字符串格式化输入,将变量中的数据输入到字符串中,功能类似 printf
,但操作对象是字符串而非标准输入输出流。
参数:str,目标字符串(缓冲区);format,format,格式化字符串(与 printf格式相同);…表示format可以有多个。
返回值:成功写入的字符数,失败返回负数。
细节
①sprintf会自动为字符数组尾添加\0;
②sprintf 不会检查目标字符串 str
的长度,需手动确保足够空间。
③sprintf 支持printf的所有格式;
基本用法示例
void test4w()
{char bufer[64];double pi = 3.1415926;int day = 20250510;char str[] = "hello sprintf";sprintf(bufer, "pi=%.7f,day=%d,str=%s", pi, day, str);printf("%s", bufer);
}
结果
2)sscanf
作用:sprintf
用于字符串格式化输出,从字符串解析数据,功能类似scanf,但操作对象是字符串而非标准输入输出流。
参数:s,目标字符串(缓冲区);format,format,格式化字符串(与 printf格式相同);…表示format可以有多个。
返回值:成功匹配并赋值的参数个数,失败返回 EOF
。
细节
①可以用" * "跳过忽略选项,这个可以用来提取字符串中指定的数据
如:
char *str="total 5 $";
int num;
sscanf(str, "%*s %d", &num); // %*s 跳过 "total",然后读取 5
②用%[a-z]匹配小写字符串,用%[A-Z]匹配大写字符串;
如:
int ret=sscanf("ABC,abc,A", "%[A-Z],%[a-z],%c", a, b, &c);
printf("%s\n%s\n%c", a, b, c);
③%[^ 内容],意思是只匹配字符串中符合内容中的值
如:
sscanf(str, "%*[^0-9]%d", &num); // 跳过所有非数字字符,直到遇到数字
char str[20];
sscanf("hello,world", "%[^,]", str); // str="hello"
④%n
记录已读取的字符数
如:
int pos;
sscanf("12345", "%d%n", &num, &pos); // num=12345, pos=5
⑤使用宽度限定符防止溢出
如:
char name[10];
sscanf("abcdefghijklmn", "%9s", name); // 只读前9字符
基本用法示例
void test4r()
{char str[] = "2025/5/10";int year, mon, day;char a[10], b[10], c;int ret = sscanf(str, "%d/%d/%d", &year, &mon, &day);printf("%d/%d/%d\n", year, mon, day);sscanf("ABC,abc,A", "%[A-Z],%[a-z],%c", a, b, &c);printf("%s\n%s\n%c", a, b, c);
}
输出:
总结
本文总结了有关文件操作的一些常用的函数。由于在日常较少使用这些函数,每每想用又不免查找,因此有了这篇文章。
希望对你有所帮助。
读完点赞,手留余香~
相关文章:
C语言常见的文件操作函数总结
目录 前言 一、打开和关闭 1.fopen 细节 2.fclos 基本用法示例 二、读写 1.fputc和fgetc 1)fputc 细节 基本用法示例 2)fgetc 细节 基本用法示例 2.fputs和fgets 1)fputs 细节 基本用法示例 2)fgets 细节 基本用法示例 3)puts的使用,以及为什…...
卫宁健康WiNGPT3.0与WiNEX Copilot 2.2:医疗AI创新的双轮驱动分析
引言:医疗AI的双翼时代 在医疗信息化的浪潮中,人工智能技术的深度融入正在重塑整个医疗行业。卫宁健康作为国内医疗健康和卫生领域数字化解决方案的领军企业,持续探索AI技术在医疗场景中的创新应用。2025年5月10日,在第29届中国医院信息网络大会(CHIMA2025)上,卫宁健康…...
【GPT入门】第38课 RAG评估指标概述
这里写自定义目录标题 一、RAG评估指标二、ragas 评估三、trulens 一、RAG评估指标 二、ragas 评估 2.1 ragas介绍 开源地址:https://github.com/explodinggradients/ragas 官方文档:https://docs.ragas.io/en/stable/从文本生成和文本召回两个维度&am…...
深度剖析多模态大模型中的视频编码器算法
写在前面 随着多模态大型语言模型(MLLM)的兴起,AI 理解世界的能力从静态的文本和图像,进一步拓展到了动态的、包含丰富时空信息的视频。视频作为一种承载了动作、交互、场景变化和声音(虽然本文主要聚焦视觉部分)的复杂数据形式,为 MLLM 提供了理解真实世界动态和因果关…...
【递归、搜索与回溯算法】导论
📝前言说明: 本专栏主要记录本人递归、搜索与回溯算法的学习以及LeetCode刷题记录,按专题划分每题主要记录:(1)本人解法 本人屎山代码;(2)优质解法 优质代码ÿ…...
《智能网联汽车 自动驾驶功能道路试验方法及要求》 GB/T 44719-2024——解读
目录 1. 适用范围 2. 关键术语 3. 试验条件 3.1 试验道路 3.2 试验车辆 3.3 试验设备 3.4 试验时间 4. 试验方法及要求 4.1 功能激活 4.2 动态驾驶任务执行 4.3 动态驾驶任务后援 4.4 状态提示 5. 附录A(核心环境要素) 6. 实施要点 原文链接…...
path环境变量满了如何处理,分割 PATH 到 Path1 和 Path2
要正确设置 Path1 的值,你需要将现有的 PATH 环境变量 中的部分路径复制到 Path1 和 Path2 中。以下是详细步骤: 步骤 1:获取当前 PATH 的值 打开环境变量窗口: 按 Win R,输入 sysdm.cpl,点击 确定。在 系…...
实战项目1(02)
目录 任务场景一 【sw1和sw2的配置如下】 任务场景二 【sw3的配置】 【sw4-6的配置】 任务场景一 某公司有生产、销售、研发、人事、财务等多个部门,这些部门分别连接在两台交换机(SW1和SW2)上,现要求给每个部门划分相应的V…...
m1 安装 Elasticsearch、ik、kibana
一、下载安装ES 1、下载地址 ES|download 2、安装 将下载的安装包解压到 要安装的文件目录 关闭 ES 的安全模式 本地文本编辑器打开elasticsearch.yml配置文件,将红箭头指的地方 改为 false3、启动 ES 启动命令 进入 ES 的安装目录,进入bin文件目…...
游戏引擎学习第273天:动画预览
回顾并为一天的内容定下基调 。目前我们正在编写角色的移动代码,实际上,我们已经在昨天完成了一个简单的角色跳跃的例子。所以今天的重点是,开始更广泛地讨论动画,因为我们希望对现有的动画进行调整,让它看起来更加令…...
JVM中的安全点是什么,作用又是什么?
JVM中的安全点(Safepoint) 是Java虚拟机设计中的一个关键机制,主要用于协调所有线程的执行状态,以便进行全局操作(如垃圾回收、代码反优化等)。它的核心目标是确保在需要暂停所有线程时,每个线程…...
游戏引擎学习第271天:生成可行走的点
回顾并为今天的内容设定背景 我们昨天开始编写一些游戏逻辑相关的内容,虽然这部分不是最喜欢的领域,更偏好底层引擎开发,但如果要独立完成一款游戏,游戏逻辑也必须亲自处理。所以我们继续完善这部分内容。事实上,接下…...
FlySecAgent:——MCP全自动AI Agent的实战利器
最近,出于对人工智能在网络安全领域应用潜力的浓厚兴趣,我利用闲暇时间进行了深入研究,并成功开发了一款小型轻量化的AI Agent安全客户端FlySecAgent。 什么是 FlySecAgent? 这是一个基于大语言模型和MCP(Model-Contr…...
DAMA车轮图
DAMA车轮图是国际数据管理协会(DAMA International)提出的数据管理知识体系(DMBOK)的图形化表示,它以车轮(同心圆)的形式展示了数据管理的核心领域及其相互关系。以下是基于用户提供的关键词对D…...
使用vue3-seamless-scroll实现列表自动滚动播放
vue3-seamless-scroll组件支持上下左右无缝滚动,单步滚动,并且支持复杂图标的无缝滚动。 核心特性 多方向无缝滚动 支持上下、左右四个方向的自动滚动,通过 direction 参数控制(默认 up),适用于新闻轮播、…...
Scrapyd 详解:分布式爬虫部署与管理利器
Scrapyd 是 Scrapy 官方提供的爬虫部署与管理平台,支持分布式爬虫部署、定时任务调度、远程管理爬虫等功能。本文将深入讲解 Scrapyd 的核心功能、安装配置、爬虫部署流程、API 接口使用,以及如何结合 Scrapy-Redis 实现分布式爬虫管理。通过本文&#x…...
mac环境配置(homebrew版)
文章目录 【环境配置】HomebrewGitJavaMavenMySQLRedisNacosNode.js 【拓展-mac常见问题】mac文件损坏问题mac必装软件(Java开发版)zsh和bash配置文件区别 【参考资料】 查看每个版本可以用命令brew info xxx ps:每一个环境安装完之后都要关掉…...
19、DeepSeek LLM论文笔记
DeepSeek LLM 1. **引言**2、架构3、多步学习率调度器4、缩放定律1.超参数的缩放定律2. 估计最优模型和数据缩放 5、GQA分组查询注意力汇总deepseekDeepSeek LLM 技术文档总结1. **引言**2. **预训练**3. **扩展法则**4. **对齐(Alignment)**5. **评估*…...
基于LLM的6G空天地一体化网络自进化安全框架
摘要 最近出现的6G空天地一体化网络(SAGINs)整合了卫星、空中网络和地面通信,为各种移动应用提供普遍覆盖。然而,SAGINs的高度动态、开放和异构的性质带来了严重的安全问题。构建SAGINs的防御体系面临两个初步挑战:1)…...
【Mac 从 0 到 1 保姆级配置教程 12】- 安装配置万能的编辑器 VSCode 以及常用插件
文章目录 前言安装 VSCode基础配置常用插件1. 通用开发工具2. 编程语言支持3. 数据库工具4. 主题与界面美化5. 效率工具6. Markdown 工具7. 容器开发8. AI 辅助编程9. 团队协作 最后系列教程 Mac 从 0 到 1 保姆级配置教程目录,点击即可跳转对应文章: 【…...
数据库与SQL核心技术解析:从基础到JDBC编程实战
数据库技术作为现代信息系统的核心,贯穿于数据存储、查询优化、事务管理等关键环节。本文将系统讲解数据库基础知识、SQL语言核心操作、索引与事务机制,并结合Java数据库编程(JDBC)实践,助你构建完整的数据库技术体系。…...
JUC并发编程(上)
一、JUC学习准备 核心知识点:进程、线程、并发(共享模型、非共享模型)、并行 预备知识: 基于JDK8,对函数式编程、lambda有一定了解 采用了slf4j打印日志 采用了lombok简化java bean编写 二、进程与线程 进程和线程概念 两者对比…...
postgres--MVCC
PostgreSQL 的 MVCC(Multi-Version Concurrency Control,多版本并发控制) 是其实现高并发和高性能的核心机制,支持多个事务同时读写数据库而无需加锁阻塞。它的核心思想是通过保留数据的多个版本来避免读写冲突,从而提…...
nanodet配置文件分析
以下是针对 NanoDet-Plus-M-1.5x_416 配置文件的逐模块解析,以及调整参数的作用和影响范围: 1. 模型架构(model) Backbone(骨干网络) backbone:name: ShuffleNetV2model_size: 1.5x # 控制网络宽度&…...
【Linux网络】HTTP
应用层协议 HTTP 前置知识 我们上网的所有行为都是在做IO,(我的数据给别人,别人的数据给我)图片。视频,音频,文本等等,都是资源答复前需要先确认我要的资源在哪台服务器上(网络IP&…...
Unity中AssetBundle使用整理(一)
一、AssetBundle 概述 AssetBundle 是 Unity 用于存储和加载游戏资源(如模型、纹理、预制体、音频等)的一种文件格式。它允许开发者将游戏资源打包成独立的文件,在运行时动态加载,从而实现资源的按需加载、更新以及减小初始安装包…...
CMOS内存的地址空间在主内存空间中吗?
CMOS内存(即CMOS RAM)的地址空间不位于主内存地址空间(如0x00000-0xFFFFF)内,而是通过独立的I/O端口地址进行访问,具体如下: 1. CMOS内存的物理存储与地址机制 CMOS RAM芯片通常集成在主板…...
大模型应用中常说的Rerank是什么技术?
Rerank技术详解 一、定义与基本原理 Rerank(重排序)是一种在信息检索系统中用于优化搜索结果排序的技术,其核心目标是通过二次评估和排序候选文档,提升结果的相关性和准确性。其运作机制通常分为两阶段: 初步检索:使用传统方法(如BM25关键词匹配或Embedding向量检索)…...
Python-MCPInspector调试
Python-MCPInspector调试 使用FastMCP开发MCPServer,熟悉【McpServer编码过程】【MCPInspector调试方法】-> 可以这样理解:只编写一个McpServer,然后使用MCPInspector作为McpClient进行McpServer的调试 1-核心知识点 1-熟悉【McpServer编…...
C 语言数据结构基石:揭开数组名的面纱与计算数组大小
各类资料学习下载合集 https://pan.quark.cn/s/8c91ccb5a474 在前面的文章中,我们已经学习了 C 语言一维数组的定义和初始化。我们知道数组是用来存储一系列相同类型数据的集合,并通过下标来访问每个元素。但是,除了通过下标访问单个元素,数组名本身在 C 语言中也…...
Java高频面试之并发编程-15
hello啊,各位观众姥爷们!!!本baby今天又来报道了!哈哈哈哈哈嗝🐶 面试官:as-if-serial 是什么?单线程的程序一定是顺序执行的吗? as-if-serial 规则 定义: …...
MySQL数据库迁移SQL语句指南
MySQL数据库迁移SQL语句指南 一、基础迁移方法 1. 使用mysqldump进行全量迁移 -- 导出源数据库(在命令行执行) mysqldump -u [源用户名] -p[源密码] --single-transaction --routines --triggers --events --master-data2 [数据库名] > migration…...
Vue:生命周期钩子
深入理解 Vue 的钩子函数(生命周期函数) Vue 的钩子函数(生命周期函数)是 Vue 实例在不同阶段自动调用的函数。可以在 Vue 实例的创建、更新、销毁等阶段插入自己的逻辑。 钩子函数的作用 想象一下,Vue 实例的生命周…...
深入理解设计模式之原型模式(Prototype Pattern)
一、为什么需要原型模式? 在传统对象创建方式中,我们通过new关键字直接调用构造函数创建实例。但当遇到以下场景时: 对象初始化需要消耗大量资源(如数据库连接)需要创建的对象与现有实例高度相似希望屏蔽对象创建的复…...
K8S cgroups详解
以下是 Kubernetes 中 cgroups(Control Groups) 的详细解析,涵盖其核心原理、在 Kubernetes 中的具体应用及实践操作: 一、cgroups 基础概念 1. 是什么? cgroups 是 Linux 内核提供的 资源隔离与控制机制,…...
ARMV8 RK3399 u-boot TPL启动流程分析 --start.S
上电后运行的第一支文件:arch/arm/cpu/armv8/start.S CONFIG_ENABLE_ARM_SOC_BOOT0_HOOK1 #include <asm/arch/boot0.h> 跳转到 arch/arm/include/asm/arch-rockchip/boot0.h CONFIG_SPL_BUILD1 b 1f ROCKCHIP_EARLYRETURN_TO_BROMno TINY_FRAMEWORKno …...
【网络原理】数据链路层
目录 一. 以太网 二. 以太网数据帧 三. MAC地址 四. MTU 五. ARP协议 六. DNS 一. 以太网 以太网是一种基于有线或无线介质的计算机网络技术,定义了物理层和数据链路层的协议,用于在局域网中传输数据帧。 二. 以太网数据帧 1)目标地址 …...
保姆级教程|YOLO11改进】【卷积篇】【4】使用RFAConv感受野注意力卷积,重塑空间特征提取,助力高效提点
《------往期经典推荐------》 一、AI应用软件开发实战专栏【链接】 项目名称项目名称1.【人脸识别与管理系统开发】2.【车牌识别与自动收费管理系统开发】3.【手势识别系统开发】4.【人脸面部活体检测系统开发】5.【图片风格快速迁移软件开发】6.【人脸表表情识别系统】7.【…...
虚幻引擎5-Unreal Engine笔记之常用核心类的继承关系
虚幻引擎5-Unreal Engine笔记之常用核心类的继承关系 code review! 文章目录 虚幻引擎5-Unreal Engine笔记之常用核心类的继承关系1.UE5中常用核心类的继承关系1.1.简化版1.2.plantuml图1.3.plantuml代码1.4.关于大写字母U和A2.1.组件和类的关系,组件也是类吗&…...
力扣2680题解
记录 2025.5.9 题目: 思路: 1.计算初始或值:首先计算数组中所有元素的按位或结果 allOr,这表示在不进行任何左移操作时数组的或值。 2.计算固定或值:在计算 allOr 的同时,计算一个 fixed 值,…...
搭建基于chrony+OpenSSL(NTS协议)多层级可信时间同步服务
1、时间同步服务的层级概念 在绝大多数IT工程师实际工作过程中,针对于局域网的时间同步,遇到最多的场景是根据实际的需求,搭建一个简单的NTP时间同步服务以时间对局域网中的服务器、网络设备、个人电脑等基础设施实现同步授时功能。虽然这样…...
虚拟内存:深入解析与性能优化
文章目录 虚拟内存的概念虚拟内存的实现方式虚拟内存的页面置换算法虚拟内存的性能影响结论 在现代计算机系统中,虚拟内存(Virtual Memory)是一种至关重要的技术,它极大地提高了系统的多任务处理能力和内存利用率。本文将深入探讨…...
元数据和主数据
元数据和主数据是数据管理中的两个关键概念,其核心区别如下: 1. 定义与本质 元数据(Metadata) “关于数据的数据”,用于描述数据的属性、结构、来源、用途等上下文信息。 示例:数据库表的字段名称、数据类型…...
JavaScript事件处理全解析:从基础到最佳实践
在现代Web开发中,事件处理是构建交互式应用的核心技术。JavaScript提供了多种事件绑定方式,每种方法都有其适用场景和特点。本文将深入探讨7种主流的事件绑定方法,通过代码示例和原理分析,帮助开发者选择最合适的解决方案。 一、…...
高级数据结构:线段树
线段树概述 线段树是一种处理区间问题的优越算法,也是算法竞赛的常客。 线段树的特点是,类似于一棵二叉树,将一个序列分解成多个区间并储存在二叉树上。 例如,把区间 [ 1 , 10 ] [1,10] [1,10]作为树的根节点,然后把…...
精讲C++四大核心特性:内联函数加速原理、auto智能推导、范围for循环与空指针进阶
前引:在C语言长达三十余年的演进历程中,每一次标准更新都在试图平衡性能与抽象、控制与安全之间的微妙关系。从C11引入的"现代C"范式开始,开发者得以在保留底层控制能力的同时,借助语言特性大幅提升代码的可维护性与安全…...
用ffmpeg压缩视频参数建议
注意:代码中的斜杠\可以删除 一、基础压缩命令(画质优先) ffmpeg -i input.mp4 \-c:v libx264 -preset slow -crf 23 \ # H.264编码,平衡速度与质量-c:a aac -b:a 128k \ # 音频压缩-vf "scaleif(gt(a,16/9),1920,-2):if(…...
uni-app学习笔记(二)--vue页面代码的构成和新建页面
vue页面的构成 一.template 模板区,主要放html布局,注意,如果是开发uni-app,模板区不要放div,h1等标签了,用了在小程序和app端起不到作用。具体应该使用哪些组件,可在uni-app官网上查看:组件-…...
机器语言程序、汇编语言程序、硬件描述语言程序、编译程序、解释程序和链接程序
程序类型定义与核心特征处理对象 / 输入输出结果所属领域典型例子 / 作用机器语言程序由二进制指令(0/1 序列)构成,可被 CPU 直接执行,与硬件架构强绑定。无(直接执行)无(直接运行)低…...
智能语音助手的未来:从交互到融合
摘要 随着人工智能技术的不断进步,智能语音助手已经成为我们生活中不可或缺的一部分。从简单的语音指令到复杂的多模态交互,语音助手正在经历一场深刻的变革。本文将探讨智能语音助手的发展历程、当前的技术瓶颈以及未来的发展方向,特别是其在…...