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

Linux中的三类读写函数

文件IO和标准IO的区别

  1. 遵循标准
    • 文件IO遵循POSIX标准,主要在类UNIX环境下使用。
    • 标准IO遵循ANSI标准,具有更好的可移植性,可以在不同的操作系统上重新编译后运行。
  2. 可移植性
    • 文件IO的可移植性相对较差,因为它与系统底层紧密相关。
    • 标准IO的可移植性较好,因为它是C语言标准库的一部分,可以在不同的操作系统上移植使用。
  3. 操作方式
    • 文件IO通过系统调用来直接读写文件,每次操作都会触发系统调用。
    • 标准IO在内部实现了缓冲机制,通过文件流指针来操作文件,减少了系统调用的次数,提高了性能。
  4. 缓冲机制
    • 文件IO通常不带缓冲,每次读写操作都会直接与系统底层交互。
    • 标准IO带缓冲,先将数据写入缓冲区,再选择合适时机将缓冲区中的数据写入文件或从文件中读取数据到缓冲区。
  5. 访问的文件类型
    • 文件IO可以访问不同类型的文件,包括普通文件、设备文件、管道文件和套接字文件等。
    • 标准IO主要用于访问普通文件,虽然也可以重定向到其他类型的设备,但其本质还是通过文件流指针来操作文件。
  6. 使用的接口
    • 文件IO使用如open、read、write、close等系统调用接口。
    • 标准IO使用如fopen、fread、fwrite、fclose等C标准库函数接口。

Linux标准文件描述符

我们使用printf和write都可以输出正常的字符串

当我们给程序加上一条死循环的程序,就会发现用printf()不能继续执行,而用write可以继续执行。

这个原因就是因为缓存问题,见下文

缓存的概念

1.我们的程序中的缓存,就是你想从内核读写的缓存(数组)----用户空间的缓存

2.每打开一个文件,内核在内核空间中也会开辟一块缓存,这个叫内核空间的缓存

文件IO中的即是将用户空间中的缓存到内核空间的缓存中。

文件IO中的即是将内核空间的缓存到用户空间中的缓存中。

3.标准IO的库函数中也有一个缓存,这个缓存称为----库缓存

C库缓存的特点:

1.遇到\n 时,会将库缓存的内容写到内核缓存中,即调用了系统调用函数。

2.库缓存写满时,会调用系统调用函数,将库缓存内容写到内核缓存中。当写满时,即1024字节

关于上面的问题,使用write函数就是文件IO,它可以直接将用户空间(我们给文件的数据)写道内存空间中,当我们使用C库printf时,他不会直接调用而是等待写满才会系统调用函数将库缓存写道内核缓存中,为了使能够输出我们给文件的数据(hello world),我们可以在输入后面加一个\n使其成功打印(还是和正常输出略有不同)

三类读写缓存

fputs函数

属于C语言标准库函数,用于将一个字符串写入到指的头文件中,写入成功后光标会移到写入的最后一个字符

函数原型

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

  • str:指向要写入文件的字符串的指针。
  • stream:指向FILE对象的指针,该FILE对象标识了要写入数据的文件流。

fputs函数将str指向的字符串写入到stream指定的文件流中,但不包括空字符('\0')。如果写入成功,fputs返回一个非负整数;如果发生错误,则返回EOF

fgets函数

用于从指定的文件流中读取一行,使用 fgets 可以很方便地从文件或者标准输入(如键盘)读取字符串,直到遇到换行符或文件结束符,或者达到指定的字符数。

函数原型:

char *fgets(char *str, int n, FILE *stream);

  • str:指向一个字符数组的指针,用来存储读取到的字符串。
  • n:指定最多读取的字符数,包括最后的空字符(\0),因此实际上最多能读取 n-1 个字符。
  • stream:指定从哪个文件流中读取数据。

返回值

  • 成功时,返回 str
  • 失败或到达文件末尾时,返回 NULL

注意文件的权限,应该是w+,可读可写!!!!

fflush函数

用于刷新缓冲区,

  • fflush函数用于将给定的输出流或更新流stream的缓冲区中的数据强制写入到对应的文件或设备中。如果stream指向的是一个输出流或者是一个最近一次操作不是输入的更新流,则fflush会将缓冲区中未写入的数据写入到流指向的文件或设备中。
  • 如果stream是空指针(NULL),则fflush会对所有打开的文件流执行刷新操作。

函数原型

int fflush(FILE *stream);

返回值

  • 成功时,fflush返回0
  • 如果发生错误,则返回EOF,并且设置相应的错误标识符。

第一种:刷新标准输出缓冲区

fflush(stdout)确保printf函数输出的内容立即被写入到标准输出设备(通常是屏幕)上。

第二种:刷新文件流缓冲区

在这个例子中,fflush(file)确保通过fprintf函数写入到file指向的文件中的数据被立即写入到磁盘上。注意,虽然在这个例子中fflush的调用是可选的(因为关闭文件时会自动刷新缓冲区)

stderr无缓冲函数

stderr是C语言标准I/O库中的一个特殊文件流,代表标准错误输出。与标准输出stdout不同,stderr通常是无缓冲的,这意味着写入stderr的数据会立即输出,而不会被缓存在内存中。

由于stderr是无缓冲的,因此它非常适合用于输出错误信息或日志,因为这些信息通常需要立即显示在屏幕上,以便用户或开发人员能够及时发现并处理问题。

stderr与stdout的区别

stdout是标准输出流,它通常是行缓冲或全缓冲的。这意味着写入stdout的数据可能会被缓存在内存中,直到遇到换行符或缓冲区满时才真正输出。而stderr则不同,它无缓冲的特性确保了数据的即时输出。

在这个例子中,我们尝试打开一个不存在的文件。由于文件不存在,fopen函数将返回NULL,并且我们通过fprintf函数将一条错误信息写入stderr。由于stderr是无缓冲的,这条错误信息将立即显示在屏幕上。

stderr作为标准错误输出流,其无缓冲的特性使得它非常适合用于输出错误信息或日志。在使用时,我们只需要将错误信息或日志写入stderr,它们就会立即显示在屏幕上,无需担心缓冲导致的问题。

rewind

也属于C语言标准库函数,该函数的主要作用是将文件内部的位置指针(也称为文件位置指示器)重新指向一个文件流(数据流/文件)的开头

所以此函数的作用和fseek中的一个作用相同(SEEK_SET)

gets函数

函数原型

char *gets(char *s);

gets 与fgets的区别:

gets()时不能指定缓存的长度,这样就可能造成缓存越界(如若该行长于缓存长度),写到缓存之后的存储空 间中,从而产生不可预料的后果;

gets()只能从标准输入中读;

gets()与fgets()的另一个区别是:gets()并不将新行符存入缓存中, fgets 将新行符存入缓存中;

用gets容易越界,写入缓存时不会把换行符\n算进字符长度

fgets会把换行符算进字符长度,不会越界

puts函数

函数原型:

int puts(const char *str);

puts 与fputs的区别:

puts()只能向标准输出中写;

puts()与fputs()的另一个区别是: puts 输出时会添加一个新行符,fputs不会添加;

比gets多一个换行操作(\n)。

 fgetc函数

从文件中读取一个字符

int fgetc(FILE *fp)

参数:字符流

返回值:正确为读取的字符文件结尾或出错返回-1。

fputc函数

功能:写一个字符到文件中

参数:第一个参数为要写的字符,第二个参数为文件流

返回值:成功则返回输入的字符,出错返回EOF。-1

fputc有缓存,但不是行缓存函数

当读到a时已经是最后一位了,所以再次读就会按照函数规则返回-1

行缓存函数

fprintf函数

通过文件流指针来控制输出的目标,通常用于将信息写入到指定的文件或标准输出流(如stdout或stderr)中。

fprintf的原型函数为:

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

FILE *stream:指向输出流的文件指针,决定了数据将被写入哪个文件或输出流。

const char *format:格式化字符串,用于指定后续参数如何被格式化和输出。

...:可变参数列表,包含了一系列将要被格式化和输出的数据。

fprintf函数的返回值是写入的字符数(不包括终止的空字符),如果发生错误则返回负值。

第一个fprintf是写入一行文本到example.txt这个文件中

第二个fprintf是写入一行文本到标准输出中,(通常是屏幕)。

sprintf函数

sprintf是C语言中的一个字符串格式化函数,其函数声明为:

int sprintf(char *str, const char *format, ...);

  • char *str:指向一个字符数组的指针,该数组用于存储格式化后的字符串。
  • const char *format:格式化字符串,指定了如何将后续参数格式化为字符串。
  • ...:可变参数列表,包含了一系列将要被格式化和插入到str所指向字符串中的数据。

sprintf函数将格式化的数据写入到str指向的字符串中,并返回写入的字符数(不包括终止的空字符)。需要注意的是,使用sprintf时需要确保目标字符串str有足够的空间来存储格式化后的结果,否则可能会导致缓冲区溢出。

一般情况下,sprintf函数和printf函数一起使用,sprintf是用来把数据写入到字符串当中,并不起到输出作用

cat指令的实现

用fgetc和fputc

通过一个个字符的读写从而使cat查看指令实现

注:feof函数用来判断是否已经到文件结束(如果文件结束则返回非0,没有则返回0)

if(argv!=2)表示若不是只有一个命令行,则操作失败

三个判断函数

 int feof(FILE *stream);  

功能:判断是否已经到文件结束

参数:文件流

返回值:到文件结束,返回为非0,没有则返回0

   int ferror(FILE *stream); 

功能:判断是否读写错误

参数:文件流 返

回值:是读写错误,返回为非0,不是则返回0

 void clearerr(FILE *stream); 

功能:清除流错误

参数:文件流

清除错误标志(通常是通过调用clearerr函数)对程序的影响主要体现在以下几个方面:

  1. 恢复文件流状态:当文件流(如通过FILE *类型表示的文件指针)遇到错误(如读写错误)或到达文件末尾(EOF)时,相应的错误标志或EOF标志会被设置。这些标志会影响后续的输入输出操作。通过清除这些标志,clearerr函数将文件流恢复到一种“干净”的状态,使得后续操作可以不受之前错误或EOF状态的影响。

  2. 允许继续执行:在某些情况下,文件流错误可能是暂时的或者可以通过某些方式解决(例如,通过重新定位文件指针、关闭并重新打开文件或修改文件访问模式)。清除错误标志后,程序可以继续尝试执行之前失败的操作,或者执行其他依赖于文件流状态的操作。

  3. 错误处理:在清除错误标志之前,程序可能会根据错误状态执行特定的错误处理代码(如打印错误消息、释放资源、尝试恢复等)。清除错误标志后,这些错误处理代码可能不再适用,因为错误状态已经被重置。因此,程序需要适当地调整其错误处理逻辑,以考虑错误标志被清除后的情况。

  4. 文件结束(EOF)的重新评估:如果文件流遇到了EOF,并且随后调用了clearerr来清除EOF标志,那么程序可能会错误地认为文件尚未结束,并尝试继续读取数据。这可能会导致未定义的行为,如读取到无效的数据或进入无限循环。因此,在清除EOF标志之前,程序应该仔细考虑其后果,并确保这是期望的行为。

  5. 对后续操作的潜在影响:清除错误标志可能会影响到依赖于这些标志来检测文件状态变化的后续操作。例如,如果程序依赖于feof函数来检测文件是否结束,那么在清除EOF标志后,feof将不再返回真值,直到文件流再次真正到达文件末尾。

相关文章:

Linux中的三类读写函数

文件IO和标准IO的区别 遵循标准: 文件IO遵循POSIX标准,主要在类UNIX环境下使用。标准IO遵循ANSI标准,具有更好的可移植性,可以在不同的操作系统上重新编译后运行。可移植性: 文件IO的可移植性相对较差,因为…...

MATLAB基础应用精讲-【数模应用】二元Probit回归分析

目录 前言 知识储备 二元Logistic模型和Probit模型 Logistic模型的形式 Probit模型 优势比(OR) 准二项分布族 算法原理 数学模型 二元因变量和线性概率模型 probit和logit回归 logit和probit模型的估计和推断 稳健性检验 二元logit回归分析全流程 一、案例数…...

找工作准备刷题Day10 回溯算法 (卡尔41期训练营 7.24)

回溯算法今天这几个题目做过,晚上有面试,今天水一水。 第一题:Leetcode77. 组合 题目描述 解题思路 从题目示例来看,k个数是不能重合的,但是题目没有明确说明这一点。 使用回溯算法解决此问题,利用树形…...

如何有效的进行小程序的优化

如今小程序已经成为了许多开发者开展业务,提供服务的重要平台 。所以如何有效的优化小程序成为了开发者关注的首要问题,以下是一份详细的小程序优化方案: 一、目标设定 明确小程序优化的主要目标,例如提高用户留存率、增加用户活…...

FPGA-ROM IP核的使用(2)

前言 接着昨天的进行一个小的实验验证ROM IP核。 实验效果 读取上一期生成的IP核中的数据,并将其显示在数码管上。 具体流程 ROM IP核存放数据0~255,之后每隔0.2s,从0的地址开始读数据,并显示在数码管上;接着先后…...

Manticore Search(es轻量级替代)

概念: Manticore Search 是一个使用 C 开发的高性能搜索引擎,创建于 2017 年,其前身是 Sphinx Search 。Manticore Search 充分利用了 Sphinx,显着改进了它的功能,修复了数百个错误,几乎完全重写了代码并保…...

测试开发面试题---计算机网络

计算机网络模型 OSI模型:七层模型 物理层:定义电气特征,机械特征等功能规范,传递实际比特流数据链路层:物理地址寻址(MAC),帧的传输,错误检测和纠正网络层:…...

Wonder3D 论文学习

论文链接:https://arxiv.org/abs/2310.15008 代码链接:https://github.com/xxlong0/Wonder3D 解决了什么问题? 随着扩散模型的提出,3D 生成领域取得了长足进步。从单张图片重建出 3D 几何是计算机图形学和 3D 视觉的基础任务&am…...

【MySQL进阶之路 | 高级篇】显式事务和隐式事务

使用事务有两种方式:显式事务和隐式事务。 1. 显式事务 步骤1: START TRANSACTION或者BEGIN,作用是显式开启一个事务。 START TRANSACTION语句相较于BEGIN特别之处在于,后面能跟几个修饰符。比如: READ ONLY&…...

Ruby、Python、Java 开发者必备:Codigger之软件项目体检

在编程的广阔天地里,Ruby、Python 和 Java 开发者们各自凭借着独特的语言特性,构建着精彩纷呈的应用世界。然而,无论使用哪种语言,确保项目的高质量始终是至关重要的目标。而 Codigger 项目体检则成为了实现这一目标的得力助手&am…...

day05 Router、vuex、axios

配置 router和vuex需要在创建vue项目的时候,开始的时候选择Manually select features,于是就可以在下一个创建配置讯问中选择router和vuex。 axios则需要执行命令行: npm install axios -S 之后再在需要发送请求的view导入即可。 router…...

yolov5-7在opencv里跑自己的onnx模型

先把模型放在如下目录 运行如下代码 import cv2 import numpy as npclass Onnx_clf:def __init__(self, onnx:strdnn_model1/plane02.onnx, img_size640, classlist:list[plane]) -> None: func: 读取onnx模型,并进行目标识别para onnx:模型路径img_size:输出图片大小,和模…...

JVM 11 的优化指南:如何进行JVM调优,JVM调优参数有哪些

这篇文章将详细介绍如何进行JVM 11调优,包括JVM 11调优参数及其应用。此外,我将提供12个实用的代码示例,每个示例都会结合JVM启动参数和Java代码。 本文已收录于,我的技术网站 java-broke.site,有大厂完整面经&#x…...

nginx的配置和使用

一、nginx支持win和linux版本的下载,选择合适的版本进行安装 二、配置文件注解 重点的几个参数进行注释: 1、listen 要监听的服务的端口,符合这个端口的才会被监听 server_name要监听的服务地址,可能是ip,也可能是域名&#xf…...

mysql面试(六)

前言 本章节详细讲解了一下mysql执行计划相关的属性释义,以及不同sql所出现的不同效果 执行计划 一条查询语句经过mysql查询优化器的各种基于成本和各种规则优化之后,会生成一个所谓的 执行计划,这个执行计划展示了这条查询语句具体查询方…...

6.乳腺癌良性恶性预测(二分类、逻辑回归、PCA降维、SVD奇异值分解)

乳腺癌良性恶性预测 1. 特征工程1.1 特征筛选1.2 特征降维 PCA1.3 SVD奇异值分解 2. 代码2.1 逻辑回归、二分类问题2.2 特征降维 PCA2.3 SVD奇异值分解 1. 特征工程 专业上:30个人特征来自于临床一线专家,每个特征和都有医学内涵;数据上&…...

Vue3响应式高阶用法之markRaw()

Vue3响应式高阶用法之markRaw() 文章目录 Vue3响应式高阶用法之markRaw()一、简介二、使用场景2.1 避免性能开销2.2 防止意外修改 三、基本使用3.1 标记对象 四、功能详解4.1 markRaw与reactive的区别4.2 markRaw与ref的区别 五、最佳实践及案例5.1 使用大型第三方库对象5.2 静…...

免费SSL证书的安全性与获取指南

SSL证书是一种数字凭证,用于加密用户与网站之间的信息交换,以确保传输的数据不被第三方窃取。它像是一个数字版的密封印章,为数据的传输过程提供了一层保护膜。 免费的SSL证书通常由CA机构提供,它们同样可以提供基础数据的加密服…...

【CN】Argo 持续集成和交付(一)

1.简介 Argo 英 [ˈɑ:ɡəu] 美 [ˈɑrˌɡo] Kubernetes 原生工具,用于运行工作流程、管理集群以及正确执行 GitOps。 Argo 于 2020 年 3 月 26 日被 CNCF 接受为孵化成熟度级别,然后于 2022 年 12 月 6 日转移到毕业成熟度级别。 argoproj.github.i…...

Unity3D 自定义Debug双击溯源问题详解

前言 在Unity3D的开发过程中,经常需要处理各种交互和事件,其中双击事件是常见的需求之一。然而,由于Unity自带的双击检测机制并不完善,开发者往往需要自定义实现以满足特定需求。本文将详细介绍如何在Unity3D中自定义Debug双击溯…...

环境搭建-Docker搭建ClickHouse

Docker搭建ClickHouse 一、前言二、ClickHouse安装2.1 拉取镜像运行ClickHouse服务 三、测试安装3.1 进入clickhouse容器3.2 命令补充说明 四、测试连接五、设置CK的用户名密码 一、前言 本文使用的Docker使用Windows搭建,Linux版本的搭建方式一样。 Windows系统搭…...

深入理解CSS中的变量(概念篇)

CSS变量,也称为自定义属性,是一种在CSS中定义和重用值的方式。它们允许开发者在一个地方定义样式值,然后在整个样式表中引用这些值,从而提高代码的可维护性和可读性。 1、定义和使用CSS变量 CSS变量的定义和使用非常简单。变量名以两个连字符开头,变量值为任何有效的CSS…...

Prometheus 监控Tomcat等java应用的状态

5月应用服务出现问题,当别的小伙伴问我,有没有Tomcat等应用状态的监控的时候,我有点儿尴尬。所以赶紧抽空部署一下。 在配置之前,就当已经会安装jdk和tomcat了。 一、下载jmx_exporter #linux下 cd /usr/local/prometheus wget …...

c++中的斐波那契数列(Fibonacci Sequence)和背包问题(Knapsack Problem)

前言 hello,大家好啊,我是文宇,不是文字,是文宇哦。 斐波那契数列(Fibonacci Sequence) 斐波那契数列(Fibonacci Sequence)是一个经典的数学问题,其中每个数都是前两个…...

connect的非阻塞模式

本文参考:connect 函数在阻塞和非阻塞模式下的行为 一般情况下,在使用connect连接服务端时,需要等待一会儿才会函数才会返回,导致程序阻塞。为了降低阻塞的影响,我们可能会单独开个线程处理connect请求,例…...

jenkins面试题全集

1. 简述什么是Jenkins ? Jenkins是一个开源的持续集成的服务器,Jenkins开源帮助我们自动构建各类项目。 Jenkins强大的插件式,使得Jenkins可以集成很多软件,可以帮助我们持续集成我们的工程项目,对于我们测试来说&…...

Python中最好学和最实用的有哪些库和框架

Python拥有丰富的库和框架,这些库和框架覆盖了从数据处理、科学计算、Web开发到机器学习等多个领域。以下是一些值得学习的Python库和框架: 数据处理与科学计算 NumPy 描述:NumPy是Python中用于科学计算的一个库,它提供了一个强…...

文件解析的终极工具:Apache Tika

文件解析的终极工具:Apache Tika Apache Tika 简介 Apache Tika 是一个开源的、跨平台的库,用于检测、提取和解析各种类型文件的元数据。 它支持多种文件格式,包括文档、图片、音频和视频。 Tika是一个底层库,经常用于搜索引擎…...

Hadoop 重要监控指标

某安卓逆向课程打包下载(92节课) ​​https://pan.quark.cn/s/53cec8b8055a ​​ 某PC逆向课程(100节课打包下载) ​​https://pan.quark.cn/s/e38f2b24f36c​​ Hadoop 是一个开源的分布式存储和计算框架,广泛应用…...

oracle 查询锁表

oracle 查询锁表 SELECT o.object_name, s.sid, s.serial#, p.spid, s.username, s.program FROM v l o c k e d o b j e c t l J O I N d b a o b j e c t s o O N l . o b j e c t i d o . o b j e c t i d J O I N v locked_object l JOIN dba_objects o ON l.object_id …...

进程概念(三)----- fork 初识

目录 前言1. pid && ppid2. forka. 为什么 fork 要给子进程返回 0, 给父进程返回子进程的 pid ?b. 一个函数是如何做到两次的?c. fork 函数在干什么?d. 一个变量怎么做到拥有不同的内容的?e. 拓展:…...

huawei 路由 RIP 协议中三种定时器的工作原理

RFC2453 定义的三种 RIP 协议定时器 更新定时器(Update Timer):用于触发更新报文的发送,超时时间为 30 秒。老化定时器(Age Timer):如果在老化时间内没有收到邻居发送的响应报文,则…...

HTML常见标签——超链接a标签

一、a标签简介 二、a标签属性 href属性 target属性 三、a标签的作用 利用a标签进行页面跳转 利用a标签返回页面顶部以及跳转页面指定区域 利用a标签实现文件下载 一、a标签简介 <a>标签用于做跳转、导航&#xff0c;是双标签&#xff0c;记作<a></a>&#…...

Python 爬虫入门(一):从零开始学爬虫 「详细介绍」

Python 爬虫入门&#xff08;一&#xff09;&#xff1a;从零开始学爬虫 「详细介绍」 前言1.爬虫概念1.1 什么是爬虫&#xff1f;1.2 爬虫的工作原理 2. HTTP 简述2.1 什么是 HTTP&#xff1f;2.2 HTTP 请求2.3 HTTP 响应2.4 常见的 HTTP 方法 3. 网页的组成3.1 HTML3.2 CSS3.…...

Linux嵌入式学习——数据结构——概念和Seqlist

数据结构 相互之间存在一种或多种特定关系的数据元素的集合。 逻辑结构 集合&#xff0c;所有数据在同一个集合中&#xff0c;关系平等。 线性&#xff0c;数据和数据之间是一对一的关系。数组就是线性表的一种。 树&#xff0c; 一对多 图&#xff0c;多对多 …...

iOS ------ Block的相关问题

Block的定义 Block可以截获局部变量的匿名函数&#xff0c; 是将函数及其执行上下文封装起来的对象。 Block的实现 通过Clang将以下的OC代码转化为C代码 // Clang xcrun -sdk iphoneos clang -arch arm64 -rewrite-objc main.m//main.m #import <Foundation/Foundation.…...

conda issue

Conda 是一个跨平台、通用的二进制包管理器。它是 Anaconda 安装使用的包管理器&#xff0c;但它也可能用于其他系统。Conda 完全用 Python 编写&#xff0c;并且是 BSD 许可的开源。通用意味着大部分的包都可以用它进行管理&#xff0c;很像一个跨平台版本的apt或者yum&#x…...

为了解决地图引入鉴权失败的解决方案

在以下文件中需要添加相应代码 app/controller/CollageProduct.php app/view/designer_page/designer_editor.html app/view/designer_page/designer.html app/controller/Freight.php app\controller\Business.php app\controller\DesignerPage.php 只有这样才能保证htt…...

[ptrade交易实战] 第十八篇 期货查询类函数和期货设置类函数

前言 今天主要和大家分享的是期货查询类的函数和期货设置类的函数&#xff01; 具体的开通渠道可以看文章末尾&#xff01; 一、get_margin_rate—— 获取用户设置的保证金比例 保证金是期货交易中的一个重点&#xff0c;这个函数就是用来获取我们设置的保证金比例的&#…...

STM32智能家居控制系统教程

目录 引言环境准备智能家居控制系统基础代码实现&#xff1a;实现智能家居控制系统 4.1 数据采集模块 4.2 数据处理与分析模块 4.3 通信与网络系统实现 4.4 用户界面与数据可视化应用场景&#xff1a;家居监测与优化问题解决方案与优化收尾与总结 1. 引言 智能家居控制系统通…...

FPGA 中的 IOE与IO BANK

IO bank&#xff08;输入/输出bank&#xff09; 定义&#xff1a;IO bank 是 FPGA 中一组 IOE 的集合&#xff0c;通常共享相同的电源电压、时钟域和时序管理。每个 IO bank 包含多个 IOE&#xff0c;它们可以根据需要分配给不同的信号处理任务。作用&#xff1a;IO bank 的存…...

ADetailer模型+Stable Diffusion的inpainting功能是如何对遮罩区域进行修复生成的ADetailer

模型选则&#xff1a; face_yolov8n.pt 和 face_yolov8s.pt&#xff1a; 用途&#xff1a;用于人脸检测。特点&#xff1a;YOLOv8n 是轻量级版本&#xff0c;适合资源有限的设备&#xff1b;YOLOv8s 是标准版本&#xff0c;检测精度更高。 hand_yolov8n.pt&#xff1a; 用途&am…...

【博士每天一篇文献-综述】2024机器遗忘最新综述之一:An overview of machine unlearning

1 介绍 年份&#xff1a;2024 作者&#xff1a; 期刊&#xff1a; High-Confidence Computing&#xff08;2区&#xff09; 引用量&#xff1a;0 Li C, Jiang H, Chen J, et al. An overview of machine unlearning[J]. High-Confidence Computing, 2024: 100254 本文详细提供…...

【机器学习】Jupyter Notebook如何使用之基本步骤和进阶操作

引言 Jupyter Notebook 是一个交互式计算环境&#xff0c;它允许创建包含代码、文本和可视化内容的文档 文章目录 引言一、基本步骤1.1 启动 Jupyter Notebook1.2 使用 Jupyter Notebook 仪表板1.3 在笔记本中工作1.4 常用快捷键1.5 导出和分享笔记本 二、进阶用法2.1 组织笔…...

C++ | Leetcode C++题解之第279题完全平方数

题目&#xff1a; 题解&#xff1a; class Solution { public:// 判断是否为完全平方数bool isPerfectSquare(int x) {int y sqrt(x);return y * y x;}// 判断是否能表示为 4^k*(8m7)bool checkAnswer4(int x) {while (x % 4 0) {x / 4;}return x % 8 7;}int numSquares(i…...

Vue 3 响应式高阶用法之 `shallowRef()` 详解

Vue 3 响应式高阶用法之 shallowRef() 详解 文章目录 Vue 3 响应式高阶用法之 shallowRef() 详解简介一、使用场景1.1 深层嵌套对象的性能优化1.2 需要部分响应式的场景 二、基本使用2.1 引入 shallowRef2.2 定义 shallowRef 三、功能详解3.1 浅层响应式3.2 与 ref 的对比 四、…...

流量录制与回放:jvm-sandbox-repeater工具详解

在软件开发和测试过程中&#xff0c;流量录制与回放是一个非常重要的环节&#xff0c;它可以帮助开发者验证系统在特定条件下的行为是否符合预期。本文将详细介绍一款强大的流量录制回放工具——jvm-sandbox-repeater&#xff0c;以及如何利用它来提高软件测试的效率和质量。 …...

内网渗透—内网穿透工具NgrokFRPNPSSPP

前言 主要介绍一下常见的隧道搭建工具&#xff0c;以此来达到一个内网穿透的目的。简单说一下实验滴环境吧&#xff0c;kali作为攻击机&#xff0c;winserver2016作为目标靶机。 kali 192.168.145.171 winserver2016 10.236.44.127 显然它们处于两个不同的局域网&#xff0c…...

嵌入式中传感器数据处理方法

大家好,在传感器使用中,我们常常需要对传感器数据进行各种整理,让应用获得更好的效果,以下介绍几种常用的简单处理方法: 加权平滑:平滑和均衡传感器数据,减小偶然数据突变的影响。 抽取突变:去除静态和缓慢变化的数据背景,强调瞬间变化。 简单移动平均线:保留数据流最…...

生成式 AI 的发展方向,是 Chat 还是 Agent?

据《福布斯》报道&#xff0c;商业的未来是自动化。他们报告说&#xff0c;自动化的应用是不可避免的&#xff0c;“工人们即将被一个圈子和一套规则包围&#xff0c;要严格遵守&#xff0c;不能偏离。得益于聊天机器人ChatGPT于2022年11月推出所带来的强劲加持&#xff0c;202…...