当前位置: 首页 > news >正文

笔记四:C语言中的文件和文件操作

Faye:只要有正确的伴奏,什么都能变成好旋律。

                                                                                        ---------《寻找天堂》

目录

一、文件介绍

        1.1程序文件

       1.2 数据文件

       1.3 文件名

二、文件的打开和关闭

2.1 文件指针

2.2.文件的打开和关闭

2.3 文件读取结束的判定

三、 文件的顺序读写

 3.1 顺序读写函数介绍

四、文件的随机读写

        4.1  fseek

        whence表示偏移量的基准位置

        4.2  ftell

         4.3 rewind

 五、文本文件和二进制文件


一、文件介绍

        首先,外面先来了解什么是文件,如下是文件的定义:

        磁盘上的文件是文件。 但是在程序设计中,我们一般谈的文件有两种:程序文件、数据文件(从文件功能的角度来分类的)。             

        1.1程序文件

        包括源程序文件(后缀为.c),目标文件(windows环境后缀为.obj),可执行程序(windows环境 后缀为.exe)。

       1.2 数据文件

       文件的内容不一定是程序,而是程序运行时读写的数据,比如程序运行需要从中读取数据的文件,或者输出内容的文件。

        本文讨论的是数据文件。有时候我们会把信息输出到磁盘上,当需要的时候再从磁盘上把数据读取到内存中使用,这里处理的就是磁盘上文件。

       1.3 文件名

        一个文件要有一个唯一的文件标识,以便用户识别和引用。 文件名包含3部分:文件路径+文件名主干+文件后缀,例如: c:\code\test.txt

         为了方便起见,文件标识常被称为文件名

二、文件的打开和关闭

2.1 文件指针

        缓冲文件系统中,关键的概念是“ 文件类型指针 ,简称 文件指针
        ANSIC 标准采用 缓冲文件系统 处理的数据文件的,所谓缓冲文件系统是指系统自动地在内存中为程序 中每一个正在使用的文件开辟一块“ 文件缓冲区 。从内存向磁盘输出数据会先送到内存中的缓冲区,装 满缓冲区后才一起送到磁盘上。如果从磁盘向计算机读入数据,则从磁盘文件中读取数据输入到内存缓 冲区(充满缓冲区),然后再从缓冲区逐个地将数据送到程序数据区(程序变量等)。缓冲区的大小根 据C 编译系统决定的。
        每个被使用的文件都在内存中开辟了一个相应的文件信息区,用来存放文件的相关信息(如文件的名字,文件状态及文件当前的位置等)。这些信息是保存在一个结构体变量中的。该结构体类型是由系统 声明的,取名FILE.
        例如,VS2013 编译环境提供的 stdio.h 头文件中有以下的文件类型申明:
struct _iobuf {char *_ptr;int   _cnt;char *_base;int   _flag;int   _file;int   _charbuf;int   _bufsiz;char *_tmpfname;};
typedef struct _iobuf FILE;
        不同的C 编译器的 FILE 类型包含的内容不完全相同,但是大同小异。 每当打开一个文件的时候,系统会根据文件的情况自动创建一个FILE 结构的变量,并填充其中的信息, 使用者不必关心细节。 一般都是通过一个FILE 的指针来维护这个 FILE 结构的变量,这样使用起来更加方便。
        下面我们可以创建一个FILE* 的指针变量
FILE* pf;//文件指针变量
        定义pf 是一个指向 FILE 类型数据的指针变量。可以使 pf 指向某个文件的文件信息区(是一个结构体变量)。通过该文件信息区中的信息就能够访问该文件。也就是说,通过文件指针变量能够找到与它关联 的文件
        比如:

2.2.文件的打开和关闭

        文件在读写之前应该先打开文件,在使用结束之后应该关闭文件。 在编写程序的时候,在打开文件的同时,都会返回一个FILE*的指针变量指向该文件,也相当于建立了指针和文件的关系。 ANSIC 规定使用fopen函数来打开文件,fclose来关闭文件。

        打开方式如下:

//打开文件
FILE * fopen ( const char * filename, const char * mode );
//关闭文件
int fclose ( FILE * stream );

        下面是各种文件的打开方式列表:

  文件使用式
含义
如果指定文件不存在
“r” (只读)
为了输入数据,打开一个已经存在的文本文件
出错
“w” (只写)
为了输出数据,打开一个文本文件
建立一个新的文件
“a” (追加)
向文本文件尾添加数据
建立一个新的文件
“rb” (只读)
为了输入数据,打开一个二进制文件
出错
“wb” (只写)
为了输出数据,打开一个二进制文件
建立一个新的文件
“ab” (追加)
向一个二进制文件尾添加数据
建立一个新的文件
“r+” (读写)
为了读和写,打开一个文本文件
出错
“w+” (读写)
为了读和写,建议一个新的文件
建立一个新的文件
“a+” (读写)
打开一个文件,在文件尾进行读写
建立一个新的文件
“rb+” (读写)
为了读和写打开一个二进制文件
出错
“wb+” (读写)
为了读和写,新建一个新的二进制文件
建立一个新的文件
“ab+” (读写)
打开一个二进制文件,在文件尾进行读和写
建立一个新的文件

        通过下面一个例子演示一下:

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>int main() {FILE* pf = fopen("data4.txt","r");  //以只读的方式打开data.txtif (pf == NULL) {perror("fopen");  //若文件不存在则打印错误信息,退出return 1 ;}fclose(pf);  //打开文件,完成操作后,关闭文件pf = NULL;  //使用完后释放文件指针,避免野指针return 0;
}

        在当前文件夹下不存在data4.txt 文本文件,所以会执行if语句,打印错误信息,运行结果如下:

2.3 文件读取结束的判定

        在文件读取过程中,不能用feof 函数的返回值直接来判断文件的是否结束。
         feof 的作用是:当文件读取结束的时候,判断是读取结束的原因是否是:遇到文件尾结束。
1. 文本文件读取是否结束,判断返回值是否为 EOF fgetc ),或者 NULL fgets ) 例如:
  •         fgetc 判断是否为 EOF .
  •         fgets 判断返回值是否为 NULL .
2. 二进制文件的读取结束判断,判断返回值是否小于实际要读的个数。 例如:
  • fread判断返回值是否小于实际要读的个数。

三、 文件的顺序读写

 3.1 顺序读写函数介绍

功能
函数名
适用于
字符输入函数
fgetc
所有输入流
字符输出函数
fputc
所有输入流
文本行输入函数
fgets
所有输入流
文本行输出函数
fputs
所有输入流
格式化输入函数
fscanf
所有输入流
格式化输出函数
fprintf
所有输入流
二进制输入
fread
文件
二进制输出
fwrite
文件

         这里介绍流的概念:
流:
        我们程序的数据需要输出到各种外部设备,也需要从外部设备获取数据,不同的外部设备的输入输出操作各不相同,为了方便程序员对各种设备进行方便的操作,我们抽象出了流的概念,我们可以把流想象成流淌着字符的河。C程序针对文件、画面、键盘等的数据输入输出操作都是通过流操作的。
        一般情况下,我们要想向流里写数据,或者从流中读取数据,都是要打开流,然后操作。

标准流:
        那为什么我们从键盘输入数据,向屏幕上输出数据,并没有打开流呢 ?
        因为C语言程序在启动的时候,默认打开了3个流 :
stdin - 标准输入流,在大多数的环境中从键盘输入,scanf函数就是从标准输入流中读取数据。
stdout - 标准输出流,大多数的环境中输出至显示器界面,printf函数就是将信息输出到标准输出流中。
stderr - 标准错误流,大多数环境中输出到显示器界面。
        这是默认打开了这三个流,我们使用scanf、printf等函数就可以直接进行输入输出操作的。stdin、stdout、stderr 三个流的类型是 : FILE * ,通常称为文件指针。C语言中,就是通过 FILE * 的文件指针来维护流的各种操作的。

         下面通过三个示例,练习部分的顺序写入文件、顺序读取文件

 示例1:顺序写入文件
int main() {//打开文件FILE*pf=fopen("data1.txt", "w");  //以只写的方式打开data1.txt.txt,如果文件不存在则创建新的文件if (pf == NULL) {perror("fopen");return 1;}//顺序写入字符fputc('h', pf);fputc('e', pf);fputc('l', pf);fputc('l', pf);fputc('o', pf);fputc('w', pf);fputc('\n', pf);//关闭文件fclose(pf);pf = NULL;return 0;
}

        此时文件夹中不存在data1.txt,会创建一个新的文件,并向里面写入“hello",运行结果如下:

         下面是另外一个例子:

//示例2:顺序读取文件
int main() {//打开文件FILE*pf=fopen("data1.txt", "r");if (pf == NULL) {perror("fopen");return 1;}//..读取入文件   //fgetc函数声明: int fgetc(FILE*steam);char ch;while ((ch = fgetc(pf)) != EOF) {printf("%c\n", ch);}//关闭文件fclose(pf);pf = NULL;return 0;
}

         此时文件夹中存在data1.txt,读取里面的“hello"并进行打印,运行结果如下:

        示例三:

//示例三:行写入/读取
int main() {FILE* pf = fopen("data2.txt", "w");if (pf == NULL) {perror("fopen");return 1;}//写入一行,,不会自动换行,需手动加入fputs("abcdef\n", pf);fputs("abcdef\n", pf);fputs("abcdef\n", pf);//键盘输入fgets(arr, 10, stdin); //stdin(标准输入流)是一个默认打开的数据流,用于从键盘接收输入fputs(arr, stdout);   //stdout(标准输出流)是一个默认打开的数据流,用于将数据输出到屏幕上fclose(pf);pf = NULL;return 0;
}

四、文件的随机读写

        4.1  fseek

         根据文件指针的位置和偏移量来定位文件指针

int fseek ( FILE *stream, long offset, int whence );

        stream表示文件指针,offset表示文件指针的偏移量,whence表示偏移量的基准位置。 

        whence表示偏移量的基准位置
  • 当whence为SEEK_SET时,offset表示距离文件开头的偏移量;
  • 当whence为SEEK_CUR时,offset表示距离文件当前位置的偏移量;
  • 当whence为SEEK_END时,offset表示距离文件末尾的偏移量。
/* fseek example */
#include <stdio.h>
int main()
{FILE* pFile;pFile = fopen("example.txt", "wb");fputs("This is an apple.", pFile);fseek(pFile, 9, SEEK_SET);   //这里文件指针的位置为起始位置fputs(" sam", pFile);fclose(pFile);return 0;
}

        4.2  ftell

返回文件指针相对于起始位置的偏移量

 long int ftell ( FILE * stream );

/* ftell example : getting size of a file */
#include <stdio.h>
int main()
{FILE* pFile;long size;pFile = fopen("data1.txt", "rb");if (pFile == NULL) perror("Error opening file");else{fseek(pFile, 0, SEEK_END); //光标定位到文件末尾size = ftell(pFile);//计算文件字符个数fclose(pFile);printf("Size of myfile.txt: %ld bytes.\n", size);}return 0;
}

         4.3 rewind

让文件指针的位置回到文件的起始位置
void rewind ( FILE * stream );
/* rewind example */
#include <stdio.h>
int main()
{int n;FILE* pFile;char buffer[27];pFile = fopen("myfile.txt", "w+");for (n = 'A'; n <= 'Z'; n++)fputc(n, pFile);          //往myfile.txt 写入A~Zrewind(pFile);                //让文件指针的位置回到文件的起始位置fread(buffer, 1, 26, pFile);  //将读入的数据写入bufferfclose(pFile);		//关闭文件buffer[26] = '\0';puts(buffer);      //打印return 0;
}

 五、文本文件和二进制文件

        根据数据的组织形式,数据文件被称为文本文件 或者 二进制文件
        数据在内存中以二进制的形式存储,如果不加转换的输出到外存,就是二进制文件
        如果要求在外存上以ASCII 码的形式存储,则需要在存储前转换。以 ASCII 字符的形式存储的文件就是 本文件 。 一个数据在内存中是怎么存储的呢?
        字符一律以ASCII 形式存储,数值型数据既可以用 ASCII 形式存储,也可以使用二进制形式存储。 如有整数10000 ,如果以 ASCII 码的形式输出到磁盘,则磁盘中占用 5 个字节(每个字符一个字节),而二进制形式输出,则在磁盘上只占4 个字节
#include <stdio.h>
int main()
{int a = 10000;FILE* pf = fopen("test.txt", "wb");fwrite(&a, 4, 1, pf);//二进制的形式写到文件中fclose(pf);pf = NULL;return 0;
}

       如何将文件以二进制的形式显示:

相关文章:

笔记四:C语言中的文件和文件操作

Faye&#xff1a;只要有正确的伴奏&#xff0c;什么都能变成好旋律。 ---------《寻找天堂》 目录 一、文件介绍 1.1程序文件 1.2 数据文件 1.3 文件名 二、文件的打开和关闭 2.1 文件指针 2.2.文件的打开和关闭 2.3 文件读取结束的判定 三、 文件的顺序读写 3.1 顺序读写…...

PyTorch中的线性变换:nn.Parameter VS nn.Linear

self.weight nn.Parameter(torch.randn(in_channels, out_channels)) 和 self.linear nn.Linear(in_channels, out_channels) 并不完全一致&#xff0c;尽管它们都可以用于实现线性变换&#xff08;即全连接层&#xff09;&#xff0c;但它们的使用方式和内部实现有所不同。 …...

计算机网络(1) 网络通信基础,协议介绍,通信框架

网络结构模式 C/S-----客户端和服务器 B/S -----浏览器服务器 MAC地址 每一个网卡都拥有独一无二的48位串行号&#xff0c;也即MAC地址&#xff0c;也叫做物理地址、硬件地址或者是局域网地址 MAC地址表示为12个16进制数 如00-16-EA-AE-3C-40 &#xff08;每一个数可以用四个…...

PHP之常量

在你有别的编程语言的基础下&#xff0c;你想学习PHP&#xff0c;可能要了解的一些关于常量的信息。 PHP中的常量不用指定数据类型&#xff0c;可以使用两次方法定义。 使用const //定义常量 const B 2; echo B . PHP_EOL;使用define define("A", 1); echo A . P…...

苦瓜书盘官网,免费pdf/mobi电子书下载网站

苦瓜书盘&#xff08;kgbook&#xff09;是一个专注于提供6英寸PDF和MOBI格式电子书的免费下载平台&#xff0c;专为电子阅读器用户设计。该平台为用户提供了丰富的电子书资源&#xff0c;涵盖文学、历史、科学、技术等多个领域&#xff0c;旨在打造一个全面的电子书资源库。用…...

通过 Docker openssl 容器生成生成Nginx证书文件

使用 alpine/openssl 镜像生成证书 1. 拉取容器 [rootlocalhost ~]# docker run --rm alpine/openssl version OpenSSL 3.3.3 11 Feb 2025 (Library: OpenSSL 3.3.3 11 Feb 2025)2. 运行 alpine/openssl 生成证书&#xff08;Nginx&#xff09; # 生成1个.key私钥文件&#…...

第四十一:Axios 模型的 get ,post请求

Axios 的 get 请求方式 9.双向数据绑定 v-model - 邓瑞编程 Axios 的 post 请求方式&#xff1a;...

从零开始用react + tailwindcss + express + mongodb实现一个聊天程序(十) 收发消息

1.聊天框 首先我们完善前端的消息输入框 components下面新建MessageInput组件 import { useState,useRef } from "react" import {X,Image,Send} from "lucide-react"import { useChatStore } from "../store/useChatStore" import toast from…...

Spring Boot面试问答

1. Spring Boot 基础知识 问题 1:什么是Spring Boot?它与Spring框架有何不同? 回答: Spring Boot是基于Spring框架的一个开源框架,旨在简化新Spring应用的初始化和开发过程。与传统的Spring框架相比,Spring Boot提供了以下优势: 自动配置:根据项目依赖自动配置Spring…...

win11编译llama_cpp_python cuda128 RTX30/40/50版本

Geforce 50xx系显卡最低支持cuda128&#xff0c;llama_cpp_python官方源只有cpu版本&#xff0c;没有cuda版本&#xff0c;所以自己基于0.3.5版本源码编译一个RTX 30xx/40xx/50xx版本。 1. 前置条件 1. 访问https://developer.download.nvidia.cn/compute/cuda/12.8.0/local_…...

2025-03-07 学习记录--C/C++-C语言 截取字符串的三种方法

C语言 截取字符串 ⭐️ 方法 1&#xff1a;使用 strncpy 函数 &#x1f36d; strncpy 是C标准库中的一个函数&#xff0c;用于从源字符串中复制指定长度的字符到目标字符串中。【详情请查看我的另一篇文章】 示例代码&#xff1a;&#x1f330; #include <stdio.h> #in…...

doris: Oracle

Apache Doris JDBC Catalog 支持通过标准 JDBC 接口连接 Oracle 数据库。本文档介绍如何配置 Oracle 数据库连接。 使用须知​ 要连接到 Oracle 数据库&#xff0c;您需要 Oracle 19c, 18c, 12c, 11g 或 10g。 Oracle 数据库的 JDBC 驱动程序&#xff0c;您可以从 Maven 仓库…...

【神经网络】python实现神经网络(一)——数据集获取

一.概述 在文章【机器学习】一个例子带你了解神经网络是什么中&#xff0c;我们大致了解神经网络的正向信息传导、反向传导以及学习过程的大致流程&#xff0c;现在我们正式开始进行代码的实现&#xff0c;首先我们来实现第一步的运算过程模拟讲解&#xff1a;正向传导。本次代…...

自学嵌入式第27天------TCP和UDP,URL爬虫

1. TCP和UDP区别 **TCP&#xff08;传输控制协议&#xff09;和UDP&#xff08;用户数据报协议&#xff09;**是两种主要的传输层协议&#xff0c;它们在数据传输方式上有显著区别&#xff1a; 连接性&#xff1a; TCP是面向连接的协议&#xff0c;通信前需通过三次握手建立连…...

【虚拟化】Docker Desktop 架构简介

在阅读前您需要了解 docker 架构&#xff1a;Docker architecture WSL 技术&#xff1a;什么是 WSL 2 1.Hyper-V backend 我们知道&#xff0c;Docker Desktop 最开始的架构的后端是采用的 Hyper-V。 Docker daemon (dockerd) 运行在一个 Linux distro (LinuxKit build) 中&…...

C#程序加密与解密Demo程序示例

目录 一、加密程序功能介绍 1、加密用途 2、功能 3、程序说明 4、加密过程 5、授权的注册文件保存方式 二、加密程序使用步骤 1、步骤一 ​编辑2、步骤二 3、步骤三 4、步骤四 三、核心代码说明 1、获取电脑CPU 信息 2、获取硬盘卷标号 3、机器码生成 3、 生成…...

200W数据需要去重,如何优化?

优化去重逻辑的时间取决于多个因素&#xff0c;包括数据量、数据结构、硬件性能&#xff08;CPU、内存&#xff09;、去重算法的实现方式等。以下是对优化去重逻辑的详细分析和预期优化效果&#xff1a; 1. 去重逻辑的性能瓶颈 时间复杂度&#xff1a;使用HashSet去重的时间复…...

理解 UDP 协议与实战:Android 使用 UDP 发送和接收消息

一、UDP 协议概述 UDP&#xff08;User Datagram Protocol&#xff0c;用户数据报协议&#xff09;是一个无连接的网络通信协议。与 TCP 不同&#xff0c;UDP 不建立连接&#xff0c;不保证数据的顺序和完整性。它的特点是简单、高效&#xff0c;适用于实时性要求较高、对数据…...

7V 至 30V 的超宽 VIN 输入范围,转换效率高达 96%的WD5030

WD5030 具备 7V 至 30V 的超宽 VIN 输入范围&#xff0c;这一特性使其能够适应多种不同电压等级的供电环境&#xff0c;无论是在工业设备中常见的较高电压输入&#xff0c;还是在一些便携式设备经过初步升压后的电压&#xff0c;WD5030 都能轻松应对&#xff0c;极大地拓展了应…...

基于 LeNet 网络的 MNIST 数据集图像分类

1.LeNet的原始实验数据集MNIST 名称&#xff1a;MNIST手写数字数据集 数据类型&#xff1a;灰度图 &#xff08;一通道&#xff09; 图像大小&#xff1a;28*28 类别数&#xff1a;10类&#xff08;数字0-9&#xff09; 1.通过torchvision.datasets.MNIST下载并保存到本地…...

智能体开发:推理-行动(ReAct)思维链提示

人类在处理一个需要多个步骤才能完成任务时&#xff0c;显著特点是能够将言语推理&#xff08;内心独白&#xff09;和实际行动融合在一起&#xff0c;在面对陌生或不确定的情况时通过这种方法学习新知识&#xff0c;做出决策&#xff0c;并执行&#xff0c;从而应对复杂的任务…...

Android Native 之 文件系统挂载

一、文件系统挂载流程概述 二、文件系统挂载流程细节 1、Init启动阶段 众所周知&#xff0c;init进程为android系统的第一个进程&#xff0c;也是native世界的开端&#xff0c;要想让整个android世界能够稳定的运行&#xff0c;文件系统的创建和初始化是必不可少的&#xff…...

DirectX12(D3D12)基础教程四 入门指南

本章主要讲了些D3D12概念和理论&#xff0c;对第一、二章相关概念的补充和纠正&#xff0c;要的理解D3D12概念和理论基础&#xff0c;结合代码加深理解。 命令队列和命令列表 为了实现渲染工作的重用和多线程缩放&#xff0c; 在 D3D12 中&#xff0c;做了三个重要方面不同于 …...

android13打基础: timepicker控件

public class Ch4_TimePickerActivity extends AppCompatActivity implements TimePickerDialog.OnTimeSetListener {private TextView tv_time; // 声明一个文本视图对象private TimePicker tp_time; // 声明一个时间选择器对象Overrideprotected void onCreate(Nullable Bund…...

国产化板卡设计原理图:2330-基于FMC接口的JFM7K325T PCIeX4 3U PXIe接口卡

基于FMC接口的JFM7K325T PCIeX4 3U PXIe接口卡 一、板卡概述 本板卡基于 FPGAJFM7K325T 芯片&#xff0c;pin_to_pin兼容FPGAXC7K410T-2FFG900 &#xff0c;支持PCIeX8、64bit DDR3容量2GByte&#xff0c;HPC的FMC连接器&#xff0c;板卡支持PXIE标准协议&#xff0c;其中XJ3…...

Oracle SQL优化①——查看SQL执行计划的几种方法

前言 在日常的运维工作中&#xff0c;SQL优化是DBA的进阶技能&#xff0c;SQL优化的前提是要看SQL的执行计划是否正确&#xff0c;下面分享几种查看执行计划的方法&#xff0c;每一种方法都各有各的好处&#xff0c;可以根据特定场景选择某种方法。 一.使用AUTOTRACE查看执行…...

MySQL主从架构配合ShardingJdbc实现读写分离

文章目录 目录架构搭建读写分离pom.xmlfdy-live-user-provider 模块application.ymlfdy-db-sharding.yamlShardingJdbcDatasourceAutoInitConnectionConfig.java 目录 架构搭建 基于Docker去创建MySQL的主从架构 读写分离 pom.xml <dependency><groupId>mysql…...

MyBatis @Param 注解详解:多参数传递与正确使用方式

Param 注解主要用于 MyBatis 进行参数传递时给 SQL 语句中的参数 起别名&#xff0c;通常用于 多参数 方法&#xff0c;使参数在 XML Mapper 文件或注解 SQL 语句中更清晰易用。 1. 基本用法 在 Mapper 接口中使用 Param 来为参数命名&#xff0c;避免 MyBatis 解析时出现参数…...

【JAVA架构师成长之路】【Redis】第14集:Redis缓存穿透原理、规避、解决方案

30分钟自学教程&#xff1a;Redis缓存穿透原理与解决方案 目标 理解缓存穿透的成因及危害。掌握布隆过滤器、空值缓存等核心防御技术。能够通过代码实现请求拦截与缓存保护。学会限流降级、异步加载等应急方案。 教程内容 0~2分钟&#xff1a;缓存穿透的定义与核心原因 定义…...

mybatis报错org/apache/commons/lang3/tuple/Pair] with root cause

mybatis一对多查询配置resultMap映射报错org/apache/commons/lang3/tuple/Pair] with root cause 原因是mybatis依赖common-lang3这个包, 只需要添加common-lang3的依赖坐标即可: <dependency><groupId>org.apache.commons</groupId><artifactId>comm…...

supervisord管理Gunicorn进程,使用Nginx作为反向代理运行flask web项目

1. 安装 Gunicorn 在项目虚拟环境中安装 Gunicorn&#xff1a;2. 基本用法 配置文件 创建一个 Gunicorn 配置文件&#xff08;如 gunicorn_config.py&#xff09;&#xff0c;方便管理复杂配置。 示例 gunicorn_config.py&#xff1a; bind "0.0.0.0:8000" #…...

STM32之软件SPI

SPI传输更快&#xff0c;最大可达80MHz&#xff0c;而I2C最大只有3.4MHz。输入输出是分开的&#xff0c;可以同时输出输入。是同步全双工。仅支持一主多从。SS是从机选择线。每个从机一根。SPI无应答机制的设计。 注意&#xff1a;所有设备需要共地&#xff0c;时钟线主机输出&…...

fastjson漏洞

fastjson漏洞 fastjson工作原理攻击原理补充 例子 fastjson工作原理 fastjson的作用是将JAVA对象转换成对应的json表示形式&#xff0c;也可以反过来将json转化为对应的Java对象。fastjson使用AutoType功能进行反序列化&#xff0c;AutoType使用type标记字符的原始类型&#x…...

【YOLOv12改进trick】医学图像分割网络CMUNeXt引入YOLOv12中,增强全局上下文信息实现涨点,含创新点Python代码,方便发论文

🍋改进模块🍋:医学全卷积U型网络(CMUNeXtBlock) 🍋解决问题🍋:CMUNeXtBlock模块解决了在医学图像分割任务中,传统的卷积操作由于其局部性限制,难以有效提取全局上下文信息的问题。 🍋改进优势🍋:利用大卷积核和倒置瓶颈结构,提取全局上下文信息,同时保持卷…...

机器学习的半监督学习,弱监督学习,自监督学习

半监督学习、弱监督学习和自监督学习是机器学习中利用不同形式监督信号的三种方法&#xff0c;它们的核心区别在于标注数据的数量、质量以及监督信号的来源。以下是它们的详细对比&#xff1a; 1. 半监督学习&#xff08;Semi-Supervised Learning&#xff09; 核心特点&#x…...

K8S学习之基础十七:k8s的蓝绿部署

蓝绿部署概述 ​ 蓝绿部署中&#xff0c;一共有两套系统&#xff0c;一套是正在提供服务的系统&#xff0c;一套是准备发布的系统。两套系统都是功能完善、正在运行的系统&#xff0c;只是版本和对外服务情况不同。 ​ 开发新版本&#xff0c;要用新版本替换线上的旧版本&…...

【计算机网络】计算机网络的性能指标——时延、时延带宽积、往返时延、信道利用率

计算机网络的性能指标 导读 大家好&#xff0c;很高兴又和大家见面啦&#xff01;&#xff01;&#xff01; 在上一篇内容中我们介绍了计算机网络的三个性能指标——速率、带宽和吞吐量。用大白话来说就是&#xff1a;网速、最高网速和实时网速。 相信大家看到这三个词应该就…...

单片机如何用C语言重写vfprintf

在单片机中&#xff0c;标准库函数 vfprintf 可能不可用或占用过多资源&#xff08;如内存或代码空间&#xff09;&#xff0c;因此我们可以通过自定义实现一个轻量级的 vfprintf 函数&#xff0c;专门用于单片机的串口输出。以下是一个用 C 语言重写 vfprintf 的示例&#xff…...

1.4 单元测试与热部署

本次实战实现Spring Boot的单元测试与热部署功能。单元测试方面&#xff0c;通过JUnit和Mockito等工具&#xff0c;结合SpringBootTest注解&#xff0c;可以模拟真实环境对应用组件进行独立测试&#xff0c;验证逻辑正确性&#xff0c;提升代码质量。具体演示了HelloWorld01和H…...

使用免费IP数据库离线查询IP归属地

一、准备工作 1.下载免费IP数据库 首先&#xff0c;访问 MaxMind官网&#xff08;https://www.maxmind.com/en/home&#xff09;如果你还没有MaxMind账号&#xff0c;可以通过此链接地址&#xff08;https://www.maxmind.com/en/geolite2/signup&#xff09;进行账号注册&…...

go语言数据类型

一.Go 语言有四大显著特点&#xff1a;高效性&#xff1a;编译与运行效率高。并发性&#xff1a;原生支持并发编程。简洁性&#xff1a;编程风格简洁直接&#xff0c;代码可读性与可维护性高。跨平台性&#xff1a;程序能在 Windows、Linux、Mac OS 等多系统运行。二.go的包:pa…...

操作系统 1.3-开机页面的产生

问题引入 从打开电源开始.. 这神秘的黑色背后发生着什么?... 设计思路 伟大的数学家图灵&#xff0c;设计了这样的一个模型&#xff1a; 首先我们计算机有一个控制器&#xff0c;他可以处理一系列提供给他的动作。我们将控制器动作&#xff0c;控制器状态&#xff0c;数据…...

单例模式:确保一个类只有一个实例

目录 引言 1. 单例模式的核心思想 2. 单例模式的实现方式 2.1 饿汉式单例 2.2 懒汉式单例 2.3 线程安全的懒汉式单例 2.4 双重检查锁定&#xff08;Double-Checked Locking&#xff09; 2.5 静态内部类实现单例 2.6 枚举实现单例 3. 单例模式的使用场景 4. 单例模式…...

Ubuntu 下 nginx-1.24.0 源码分析 - ngx_modules

定义在 objs\ngx_modules.c #include <ngx_config.h> #include <ngx_core.h>extern ngx_module_t ngx_core_module; extern ngx_module_t ngx_errlog_module; extern ngx_module_t ngx_conf_module; extern ngx_module_t ngx_openssl_module; extern ngx_modul…...

vue3中 组合式~测试深入组件:事件 与 $emit()—setup() 上下文对象ctx.emit

一、语法(props) 第一步&#xff1a;在组件模板表达式中&#xff0c;可以直接用$emit()方法触发自定义事件&#xff0c; <!-- MyComponent --> <button click"$emit(someEvent)">Click Me</button> 第二步父组件可以通过 v-on (缩写为 ) 来监听…...

uniapp小程序对接腾讯IM即时通讯无ui集成(1)

首先需要完成一些准备工作。 1.注册腾讯云账号 腾讯云 注册账号后搜索im即时通讯&#xff0c;新创建一个应用。 2.uniapp创建项目 腾讯云无ui集成文档 按照文档步骤下载完这两个包后打开项目。有下图这两个包就算完成了开始工作。 3.APP目录进行引入和集成 <script…...

【YOLOv12改进trick】StarBlock引入YOLOv12,创新涨点优化,含创新点Python代码,方便发论文

🍋改进模块🍋:StarBlock 🍋解决问题🍋:采用StarBlock将输入数据映射到一个极高维的非线性特征空间,生成丰富的特征表示,使得模型在处理复杂数据时更加有效。 🍋改进优势🍋:简单粗暴的星型乘法涨点却很明显 🍋适用场景🍋:目标检测、语义分割、自然语言处理…...

机器学习之强化学习

引言 在人工智能的众多分支中&#xff0c;强化学习&#xff08;Reinforcement Learning, RL&#xff09; 因其独特的学习范式而备受关注。与依赖标注数据的监督学习或探索数据结构的无监督学习不同&#xff0c;强化学习的核心是智能体&#xff08;Agent&#xff09;通过与环境…...

天津大学02-深度解读DeepSeek:部署、使用、安全【文末附下载链接】

大模型风险与不当用例——价值观错位 大模型与人类价值观、期望之间的不一致而导致的安全问题&#xff0c;包含&#xff1a;• 社会偏见&#xff08;Social Bias&#xff09;LLM在生成文本时强化对特定社会群体的刻板印象&#xff0c;例如将穆斯林与恐怖主义关联&#xff0c;或…...

C# OPC DA获取DCS数据(提前配置DCOM)

OPC DA配置操作手册 配置完成后&#xff0c;访问远程ip&#xff0c;就能获取到服务 C#使用Interop.OPCAutomation采集OPC DA数据&#xff0c;支持订阅&#xff08;数据变化&#xff09;、单个读取、单个写入、断线重连...