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

嵌入式学习的第二十五天-系统编程-文件相关函数-标准I0+文件IO

一、文件的读和写

1.fwrite(读)

size_t  fread(void  *ptr,  size_t size, size_t nmemb, FILE *stream);

功能:从指定的stream流对象中获取nmemeb个大小为size字节的数据块到ptr所在的本地内存中。

参数:ptr 要存储数据的本地内存一般是数组或者结构体指针

          size 单个数据块的元数据大小。最小单元的大小

          nmemb 要获取的数据块的个数,拷贝的数据块个数。

          stream 要获取数据的源文件流对象,如果是stdin表示从键盘获取数据,如果是fp文件则表示

           从普通文件获取。

返回值:成功 小于等于nemeb的整数,表示获取的数据长度;失败 小于0,结尾 0;

#include <stdio.h>
#include<stdlib.h>
#include<string.h>typedef struct 
{char name[10];int age;char addr[50];
}PER;int	main(int argc, char **argv)
{FILE*fp = fopen("1.txt", "w");if(NULL == fp){fprintf(stderr, "fopen error\n");return 1;}PER  per;strcpy(per.name,"zhang");per.age=20;strcpy(per.addr, "科技二路");fwrite(&per,sizeof(PER),1,fp);fclose(fp);return 0;
}

2.fread

size_t fwrite(const void  *ptr,  size_t  size,size_t nmemb, FILE *stream);

功能:从ptr所在本地内存中取出nmemb个大小为size的数据块写入到stream流对应的文件流对象            中。
参数:ptr 要写的数据块地址,一般是数组或者结构体指针

          size  要写的数据块元数据大小,单位是字节

          nmemb 要写的数据块的个数

          stream 要写的目标文件流对象。如果是stdout则表示数据会写到终端屏幕显示,如果是fp的

          普通文件则会写入到文件中。

返回值:成功 小于等于nmemb 的个数。失败 <0

#include <stdio.h>
#include<stdlib.h>
#include<string.h>
#include <strings.h>typedef struct 
{char name[10];int age;char addr[50];
}PER;int	main(int argc, char **argv)
{FILE*fp = fopen("1.txt", "r");if(NULL == fp){fprintf(stderr, "fopen error\n");return 1;}PER  per;//memset(&per,0,sizeof(per));bzero(&per, sizeof(per));size_t ret = fread(&per, sizeof(per), 2, fp);if(ret>0){printf("ret:%ld %s %d %s",ret,per.name,per.age,per.addr);}fclose(fp);return 0;
}

3.cp_fwrite

#include <stdio.h>
#include<stdlib.h>
#include<string.h>
#include <strings.h>int main(int argc, char **argv)
{FILE* src = fopen("1.txt", "r");FILE* dst = fopen("2.txt", "w"); if (NULL == src || NULL == dst){fprintf(stderr, "fopen error\n");return 1;}int size = 68;char *data=(char*)malloc(size);size_t ret=fread(data, size, 1, src);if(1==ret){fwrite(data, size, 1, dst);}fclose(src);fclose(dst);free(data);return 0;
}

二、文件定位的相关函数

1.feek

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

功能:将stream流文件中的文件指针从whence位置开始偏移offset字节的长度。

参数:stream  要移动文件指针的目标文件流对象。

注意:

  • 不支持设备文件,一般用于普通文件。
  •  offset  要在文件内偏移的距离,单位字节。
  •   如果值为整数,则向文件末尾偏移
  •   如果值为负数,则向文件开头偏移
  •   whence  偏移的起始位置,由系统定义的三个宏开始。
  •    SEEK_SET  文件的开头位置 
  •   SEEK_CUR  文件的当前位置
  •   SEEK_END  文件的末尾位置

返回值:成功: 返回 0;失败:  -1;

如果从文件的指定位置向后偏移过程中已经超过了文件的当前末尾位置,则会自动以'\0'来填充文

件内容,从而形成一种被称为"空洞文件" 的特殊文件。

#include <stdio.h>int	main(int argc, char **argv)
{FILE*fp = fopen("2.txt", "r");if(NULL == fp){fprintf(stderr, "fopen error\n");return 1;}fseek(fp,5,SEEK_SET);char buf[1024]={0};fgets(buf,sizeof(buf),fp);printf("%s",buf);fclose(fp);return 0;
}

2.ftell

long ftell(FILE *stream);rewind(fp);

功能:获取当前文件流指针的具体位置,一般以文件开头到当前指针的字节数为返回值。

参数:stream 要返回指针距离的文件流对象

返回值:成功 获取到的距离长度,单位是字节;失败 -1;

#include <stdio.h>int	main(int argc, char **argv)
{FILE*fp = fopen("2.txt", "r");if(NULL == fp){fprintf(stderr, "fopen error\n");return 1;}fseek(fp,0,SEEK_END);long size=ftell(fp);printf("size:%ld\n",size);fclose(fp);return 0;
}

3.rewind

rewind()  等效于:fseek(stream,0L,SEEK_SET);

#include <stdio.h>int	main(int argc, char **argv)
{FILE*fp = fopen("2.txt", "r");if(NULL == fp){fprintf(stderr, "fopen error\n");return 1;}fseek(fp,0,SEEK_END);long size=ftell(fp);printf("size:%ld\n",size);rewind(fp);char buf[1024]={0};fgets(buf,sizeof(buf),fp);printf("%s",buf);fclose(fp); return 0;
}

三、标准I0

#include<stdio.h>int	main(int argc, char **argv)
{char buf[100]={0};fgets(buf,sizeof(buf),stdin);fputs(buf,stdout);fprintf(stderr,"%s 123",buf);return 0;
}

四、缓冲区 

        解决内存和硬件设备传输速录不匹配的问题,由此产生缓冲区。一般都是对普通文件操作是

一种有缓存的IO 在文件IO和用户程序之间,加入缓冲区,可以有效减少系统调用的效率,节省系

统IO调度资源。

1.行缓冲

        1k, terminal(终端),主要用于人机交互stdout;缓存区满或者遇到\n刷新 1024

行缓存多是关于终端的一些操作:

  • 遇到\n刷新
  • 缓存区满刷新
  • 程序结束刷新
  • 4fflush刷新  fflush(stdout);  FILE*fp     stdin stdout stderr 
#include<stdio.h>
#include<stdlib.h>
#include<unistd.h>int main(int argc, char *argv[]){printf("hello");fflush(stdout);while(1)sleep(1);//验证缓冲区的条件return 0;}

2.全缓冲

        4k,主要用于文件的读写;缓存区满刷新缓存区 4096;对普通文件进行标准IO操作,建立的缓

存一般为全缓存。

刷新条件(从缓冲区到硬盘):

  • 缓存区满刷新
  • 程序结束刷新
  • fflush来刷新  fflush(fp);
#include <stdio.h>
#include<unistd.h>
int	main(int argc, char **argv)
{FILE*fp=fopen("1.txt", "w");if(NULL==fp){fprintf(stderr, "fopen error\n");return 1;}fputs("hello",fp);fflush(fp);while(1)sleep(1);fclose(fp);return 0;
}

3.无缓冲

        0k  主要用于出错处理信息的输出 stderr ;不对数据缓存直接刷新

  • printf();==>>stdout 
  • fprintf(strerr,"fopen error %s",filename);

        界面交互 出错处理;使用gdb查看,FILE结构体,或使用写入数据测试缓冲区。缓冲区的大小

是可以设置。

#include<stdio.h>
#include<unistd.h>int main(int argc, char *argv[]){fprintf(stderr,"aaa");while(1)sleep(1);return 0;}

五、系统调用-文件IO

1.标准IO和文件IO的区别

  •         C库(标准IO)跨平台,更通用,带缓冲区
  •         文件IO,不带缓冲区;
  •         C库封装了系统调用(文件IO);

2. 文件IO的定义

    操作系统为了方便用户使用系统功能而对外提供的一组系统函数。称之为 系统调用  其中有

    个文件IO;一般都是对设备文件操作,当然也可以对普通文件进行操作。

:一个基于Linux内核的没有缓存的IO机制

3.文件IO的特性

(1) 没有缓存区

(2)操作对象不在是流,而是文件描述符

(3)文件描述符:很小的非负的整数 int   0-1023

(4)内核每打开一个文件就会获得一个文件 描述符

:每个程序在启动的时候操作系统默认为其打开
       三个描述符与流对象匹配:

  •   0 ==>STDIN_FILENO (宏)=== stdin
  •   1 ==>STDOUT_FILENO == stdout
  •   2 ==>STDERR_FILENO == stderr

4.相关函数

 1.open

#include <fcntl.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <stdio.h>int main(int argc, char **argv)
{int a = 12312;int fd = open("1.txt", O_WRONLY | O_CREAT | O_TRUNC, 0666);if (-1 == fd){fprintf(stderr, "open error\n");return 1;}return 0;
}

2.write

#include <fcntl.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <stdio.h>
#include<unistd.h>
#include<string.h>int main(int argc, char **argv)
{int fd = open("1.txt", O_WRONLY | O_CREAT | O_TRUNC, 0666);if (-1 == fd){fprintf(stderr, "open error\n");return 1;}char buf[1024]="hello";size_t ret= write(fd, buf, strlen(buf));printf("write ret :%ld\n",ret);close(fd);return 0;
}

3.read

#include <fcntl.h>
#include <stdio.h>
#include <string.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <unistd.h>int main(int argc, char **argv)
{int fd = open("1.txt", O_RDONLY);if (-1 == fd){fprintf(stderr, "open error\n");return 1;}char buf[1024] = {0};ssize_t ret=read(fd, buf, sizeof(buf));printf("readret:%ld %s\n",ret,buf);close(fd);return 0;
}

 

 注:一些小命令

1.file +文件名        产看文件类型        data默认为二进制文

2. stat +文件名        查看文件大小

3.去除换行

PER  per;

memset(&per,0,sizeof(per));

bzero(&per, sizeof(per));

4.   - 作者  组里的人  其他人   

 

5. umask 延码  与文件创建相关 权限 相减 

相关文章:

嵌入式学习的第二十五天-系统编程-文件相关函数-标准I0+文件IO

一、文件的读和写 1.fwrite&#xff08;读&#xff09; size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream); 功能&#xff1a;从指定的stream流对象中获取nmemeb个大小为size字节的数据块到ptr所在的本地内存中。 参数&#xff1a;ptr 要存储数据的本地…...

MySQL 8.0 OCP 1Z0-908 171-180题

Q171.Examine this MySQL client command to connect to a remote database: mysql-h remote-example.org-u root–protocolTCP–ssl-mode Which two–ss1-mode values will ensure that an X.509-compliant certificate will be used to establish the SSL/TLS connection to …...

实现动态增QuartzJob,通过自定义注解调用相应方法

:::tip 动态增加Quartz定时任务&#xff0c;通过自定义注解来实现具体的定时任务方法调用。 ::: 相关依赖如下 <!-- 用来动态创建 Quartz 定时任务 --> <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-start…...

Linux网络 网络基础一

1. 计算机网络背景 1.1 网络发展 独立模式&#xff1a;计算机之间相互独立。 网络互联&#xff1a;多台计算机连接在一起&#xff0c;完成数据共享。 局域网LAN&#xff1a;计算机数量更多了&#xff0c;通过交换机和路由器连接在一起。 广域网WAN&#xff1a;将远隔千里的…...

auto关键字解析

前言 在11标准之前&#xff0c;auto在c中是声明存储器类型的关键字。而在11标准中它的功能变为了类型推导。 对此&#xff0c; 在这里引入Cprimer中的原句&#xff1a; 编程时常常需要把表达式的值赋给变量&#xff0c;这就要求在声明变量的时候清楚的知道表达式的类型。然而…...

[实战]用户系统-1-基础功能完善

[实战]用户系统-1 目标响应格式化新建lib-interceptor增加res拦截器新建lib-filter完善异常处理日志处理新建lib-logger新增mongodb的model代码进度目标 我们的用户系统实战,将会实现以下功能,登录,注册,登出,修改用户信息,上传头像,响应的格式化,请求拦截,vip标识。…...

C#SQLServer数据库通用访问类

using System; using System.Collections.Generic; using System.Data; using System.Data.SqlClient; using System.Linq; using System.Text; using System.Threading.Tasks; namespace thinger.cn.ADO.NETTeach { /// /// 数据库的通用类 /// public class SQLHelperBase…...

Linux中进程控制(上)

目录 进程创建 写时拷贝 fork常用场景 fork调用失败的原因 进程终止 进程退出场景 退出码 _exit函数 exit函数 进程等待 进程等待必要性 进程等待方法 wait方法 ​编辑 waitpid方法 获取⼦进程status 阻塞和非阻塞等待 进程创建 在linux中fork函数是⾮常重要的…...

为什么服务器突然变慢?从硬件到软件的排查方法

服务器突然变慢是许多系统管理员和网站运维人员经常遇到的问题。这种情况可能会影响网站性能、用户体验以及整个业务流程。了解服务器变慢的原因并采取相应的排查措施是至关重要的。本文将介绍服务器突然变慢的可能原因&#xff0c;从硬件到软件方面逐一排查&#xff0c;并提供…...

碳交易系统九大构成

碳交易系统九大构成 碳排放权交易系统的核心要素包括覆盖范围、配额总量、配额分配、排放监测、报送与核查&#xff0c;履约考核、抵消机制、交易机制、市场监管及配套的法律法规体系。 图源《中国碳排放权交易市场&#xff1a;从原理到实践》 1、覆盖范围 碳排放权交易体系…...

第9.2讲、Tiny Decoder(带 Mask)详解与实战

自己搭建一个 Tiny Decoder&#xff08;带 Mask&#xff09;&#xff0c;参考 Transformer Encoder 的结构&#xff0c;并添加 Masked Multi-Head Self-Attention&#xff0c;它是 Decoder 的核心特征之一。 1. 背景与动机 Transformer 架构已成为自然语言处理&#xff08;NLP…...

Java接口P99含义解析

假设你开了一家奶茶店&#xff08;接口就是你的奶茶制作流水线&#xff09;&#xff0c;每天要处理100杯订单&#xff1a; &#x1f680; P99是什么&#xff1f; 平均响应时间&#xff1a;就像说"平均每杯奶茶2分钟做好"&#xff0c;但可能有10杯让客人等10分钟P99…...

【Oracle 专栏】清理用户及表空间

Oracle相关文档&#xff0c;希望互相学习&#xff0c;共同进步 风123456789&#xff5e;-CSDN博客 1.背景 今天需要清理一台服务器中之前的库&#xff0c;目前不再使用&#xff0c;以便释放空间。 如&#xff1a;清理 NH_MCRO_COLLECT 用户 2. 实验清理 2.1 查询&#xff1a;清…...

Qt功能区:Ribbon控件

控件 1. 按钮1.1 多选按钮1.2 2. 下拉列表框SARibbonComboBox2.1 简介2.2 代码实现 1. 按钮 1.1 多选按钮 软件功能&#xff1a;用于实现Category的名称居中。 SARibbonCheckBox继承于QCheckBox&#xff0c;使用方法完全相同。 SARibbonCheckBox* checkBox new SARibbonChe…...

eclipse 生成函数说明注释

在Eclipse中生成函数说明注释&#xff08;JavaDoc风格&#xff09;可以通过以下方法实现&#xff1a; 快捷键方式&#xff1a; 将光标放在函数上方输入/**后按回车键Eclipse会自动生成包含参数和返回值的注释模板 菜单方式&#xff1a; 选中函数点击菜单栏 Source > Gen…...

【Qt】QImage实战

QImage::Format_Mono, QImage::Format_RGB32, QImage::Format_ARGB32, QImage::Format_ARGB32_Premultiplied, 和 QImage::Format_RGB555 是 Qt 中不同的图像像素格式&#xff0c;它们在存储方式、颜色深度、是否支持透明通道以及适用场景上各有不同。下面是它们的详细对比&…...

tomcat知识点

1. JDK JDK是 Java 语言的软件开发工具包,JDK是整个java开发的核心,它包含JAVA工具还包括完整的 JRE(Java Runtime Environment)Java运行环境,包括了用于产品环境的各种库类,以及给开发人员使用的补充库。 JDK包含了一批用于Java开发的组件,其中包括: javac:编译器,将…...

Linux虚拟文件系统(2)

2.3 目录项-dentry 目录项&#xff0c;即 dentry&#xff0c;用来记录文件的名字、索引节点指针以及与其他目录项的关联关系。多个关联的目录项&#xff0c;就构成了文件系统的目录结构。和上一章中超级块和索引节点不同&#xff0c;目录项并不是实际存在于磁盘上的&#xff0c…...

遥感影像-语义分割数据集:光伏数据集详细介绍及训练样本处理流程

原始数据集详情 简介&#xff1a;数据集包括504张亚米级卫星图片的农业光伏数据集&#xff0c;该数据集用于亚米级影像中的农业光伏提取任务。 KeyValue卫星类型亚米级卫星覆盖区域未知场景未知分辨率0.5m数量504张单张尺寸1024*1024原始影像位深8位标签图片位深8位原始影像通…...

【Java高阶面经:微服务篇】4.大促生存法则:微服务降级实战与高可用架构设计

一、降级决策的核心逻辑:资源博弈下的生存选择 1.1 大促场景的资源极限挑战 在电商大促等极端流量场景下,系统面临的资源瓶颈呈现指数级增长: 流量特征: 峰值QPS可达日常的50倍以上(如某电商大促下单QPS从1万突增至50万)流量毛刺持续时间短(通常2-4小时),但对系统稳…...

工业物联网网关在变电站远程监控中的安全传输解决方案

一、项目背景 随着智能电网的快速发展&#xff0c;对变电站的智能化监控需求日益迫切。传统变电站采用人工巡检和就地监控的方式&#xff0c;存在效率低、实时性差、数据不准确等问题&#xff0c;难以满足现代电力系统对变电站安全、稳定、高效运行的要求。而智能变电站通过引…...

车载诊断架构 --- LIN 节点 ECU 故障设计原则

我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 钝感力的“钝”,不是木讷、迟钝,而是直面困境的韧劲和耐力,是面对外界噪音的通透淡然。 生活中有两种人,一种人格外在意别人的眼光;另一种人无论…...

编程技能:字符串函数09,strncmp

专栏导航 本节文章分别属于《Win32 学习笔记》和《MFC 学习笔记》两个专栏&#xff0c;故划分为两个专栏导航。读者可以自行选择前往哪个专栏。 &#xff08;一&#xff09;WIn32 专栏导航 上一篇&#xff1a;编程技能&#xff1a;字符串函数08&#xff0c;strcmp 回到目录…...

UML 时序图 使用案例

UML 时序图 UML 时序图 (Sequence Diagram)时序图的主要元素消息类型详解时序图示例时序图绘制步骤时序图的应用场景 UML 时序图 (Sequence Diagram) 时序图是UML(统一建模语言)中用于展示对象之间交互行为的动态视图&#xff0c;它特别强调消息的时间顺序。 时序图的主要元素…...

业务逻辑篇水平越权垂直越权未授权访问检测插件SRC 项目

# 逻辑越权 - 检测原理 - 水平 & 垂直 & 未授权 1 、水平越权&#xff1a;同级别的用户之间权限的跨越 2 、垂直越权&#xff1a;低级别用户到高级别用户权限的跨越 3 、未授权访问&#xff1a;通过无级别用户能访问到需验证应用 PHPStudy Metinfo4.0 会员后台中…...

Android开发——不同布局的定位属性 与 通用属性

目录 不同布局的定位属性1. 线性布局&#xff08;LinearLayout&#xff09;2. 相对布局&#xff08;RelativeLayout&#xff09;3. 约束布局&#xff08;ConstraintLayout&#xff09;4. 表格布局&#xff08;TableLayout&#xff09;5. 网格布局&#xff08;GridLayout&#x…...

【DB2】SQL1639N 处理

背景 测试环境21套DB2需要创建只读用户并赋予权限&#xff0c;在20套都成功的情况下&#xff0c;有一套报错了&#xff0c;具体细节为&#xff0c;赋权成功&#xff0c;但是使用被赋权的账户连接失败&#xff0c;报错如下 SQL1639N The database server was unable to perfor…...

禾纳EAT3152AP MOS电源芯片PIN TO PIN替代泰德TDM3307/2307方案

AET3152AP特性 VDS-30V,ID-40A RDS (ON)11mΩ (TYP.)VGS-10V, ID-10A RDS (ON)15mΩ (TYP.)VGS-4.5V, ID-5A 快速切换 l 低电阻 不含卤素和锑&#xff0c;符合Rohs标准 温度范围&#xff1a;-55℃~125℃ 封装&#xff1a;PDFN3030 AET3152AP应用 交换机切换 便携式/台式机中的…...

Python Day28 学习

继续聚类算法的学习 浙大疏锦行 DBSCAN聚类 Q1. 该算法的原理是什么&#xff1f; 总体而言&#xff0c;DBSCAN聚类是一种基于密度的聚类算法&#xff0c;适合发现任意形状的簇和检测噪声点 Q2. 代码实现 import numpy as np import pandas as pd from sklearn.cluster impo…...

企业网站架构部署与优化-Nginx核心功能

目录 #1.1正向代理 1.1.1编译安装Nginx 1.1.2配置正向代理 #2.1反向代理 2.1.1配置nginx七层代理 2.1.2配置nginx四层代理 1.1正向代理 正向代理&#xff08;Forward Proxy&#xff09;是一种位于客户端和目标服务器之间的服务器&#xff0c;用于代表客户端向服务器发送请求并…...

Java 多态

文章目录 多态向上转型和向下转型向上转型和重写重写和重载的区别动态绑定和静态绑定用代码来解释什么是多态向下转型 多态的优点 总结 多态 什么是多态&#xff1f;为什么要使用多态&#xff1f; 简单来说是多种形态&#xff0c;具体来说是去完成某个事情&#xff0c;当不同对…...

机器学习中的泛化能力

我们常常提到模型的泛化能力&#xff0c;什么是泛化能力呢&#xff1f; 百度百科这样解释&#xff1a;是指机器学习算法对新鲜样本的适应能力。 学习的目的是学到隐含在数据背后的规律&#xff0c;对具有同一规律的学习集以外的数据&#xff0c;经过训练的网络也能给出合适的输…...

第七章:数据存储策略与状态恢复机制实录

经过状态机、UI交互、逻辑驱动等章节的打磨&#xff0c;前端体系已经具备较强的调度与展示能力。但真正能决定组件在异常情况下能否“满血复活”的关键&#xff0c;落在了“状态恢复”这一关卡。尤其在安卓端环境复杂、网络波动频繁的前提下&#xff0c;若没有稳定的本地数据存…...

digitalworld.local: FALL靶场

digitalworld.local: FALL 来自 <digitalworld.local: FALL ~ VulnHub> 1&#xff0c;将两台虚拟机网络连接都改为NAT模式 2&#xff0c;攻击机上做namp局域网扫描发现靶机 nmap -sn 192.168.23.0/24 那么攻击机IP为192.168.23.182&#xff0c;靶场IP192.168.23.4 3&…...

Java Collection(集合) 接口

Date: 2025-05-21 20:21:32 author: lijianzhan Java 集合框架提供了一组接口和类&#xff0c;以实现各种数据结构和算法。 以下是关于 Java 集合的核心内容说明&#xff1a; /*** Java Collection Framework 说明&#xff1a;** 在 Java 中&#xff0c;集合&#xff08;Collec…...

直线型绝对值位移传感器:精准测量的科技利刃

在科技飞速发展的今天&#xff0c;精确测量成为了众多领域不可或缺的关键环节。无论是工业自动化生产线上的精细操作&#xff0c;还是航空航天领域中对零部件位移的严苛把控&#xff0c;亦或是科研实验中对微小位移变化的精准捕捉&#xff0c;都离不开一款高性能的测量设备——…...

Kotlin 极简小炒 P9 - 数组(数组的创建、数组元素的访问与修改、数组遍历、数组操作、多维数组、数组与可变参数)

Kotlin 概述 Kotlin 由 JetBrains 开发&#xff0c;是一种在 JVM&#xff08;Java 虚拟机&#xff09;上运行的静态类型编程语言 Kotlin 旨在提高开发者的编码效率和安全性&#xff0c;同时保持与 Java 的高度互操作性 Kotlin 是 Android 应用开发的首选语言&#xff0c;也可…...

Server-Driven UI:Kotlin 如何重塑动态化 Android 应用开发

以下是一篇整合详细代码示例的完整博客&#xff0c;深入探讨Kotlin在Server-Driven UI&#xff08;SDUI&#xff09;中的核心作用&#xff1a; Server-Driven UI&#xff1a;Kotlin 如何重塑动态化 Android 应用开发 1. Server-Driven UI 的核心价值 SDUI通过将UI描述与业务逻…...

基于多传感器融合的智能驾驶环境感知系统

摘要 随着自动驾驶技术的发展,单一传感器的局限性日益凸显。本文提出了一种基于多传感器(摄像头、毫米波雷达、激光雷达)融合的环境感知系统,通过深度学习算法实现车辆周围环境的精确感知。文章详细介绍了传感器标定、数据融合、目标检测与跟踪等关键技术,并提供了Python…...

JC/T 2848-2024 玻璃纤维增强石膏(GRG)装饰制品检测

玻璃纤维增强石膏装饰制品是指以玻璃纤维为主要增强材料&#xff0c;高强石膏为主要胶凝材料&#xff0c;适当掺入集料&#xff0c;外加剂的石膏装饰制品&#xff0c;GRG具有防火&#xff0c;隔音&#xff0c;被广泛应用于&#xff0c;墙板&#xff0c;装饰构件等。 JC/T 2848…...

每日算法 -【Swift 算法】寻找字符串中最长回文子串(三种经典解法全解析)

&#x1f9e9; 最长回文子串问题&#xff1a;三种经典解法全解析&#xff08;含代码注释&#xff09; 本文将系统讲解“最长回文子串”问题的三种常见解法&#xff1a;中心扩展法、动态规划、马拉车算法&#xff08;Manacher’s Algorithm&#xff09;&#xff0c;并进行对比与…...

【Java高阶面经:数据库篇】13. MySQL 并发控制秘籍:MVCC 协议与隔离级别深度解析

一、MVCC核心原理:多版本并发控制的基石 1.1 为什么需要MVCC? 在传统锁机制中,读写操作会互相阻塞,导致高并发场景下性能下降。MVCC通过多版本数据快照避免读写阻塞,实现: 读不加锁:快照读(普通SELECT)不阻塞写操作写不阻塞读:写操作生成新版本,读操作访问历史版本…...

分布式集群中的共识算法及其在时序数据库IoTDB中的应用

一、引言 在分布式集群环境中&#xff0c;为了实现海量数据的横向扩展&#xff0c;数据通常被划分为多个子集并分散存储在集群的各个节点上。为了确保数据的高可用性&#xff0c;每个数据子集都会在多个物理节点上存储副本。然而&#xff0c;这种多副本机制也带来了新的挑战&a…...

Java面试实录:从JVM调优到Spring Cloud实践

Java大厂面试&#xff1a;当严肃面试官遇上搞笑程序员 场景设定 面试官&#xff1a;拥有多年行业经验的技术专家&#xff0c;对Java及相关技术栈有着深入的理解。明哥&#xff1a;一位自认为是“水货”的程序员&#xff0c;擅长用幽默化解紧张气氛&#xff0c;但面对复杂问题…...

自定义协议与序列反序列化

目录 引子&#xff1a; 一、再谈 "协议" 二、自定义协议与网络版计算器 1.约定方案一: 2.约定方案二: 3.我们采用的协议 三、网络计算器代码 Log.hpp 日志 Makefile Socket.hpp 套接字封装 Protocol.hpp 协议 序列化反序列化 结构化数据格式规定 TcpSe…...

SAP-ABAP:ABAP异常处理与SAP现代技术融合—— 面向云原生、微服务与低代码场景的创新实践

专题三&#xff1a;ABAP异常处理与SAP现代技术融合 —— 面向云原生、微服务与低代码场景的创新实践 一、SAP技术演进与异常处理的挑战 随着SAP技术栈向云端、微服务化和低代码方向演进&#xff0c;异常处理面临新场景&#xff1a; Fiori UX敏感度&#xff1a;用户期望前端友…...

JavaScript面试题之消息队列

JavaScript消息队列详解&#xff1a;单线程的异步魔法核心 在JavaScript的单线程世界中&#xff0c;消息队列&#xff08;Message Queue&#xff09;是实现异步编程的核心机制&#xff0c;它像一位高效的调度员&#xff0c;让代码既能“一心多用”又避免卡顿。本文将深入剖析消…...

【低代码】如何使用明道云调用 Flask 视图函数并传参(POST 方法实践)

在自动化办公或业务流程管理中,明道云提供了强大的 HTTP 请求节点,可以直接调用第三方 API,包括我们常见的 Flask 服务端接口。本文将详细介绍如何使用明道云通过 POST 方法调用 Flask 视图函数并传参,包括配置要点与 Python 后端的参数接收方法。 一、场景介绍 我们希望…...

广州卓远VR受邀参加2025智能体育典型案例调研活动,并入驻国体华为运动健康联合实验室!

近日&#xff0c;“2025年智能体育典型案例调研活动”在东莞松山湖成功举办。本次调研活动由国家体育总局体育科学研究所和中国信息通信研究院联合主办&#xff0c;旨在深入贯彻中央关于培育新型消费的战略部署&#xff0c;通过激活智能健身产品消费潜力&#xff0c;加快运动健…...

【WebRTC】源码更改麦克风权限

WebRTC源码更改麦克风权限 仓库: https://webrtc.googlesource.com/src.git分支: guyl/m125节点: b09c2f83f85ec70614503d16e4c530484eb0ee4f...