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

Linux 的 sysfs 伪文件系统介绍【用户可以通过文件操作与内核交互(如调用内核函数),而无需编写内核代码】

1. 什么是 sysfs伪文件系统?

sysfs 是 Linux 内核提供的 伪文件系统,用于向用户空间暴露内核对象的信息和控制接口。它是 procfs 的补充,主要用于管理 设备、驱动、内核子系统 等信息,使用户可以通过文件操作(如用户空间中的open函数、write函数、read函数、 cat命令、echo命令)与内核交互【对文件的操作其实直接转换为调用相应的内核函数】,而无需编写内核代码。

  • 挂载位置:通常挂载在 /sys 目录下。
  • 作用
    • 提供系统信息(如 CPU、设备、驱动程序、总线)。
    • 提供设备控制接口(如 GPIO、PWM、I2C、SPI 等)。
    • 支持热插拔设备管理(如 USB、PCI、SATA 设备)。

sysfs伪文件系统实际上和设备文件很类似,它们都是用户空间与内核空间交互的媒介,不同的是设备文件是内核空间中驱动程序中的概念,而sysfs伪文件系统则是内核空间中别的需要向用户空间暴露的内核对象的信息和控制接口。所以它的使用实际上和设备文件很类似。

在终端中使用sysfs伪文件系统时,表面上我们是在用相关函数或catecho命令进行读或写相关的文件,实际上会转换为对某个内核函数的调用。具体的例子见本篇博文后面列出的“一个实际的例子分析”
而在程序代码中使用sysfs伪文件系统时,就和操作设备文件差不多。具体的例子见 https://blog.csdn.net/wenhao_ir/article/details/145459006【搜索“led_init(void)”】


2. sysfs 的目录结构

sysfs 目录下的结构主要分为以下几部分:

/sys/├── block/            # 块设备(如磁盘、分区)├── bus/              # 设备总线(如 i2c, usb, spi, pci, platform)├── class/            # 设备类(如 gpio, net, tty, input)├── devices/          # 设备层次结构├── firmware/         # 固件接口├── kernel/           # 内核参数├── module/           # 加载的内核模块└── power/            # 电源管理

3. sysfs 目录详解

(1)/sys/class/

  • 组织 设备 按类别分类(如 GPIO、网络、输入设备)。

  • 例子:

    ls /sys/class/
    

    输出:

    gpio/   net/   input/   sound/   thermal/   tty/   usb_device/
    
  • GPIO 设备(使用 sysfs 方式操作 GPIO)

    echo 131 > /sys/class/gpio/export    # 申请 GPIO 131
    echo out > /sys/class/gpio/gpio131/direction   # 设置方向
    echo 1 > /sys/class/gpio/gpio131/value   # 设为高电平
    

    我后面会对这三句命令作详细解释,其实就是以这三句命令活生生地展现 sysfs 伪文件系统是怎么实现与内核的交互的。

  • 网卡信息

    ls /sys/class/net/
    eth0  lo  wlan0
    
    • cat /sys/class/net/eth0/address # 查看 MAC 地址
    • cat /sys/class/net/eth0/statistics/rx_bytes # 接收的字节数

(2)/sys/bus/

  • 组织 设备按总线分类(如 PCI、USB、I2C、SPI)。

  • 例子:

    ls /sys/bus/
    

    输出:

    i2c/   pci/   platform/   scsi/   spi/   usb/
    
    • /sys/bus/i2c/devices/ # I2C 设备
    • /sys/bus/usb/devices/ # USB 设备
    • /sys/bus/pci/devices/ # PCI 设备
  • 示例:列出所有 USB 设备

    ls /sys/bus/usb/devices/
    

(3)/sys/devices/

  • 设备拓扑结构 组织设备信息(如 /sys/devices/pci0000:00/0000:00:1f.2/)。

  • 例子:

    ls /sys/devices/
    
    system/  virtual/  pci0000:00/
    
  • 查看 CPU 信息

    cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor
    

(4)/sys/module/

  • 显示 已加载的内核模块 及其参数。
  • 例子:
    ls /sys/module/
    
    • cat /sys/module/gpio/parameters/
    • cat /sys/module/usbcore/parameters/autosuspend

(5)/sys/kernel/

  • 提供与 内核相关的配置信息

  • 例子:

    ls /sys/kernel/
    
    debug/   security/   tracing/
    
  • 查看系统调试信息

    cat /sys/kernel/debug/gpio
    

4. sysfs 的工作机制

  • sysfs 由 kobjectkset 组成
    • kobject 代表 内核对象(如设备、驱动)。
    • ksetkobject 的集合(如 devicesbus)。
  • 设备驱动注册时,sysfs 自动创建目录和文件
  • 用户空间可以通过 catecho 直接访问内核数据

示例:
设备驱动代码:

static struct class *my_class;
my_class = class_create(THIS_MODULE, "my_device");
device_create(my_class, NULL, MKDEV(200, 0), NULL, "mydev0");

sysfs 生成的目录:

/sys/class/my_device/mydev0/

5. sysfs 的优缺点

优点缺点
允许用户空间与内核交互只能操作文本,效率低
结构清晰,按类别组织不适用于高频操作
可用于设备驱动调试已被 libgpiod 等替代

6. sysfs 与 udev、procfs 的区别

文件系统作用特点
sysfs (/sys/)设备、驱动、总线信息设备管理,与 kobject 相关
procfs (/proc/)进程、内核信息进程管理,虚拟文件
udev (/dev/)设备文件动态创建 /dev/ 设备节点

7. 结论

  • sysfs 是 Linux 设备模型的核心部分,用于暴露设备和驱动信息。
  • 用户空间可以直接 cat 读取信息,echo 进行控制,简化了驱动开发。
  • sysfs 已逐渐被 libgpiodudev 替代,但仍然广泛使用,特别是在嵌入式系统中。

8.一个实际的例子分析

我们可以通过下面的三条命令实现将编号为131的GPIO口(GPIO5_IO03)的值设为逻辑1值,如果GPIO没有被标记为低电平有效,则逻辑1值就是物理上的高电平,否则就是物理上的低电平,在这里,我实测了一下,GPIO5_IO03并没有被标记为低电平有效。即运行完成后在下面的原理图基础上,灯灭了。
在这里插入图片描述

echo 131 > /sys/class/gpio/export
echo out > /sys/class/gpio/gpio131/direction
echo 1 > /sys/class/gpio/gpio131/value

这三条命令是通过 sysfs 接口 操作 GPIO 口 131,本质上是用户空间通过 echo 命令向 sysfs 伪文件系统写入数据,触发内核的 GPIO 相关操作【实际上就是去调用内核中的相关GPIO子系统的函数】。

在看下面的分析前可以参考下博文 https://blog.csdn.net/wenhao_ir/article/details/145119224 是如何利用GPIO子系统实现LED灯的驱动的,实际上这篇博文中调用的函数也就是下面三条echo命令触发的内核函数。


1. echo 命令与 sysfs GPIO 实现的关系

echo 命令的作用是 向文件写入内容,但当目标文件是 sysfs 文件时,写入的值会被内核的 GPIO 处理函数拦截,并执行相应的 GPIO 操作。

下面具体分析你的 echo 命令是如何作用到 GPIO 上的:

(1)导出 GPIO

echo 131 > /sys/class/gpio/export
  • 作用:请求使用 GPIO 131,让内核创建 /sys/class/gpio/gpio131/ 目录。

  • sysfs 机制

    1. echo 131 > /sys/class/gpio/export 相当于向 export 文件 写入 131
    2. 内核中的 export_store() 处理该写入,并调用 gpio_request(131, NULL) 申请 GPIO 资源。
    3. 申请成功后,内核会创建 /sys/class/gpio/gpio131/ 目录,用于控制 GPIO 131。
  • 相关的内核代码(在 drivers/gpio/gpiolib-sysfs.c 中):

    static ssize_t export_store(struct class *class,struct class_attribute *attr,const char *buf, size_t count)
    {int gpio;int ret;ret = kstrtoint(buf, 0, &gpio);if (ret)return ret;ret = gpio_request(gpio, NULL);if (ret)return ret;return count;
    }
    

(2)设置 GPIO 方向

echo out > /sys/class/gpio/gpio131/direction
  • 作用:设置 GPIO 131 为 输出模式

  • sysfs 机制

    1. echo out > /sys/class/gpio/gpio131/direction 相当于向 direction 文件 写入字符串 "out"
    2. gpio_direction_output(131, 0) 被调用,将 GPIO 131 配置为 输出模式(初始值 0)。
    3. 内核 GPIO 驱动最终会调用 gpio_chip->direction_output() 这个函数,该函数是具体的 GPIO 控制器驱动 提供的,执行底层的寄存器操作,配置 GPIO 方向。
  • 相关的内核代码(在 drivers/gpio/gpiolib-sysfs.c 中):

    static ssize_t direction_store(struct device *dev,struct device_attribute *attr,const char *buf, size_t count)
    {struct gpio_desc *desc = dev_get_drvdata(dev);if (!strncmp(buf, "out", 3))gpiod_direction_output(desc, 0);elsegpiod_direction_input(desc);return count;
    }
    

(3)设置 GPIO 输出值

echo 1 > /sys/class/gpio/gpio131/value
  • 作用:设置 GPIO 131 输出 高电平(1)

  • sysfs 机制

    1. echo 1 > /sys/class/gpio/gpio131/valuevalue 文件 写入 "1"
    2. gpio_set_value(131, 1) 被调用,更新 GPIO 131 的输出电平。
    3. 底层驱动gpio_chip->set())负责具体的寄存器操作,将 GPIO 置高。
  • 相关的内核代码(在 drivers/gpio/gpiolib-sysfs.c 中):

    static ssize_t value_store(struct device *dev,struct device_attribute *attr,const char *buf, size_t count)
    {struct gpio_desc *desc = dev_get_drvdata(dev);int value;if (buf[0] == '0')value = 0;elsevalue = 1;gpiod_set_value(desc, value);return count;
    }
    

2. sysfs GPIO 实现的局限

虽然 sysfs 提供了一种 简单的方式 来访问 GPIO,但它有以下局限性:

  1. 效率低:sysfs 通过文件操作控制 GPIO,比 ioctlmmap 慢。
  2. 无法高效处理中断:sysfs 方式不适合监听 GPIO 变化(如按键)。
  3. 已被 libgpiod 取代:新版本的 Linux 内核推荐使用 libgpiod(基于 ioctl 的 GPIO 操作)。

3. 结论

🔹 sysfs 方式是 Linux 早期的 GPIO 控制方法,echo 命令本质上是向 sysfs 伪文件系统写入数据,触发内核调用 GPIO 操作函数。
🔹 每个 echo 命令最终都会调用 gpiolib 提供的 API,如 gpio_request()gpio_direction_output()gpio_set_value(),再由底层 GPIO 驱动完成实际的硬件操作。
🔹 sysfs 方式简单直观,但不适用于高效 GPIO 访问,现代 Linux 推荐使用 libgpiod 代替 sysfs GPIO。(实际上在Linux 5.10以上版本中已经把sysfs这种对GPIO的操作方式废弃了)
比如上面的三条命令等效于下面这条gpiod API的命令:

gpioset gpiochip0 131=1

相关文章:

Linux 的 sysfs 伪文件系统介绍【用户可以通过文件操作与内核交互(如调用内核函数),而无需编写内核代码】

1. 什么是 sysfs伪文件系统? sysfs 是 Linux 内核提供的 伪文件系统,用于向用户空间暴露内核对象的信息和控制接口。它是 procfs 的补充,主要用于管理 设备、驱动、内核子系统 等信息,使用户可以通过文件操作(如用户空…...

4.[ISITDTU 2019]EasyPHP

进入题目页面如下 给出PHP源码进行代码审计 <?php // 高亮显示当前文件的源代码 highlight_file(__FILE__);// 从 GET 请求中获取名为 _ 的参数&#xff0c;并将其赋值给变量 $_ // 符号用于抑制可能出现的错误信息 $_ $_GET[_];// 使用正则表达式对 $_ 变量的值进行匹配…...

【数学】矩阵、向量(内含矩阵乘法C++)

目录 一、前置知识&#xff1a;向量&#xff08;一列或一行的矩阵&#xff09;、矩阵1. 行向量2. 列向量3. 向量其余基本概念4. 矩阵基本概念5. 关于它们的细节 二、运算1. 转置&#xff08;1&#xff09;定义&#xff08;2&#xff09;性质 2. 矩阵&#xff08;向量&#xff0…...

Centos 8 离线升级openssh 9.9

背景 根据云服务漏检报告&#xff0c;需要升级云服务器openssh服务&#xff08;离线环境&#xff09;。本文将采用rpm包形式&#xff0c;将openssh服务由OpenSSH_8.0p1 升级至OpenSSH_9.9p1。准备一台能够联网的服务器&#xff08;简称server1&#xff09;用于下载程序包&#…...

Java入门进阶

文章目录 1、常用API 1.1、Math1.2、System1.3、Object1.4、Arrays1.5、基本类型包装类 1.5.1、基本类型包装类概述1.5.2、Integer1.5.3、int和String相互转换1.5.4、自动装箱和拆箱 1.6、日期类 1.6.1、Date类1.6.2、SimpleDateFormat类 1.6.2.1、格式化&#xff08;从Date到…...

torchtext.get_tokenizer

文章目录 1. 说明2. pytorch代码 1. 说明 假设我们有一个句子如下&#xff1a;You can now install TorchText using pip! 分词后可得&#xff1a;[you, can, now, install, torchtext, using, pip, !] 2. pytorch代码 import torchtext from torchtext.data import get_tok…...

​零技术开始,但想用 Next.js 基于 React 构建一个类似 18Touch 的网站​

如果你从零技术开始&#xff0c;但想用 Next.js 基于 React 构建一个类似 18Touch 的网站&#xff0c;以下是一个详细的规划和学习路径。这个网站看起来是一个内容展示型网站&#xff0c;可能包含博客、产品展示、用户交互等功能。 1. 项目规划 1.1 确定核心功能 根据 18Touc…...

python实现多路视频,多窗口播放功能

系列Python开发 文章目录 系列Python开发前言一、python实现多路视频播放功能二、代码实现1. http申请视频流地址并cv2播放功能 三、打包代码实现生成可执行文件 总结 前言 一、python实现多路视频播放功能 服务端开发后通常需要做功能测试、性能测试&#xff0c;通常postman、…...

设计模式---观察者模式

设计模式—观察者模式 定义对象间的一种一对多的依赖关系&#xff0c;当一个对象的状态发生改变时&#xff0c;所有依赖于它的对象都得到通知并被自动更新。 主要解决的问题&#xff1a;一个对象状态改变给其他对象通知的问题&#xff0c;而且要考虑到易用和低耦合&#xff0c;…...

TensorFlow深度学习实战(6)——回归分析详解

TensorFlow深度学习实战&#xff08;6&#xff09;——回归分析详解 0. 前言1. 回归分析简介2. 线性回归2.1 简单线性回归2.2 多重线性回归2.3 多元线性回归 3. 构建基于线性回归的神经网络3.1 使用 TensorFlow 进行简单线性回归3.2 使用 TensorFlow 进行多元线性回归和多重线性…...

Deepseek v3R1 学习笔记

o1 o1 模型在训练过程中混合了多种奖励函数的设计方法&#xff0c;并且尝试从结果监督转向过程监督&#xff0c;在中间过程进行打分 使用的搜索策略&#xff1a;基于树的搜索和基于顺序修改的搜索 R1 R1-Zero 是从基础模型开始&#xff0c;完全由强化学习驱动&#xff0c;不…...

Spring Boot统一异常拦截实践指南

Spring Boot统一异常拦截实践指南 一、为什么需要统一异常处理 在Web应用开发中&#xff0c;异常处理是保证系统健壮性和用户体验的重要环节。传统开发模式中常见的痛点包括&#xff1a; 异常处理逻辑分散在各个Controller中错误响应格式不统一敏感异常信息直接暴露给客户端…...

lmk内存压力测试工具mem-pressure源码剖析

背景&#xff1a; android系统开发过程中&#xff0c;经常会遇到一些low memory kill的问题&#xff0c;在分析这些系统低内存导致被杀问题时候&#xff0c;经常因为不好复现而成为一个比较烦恼的阻碍。因为这种低内存问题本身就不属于一种功能操作类型的问题&#xff0c;属于…...

物联网 STM32【源代码形式-ESP8266透传】连接OneNet IOT从云产品开发到底层MQTT实现,APP控制 【保姆级零基础搭建】

一、MQTT介绍 MQTT&#xff08;Message Queuing Telemetry Transport&#xff0c;消息队列遥测传输协议&#xff09;是一种基于发布/订阅模式的轻量级通讯协议&#xff0c;构建于TCP/IP协议之上。它最初由IBM在1999年发布&#xff0c;主要用于在硬件性能受限和网络状况不佳的情…...

【大模型】AI 辅助编程操作实战使用详解

目录 一、前言 二、AI 编程介绍 2.1 AI 编程是什么 2.1.1 为什么需要AI辅助编程 2.2 AI 编程主要特点 2.3 AI编程底层核心技术 2.4 AI 编程核心应用场景 三、AI 代码辅助编程解决方案 3.1 AI 大模型平台 3.1.1 AI大模型平台代码生成优缺点 3.2 AI 编码插件 3.3 AI 编…...

Eclipse IDE 快捷键大全

文章目录 简介 ✨常用编辑快捷键 ⌨️基础编辑操作查找和定位代码优化 调试快捷键 &#x1f41b;编辑器通用快捷键 &#x1f4dd;窗口操作快捷键 &#x1fa9f;特殊功能快捷键 &#x1f527;重构相关快捷键 &#x1f504;提示 &#x1f4a1; 简介 ✨ Eclipse 作为一款强大的集…...

ES面试题

1、Elasticsearch的基本构成&#xff1a; &#xff08;1&#xff09;index 索引&#xff1a; 索引类似于mysql 中的数据库&#xff0c;Elasticesearch 中的索引是存在数据的地方&#xff0c;包含了一堆有相似结构的文档数据。 &#xff08;2&#xff09;type 类型&#xff1a…...

设置git区分大小写

设置git区分大小写 1.全局设置 (影响全部仓库): git config --global core.ignorecase false2.仓库级别设置 (影响当前仓库): git config core.ignorecase false3.已经提交了大小写不一致的文件处理: git mv -f OldName newName # 强制重命名 git commit -m "Fix cas…...

0205算法:最长连续序列、三数之和、排序链表

力扣128&#xff1a;最长连续序列 给定一个未排序的整数数组 nums &#xff0c;找出数字连续的最长序列&#xff08;不要求序列元素在原数组中连续&#xff09;的长度。 请你设计并实现时间复杂度为 O(n) 的算法解决此问题。 class Solution {public int longestConsecutive(in…...

VLAN 基础 | 不同 VLAN 间通信实验

注&#xff1a;本文为 “ Vlan 间通信” 相关文章合辑。 英文引文&#xff0c;机翻未校。 图片清晰度限于原文图源状态。 未整理去重。 How to Establish Communications between VLANs? 如何在 VLAN 之间建立通信&#xff1f; Posted on November 20, 2015 by RouterSwi…...

DeepSeek各版本说明与优缺点分析

DeepSeek各版本说明与优缺点分析 DeepSeek是最近人工智能领域备受瞩目的一个语言模型系列&#xff0c;其在不同版本的发布过程中&#xff0c;逐步加强了对多种任务的处理能力。本文将详细介绍DeepSeek的各版本&#xff0c;从版本的发布时间、特点、优势以及不足之处&#xff0…...

DS图(中)(19)

文章目录 前言一、图的遍历广度优先遍历深度优先遍历 二、最小生成树Kruskal算法Prim算法两种方法对比 总结 前言 承上启下&#xff0c;我们来学习下图的中篇&#xff01;&#xff01;&#xff01; 一、图的遍历 图的遍历指的是遍历图中的顶点&#xff0c;主要有 广度优先遍历 …...

协同探索与导航文献整理

文章目录 1.SOAR:异构无人机协同探索与拍摄以实现快速自主重建2. RACER: 一种使用分散式无人机群进行快速协同探索的方法3. 使用协作式纳米无人机在非结构化环境中进行最小感知探索4.GVP-MREP:通过动态拓扑图上的 Voronoi 分区进行快速且通信高效的多无人机探索5.森林的快速多无…...

排序算法--计数排序

唯一种没有比较的排序(指没有前后比较,还是有交换的)。统计每个元素出现的次数&#xff0c;直接计算元素在有序序列中的位置&#xff0c;要求数据是整数且范围有限。适用于数据为小范围整数&#xff08;如年龄、成绩&#xff09;&#xff0c;数据重复率较高时效率更优。可用于小…...

吴恩达深度学习——对象检测

内容来自https://www.bilibili.com/video/BV1FT4y1E74V&#xff0c;仅为本人学习所用。 文章目录 对象定位特征点检测基于滑动窗口的目标检测算法原理将全连接层转化成卷积层通过卷积实现滑动窗口检测算法 YOLOBounding Box预测交并比非极大值抑制Anchor BoxYOLO检测训练集中预…...

BUU19 [BJDCTF2020]Easy MD51

题目 当点进去不知道干啥的时候&#xff1a;1.看源代码 2.抓包 3.看网络请求 F12 用bp抓包&#xff0c;在response消息头中有hint提示&#xff1a; select * from admin where passwordmd5($pass,true) 如果md5($pass,true)后是 or 1 那么整句话就是password or 1&a…...

蓝桥杯刷题DAY2:二维前缀和 一维前缀和 差分数组

闪耀的灯光 &#x1f4cc; 题目描述 蓝桥公园是一个适合夜间散步的好地方&#xff0c;公园可以被视为由 n m 个矩形区域构成。每个区域都有一盏灯&#xff0c;初始亮度为 a[i][j]。 小蓝可以选择一个大的矩形区域&#xff0c;并按下开关一次&#xff0c;这将使得该区域内每盏…...

HTB:EscapeTwo[WriteUP]

目录 连接至HTB服务器并启动靶机 信息收集 使用rustscan对靶机TCP端口进行开放扫描 将靶机TCP开放端口号提取并保存 使用nmap对靶机TCP开放端口进行脚本、服务扫描 使用nmap对靶机TCP开放端口进行漏洞、系统扫描 使用nmap对靶机常用UDP端口进行开放扫描 使用nmap对靶机…...

vue 引入百度地图和高德天气 都得获取权限

vue接入百度地图---获取ak https://blog.csdn.net/qq_57144407/article/details/143430661 vue接入高德天气&#xff0c; 需要授权----获取key https://www.jianshu.com/p/09ddd698eebe...

AI大模型:DeepSeek

近期DeepSeek产生了很大的影响力。首先来自于性能,给了业内一个很好的释放,缓解了HPC以及大规模集群被卡的焦虑。通过实验证实了小规模团队(公开资料显示规模约150左右)在资源受限的情况下(2M H100 GPU时),依然可以完成对领先大模型的实现与部署。后续观察该团队是否可以…...

LeetCode - #198 打家劫舍

网罗开发 &#xff08;小红书、快手、视频号同名&#xff09; 大家好&#xff0c;我是 展菲&#xff0c;目前在上市企业从事人工智能项目研发管理工作&#xff0c;平时热衷于分享各种编程领域的软硬技能知识以及前沿技术&#xff0c;包括iOS、前端、Harmony OS、Java、Python等…...

从离散傅里叶变换(DFT)到快速傅里叶变换(FFT)

摘要 离散傅里叶变换&#xff08;DFT&#xff09;是数字信号处理领域中分析信号频域特性的重要工具&#xff0c;但直接计算DFT的复杂度较高&#xff0c;限制了其在大规模数据处理中的应用。快速傅里叶变换&#xff08;FFT&#xff09;的出现显著降低了计算复杂度&#xff0c;极…...

【STM32】HAL库USB虚拟U盘MSC配置及采用自带的Flash作为文件系统

【STM32】HAL库USB虚拟U盘MSC实现配置及采用自带的Flash作为文件系统 本文将自带的Flash作为文件系统 通过配置USB的MSC功能实现虚拟U盘 没有单独建立FATFS文件系统 仅仅是配置USB和Flash读写而已 当然 这里也可以用外部Flash等等 也可以配置文件系统来进行套壳 但总体而言不如…...

Math Reference Notes: 符号函数

1. 符号函数的定义 符号函数&#xff08;Sign Function&#xff09; sgn ( x ) \text{sgn}(x) sgn(x) 是一个将实数 ( x ) 映射为其 符号值&#xff08;即正数、负数或零&#xff09;的函数。 它的定义如下&#xff1a; sgn ( x ) { 1 如果 x > 0 0 如果 x 0 − 1 如…...

拉格朗日乘数法算法详解Python实现

目录 一、拉格朗日乘数法算法详解1.1 基本思想1.2 数学推导1.3 算法步骤1.4 算法在编程中的实现 二、案例分析案例一&#xff1a;二维最优化问题——求 f ( x , y ) x 2 y 2 f(x,y)x^2y^2 f(x,y)x2y2 在约束 x y 1 xy1 xy1 下的极值2.1.1 问题描述2.1.2 数学模型构建2.1.…...

ip属地是手机号还是手机位置?一文理清

在数字化和网络化的今天&#xff0c;IP属地这一概念逐渐成为了人们关注的焦点。特别是在社交媒体和在线平台上&#xff0c;IP属地的显示往往让人联想到用户的地理位置。然而&#xff0c;关于IP属地到底与手机号还是手机位置有关&#xff0c;却存在着不少误解和混淆。本文将深入…...

C++常用拷贝和替换算法

算法简介&#xff1a; copy // 容器内指定的元素拷贝到另一容器replace // 将容器内指定范围的旧元素改为新元素replace_if // 容器内指定范围满足条件的元素替换为新元素swap //互换两个容器的元素 1. copy 功能描述&#xff1a; 将容器内指定范围的数据拷贝到另一容器中函…...

vue项目搭建

1.准备工作&#xff0c;按照下面的安装一下脚手架vue-cli node16安装vue-cli时报错&#xff1a;需要node&#xff1e;20&#xff08;但根本就不是版本问题&#xff09;-CSDN博客文章浏览阅读157次&#xff0c;点赞4次&#xff0c;收藏2次。这种情况我碰到不下5次了&#xff0c…...

Java进阶面试八股文

1、Java SE和Java EE区别&#xff1f; Java SE 是 Java 的基础版本&#xff0c;Java EE 是 Java 的高级版本。Java SE 更适合开发桌面应用程序或简单的服务器应用程序&#xff0c;Java EE 更适合开发复杂的企业级应用程序或 Web 应用程序。 2、JVM和JRE和JDK区别&#xff1f;…...

Python Django 嵌入 Grafana Dashboard(随手记)

作为一名网络工程师/运维工程师&#xff0c;现在都在往DevOps的方向发展。其中大家都不可避免的会往自己开发平台的方向发展。 那么如何将自己制作的 Grafana 面板 引入到自己的平台上&#xff1f; 一般来说&#xff0c;大家都会选择Python来作为自己开发的语言&#xff0c;并会…...

[Android] IKTV专享版

[Android] IKTV专享版 链接&#xff1a;https://pan.xunlei.com/s/VOILXXuEd3ASo93c88UW79sxA1?pwd4tsw# 2025年2月最新免费K歌神器&#xff01;家庭KTV软件&#xff0c;手机平板电视盒子电脑都可用...

阿里 Java 岗个人面经分享(技术三面 + 技术 HR 面):Java 基础 +Spring+JVM+ 并发编程 + 算法 + 缓存

技术一面 20 分钟 1、自我介绍 说了很多遍了&#xff0c;很流畅捡重点介绍完。 2、问我数据结构算法好不好 挺好的&#xff08;其实心还是有点虚&#xff0c;不过最近刷了很多题也只能壮着胆子充胖子了&#xff09; 3、找到单链表的三等分点&#xff0c;如果单链表是有环的…...

C++多线程编程——call_once和单例模式

目录 1. 前言 2. call_once和once_flag 3. 后记 3.1 单例类的析构问题 3.2 饿汉式单例模式的线程安全问题 1. 前言 之前在讲解单例模式时&#xff0c;有提到懒汉式单例模式使用了双重检测Double-Checked Locking Pattern (DCLP)来解决多线程的安全访问问题。但是该方法也…...

vue2-为啥data属性是一个函数而不是对象

vue2-为啥data属性是一个函数而不是对象 1. data在vue实例和组件中的表现差异 vue实例的时候&#xff0c;data既可以是一个对象也可以是一个函数 new Vue({data:{//对象name:tom},data(){//函数return{name:tom}} })而在组件中定义data&#xff0c;只能是函数&#xff0c;如…...

Spark--算子执行原理

一、sortByKey SortByKey是一个transformation算子&#xff0c;但是会触发action&#xff0c;因为在sortByKey方法内部&#xff0c;会对每个分区进行采样&#xff0c;构建分区规则&#xff08;RangePartitioner&#xff09;。 内部执行流程 1、创建RangePartitioner part&…...

keil 单步调试

一、常见错误分析 warningerror警告错误 不影响编译过程 能够输出Hex文件 无法完成编译 不输出Hex文件 注意的是,warning的信息是要去关注的。 下面的UNCALLED SEGMENT除外 二、单步调试配置 1、在keil中添加单片机型号 本文不详细介绍,如有需要可查看这篇文章:...

html的字符实体和颜色表示

在HTML中&#xff0c;颜色可以通过以下几种方式表示&#xff0c;以下是具体的示例&#xff1a; 1. 十六进制颜色代码 十六进制颜色代码以#开头&#xff0c;后面跟随6个字符&#xff0c;每两个字符分别表示红色、绿色和蓝色的强度。例如&#xff1a; • #FF0000&#xff1a;纯红…...

[数据结构] 线性表和顺序表

目录 线性表 顺序表的实现 顺序表各个方法的实现 boolean isFull() -- 判断数组是否放满 : void add(int data) -- 在数组末尾插入新元素 : void add(int pos,int data) -- 在指定位置插入元素 : boolean contain(int toFind) -- 判断是否包含某个元素 int indexOf(in…...

第12章:基于TransUnet和SwinUnet网络实现的医学图像语义分割:腹部13器官分割(网页推理)

目录 1. 前言 2. TransUnet 和 SwinUnet 3. 腹部多器官分割 4. 训练 5. 推理 6. 项目下载 1. 前言 TransUNet 是一种用于医学图像分割的混合架构&#xff0c;结合了 Transformer 和 U-Net 的优势。它利用 Transformer 的全局上下文建模能力和 U-Net 的精确定位特性&…...

DS图(下)(19)

文章目录 前言一、最短路径的概念二、单源最短路径-Dijkstra算法三、单源最短路径-Bellman-Ford算法四、多源最短路径-Floyd-Warshall算法总结 前言 加油&#xff0c;今天就是图的最后一篇了&#xff0c;撑住&#xff01;&#xff01;   今天我们要学的就是最短路径问题&…...