C语言教程——文件处理(2)
目录
前言
一、顺序读写函数(续)
1.1fprintf
1.2fscanf
1.3fwrite
1.4fread
二、流和标准流
2.1流
2.2标准流
2.3示例
三、sscanf和sprintf
3.1sprintf
3.2sscanf
四、文件的随机读写
4.1fseek
4.2ftell
4.3rewind
五、文件读取结束的判定
5.1feof相关判断知识
六、文件缓冲区
总结
前言
昨天最顺序读写函数了解了四个,今天接着学习。
一、顺序读写函数(续)
1.1fprintf
格式化输出函数
int fprintf ( FILE * stream, const char * format, ... );
第一个参数就是文件,第二个参数就是与printf的后面的参数一样。
我们可以用代码来掩饰一下:
我们先定义一个结构体变量:
struct S {char name[20];int age;int Id;
};
之后调用fprintf函数写入文件
struct S s = { "zhangsan",14,12345 };
fprintf(df,"%s %d %d\n",s.name,s.age,s.Id);
同样还是作用于之前的目标文件。
我们打开文件就可以看见,成功的运行了。
1.2fscanf
这里就是格式化读写文件
int fscanf ( FILE * stream, const char * format, ... );
通过fscanf就可以进行访问,一样的我们把创建一个结构体来接收:
FILE* df = fopen("D:\\project\\text.txt", "r");
struct S s = {0};
fscanf(df, "%s %d %d", s.name, &(s.age), &(s.Id));
printf("%s %d %d\n", s.name, s.age, s.Id);
之后就可以通过fscanf访问之前存入的数据,我们可以打印出来,然后运行一下看看:
我们可以看见,刚才访问的数据就实现了。
1.3fwrite
接着是二进制出入文件函数
size_t fwrite ( const void * ptr, size_t size, size_t count, FILE * stream );
第一个参数就是要传入的原始数据指针(因为不知道是什么类型,所以之类用void*类型表示),第二个是这个原始数据的大小,第三个是要传入文件的个数,最后一个就是要传入的文件。
我们可以用代码来演示:
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>struct S {char name[20];int age;float score;
};int main()
{struct S s = { "李白",34,99.9 };//打开文件FILE* df = fopen("D:\\project\\text.txt", "wb");if (df == NULL){perror("fopen::");return 1;}//二进制写入fwrite(&s, sizeof(struct S), 1, df);//关闭文件fclose(df);df = NULL;return 0;
}
注意这里的方式改用了wb,因为它是为了输出数据,打开⼀个⼆进制⽂件,这里把结构体中的数据变为了二进制进行写入文件,我们可以打开文件看看:
这里发现变成了一堆不认识的东西,如果我们用二进制打开就可以看到:
这是一堆二进制,如果对二进制进行分析,就会得到一些数据。
1.4fread
二进制读取函数
size_t fread ( void * ptr, size_t size, size_t count, FILE * stream );
我们发现这里的参数和二进制写入是一模一样的,所以话不多说,我们可以直接写入代码。
这里打开文件的方式改为‘rb’。
在代码之前我们可以看一下txt文件里是什么:
我们还不认识,接下来用fread来读取后输出,看看打印出来的是什么。
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>struct S {char name[20];int age;float score;
};int main()
{struct S s = {0};//打开文件FILE* df = fopen("D:\\project\\text.txt", "rb");if (df == NULL){perror("fopen::");return 1;}//二进制读取fread(&s, sizeof(struct S), 1, df);printf("%s %d %f\n", s.name, s.age, s.score);//关闭文件fclose(df);df = NULL;return 0;
}
我们运行后:
发现是我们之前的数据,这里第三个数不一样的原因是因为我们使用的是浮点数进行输出,所以这里精度会出现偏差。
二、流和标准流
我们前面可以看到有流的概念,所以在这里再说一下流的概念。
2.1流
我们程序的数据需要输入到各种外部设备,也需要从外部设备中获得数据,不同的外部设备的输入输出操作各不相同,为了方便程序员对各种设备进行方便的操作,我们抽象出了流的概念,我们可以把流想成一条河,用的时候从里面拿,不用的时候可以还回去。
C程序针对文件、画面、键盘等的数据输入输出操作都是通过流操作的。一般情况下,我们想要向流里写数据,或者从流中读取数据,都是打开流,然后操作。
2.2标准流
C程序在启动的时候,默认启动了三个流,分别是:
stdin 标准输入流,在大多数的环境中从键盘输入,scanf函数就是从标准输入流中读取数据。
stdout 标准输出流,大多数的环境中输出至显示器界面,printf函数就是将信息输出到标准输出流中。
stderr 标准错误流,大多数环境中输出到显示器界面。
这是默认打开的三个流,我们使用scanf,printf等函数就可以直接进行输入输出函数的。
stdin、stdout、stderr三个流的类型是:FILE*,通常称为文件指针。
我们可以通过文件函数来访问流从而输入输出:
2.3示例
这里通过直接调用stdin从输入流读数据,完了显示到输出流中。
struct S {char name[20];int age;float score;
};int main()
{struct S s = { 0 };fscanf(stdin, "%s %d %f", s.name,&(s.age), &(s.score));fprintf(stdout, "%s %d %f\n", s.name, s.age, s.score);return 0;
}
运行一下我们可以看到:
这里实现了读取和输出。
我们也可以用fputc和fgetc来掩饰,十分的简单易懂:
int main()
{int c=fgetc(stdin);fputc(c, stdout);return 0;}
运行结果就是:
输入一个字符,输出一个字符
三、sscanf和sprintf
3.1sprintf
int sprintf ( char * str, const char * format, ... );
这个函数可以把后面的类型成员放到前面的字符串中。
返回值:成功后,将返回写入的字符总数。此计数不包括自动追加在字符串末尾的其他 null 字符。
失败时,将返回负数。
我们可以通过代码来理解:
struct S {char name[20];int age;float score;
};
首先我们先定义了一个结构体,然后通过后续操作把结构体中的成员按照原本的类型格式放到字符串中:
int main()
{struct S s = { "张三",39,99.99 };char arr[100] = { 0 };sprintf(arr, "%s %d %f", s.name, s.age, s.score);printf("%s\n", arr);return 0;
}
我们运行之后就可以看见:
确实按照原本的格式放到了arr字符串中。
3.2sscanf
int sscanf ( const char * s, const char * format, ...);
str是要读取的字符串,format是格式化字符串,...是根据格式化字符串提供的格式来指定要解析的数据类型和要存放数据的变量。
sscanf函数根据格式化字符串的格式,从字符串中提取数据,并将数据存入对应的变量中。它可以用来解析字符串中的数字、字符、字符串等数据,并将其存入变量中。
所以我们可以通过代码来实现一下,把上面字符串中的数据提取出来,然后放到一个新的结构体中:
int main()
{struct S s = { "张三",39,99.99 };char arr[100] = { 0 };sprintf(arr, "%s %d %f", s.name, s.age, s.score);printf("%s\n", arr);struct S s1 = {0};sscanf(arr, "%s %d %f", s1.name, &(s1.age), &(s1.score));printf("%s %d %f", s1.name, s1.age, s1.score);return 0;
}
这就实现了从字符串中提取,然后放到新的结构体中,我们打印新的结构体中的数据,就可以看见:
实现了新结构体的打印。
四、文件的随机读写
4.1fseek
根据文件指针的位置和偏移量来定位文件指针。
int fseek ( FILE * stream, long int offset, int origin );
这里第一个参数就是那个要访问的流,第二个是偏移量,第三个是选哪种方式,这里有三种方式。
Constant | Reference position |
---|---|
SEEK_SET | Beginning of file(文件开头) |
SEEK_CUR | Current position of the file pointer(当前位置) |
SEEK_END | End of file *(文件结尾) |
我们这里还用之前的文件,里面给上:
代码文件打开时,是指在a前面的。就可以通过代码来演示:
int main()
{FILE* df = fopen("D:\\project\\text.txt", "r");int ch = 0;ch=fgetc(df);printf("%c\n", ch);ch = fgetc(df);printf("%c\n", ch);ch = fgetc(df);printf("%c\n", ch);
}
这里通过fgetc来获取当前字符,函数使用一次那么指针就往后走一个。这时候运行就是:
我们如果想返回去访问之前的字符,那么就可以用fseek来实现,因为此时是在d前面,我们如果要访问下一个字符为b,如果定义的是当前位置,那么指针就需要往前2个位置,偏移量也就是-2:
printf("%c\n", ch);
fseek(df, -2, SEEK_CUR);
ch = fgetc(df);
printf("%c\n", ch);
我们通过运行就可以看到:
这就访问到了b。除了这一种方法还可以用另外两种,相对于开始b的偏移量就是1,相对于末尾b的偏移量就是-3,这样对参数进行赋值,那么就可以成功实现访问b。
但是如果我们不知道偏移量为多少,那么就可以用下面这个函数。
4.2ftell
返回当前指针位置
long int ftell ( FILE * stream );
传入文件指针,那么返回的就是一个整形,这个整形就是文件指针当前指向的位置。
这里针对之前的代码:
printf("%d\n", ftell(df));
结果显示的就是2.
4.3rewind
将指针返回到开始,起始位置。
void rewind ( FILE * stream );
这里也是针对之前的代码:
rewind(df);
printf("%d\n", ftell(df));
结果就是0.
还有很多的函数,感兴趣的可以自己看看。
五、文件读取结束的判定
5.1feof相关判断知识
在文件读取的过程中,不能使用feof函数的返回值直接用来判断文件的是否结束。而是应用于当文件结束的时候,判断文件是否遇到文件结尾结束。
1.文本文件读取是否结束:
fgetc判断结束是否为EOF,返回失败返回EOF
fgets判断结束是否为NULL,返回失败是返回一个空指针
2.二进制文件的读取结束判断:
fread判断返回值是否小于实际要读的个数
文件读取结束了,结束后想知道结束的原因:
feof返回为真的话,就说明是文件正常读取到了结束标志而结束的。
ferror返回为真的话,就说明文件在读取过程中出错了而结束的。
六、文件缓冲区
文件缓冲区是在计算机系统中用来临时存放文件数据的一块内存区域。当计算机需要读取或写入文件数据时,通常会先将数据读取到文件缓冲区中,然后再根据需要将数据从缓冲区移动到内存或磁盘中。
文件缓冲区的存在可以提高文件读写的效率。由于磁盘操作相对较慢,每次读写都需要进行磁盘寻址,而将数据读取到缓冲区中可以避免频繁的磁盘操作。当数据写入缓冲区时,系统可以选择将数据缓存一段时间后再进行实际的写入操作,从而避免频繁的磁盘写入。
文件缓冲区一般由操作系统提供,可以是内核级别的缓冲区或用户级别的缓冲区。内核级别的缓冲区由操作系统管理,对于用户程序来说是透明的;而用户级别的缓冲区由程序员自己管理,可以根据需要进行灵活的控制。
使用文件缓冲区需要注意及时刷新缓冲区和关闭文件。当数据写入缓冲区后,如果不及时刷新缓冲区,数据可能不会立即写入磁盘中;而关闭文件时,系统会自动将缓冲区中的数据写入磁盘。
总之,文件缓冲区是一种提高文件读写效率的技术,可以有效减少磁盘操作次数,提高系统性能。
ANSIC 标准采⽤“缓冲⽂件系统” 处理的数据⽂件的,所谓缓冲⽂件系统是指系统⾃动地在内存中为程序中每⼀个正在使⽤的⽂件开辟⼀块“⽂件缓冲区”。从内存向磁盘输出数据会先送到内存中的缓冲区,装满缓冲区后才⼀起送到磁盘上。如果从磁盘向计算机读⼊数据,则从磁盘⽂件中读取数据输⼊到内存缓冲区(充满缓冲区),然后再从缓冲区逐个地将数据送到程序数据区(程序变量等)。缓冲区的⼤⼩根据C编译系统决定的。
因为有缓冲区的存在,C语⾔在操作⽂件的时候,需要做刷新缓冲区或者在⽂件操作结束的时候关闭⽂件
总结
提示:这里对文章进行总结:
例如:以上就是今天要讲的内容,本文仅仅简单介绍了pandas的使用,而pandas提供了大量能使我们快速便捷地处理数据的函数和方法。
相关文章:
C语言教程——文件处理(2)
目录 前言 一、顺序读写函数(续) 1.1fprintf 1.2fscanf 1.3fwrite 1.4fread 二、流和标准流 2.1流 2.2标准流 2.3示例 三、sscanf和sprintf 3.1sprintf 3.2sscanf 四、文件的随机读写 4.1fseek 4.2ftell 4.3rewind 五、文件读取结束的…...
QT TLS initialization failed
qt使用QNetworkAccessManager下载文件(给出的链接可以在浏览器里面下载文件),下载失败, 提示“TLS initialization failed”通常是由于Qt在使用HTTPS进行文件下载时,未能正确初始化TLS(安全传输层协议&…...
金融级分布式数据库如何优化?PawSQL发布OceanBase专项调优指南
前言 OceanBase数据库作为国产自主可控的分布式数据库,在金融、电商、政务等领域得到广泛应用,优化OceanBase数据库的查询性能变得愈发重要。PawSQL为OceanBase数据库提供了全方位的SQL性能优化支持,助力用户充分发挥OceanBase数据库的性能潜…...
在Kubernets Cluster中部署LVM类型的StorageClass - 上
适用场景 看到B站技术部门的文章,是关于如何在k8s集群部署Elastic Search和Click House等IO密集型数据库应用的。 因为要充分利用NvME SSD盘的IOPS,所有数据库应用都直接调用本地SSD盘做为stateful application的 Persistent Volumes。为了可用动态的分…...
mysql 学习6 DML语句,对数据库中的表进行 增 删 改 操作
添加数据 我们对 testdatabase 数据中 的 qqemp 这张表进行 增加数据,在这张表 下 打开 命令行 query console 在 软件中就是打开命令行的意思 可以先执行 desc qqemp; 查看一下当前表的结构。 插入一条数据 到qqemp 表,插入时要每个字段都有值 insert…...
【全栈】SprintBoot+vue3迷你商城(10)
【全栈】SprintBootvue3迷你商城(10) 往期的文章都在这里啦,大家有兴趣可以看一下 后端部分: 【全栈】SprintBootvue3迷你商城(1) 【全栈】SprintBootvue3迷你商城(2) 【全栈】Sp…...
2025年01月25日Github流行趋势
项目名称:it-tools 项目地址url:https://github.com/CorentinTh/it-tools项目语言:Vue历史star数:25298今日star数:212项目维护者:CorentinTh, apps/renovate, cgoIT, sharevb, marvin-j97项目简介…...
java后端之登录认证
基础登录功能:根据提供的用户名和密码判断是否存在于数据库 LoginController.java RestController Slf4j public class LoginController {Autowiredprivate UserService userService;PostMapping("/login")public Result login(RequestBody User user) {…...
2024年AI多极竞争:技术创新与商业突破
标题:2024年AI多极竞争:技术创新与商业突破 文章信息摘要: 2024年初,人工智能领域呈现多极竞争格局。OpenAI、Google和Mistral等公司在视频生成、大语言模型架构和模型能力方面实现突破性创新。这些进展体现了AI技术在多模态能力…...
25.1.25Java复习|数组
一、数组复习: import java.util.Scanner; import java.*; public class Example1 {public static void main(String[] args){Scanner scnew Scanner(System.in);String[] namesnew String[5];//创建了一个可以容纳5个字符串的数组for(int i0;i<5;i){System.ou…...
总结8..
#include <stdio.h> // 定义结构体表示二叉树节点,包含左右子节点编号 struct node { int l; int r; } tree[100000]; // 全局变量记录二叉树最大深度,初始为0 int ans 0; // 深度优先搜索函数 // pos: 当前节点在数组中的位置,…...
谈谈对JavaScript 中的事件冒泡(Event Bubbling)和事件捕获(Event Capturing)的理解
JavaScript 中的事件冒泡(Event Bubbling)和事件捕获(Event Capturing),是浏览器在处理事件时采用的两种机制,它们在事件的传播顺序上有显著区别。这两种机制帮助开发者在事件触发时,能够以不同…...
tcp/ip协议和ip协议,tcp/ip协议 ip协议
TCP/IP协议和IP协议在网络通信中扮演着重要的角色,它们之间既有联系又有区别。以下是对两者的详细解释: TCP/IP协议 定义: TCP/IP协议(Transmission Control Protocol/Internet Protocol)是网络通信协议的一种&…...
【JavaEE进阶】Spring留言板实现
目录 🎍预期结果 🍀前端代码 🎄约定前后端交互接口 🚩需求分析 🚩接口定义 🌳实现服务器端代码 🚩lombok介绍 🚩代码实现 🌴运行测试 🎄前端代码实…...
【模型】RNN模型详解
1. 模型架构 RNN(Recurrent Neural Network)是一种具有循环结构的神经网络,它能够处理序列数据。与传统的前馈神经网络不同,RNN通过将当前时刻的输出与前一时刻的状态(或隐藏层)作为输入传递到下一个时刻&…...
软件测试压力太大了怎么办?
本文其实是知乎上针对一个问题的回答: 目前在做软件测试,主要负责的是手机端的项目测试,项目迭代很快,每次上线前验正式都会发现一些之前验测试包时候没有发现的问题,压力太大了,应该怎么调整 看过我之前其…...
ES6 类语法:JavaScript 的现代化面向对象编程
Hi,我是布兰妮甜 !ECMAScript 2015,通常被称为 ES6 或 ES2015,是 JavaScript 语言的一次重大更新。它引入了许多新特性,其中最引人注目的就是类(class)语法。尽管 JavaScript 一直以来都支持基于…...
【时时三省】(C语言基础)二进制输入输出
山不在高,有仙则名。水不在深,有龙则灵。 ----CSDN 时时三省 二进制输入 用fread可以读取fwrite输入的内容 字符串以文本的形式写进去的时候,和以二进制写进去的内容是一样的 整数和浮点型以二进制写进去是不一样的 二进制输出 fwrite 字…...
【2024年华为OD机试】(A卷,200分)- 农场施肥 (JavaScriptJava PythonC/C++)
一、问题描述 题目描述 某农场主管理了一大片果园,fields[i] 表示不同果林的面积,单位:平方米(m)。现在需要为所有的果林施肥,且必须在 n 天之内完成,否则会影响收成。小布是果林的工作人员,他每次选择一片果林进行施肥,且一片果林施肥完后当天不再进行施肥作业。 …...
k8s服务StatefulSet部署模板
java 服务StatefulSet部署模板 vim templates-test.yamlapiVersion: apps/v1 kind: StatefulSet metadata:labels:app: ${app_labels}name: ${app_name}namespace: ${app_namespace} spec:replicas: ${app_replicas_count}selector:matchLabels:app: ${app_labels}template:la…...
跟我学C++中级篇——C++初始化的方式
一、初始化的方式 在前面的初级篇中对C的初始化有过一个说明。但随着新标准的迭代以及新的方式的应用,本篇对初始化再做一次整体的总结。下面把C的初始化按照时间线进行一个划分: 1、早期初始化 这种初始化中,开发者一般在初学时都会遇到&am…...
设计模式的艺术-代理模式
结构性模式的名称、定义、学习难度和使用频率如下表所示: 1.如何理解代理模式 代理模式(Proxy Pattern):给某一个对象提供一个代理,并由代理对象控制对原对象的引用。代理模式是一种对象结构型模式。 代理模式类型较多…...
【Nginx】【SSE】【WebSocket】Nginx配置SSE,WebSocket的转发请求
Nginx 配置 SSE 和 WebSocket 转发 一、配置背景(火狐游览器不支持,建议谷歌游览器开发测试) 在使用 Django 框架开发 Web 应用时,为了实现实时通信,可以选择使用以下两种技术: SSE (Server-Sent Events…...
Gin 应用并注册 pprof
pprof 配置与使用步骤 1. 引言 通过下面操作,你可以顺利集成和使用 pprof 来收集和分析 Gin 应用的性能数据。你可以查看 CPU 使用情况、内存占用、以及其他运行时性能数据,并通过图形化界面进行深度分析。 1. 安装依赖 首先,确保安装了 gi…...
国产编辑器EverEdit - 输出窗口
1 输出窗口 1.1 应用场景 输出窗口可以显示用户执行某些操作的结果,主要包括: 查找类:查找全部,筛选等待操作,可以把查找结果打印到输出窗口中; 程序类:在执行外部程序时(如:命令窗…...
【C++探索之路】STL---string
走进C的世界,也意味着我们对编程世界的认知达到另一个维度,如果你学习过C语言,那你绝对会有不一般的收获,感受到C所带来的码云风暴~ ---------------------------------------begin--------------------------------------- 什么是…...
安装 docker 详解
在平常的开发工作中,我们经常需要部署项目。随着 Docker 容器的出现,大大提高了部署效率。Docker 容器包含了应用程序运行所需的所有依赖,避免了换环境运行问题。可以在短时间内创建、启动和停止容器,大大提高了应用的部署速度&am…...
GCC之编译(8)AR打包命令
GCC之(8)AR二进制打包命令 Author: Once Day Date: 2025年1月23日 一位热衷于Linux学习和开发的菜鸟,试图谱写一场冒险之旅,也许终点只是一场白日梦… 漫漫长路,有人对你微笑过嘛… 全系列文章请查看专栏: Linux实践记录_Once-Day的博客-C…...
自定义命令执行器:C++中命令封装的深度探索(C/C++实现)
在现代软件开发中,执行系统命令是一项常见的需求,无论是自动化脚本、系统管理工具,还是需要调用外部程序的复杂应用程序,都离不开对系统命令的调用。然而,直接使用系统调用(如 execve)虽然简单&…...
Android BitmapShader简洁实现马赛克/高斯模糊(毛玻璃),Kotlin(三)
Android BitmapShader简洁实现马赛克/高斯模糊(毛玻璃),Kotlin(三) 发现,如果把(二) Android BitmapShader简洁实现马赛克,Kotlin(二)-CSDN博客 …...
7.渲染管线——几何阶段的概述
几何阶段是渲染管线中的一个重要部分,主要负责处理3D模型的几何信息(比如顶点位置、形状、大小等),并将它们转换为屏幕上的2D图像。用通俗易懂的方式来解释: 通俗解释:几何阶段就像把3D模型“拍扁”成2D照片…...
微信小程序实现自定义日历功能
文章目录 1. 创建日历组件实现步骤:2. 代码实现过程3. 实现效果图4. 关于作者其它项目视频教程介绍 1. 创建日历组件实现步骤: 创建日历组件:首先,你需要创建一个日历组件,包含显示日期的逻辑。样式设计:为…...
Vue3 + TS 实现批量拖拽 文件夹和文件 组件封装
一、html 代码: 代码中的表格引入了 vxe-table 插件 <Tag /> 是自己封装的说明组件 表格列表这块我使用了插槽来增加扩展性,可根据自己需求,在组件外部做调整 <template><div class"dragUpload"><el-dial…...
私域流量池构建与转化策略:以开源链动2+1模式AI智能名片S2B2C商城小程序为例
摘要:随着互联网技术的快速发展,流量已成为企业竞争的关键资源。私域流量池,作为提升用户转化率和增强用户粘性的有效手段,正逐渐受到企业的广泛关注。本文旨在深入探讨私域流量池构建的目的、优势及其在实际应用中的策略…...
NFT Insider #166:Nifty Island 推出 AI Agent Playground;Ronin 推出1000万美元资助计划
引言:NFT Insider 由 NFT 收藏组织 WHALE Members、BeepCrypto 联合出品, 浓缩每周 NFT 新闻,为大家带来关于 NFT 最全面、最新鲜、最有价值的讯息。每期周报将从 NFT 市场数据,艺术新闻类,游戏新闻类,虚拟…...
Keepalived实现HAProxy高可用搭建
Keepalived实现HAProxy高可用 文章目录 Keepalived实现HAProxy高可用拓扑表格如下拓扑结构(示例)nginx安装(所有server)HAProxy安装(主备机相同)HAProxy配置(主备机相同) 注释如下内…...
HashTable, HashMap, ConcurrentHashMap 之间的区别
一、HashTable 只是将关键方法加上了锁(synchronized关键字)。 缺点:1.如果多线程访问同一个HashTable就回直接造成锁冲突。 2.HashTable的size属性也是通过 synchronized来控制同步的,效率比较低。 3.在扩容时会涉及大量的拷贝…...
如何确保Spring单例Bean在高并发环境下的安全性?
在Spring中,单例Bean就像是一个“公共的水杯”,整个应用程序中的所有线程都会共享这一个实例。在大部分情况下,这没什么问题,但如果多个线程同时想要修改这个“水杯”里的内容,就可能会出现问题了。 想象一下ÿ…...
【2024年华为OD机试】 (A卷,200分)- 工单调度策略(JavaScriptJava PythonC/C++)
一、问题描述 问题描述 华为工单调度系统需要根据不同的策略调度外线工程师(FME)修复工单。每个工单有一个修复时间要求(SLA时间),在SLA时间内完成修复的工单可以获得对应的积分,超过SLA时间完成的工单不获得积分,但必须完成该工单。目标是设计一种调度策略,使得外线…...
Linux 内核中的高效并发处理:深入理解 hlist_add_head_rcu 与 NAPI 接口
在 Linux 内核的开发中,高效处理并发任务和数据结构的管理是提升系统性能的关键。特别是在网络子系统中,处理大量数据包的任务对性能和并发性提出了极高的要求。本文将深入探讨 Linux 内核中的 hlist_add_head_rcu 函数及其在 NAPI(网络接收处理接口)中的应用,揭示这些机制…...
Alibaba Spring Cloud 六 Seata 的核心组件:RM
在 Alibaba Spring Cloud Seata 中,Resource Manager (RM) 是三大核心组件之一。它主要负责管理分支事务中的资源(如数据库、文件等),并与 Transaction Coordinator (TC) 协作完成分支事务的注册、提交和回滚。RM 是分布式事务实际…...
【Linux】列出所有连接的 WiFi 网络的密码
【Linux】列出所有连接的 WiFi 网络的密码 终端输入 sudo grep psk /etc/NetworkManager/system-connections/*会列出所有连接过 Wifi 的信息,格式类似 /etc/NetworkManager/system-connections/AAAAA.nmconnection:pskBBBBBAAAAA 是 SSID,BBBBB 是对…...
snippets router pinia axios mock
文章目录 补充VS Code 代码片段注册自定义组件vue routerpinia删除vite创建项目时默认的文件axiosmock3.0.x版本的 viteMockServe 补充 为文章做补充:https://blog.csdn.net/yavlgloss/article/details/140063387 VS Code 代码片段 为当前项目创建 Snippets {&quo…...
C#常考随笔2:函数中多次使用string的+=处理,为什么会产生大量内存垃圾(垃圾碎片),有什么好的方法可以解决?
在 C# 中,由于string类型是不可变的,当在函数中多次使用操作符来拼接字符串时,每次操作都会创建一个新的string对象,旧的对象则成为垃圾对象,这会导致大量的内存分配和垃圾回收,产生内存垃圾和碎片。 在需…...
GitLab配置免密登录和常用命令
SSH 免密登录 Windows免密登录 删除现有Key 访问目录:C:\Users\Administrator\ .ssh,删除公钥:id_rsa.pub ,私钥:id_rsa 2.生成.ssh 秘钥 运行命令生成.ssh 秘钥目录( ssh-keygen -t rsa -C xxxxxx126.…...
编码器和扩散模型
目录 摘要abstract1.自动编码器2.变分编码器(VAE)3.论文阅读3.1 介绍3.2 方法3.3 结论 4.总结参考文献 摘要 本周学习了自动编码器(AE)和变分自动编码器(VAE)的基本原理与实现,分析其在数据降维…...
three.js用粒子使用canvas生成的中文字符位图材质
three.js用粒子使用canvas生成中文字符材质 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Three.…...
数据结构与算法之堆: LeetCode 208. 实现 Trie (前缀树) (Ts版)
实现 Trie (前缀树) https://leetcode.cn/problems/implement-trie-prefix-tree/description/ 描述 Trie(发音类似 “try”)或者说 前缀树 是一种树形数据结构,用于高效地存储和检索字符串数据集中的键。这一数据结构有相当多的应用情景&am…...
在 Linux 中使用 nslookup命令
什么是 nslookup? nslookup 命令是名称服务器查找的缩写,是一种网络管理工具,用于获取域名的 IP 地址或其他 DNS 记录信息,通常用于解决 DNS 或名称解析问题 nslookup一般语法,<domain-name>是您要查询的域名,…...
【Numpy核心编程攻略:Python数据处理、分析详解与科学计算】1.1 从零搭建NumPy环境:安装指南与初体验
1. 从零搭建NumPy环境:安装指南与初体验 NumPy核心能力图解(架构图) NumPy 是 Python 中用于科学计算的核心库,它提供了高效的多维数组对象以及用于处理这些数组的各种操作。NumPy 的核心能力可以概括为以下几个方面:…...