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

Linux文件编程——read函数与lseek函数

一、read函数

在 Linux 文件编程中,read 函数是一个系统调用,用于从文件描述符(File Descriptor)指向的文件或设备中读取数据到缓冲区。它是 Unix/Linux 系统编程中实现底层 I/O 操作的核心函数之一。以下是 read 函数的详细使用方法和注意事项。


1. 函数原型

#include <unistd.h>ssize_t read(int fd, void *buf, size_t count);
  • 参数
    • fd:文件描述符(通过 open 或 creat 等函数获得)。
    • buf:指向存储读取数据的缓冲区的指针。
    • count:要读取的最大字节数。
  • 返回值
    • 成功时返回实际读取的字节数(可能小于 count,例如到达文件末尾时返回 0)。
    • 失败时返回 -1,并设置 errno 表示错误原因。

2. 使用方法

基本示例
#include <unistd.h>
#include <fcntl.h>
#include <stdio.h>
#include <string.h>int main() {int fd;char buf[256];ssize_t bytes_read;// 打开文件(只读模式)fd = open("example.txt", O_RDONLY);if (fd == -1) {perror("open failed");return 1;}// 读取数据bytes_read = read(fd, buf, sizeof(buf) - 1); // 保留一个字节给 '\0'if (bytes_read == -1) {perror("read failed");close(fd);return 1;}// 添加字符串终止符并打印buf[bytes_read] = '\0'; // 确保是字符串printf("Read %zd bytes: %s\n", bytes_read, buf);// 关闭文件close(fd);return 0;
}
关键步骤
  1. 打开文件
    • 使用 open 函数获取文件描述符,指定读取模式(如 O_RDONLY)。
  2. 读取数据
    • 调用 read(fd, buf, count),将数据从文件读取到 buf 中。
    • 检查返回值,确保读取成功。
  3. 处理数据
    • 如果读取的是文本数据,通常需要手动添加字符串终止符 \0
  4. 关闭文件
    • 使用 close(fd) 释放文件描述符。

3. 注意事项

(1) 返回值处理
  • 正常情况
    • 返回实际读取的字节数(可能小于 count,例如文件末尾或缓冲区不足)。
    • 返回 0 表示已到达文件末尾(EOF)。
  • 错误情况
    • 返回 -1,需检查 errno(如 EBADFEINTREIO 等)。
  • 示例代码(循环读取)
ssize_t total_read = 0;
while (total_read < count) {ssize_t bytes_read = read(fd, buf + total_read, count - total_read);if (bytes_read == -1) {if (errno == EINTR) continue; // 被信号中断,重试perror("read failed");break;} else if (bytes_read == 0) {break; // EOF}total_read += bytes_read;
}
(2) 错误处理
  • 常见错误包括:
    • EBADF:无效的文件描述符。
    • EINTR:被信号中断(需重试)。
    • EIO:底层 I/O 错误。
    • EAGAIN/EWOULDBLOCK:非阻塞模式下无数据可读(需结合 select/poll 使用)。
  • 使用 perror 或 strerror(errno) 打印错误信息。
(3) 缓冲与非阻塞 I/O
  • read 是无缓冲的(直接调用系统调用),但文件可能因缓冲设置(如 O_NONBLOCK)或设备特性而阻塞。
  • 对于非阻塞文件描述符(如套接字),read 可能返回 EAGAIN 或 EWOULDBLOCK,需结合 select/poll 使用。
(4) 性能优化
  • 批量读取(减少系统调用次数)。
  • 使用 mmap 映射文件到内存(适合大文件随机访问)。
  • 对于大文件,考虑 pread 进行分散/聚集读取(Scatter-Gather I/O)。
(5) 安全性
  • 确保缓冲区 buf 的大小足够,避免缓冲区溢出。
  • 验证文件描述符 fd 的合法性(如通过 fstat 检查)。
  • 避免读取未初始化的数据或越界访问。
(6) 信号中断
  • 如果 read 被信号中断(EINTR),通常需要重新尝试读取。
(7) 二进制 vs 文本数据
  • read 是字节级操作,不关心数据格式(文本或二进制)。
  • 读取文本时需手动处理换行符或编码问题。

4. 替代函数

  • pread:在指定偏移量处读取(无需 lseek)。
  • readv:聚集读取(将数据分散到多个缓冲区)。
  • recv:网络编程中用于套接字的读取(支持标志位)。

5. 常见问题

(1) 为什么 read 返回的字节数小于 count
  • 文件末尾(EOF)。
  • 缓冲区不足。
  • 信号中断(EINTR)。
  • 非阻塞 I/O 且无数据可读(EAGAIN/EWOULDBLOCK)。
(2) 如何确保读取完整数据?
  • 循环读取,直到满足条件(如读取到特定分隔符或固定长度)。
  • 示例(读取固定长度数据):
#define FIXED_SIZE 1024
char buf[FIXED_SIZE];
ssize_t total = 0;
while (total < FIXED_SIZE) {ssize_t ret = read(fd, buf + total, FIXED_SIZE - total);if (ret <= 0) break; // 错误或 EOFtotal += ret;
}
(3) 如何处理大文件?
  • 使用 mmap 映射文件到内存,避免频繁 read
  • 分块读取并处理。

6. 总结

read 是 Linux 文件编程的基础函数,使用时需注意:

  1. 正确处理返回值:区分 EOF、错误和部分读取。
  2. 错误处理:检查 errno 并处理信号中断。
  3. 性能优化:批量读取、避免频繁系统调用。
  4. 安全性:防止缓冲区溢出和非法访问。
  5. 非阻塞 I/O:结合 select/poll 使用。

通过合理使用 read,可以高效、可靠地完成文件 I/O 操作。

二、lseek函数的使用方法

1.函数原型

#include <unistd.h>
off_t lseek(int fd, off_t offset, int whence);
  • 参数
    • fd:文件描述符。
    • offset:偏移量(字节数),可正可负。
    • whence:基准点,取值如下:
      • SEEK_SET:从文件开头偏移。
      • SEEK_CUR:从当前位置偏移。
      • SEEK_END:从文件末尾偏移。
  • 返回值:成功时返回新的文件偏移量,失败时返回-1并设置errno

2.典型用途

随机访问文件:通过定位到文件的任意位置进行读写。例如,读取文件第1024字节处的512字节数据:

int fd = open("data.dat", O_RDONLY);
lseek(fd, 1024, SEEK_SET); // 定位到文件开头后1024字节处
char buf[512];
read(fd, buf, sizeof(buf));
close(fd);

获取文件大小:通过定位到文件末尾,再获取当前偏移量:

int fd = open("file.txt", O_RDONLY);
off_t size = lseek(fd, 0, SEEK_END); // 偏移量为文件大小
printf("File size: %lld bytes\n", (long long)size);
close(fd);

创建空洞文件:通过将偏移量移动到超过当前文件大小的位置,再写入数据,中间的区域会被视为空洞(不占用磁盘空间):

int fd = open("large_file.dat", O_CREAT | O_WRONLY, 0644);
lseek(fd, 1024 * 1024 * 1024 - 1, SEEK_SET); // 定位到1GB偏移处(最后一个字节)
write(fd, "", 1); // 写入一个字节,文件大小变为1GB
close(fd);

三、lseek函数的注意事项

  1. 返回值检查
    • 成功时返回新的文件偏移量,失败时返回-1,不能用<0判断,因为偏移量可能是负的(如SEEK_CURSEEK_END为基准且offset为负时)。
    • 必须检查返回值以确保操作成功。
  2. 文件类型限制
    • lseek仅适用于支持随机访问的文件(如普通文件),对管道、套接字等流式文件无效。例如,在管道或设备文件上调用lseek会失败,返回-1errno=ESPIPE
  3. 偏移量溢出风险
    • 在32位系统中,off_t为4字节,偏移量超过2GB可能导致溢出。64位系统中,off_t为8字节,可处理更大的文件。
  4. 并发与原子性
    • lseek是原子操作,多线程环境下无需额外同步,但读写操作仍需考虑线程安全。
  5. 文件打开模式的影响
    • 如果文件以追加模式(O_APPEND)打开,lseek设置的偏移量对write操作无效,write仍会追加到文件末尾。

四、lseekread函数的关系

  • 协同工作

lseek用于调整文件的读写位置,read用于从当前位置读取数据。例如:

int fd = open("file.txt", O_RDONLY);
lseek(fd, 100, SEEK_SET); // 定位到第100字节
char buf[10];
read(fd, buf, sizeof(buf)); // 从第100字节开始读取10字节
close(fd);
  • 文件偏移量的更新

read函数会更新文件的当前偏移量,而lseek可以显式地修改偏移量。两者共同决定了下一次读写操作的位置。

  • 性能优化

在需要随机访问文件时,lseek可以避免不必要的顺序读取,提高效率。例如,在数据库文件中,通过lseek直接定位到指定记录的起始位置进行读写操作。

  • 错误处理的关联性

如果lseek调用失败,后续的read操作可能会读取到错误的数据或返回错误。因此,必须在使用lseek后检查其返回值。

相关文章:

Linux文件编程——read函数与lseek函数

一、read函数 在 Linux 文件编程中&#xff0c;read 函数是一个系统调用&#xff0c;用于从文件描述符&#xff08;File Descriptor&#xff09;指向的文件或设备中读取数据到缓冲区。它是 Unix/Linux 系统编程中实现底层 I/O 操作的核心函数之一。以下是 read 函数的详细使用…...

STM32 变量存储

一、存储区划分与变量分类 STM32的存储空间分为Flash&#xff08;非易失性&#xff09;和RAM&#xff08;易失性&#xff09;两大区域&#xff1a; ​Flash存储器 ​代码段&#xff08;Code&#xff09;​&#xff1a;存储程序指令和常量&#xff08;如字符串、const变量&…...

解锁性能密码:Linux 环境下 Oracle 大页配置全攻略​

在 Oracle 数据库运行过程中&#xff0c;内存管理是影响其性能的关键因素之一。大页内存&#xff08;Large Pages&#xff09;作为一种优化内存使用的技术&#xff0c;能够显著提升 Oracle 数据库的运行效率。本文将深入介绍大页内存的相关概念&#xff0c;并详细阐述 Oracle 在…...

HashMap中哈希值与数组坐标的关联

目录 1、哈希值的生成与处理 2、计算桶的索引 3、哈希值总结 4、哈希冲突解决方案 4.1. 拉链法&#xff08;Separate Chaining&#xff09; 4.2. 开放寻址法&#xff08;Open Addressing&#xff09; 1、线性探测&#xff08;Linear Probing&#xff09; 2、二次探测&a…...

GBK与UTF-8编码问题(1)

1. 问题现象 我们在编译.py的python代码时&#xff0c;有时会遇到如下图这种问题。提示说“SyntaxError: (unicode error) ‘utf-8’ codec can’t decode byte 0xc4 in position 0: invalid continuation byte”&#xff0c;代码中有中文字符&#xff0c;这似乎和文件的编码方…...

大模型的实践应用41-天气预测与分析决策系统:Qwen3(32B)+langchain框架+MCP(大模型上下文协议)+RAG+传统算法

大家好,我是微学AI,今天给大家介绍一下大模型的实践应用41-Qwen3(32B)+langchain框架+MCP(大模型上下文协议)+RAG+传统算法研发天气预测与分析决策系统。本项目构建一个基于大模型Qwen3(32B)、LangChain框架、MCP协议、RAG技术以及传统算法的天气预测与分析决策系统。该系统通…...

单片机学习Day08--相邻流水灯

一&#xff0c;题目&#xff1a;同时点亮相邻的两个灯&#xff0c;并实现流水设计。 亮的是0&#xff1b; 最前面是LED8. #include <REGX51.H> typedef unsigned int u16; typedef unsigned char u8; #define led P2 void delay_10us(u16 t) { while(t--); } void mai…...

邮件营销应对高退信率的策略

一、邮件列表管理 1. 使用专业工具验证 借助如 Geeksend 邮箱验证等专业工具&#xff0c;全面清洗邮件列表&#xff0c;剔除无效、过期或格式错误的邮箱地址&#xff0c;确保邮件精准送达有效收件人&#xff0c;从而降低退信率。 2. 定期清理无效地址 将定期清理邮件列表纳入…...

无线定位之 三 SX1302 网关源码 thread_gps 线程详解

前言 笔者计划通过无线定位系列文章、系统的描述 TDOA 无线定位和混合定位相关技术知识点, 并以实践来验证此定位系统精度。 笔者从实践出发、本篇直接走读无线定位系统关键节点、网关 SX1302 源码框架,并在源码走读过程 中、着重分析与无线定位相关的PPS时间的来龙去脉、并在…...

Kubernetes控制平面组件:Kubelet详解(一):API接口层介绍

云原生学习路线导航页&#xff08;持续更新中&#xff09; kubernetes学习系列快捷链接 Kubernetes架构原则和对象设计&#xff08;一&#xff09;Kubernetes架构原则和对象设计&#xff08;二&#xff09;Kubernetes架构原则和对象设计&#xff08;三&#xff09;Kubernetes控…...

Java项目层级介绍 java 层级 层次

java 层级 层次 实体层 控制器层 数据连接层 Service : 业务处理类 Repository &#xff1a;数据库访问类 Java项目层级介绍 https://blog.csdn.net/m0_67574906/article/details/145811846 在Java项目中&#xff0c;层级结构&#xff08;Layered Architecture&#xf…...

【操作系统】零拷贝技术

1. DMA技术 DMA技术也就是直接内存访问技术。在进行I/O设备和内存的数据传输的时候&#xff0c;数据传输的工作全部交给DMA控制器&#xff0c;而不是CPU负责。 2. 传统的文件传输 传统的文件传输的代码如下&#xff1a; read(file, tmp_buf, len); write(socket, tmp_buf,…...

从零构建高性能桌面应用:GPUI Component全解析与实战指南

简介 高性能UI组件库正在重塑桌面应用开发的格局,而GPUI Component作为新兴的Rust桌面UI组件库,凭借其卓越的跨平台支持能力、GPU加速渲染和企业级功能特性,正成为构建现代化高性能桌面应用的首选。本文将从零开始,全面解析GPUI Component的核心特性、安装配置流程,并通过…...

java 中 DTO 和 VO 的核心区别

DTO 和 VO 的核心区别 特性DTO&#xff08;数据传输对象&#xff09;VO&#xff08;视图对象&#xff09;设计目的服务层与外部系统&#xff08;如前端、其他服务&#xff09;之间的数据传输为前端展示层定制数据&#xff0c;通常与 UI 强绑定数据内容可能包含业务逻辑需要的字…...

bazel迁移cmake要点及具体迁移工程示例(apollo radar)

文章目录 bazel迁移cmake要点及具体迁移工程示例迁移要点指南依赖库管理proto编译目标库及二进制文件生成项目导出runtime_data软件打包 conti_rardar完整迁移过程common_msgcommoncanbusconti_radar编译 bazel迁移cmake要点及具体迁移工程示例 迁移要点指南 迁移主要的内容包…...

跨时钟域(CDC,clock domain crossing)信号处理

参考视频&#xff1a; 数字IC&#xff0c;FPGA秋招【单bit信号的CDC跨时钟域处理手撕代码合集】_哔哩哔哩_bilibili 一、亚稳态 原因是&#xff1a;建立时间和保持时间没有保持住。然后在下图的红框里面&#xff0c;产生亚稳态。因为电路反馈机制&#xff0c;最后大概率会恢复…...

Java高频面试之并发编程-16

hello啊&#xff0c;各位观众姥爷们&#xff01;&#xff01;&#xff01;本baby今天又来报道了&#xff01;哈哈哈哈哈嗝&#x1f436; 面试官&#xff1a;volatile 实现原理是什么&#xff1f; volatile 关键字的实现原理 volatile 是 Java 中用于解决多线程环境下变量可见性…...

MyBatis 一对多关联映射在Spring Boot中的XML配置

在Spring Boot中使用MyBatis实现一对多关系时&#xff0c;可以通过XML映射文件来配置。下面我将详细介绍几种实现方式。 基本概念 一对多关系指的是一个实体对象包含多个子对象集合的情况&#xff0c;例如&#xff1a; 一个部门有多个员工一个订单有多个订单项一个博客有多个…...

Spring Boot异步任务失效的8大原因及解决方案

Spring Boot异步任务失效的8大原因及解决方案 摘要:在使用Spring Boot的@Async实现异步任务时,你是否遇到过异步不生效的问题?本文总结了8种常见的异步失效场景,并提供对应的解决方案,帮助你彻底解决异步任务失效的难题。 一、异步失效的常见场景 1. 未启用异步支持 ❌ …...

嵌入式Linux I2C驱动开发详解

文章目录 一、I2C协议的核心原理 1. I2C协议的“双线制”通信 2. I2C的地址寻址机制 二、Linux I2C驱动框架的分层设计 1. I2C核心 2. I2C适配器 3. I2C设备驱动 三、I2C驱动开发测试 一、I2C协议的核心原理 1. I2C协议的“双线制”通信 SDA&#xff08;数据线&#xff09; 和…...

基于 Spring Boot 瑞吉外卖系统开发(十二)

基于 Spring Boot 瑞吉外卖系统开发&#xff08;十二&#xff09; 菜品删除 单击“批量删除”和“删除”时&#xff0c;会携带需要删除的菜品的id以delete请求方式向“/dish”发送请求。 URLhttp://127.0.0.1:8080/dish调用方法DELETE参数ids DishController添加删除方法 …...

基于 51 单片机的 PWM 电机调速系统实现

51 单片机通过定时器来实现 PWM(脉冲宽度调制)控制,这是一种通过调整方波信号的占空比来控制输出功率的技术。下面详细介绍如何使用 51 单片机实现 PWM 控制并应用于电机调速。 1. PWM 控制原理 PWM 信号是一个周期性的方波,通过调整高电平时间(Ton)与周期(T)的比例(…...

wordpress主题分享

发布于&#xff1a;Eucalyptus-Blog 一、引言 大家对WordPress免费主题都非常感兴趣&#xff0c;但是一般收费的WordPress主题功能才多&#xff0c;其实有很多开源的免费WordPress主题都很不错&#xff0c;对于很多新建站的小伙伴&#xff0c;这些主题完全足够用了。这里就分享…...

【合新通信】无人机天线拉远RFOF(射频光纤传输)解决方案

无人机天线拉远RFOF方案通过光纤替代传统射频电缆&#xff0c;实现无人机与地面控制站之间的高保真、低损耗信号传输&#xff0c;尤其适用于高频段&#xff08;如毫米波&#xff09;、远距离或复杂电磁环境下的无人机作业场景。 核心应用场景 军事侦察与电子战 隐蔽部署&…...

视觉-语言-动作模型:概念、进展、应用与挑战(下)

25年5月来自 Cornell 大学、香港科大和希腊 U Peloponnese 的论文“Vision-Language-Action Models: Concepts, Progress, Applications and Challenges”。 视觉-语言-动作 (VLA) 模型标志着人工智能的变革性进步&#xff0c;旨在将感知、自然语言理解和具体动作统一在一个计…...

git如何将本地 dev 分支与远程 dev 分支同步

要让本地 dev 分支与远程 dev 分支完全同步&#xff08;丢弃本地多余的提交记录&#xff09;&#xff0c;可以按照以下步骤操作&#xff1a; 1. ​​获取远程最新状态​ git fetch origin dev # 拉取远程 dev 分支的最新提交&#xff0c;但不会修改本地代码 IDEA中点击fetc…...

自动化测试与功能测试详解

&#x1f345; 点击文末小卡片&#xff0c;免费获取软件测试全套资料&#xff0c;资料在手&#xff0c;涨薪更快 什么是自动化测试? 自动化测试是指利用软件测试工具自动实现全部或部分测试&#xff0c;它是软件测试的一个重要组成 部分&#xff0c;能完成许多手工测试无…...

python3数据类型

常见python3数据类型 Number&#xff08;数字&#xff09;String&#xff08;字符串&#xff09;bool&#xff08;布尔类型&#xff09;List&#xff08;列表&#xff09;Tuple&#xff08;元组&#xff09;Set&#xff08;集合&#xff09;Dictionary&#xff08;字典&#x…...

《Python星球日记》 第66天:序列建模与语言模型

名人说&#xff1a;路漫漫其修远兮&#xff0c;吾将上下而求索。—— 屈原《离骚》 创作者&#xff1a;Code_流苏(CSDN)&#xff08;一个喜欢古诗词和编程的Coder&#x1f60a;&#xff09; 目录 一、传统语言模型1. n-gram 模型基础2. n-gram 模型的局限性 二、RNN 在语言建模…...

CRM和SCRM有什么区别

CRM&#xff08;客户关系管理&#xff09;与SCRM&#xff08;社会化客户关系管理&#xff09;的主要区别在于沟通方式、客户互动、数据来源和客户参与度。CRM更侧重企业对客户信息的管理与内部流程优化&#xff0c;而SCRM强调客户主动参与&#xff0c;通过社交媒体等平台加强互…...

破解 Qt QProcess 在 Release 模式下的“卡死”之谜

在使用 Qt 的 QProcess 以调用外部 ffmpeg/ffprobe 进行音视频处理时&#xff0c;常见的工作流程是&#xff1a; gatherParams&#xff1a;通过 ffprobe 同步获取媒体文件的参数&#xff08;分辨率、采样率、声道数、码率等&#xff09;。 reencode&#xff1a;逐个文件调用 f…...

重学安卓14/15自由窗口freeform企业实战bug-学员作业

背景&#xff1a; 在aosp14版本及以后版本上&#xff0c;安卓的自由窗口部分的工具栏部分都有了较大的更新 工具栏这部分已经移到了SystemUI进程的WMShell进行统一的管理。 但是近来有学员朋友在对自由窗口进行相关的拖拽操作时候&#xff0c;有遇到这个工具栏相关的一个bug&…...

【layout组件 与 路由镶嵌】vue3 后台管理系统

前言 很多同学在第一次搭建后台管理系统时&#xff0c;会遇到一个问题&#xff0c;layout组件该放哪里&#xff1f;如何使用&#xff1f;路由又该如何设计&#xff1f; 这边会讲一下我的思考过程和最后的结果&#xff0c;大家可以参考一下&#xff0c;希望大家看完能有所收获。…...

【PXIE301-211】基于PXIE总线的16路并行LVDS数据采集、1路光纤数据收发处理平台

板卡概述 PXIE301-211是一款基于PXIE总线架构的16路并行LVDS数据采集、1路光纤收发处理平台&#xff0c;该板卡采用Xilinx的高性能Kintex 7系列FPGA XC7K325T作为实时处理器&#xff0c;实现各个接口之间的互联。板载1组64位的DDR3 SDRAM用作数据缓存。板卡具有1个FMC&#xf…...

linux-进程信号的产生

Linux中的进程信号&#xff08;signal&#xff09;是一种用于进程间通信或向进程传递异步事件通知的机制。信号是一种软中断&#xff0c;用于通知进程某个事件的发生&#xff0c;如错误、终止请求、计时器到期等。 1. 信号的基本概念 - 信号&#xff08;Signal&#xff09;&am…...

基于 Nexus 在 Dockerfile 配置 yum, conda, pip 仓库的方法和参考

在 Nexus 配置代理仓库的方法&#xff0c;可参考 pypi 的配置博客&#xff1a;https://hellogitlab.com/CI/docker/create_your_nexus_2 更多代理格式&#xff0c;参考官方文档&#xff0c;如 pypi&#xff1a;https://help.sonatype.com/en/pypi-repositories.html 配置 yum…...

精品可编辑PPT | 全面风险管理信息系统项目建设风控一体化标准方案

这份文档是一份全面风险管理信息系统项目建设风控一体化标准方案&#xff0c;涵盖了业务架构、功能方案、系统技术架构设计、项目实施及服务等多个方面的详细内容。方案旨在通过信息化手段提升企业全面风险管理工作水平&#xff0c;促进风险管理落地和内部控制规范化&#xff0…...

Redis集群安装

Redis集群安装 1.集群介绍 首先要了解&#xff0c;Redis的高可用机制。 2个master节点&#xff0c;挂掉1个&#xff0c;1不过半&#xff0c;则集群宕机&#xff0c;不可用&#xff0c;容错率为0&#xff1b;3个master节点&#xff0c;挂掉1个&#xff0c;2>1&#xff0c;…...

下载知网外文文献全文的方法

知网和一些外文数据库机构是合作关系&#xff0c;因知网没有订购外文文献全文&#xff0c;所以可以搜到外文文献但不能下载全文&#xff0c;基本提供的都是外文文献摘要。本文就实例演示一下获取知网外文文献全文的方法步骤。 例如下面这篇知网外文文献&#xff0c;该文献被收…...

解决IDEA无法运行git的问题

之前git一直没有问题&#xff0c;今天打开就提示我安装git&#xff0c;自然用git去提交新项目也会遇到问题。 我出现问题的原因是&#xff1a;git路径缺失 文件->设置->git 发现git的路径为空&#xff0c;按照实际位置填写即可...

基于Qt6 + MuPDF在 Arm IMX6ULL运行的PDF浏览器——MuPDF Adapter文档

项目地址&#xff1a;总项目Charliechen114514/CCIMXDesktop: This is a Qt Written Desktop with base GUI Utilities 本子项目地址&#xff1a;CCIMXDesktop/extern_app/pdfReader at main Charliechen114514/CCIMXDesktop 前言 这个部分说的是Mupdf_adaper下的文档的工…...

Ubuntu20.04 搭建Kubernetes 1.28版本集群

环境依赖 以下操作,无特殊说明,所有节点都需要执行 安装 ssh 服务安装 openssh-server复制代码 sudo apt-get install openssh-server修改配置文件复制代码 vim /etc/ssh/sshd_config找到配置项 复制代码 LoginGraceTime 120 PermitRootLogin prohibit-password StrictModes…...

操作系统和数据库账号密码的安全管理、使用,安当SMS凭据管理系统

引言&#xff1a;密码管理困局下的破局之道 在数字化转型的深水区&#xff0c;企业正面临前所未有的密码管理挑战。某跨国制造企业因数据库密码泄露导致核心工艺参数外泄&#xff0c;某三甲医院因运维账号滥用引发百万级医疗数据泄露事件&#xff0c;这些真实案例揭示着传统密…...

Java设计模式之代理模式:从入门到精通(保姆级教程)

1. 代理模式概述 代理模式(Proxy Pattern)是一种结构型设计模式,它为其他对象提供一种代理以控制对这个对象的访问。代理对象在客户端和目标对象之间起到中介作用,可以在不改变目标对象代码的情况下增加额外的功能。 1.1 专业概念解释 代理模式:为其他对象提供一种代理…...

单片机-STM32部分:13-1、蜂鸣器

飞书文档https://x509p6c8to.feishu.cn/wiki/V8rpwIlYIiEuXLkUljTcXWiKnSc 一、应用场景 大部分的电子产品、家电&#xff08;风扇、空调、电水壶&#xff09;都会有蜂鸣器&#xff0c;用于提示设备的工作状态 二、原理 蜂鸣器是一种将电信号转换为声音信号的器件&#xff0…...

JVM——方法内联

引入 在现代软件开发中&#xff0c;性能优化始终是一个关键课题。随着硬件架构的不断演进&#xff0c;CPU的主频提升逐渐放缓&#xff0c;而软件复杂度却持续增加&#xff0c;这使得编译器优化技术的重要性日益凸显。方法内联&#xff08;Method Inlining&#xff09;作为编译…...

C++类成员

一、内联函数&#xff08;Inline Functions&#xff09; 作用 解决频繁调用小函数时的栈内存消耗问题&#xff0c;通过将函数代码直接插入调用点&#xff0c;避免压栈/出栈开销。 定义形式 inline 返回类型 函数名(参数列表) { ... }• 隐式声明&#xff1a;类内直接定义的成员…...

SpringBoot校园失物招领信息平台

SpringBoot校园失物招领信息平台 文章目录 SpringBoot校园失物招领信息平台1、技术栈2、项目说明2.1、登录注册2.2、管理员端截图2.3、用户端截图 3、核心代码实现3.1、前端首页3.2、前端招领广场3.3、后端业务处理 1、技术栈 本项目采用前后端分离的架构&#xff0c;前端和后…...

代码随想录算法训练营第三十八天

LeetCode题目: 1143. 最长公共子序列1035. 不相交的线53. 最大子数组和392. 判断子序列2094. 找出 3 位偶数(每日一题) 其他: 今日总结 往期打卡 1143. 最长公共子序列 跳转: 1143. 最长公共子序列 学习: 代码随想录公开讲解 问题: 给定两个字符串 text1 和 text2&#xff0…...

Nginx stream模块是连接级别的负载均衡

在Nginx的stream模块中&#xff0c;upstream的权重配置实现的是连接级别的负载均衡&#xff0c;这和http模块不同。 当客户端发起一个新的TCP连接时&#xff0c;Nginx根据各upstream的权重值选择其中一个upstream建立连接&#xff0c;之后该连接上的所有数据传输都由这个upstre…...