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

获取inode的完整路径包含挂载的路径

一、背景

在之前的博客 缺页异常导致的iowait打印出相关文件的绝对路径-CSDN博客 里的 2.2.3 一节和 关于inode,dentry结合软链接及硬链接的实验-CSDN博客 里,我们讲到了在内核里通过inode获取inode对应的绝对路径的方法。对于根目录下的文件而言,这也是足够了,但是对于非根目录下的文件即有过挂载后的文件,这就不够了。我们后面的博客会讲到,我们有时候比如在shm相关的监控场景下,还是需要知道dentry的super_block的挂载目录的。

我们在第二章里先贴出能获取inode的dentry的包含挂载路径的完整路径的源码,并演示成果。在第三章里,我们给出相关的源码解释及原理分析。

二、源码及成果展示

2.1 内核部分的改动

在fs/namespace.c里添加一个export symbol的函数get_dentry_by_sb_currns:

struct dentry* get_dentry_by_sb_currns(struct super_block *sb)
{struct mnt_namespace *mnt_ns = current->nsproxy->mnt_ns;struct mount *mnt;struct dentry* dentry = NULL;lock_mount_hash();list_for_each_entry(mnt, &mnt_ns->list, mnt_list) {if (mnt->mnt.mnt_sb == sb) {dentry = mnt->mnt_mountpoint;break;}}unlock_mount_hash();return dentry;
}
EXPORT_SYMBOL_GPL(get_dentry_by_sb_currns);

2.2 内核模块代码

#include <linux/module.h>
#include <linux/kernel.h>
#include <linux/fs.h>
#include <linux/init.h>
#include <linux/slab.h>
#include <linux/dcache.h>
#include <linux/namei.h>// 模块参数
static char *filepath = "/tmp/testfile";  // 默认文件路径
module_param(filepath, charp, S_IRUGO);
MODULE_PARM_DESC(filepath, "Path of the file to open");char buffer[4096];
char buffer_mount1[4096];
char buffer_mount2[4096];
char buffer_mount3[4096];extern struct dentry* get_dentry_by_sb_currns(struct super_block *sb);int getfullpath(struct inode *inode)
{struct dentry *dentry;printk("inode = %p\n", inode);hlist_for_each_entry(dentry, &inode->i_dentry, d_u.d_alias) {char *path;path = dentry_path_raw(dentry, buffer, 4096);if (IS_ERR(path)){continue;   }printk("dentry name = %s , path = %s\n", dentry->d_name.name, path);{struct dentry* de = get_dentry_by_sb_currns(inode->i_sb);char *path1 = dentry_path_raw(de, buffer_mount1, 4096);char *path2 = NULL;char *path3 = NULL;printk("path1 = %s\n", path1);if (de->d_sb) {if (strcmp(path1, "/") != 0) {de = get_dentry_by_sb_currns(de->d_sb);path2 = dentry_path_raw(de, buffer_mount2, 4096);printk("path2 = %s\n", path2);if (de->d_sb) {if (strcmp(path2, "/") != 0) {de = get_dentry_by_sb_currns(de->d_sb);path3 = dentry_path_raw(de, buffer_mount3, 4096);printk("path3 = %s\n", path3);}else {path2 = NULL;}}}else {path1 = NULL;}}if (path2) {printk("dentry name = %s%s%s\n", path2, path1, path);}else if (path1) {printk("dentry name = %s%s\n", path1, path);}else {printk("dentry name = %s\n", path);}}}return 0;
}static int __init my_module_init(void) {struct file *file;printk(KERN_INFO "Opening file: %s\n", filepath);// 打开文件file = filp_open(filepath, O_RDONLY, 0);printk(KERN_INFO "file[%p]\n", file);if (IS_ERR(file)) {printk(KERN_ERR "Error opening file: %ld\n", PTR_ERR(file));return PTR_ERR(file);}getfullpath(file->f_inode);// do {//     char *path;//     path = dentry_path_raw(file->f_path.dentry, buffer, PAGE_SIZE);//     if (IS_ERR(path)){//         break;//     }//     printk("[2] dentry name = %s , path = %s\n", file->f_path.dentry->d_name.name, path);// } while(0);// 关闭文件filp_close(file, NULL);return -EINVAL;
}static void __exit my_module_exit(void) {printk(KERN_INFO "Module exiting\n");
}module_init(my_module_init);
module_exit(my_module_exit);MODULE_LICENSE("GPL");
MODULE_AUTHOR("Zhaoxin");
MODULE_DESCRIPTION("A simple module to read full path dentry from a file's inode");

2.3 成果展示

上面的模块代码只是为了打通演示,所以只是覆盖了两级mount的情况,我们下面展示根目录下的文件、mount过一级的目录下文件、mount过两级的目录下的文件,这三种情况:

2.3.1 根目录下的文件的情况

insmod testinode_fullpath.ko filepath=/home/aaa/zhaoxin/test.txt

运行后的dmesg的内容:

2.3.2 mount过一级的目录下的文件

insmod testinode_fullpath.ko filepath=/bigvolume/aa.txt

运行后的dmesg的内容:

2.3.3 mount过两级的目录下的文件

insmod testinode_fullpath.ko filepath=/dev/shm/aaa.txt

运行后的dmesg的内容:

三、源码解释及原理

3.1 增加的get_dentry_by_sb_currns函数的实现原理

之所以要把get_dentry_by_sb_currns函数放到fs/namespace.c里,是因为fs目录下的文件比如namespace.c文件包含了struct mount的定义,struct mount的定义是定义在fs目录下的:

该fs/mount.h属于fs下使用的一个结构体。不同于下图里的include/linux/mount.h(下图里的include/linux/mount.h是公共的mount.h,里面是没有包含struct mount的定义的):

看一下我们加的get_dentry_by_sb_currns函数的实现:

如上图红框,用的是当前任务的namespace里的mnt_ns来作为mount路径目录的namespace。

遍历该mnt_ns里的list来找匹配当前super_block的,并把mount里的mnt_mountpoint这个表示挂载位置的dentry给返回出来。

3.2 内核模块里使用get_dentry_by_sb_currns获取挂载点的路径

回到内核模块里,内核模块的代码其实是改造自之前的博客 关于inode,dentry结合软链接及硬链接的实验-CSDN博客 里的代码,在遍历查询的inode的所有dentry时,不仅通过dentry_path_raw获取到所属的super_block下的全路径之外,还获取super_block的挂载点的dentry路径,用的是get_dentry_by_sb_currns函数,如果发现挂载点的路径不是"/"的话,就继续找挂载点dentry的super_block的上一级挂载点,直到挂载点的dentry路径是"/"为止:

要注意,需要用挂载点的路径的字符串和"/"来比较,单用挂载点的d_sb的指针是不是NULL是不行的。

相关文章:

获取inode的完整路径包含挂载的路径

一、背景 在之前的博客 缺页异常导致的iowait打印出相关文件的绝对路径-CSDN博客 里的 2.2.3 一节和 关于inode&#xff0c;dentry结合软链接及硬链接的实验-CSDN博客 里&#xff0c;我们讲到了在内核里通过inode获取inode对应的绝对路径的方法。对于根目录下的文件而言&#…...

解决上传PDF、视频、音频等格式文件到FTP站点时报错“将文件复制到FTP服务器时发生错误。请检查是否有权限将文件放到该服务器上”问题

一、问题描述 可以将文本文件(.txt格式),图像文件(.jpg、.png等格式)上传到我们的FTP服务器上;但是上传一些PDF文件、视频等文件时就会报错“ 将文件复制到FTP服务器时发生错误。请检查是否有权限将文件放到该服务器上。 详细信息: 200 Type set to l. 227 Entering Pas…...

git push

在 git push 命令中&#xff0c;分支名称的顺序和含义非常重要。其基本格式如下&#xff1a; git push <remote> <local_branch>:<remote_branch>各部分解释 <remote>&#xff1a;远程仓库的名称&#xff08;如 origin&#xff09;。<local_branc…...

Java中的四大引用类型详解

Java中的四大引用类型详解&#xff1a;强引用、软引用、弱引用、虚引用 1. 引用类型概览 Java提供了四种不同强度的引用类型&#xff0c;用于控制对象的生命周期和垃圾回收行为&#xff1a; 引用类型回收时机典型应用场景是否影响GC强引用永不回收&#xff08;除非断开引用&…...

MySQL慢查询日志通俗指南

&#x1f340; 前言 如果你发现自己新写或者重写的接口查询速度变慢&#xff0c;你怎么定位原因呢&#xff1f;可以用explain分析我们的SQL原生代码&#xff0c;又或者可以考虑使用MySQL慢查询日志。这篇文章主要讲述什么是慢查询日志以及开发中可能用到的场景。 但是&#x…...

Kafka 如何保证消息可靠性?

Kafka 保证消息可靠性主要通过以下几个机制来实现&#xff0c;从生产者到消费者的整个链路上都设计了相应的保障措施&#xff1a; 1. 生产者&#xff08;Producer&#xff09;端的可靠性 ✅ a. acks 参数&#xff08;确认机制&#xff09; acks0&#xff1a;生产者不等待任何…...

【嵌入式系统设计师】知识点:第2章 嵌入式系统硬件基础知识

提示:“软考通关秘籍” 专栏围绕软考展开,全面涵盖了如嵌入式系统设计师、数据库系统工程师、信息系统管理工程师等多个软考方向的知识点。从计算机体系结构、存储系统等基础知识,到程序语言概述、算法、数据库技术(包括关系数据库、非关系型数据库、SQL 语言、数据仓库等)…...

C++重载运算符的本质

C 中运算符重载的本质就是函数调用&#xff0c;编译器会将运算符表达式转换为对特定函数的直接调用。以下是具体原理和实现细节&#xff1a; 1. 运算符重载的底层实现 当重载一个运算符&#xff08;如 、、<<&#xff09;时&#xff0c;实际上是在定义一个特殊名称的函数…...

Python解决“数字插入”问题

Python解决“数字插入”问题 问题描述测试样例解题思路代码 问题描述 小U手中有两个数字 a 和 b。第一个数字是一个任意的正整数&#xff0c;而第二个数字是一个非负整数。她的任务是将第二个数字 b 插入到第一个数字 a 的某个位置&#xff0c;以形成一个最大的可能数字。 你…...

深入讲解:智能合约中的读写方法

前言 在探秘区块链开发:智能合约在 DApp 中的地位及与传统开发差异一文中我提到对于智能合约中所有的写入其实都算是交易。而在一个完整的智能合约代码中最大的两个组成部分就是读取和写入。 本文将为你深入探讨该两者方法之间的区别。 写方法 写方法其实就是对区块链这一…...

Java进阶之旅-day05:网络编程

引言 在当今数字化的时代&#xff0c;网络编程在软件开发中扮演着至关重要的角色。Java 作为一门广泛应用的编程语言&#xff0c;提供了强大的网络编程能力。今天&#xff0c;我们深入学习了 Java 网络编程的基础知识&#xff0c;包括基本的通信架构、网络编程三要素、IP 地址、…...

Eliet Chat开发日志:信令服务器注册与通信过程

目录 1. 架构设计&#xff1a;信令服务器与客户端 2. 选择技术栈 3. 实现信令服务器 4. 客户端实现 5. 测试 6. 下一步计划 日期&#xff1a;2025年4月5日 今天的工作重点是实现两个设备通过信令服务器注册并请求对方公网地址信息&#xff0c;以便能够进行点对点通信。我…...

如何设计一个本地缓存

想获取更多高质量的Java技术文章&#xff1f;欢迎访问Java技术小馆官网&#xff0c;持续更新优质内容&#xff0c;助力技术成长 Java技术小馆官网https://www.yuque.com/jtostring 如何设计一个本地缓存 随着系统的复杂性和数据量的增加&#xff0c;如何快速响应用户请求、减…...

2024版idea使用Lombok时报找不到符号

今天在springboot项目中使用Lombok的Builder注解&#xff0c;启动时居然报了找不到符号的错&#xff0c;如下图 于是开始了漫长的寻找之路&#xff0c;首先去settings->Plugins中看自己的Lombok插件是否启动&#xff0c;发现确实是如此&#xff0c;然后看网上的教程去加上这…...

[Android安卓移动计算]:新建项目和配置环境步骤

文章目录 一&#xff1a;AndroidStudio 创建项目1. New Project2. 选择&#xff1a;Empty Activity 二&#xff1a;配置和下载SDK点击SDK 配置按钮选择API32和Android 9.0&#xff08;Pie&#xff09;再点击Apply点击接受条款声明进行安装 安装完后点击NEXT和OK出现&#xff1a…...

$R^n$平面约束下的向量列

原向量&#xff1a; x → \overset{\rightarrow}{x} x→ 与 x → \overset{\rightarrow}{x} x→法向相同的法向量&#xff08;与 x → \overset{\rightarrow}{x} x→同向&#xff09; ( x → ⋅ n → ∣ n → ∣ 2 ) n → (\frac{\overset{\rightarrow}x\cdot\overset{\righta…...

混合编程的架构

在混合使用QML和Qt Widgets的环境中&#xff0c;是否必须严格遵循分层架构需要根据项目规模和复杂度来决定。以下是具体的决策指南和实施建议&#xff1a; 一、分层架构的适用性分析 #mermaid-svg-61Mlp9MrpFOoZPAO {font-family:"trebuchet ms",verdana,arial,sans…...

联网汽车陷入网络安全危机

有人能够入侵并控制汽车这一事实本身就令人恐惧&#xff0c;电影中的场景变成了现实。再加上汽车中的软件会处理和存储我们的个人数据&#xff0c;这种恐惧达到了一个新的高度。 一旦发生安全漏洞&#xff0c;我们的驾驶数据、联系人、通话记录、消息甚至位置信息等信息都可能…...

基于Spark的招聘数据预测分析推荐系统

【Spark】基于Spark的招聘数据预测分析推荐系统 &#xff08;完整系统源码开发笔记详细部署教程&#xff09;✅ 目录 一、项目简介二、项目界面展示三、项目视频展示 一、项目简介 该系统能够高效处理海量招聘数据&#xff0c;利用Spark的强大计算能力实现快速分析和预测。该系…...

基于Spark的酒店数据分析系统

【Spark】基于Spark的酒店数据分析系统 &#xff08;完整系统源码开发笔记详细部署教程&#xff09;✅ 目录 一、项目简介二、项目界面展示三、项目视频展示 一、项目简介 本项目基于Python语言开发&#xff0c;借助Django进行后台框架的开发&#xff0c;搭建大数据虚拟机集群…...

网络安全L2TP实验

在FW1上&#xff0c;将接口g1/0/0添加进去trust区域 [USG6000V1]firewall zone trust [USG6000V1-zone-trust]add interface GigabitEthernet 1/0/0 在放通安全策略 在FW2上配置ip [USG6000V1]int g1/0/1 [USG6000V1-GigabitEthernet1/0/1]ip address 20.1.1.1 24 [USG6000…...

18.1.go连接redis

开发调试 ​Tiny RDM:跨平台GUI工具windows版本下载 https://download.csdn.net/download/chxii/90562932 支持多种格式查看:内置高级文本代码编辑器,支持语法高亮/代码折叠/错误提示 便捷搜索过滤:使用正则匹配搜索键后,仍可进行二级过滤,组合筛选数据更方便 调试分析…...

innodb如何实现mvcc的

InnoDB 实现 MVCC&#xff08;多版本并发控制&#xff09;的机制主要依赖于 Undo Log&#xff08;回滚日志&#xff09;、Read View&#xff08;读视图&#xff09; 和 隐藏的事务字段。以下是具体实现步骤和原理&#xff1a; 1. 核心数据结构 InnoDB 的每一行数据&#xff08…...

递归实现组合型枚举(DFS)

从 1∼n 这 n 个整数中随机选出 m 个&#xff0c;输出所有可能的选择方案。 输入格式 两个整数 n,m,在同一行用空格隔开。 输出格式 按照从小到大的顺序输出所有方案&#xff0c;每行 1 个。 首先&#xff0c;同一行内的数升序排列&#xff0c;相邻两个数用一个空格隔开。…...

【Java学习日记18】:三元运算符和运算符的优先级

一、三元运算符 2. 示例代码 例题1: 例题2: 二、运算符优先级 1. 优先级规则 Java 运算符的执行顺序由优先级决定&#xff0c;优先级高的先执行。 只要记住小括号优先级最大即可,以后就用这玩意 四、总结 运算符优先级&#xff1a;小括号 () 是最高优先级工具...

基于springboot放松音乐在线播放系统(源码+lw+部署文档+讲解),源码可白嫖!

摘要 本放松音乐在线播放系统采用B/S架构&#xff0c;数据库是MySQL&#xff0c;网站的搭建与开发采用了先进的Java进行编写&#xff0c;使用了Spring Boot框架。该系统从两个对象&#xff1a;由管理员和用户来对系统进行设计构建。前台主要功能包括&#xff1a;用户注册、登录…...

【Scratch编程系列】Scratch编程软件界面

Scratch是一款由麻省理工学院(MIT&#xff09; 设计开发的少儿编程工具。其特点是&#xff1a;使用者可以不认识英文单词&#xff0c;也可以不使用键盘&#xff0c;就可以进行编程。构成程序的命令和参数通过积木形状的模块来实现。用鼠标拖动指令模块到脚本区就可以了。 这个软…...

技术驱动革新,强力巨彩LED软模组助力创意显示

随着LED显示技术的不断突破&#xff0c;LED软模组因其独特的柔性特质和个性化显示效果&#xff0c;正逐渐成为各类应用场景的新宠。强力巨彩软模组R3.0H系列具备独特的可塑造型能力与技术创新&#xff0c;为商业展示、数字艺术、建筑装饰等领域开辟全新视觉表达空间。    LED…...

历年跨链合约恶意交易详解(三)——Nomad Bridge20220801

漏洞合约函数 /*** notice Given formatted message, attempts to dispatch* message payload to end recipient.* dev Recipient must implement a handle method (refer to IMessageRecipient.sol)* Reverts if formatted messages destination domain is not the Replicas d…...

Tensorflow、Pytorch与Python、CUDA版本的对应关系(更新时间:2025年4月)

更新时间:20250405 一、Tensorflow与Python 、CUDA版本对应关系 注意:从 TF 2.11 开始,Windows 不支持 CUDA 构建。要在 Windows 上使用 TensorFlow GPU,您需要在 WSL2 中构建/安装 TensorFlow 或将 tensorflow-cpu 与 TensorFlow-DirectML-Plugin 一起使用 1.1、CPU版本…...

FPGA实现按键切换流水灯不同亮灭模式

本文是一位fpga新手学习fpga的博客&#xff0c;写出这个shi山代码花了3个小时左右&#xff0c;途中学习了按键消抖、状态机等知识... 实现目标&#xff1a;通过按键控制led灯亮的不同模式&#xff0c;将每种模式用状态机表达。 代码如下&#xff1a; module led(input btn1,in…...

SeaTunnel系列之:部署SeaTunnel的Spark和Flink引擎

SeaTunnel系列之&#xff1a;部署SeaTunnel的Spark和Flink引擎 运行 SeaTunnel快速开始使用 Flink快速开始使用 Spark 运行 SeaTunnel 现在您已经下载了 SeaTunnel 二进制包和连接器插件。接下来&#xff0c;您可以选择不同的引擎选项来运行同步任务。 如果您使用 Flink 运行…...

“Pseudo Global Warming”:伪全球变暖PGW

“Pseudo Global Warming”&#xff1a;伪全球变暖PGW PGW方法概述&#x1f50d; 一、PGW 方法的定义&#x1f9e0; 二、PGW 方法的基本原理&#x1f6e0;️ 三、PGW 方法的主要步骤&#x1f4c8; 四、PGW 模拟时常涉及的变量&#x1f4ca; 五、PGW 方法的优/缺点&#x1f4da;…...

【Linux学习笔记】初识进程概念和进程PCB

【Linux学习笔记】初识冯诺依曼体系和进程PCB &#x1f525;个人主页&#xff1a;大白的编程日记 &#x1f525;专栏&#xff1a;Linux学习笔记 文章目录 【Linux学习笔记】初识冯诺依曼体系和进程PCB前言一. 冯诺依曼体系结构1.1 关于冯诺依曼体系的要点&#xff1a; 二. 操…...

deepseek回答ollama 下载模型的命令

ollama 下载模型的命令 已深度思考&#xff08;用时 20 秒&#xff09; 好的&#xff0c;我需要回答用户关于使用Ollama下载模型的命令的问题。首先&#xff0c;我需要回忆Ollama的基本用法。Ollama是一个用于本地运行大型语言模型的工具&#xff0c;支持多种模型如Llama、Mi…...

Kafka 中的生产者分区策略

Kafka 中的 生产者分区策略 是决定消息如何分配到不同分区的机制。这个策略对 Kafka 的性能、负载均衡、消息顺序性等有重要影响。了解它对于高效地使用 Kafka 进行消息生产和消费至关重要。 让我们一起来看 Kafka 中 生产者的分区策略&#xff0c;它如何工作&#xff0c;以及…...

Kafka 如何调优?

Kafka 的调优是个非常实用又容易踩坑的话题&#xff0c;涉及 Producer、Broker、Consumer、硬件、操作系统 等多个层面。我们可以从整体架构角度出发&#xff0c;按模块逐个给你讲清楚 实战建议。 &#x1f3af; Kafka 调优主要目标&#xff1a; 提高吞吐量降低延迟保证可靠…...

【机器学习】机器学习工程实战-第4章 特征工程

上一章&#xff1a;第3章 数据收集和准备 文章目录 4.1 为什么要进行特征工程4.2 如何进行特征工程4.2.1 文本的特征工程4.2.2 为什么词袋有用4.2.3 将分类特征转换为数字4.2.4 特征哈希4.2.5 主题建模4.2.6 时间序列的特征4.2.7 发挥你的创造力 特征工程是将原始样本转化为特…...

spring-cloud-alibaba-nacos-config使用说明

一、核心功能与定位 Spring Cloud Alibaba Nacos Config 是 Spring Cloud Alibaba 生态中的核心组件之一&#xff0c;专为微服务架构提供动态配置管理能力。它通过整合 Nacos 的配置中心功能&#xff0c;替代传统的 Spring Cloud Config&#xff0c;提供更高效的配置集中化管理…...

必刷算法100题之计算右侧小于当前元素的个数

题目链接 315. 计算右侧小于当前元素的 个数 - 力扣&#xff08;LeetCode&#xff09; 题目解析 计算数组里面所有元素右侧比它小的数的个数, 并且组成一个数组,进行返回 算法原理 归并解法(分治) 当前元素的后面, 有多少个比我小(降序) 我们要找到第一比左边小的元素, 这…...

OpenHarmony子系统开发 - DFX(三)

OpenHarmony子系统开发 - DFX&#xff08;三&#xff09; 五、HiTraceMeter开发指导 HiTraceMeter概述 简介 HiTraceMeter在OpenHarmony中&#xff0c;为开发者提供业务流程调用链跟踪的维测接口。通过使用该接口所提供的功能&#xff0c;可以帮助开发者迅速获取指定业务流…...

[ctfshow web入门] web6

前置知识 入口点(目录)爆破 还记得之前说过网站的入口的吗&#xff0c;我们输入url/xxx&#xff0c;其中如果url/xxx存在&#xff0c;那么访问成功&#xff0c;证明存在这样一个入口点&#xff1b;如果访问失败则证明不存在此入口点。所以我们可以通过遍历url/xxx&#xff0c;…...

完整的Python程序,它能够根据两个Excel表格(假设在同一个Excel文件的不同sheet中)中的历史数据来预测未来G列数字

下面是一个完整的Python程序&#xff0c;它能够根据两个Excel表格&#xff08;假设在同一个Excel文件的不同sheet中&#xff09;中的历史数据来预测未来G列数字。此程序采用多模型验证&#xff0c;并且具备自我学习和动态参数调整的功能。最终会输出12个可能的数字范围及其出现…...

设计模式简述(一)设计原则

设计模式简述 6大基本设计原则单一职责原则依赖倒置原则依赖传递方式 里氏替换原则接口隔离原则迪米特法则开闭原则 6大基本设计原则 单一职责原则 一个接口、一个类、一个方法的功能尽量保证原子性。 至于这个度自己把握&#xff0c;没有绝对的标准。 通常可以将同一类、同…...

哈希表(Hashtable)核心知识点详解

1. 基本概念 定义&#xff1a;通过键&#xff08;Key&#xff09;直接访问值&#xff08;Value&#xff09;的数据结构&#xff0c;基于哈希函数将键映射到存储位置。 核心操作&#xff1a; put(key, value)&#xff1a;插入键值对 get(key)&#xff1a;获取键对应的值 remo…...

论文阅读笔记:Denoising Diffusion Implicit Models (5)

0、快速访问 论文阅读笔记&#xff1a;Denoising Diffusion Implicit Models &#xff08;1&#xff09; 论文阅读笔记&#xff1a;Denoising Diffusion Implicit Models &#xff08;2&#xff09; 论文阅读笔记&#xff1a;Denoising Diffusion Implicit Models &#xff08…...

JDK8卸载与安装教程(超详细)

JDK8卸载与安装教程&#xff08;超详细&#xff09; 最近学习一个项目&#xff0c;需要使用更高级的JDK&#xff0c;这里记录一下卸载旧版本与安装新版本JDK的过程。 JDK8卸载 以windows10操作系统为例&#xff0c;使用快捷键winR输入cmd&#xff0c;打开控制台窗口&#xf…...

R语言网状Meta分析---Meta回归(1)(基于gemtc)

示例&#xff1a; library(gemtc) help(package"gemtc") # Fixed effect meta-regression for heart failure prevention str(hfPrevention) regressor <- list(coefficientshared,variablesecondary,controlcontrol) model <- mtc.model(hfPrevention,type&q…...

通过AOP切面,切点,反射填充公共字段

在项目中&#xff0c;我们通常会实现员工管理和菜品管理等基础服务功能。这些服务在操作数据库时&#xff0c;往往需要记录一些通用字段&#xff0c;比如&#xff1a; 创建人ID&#xff08;create_user_id&#xff09; 修改人ID&#xff08;update_user_id&#xff09; 创…...

CNN 中感受野/权值共享是什么意思?

这个问题问得非常到位&#xff01;&#x1f31f; 在 CNN&#xff08;卷积神经网络&#xff09;中&#xff0c;“感受野” 和 “权值共享” 是两个核心概念&#xff0c;它们一起构建了 CNN 在图像处理领域强大能力的基础。 &#x1f9e0; 一句话解释&#xff1a; • 感受野&…...