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

【Linux】浅谈环境变量和进程地址空间

一、环境变量

基本概念

环境变量(Environment Variables)是操作系统提供的一种机制,用于存储和传递配置信息、系统参数、用户偏好设置等。

环境变量的作用
  1. 配置程序行为:
    程序可以通过环境变量获取配置信息,例如日志级别、数据库连接信息、API 密钥等。
    例如,LOG_LEVEL=DEBUG 可以设置程序的日志级别为调试模式。
  2. 指定系统路径:
    环境变量可以指定程序或库的路径,例如 PATH 环境变量用于指定系统可执行文件的搜索路径。
    例如,PATH=/usr/bin:/bin:/usr/local/bin 表示系统会在这些目录中查找可执行文件。
  3. 传递用户偏好设置:
    环境变量可以存储用户的偏好设置,例如语言环境(LANG)、时区(TZ)等。
    例如,LANG=en_US.UTF-8 设置了系统的语言环境为美国英语,使用 UTF-8 编码。
  4. 动态配置:
    环境变量可以在运行时动态设置和修改,而无需重新编译程序。
    例如,可以在启动脚本中设置环境变量,以控制程序的行为。

常见的环境变量

  1. PATH
    用途:指定系统可执行文件的搜索路径。
    示例:PATH=/usr/bin:/bin:/usr/local/bin
    说明:当用户在终端中输入命令时,系统会在 PATH 指定的目录中查找可执行文件。
  2. HOME
    用途:指定当前用户的主目录路径。
    示例:HOME=/home/user
    说明:程序可以使用 HOME 环境变量来访问用户的主目录,例如保存配置文件。
  3. LANG
    用途:指定系统的语言环境。
    示例:LANG=en_US.UTF-8
    说明:设置系统的语言环境和字符编码,影响程序的输出和国际化行为。
  4. TZ
    用途:指定系统的时区。
    示例:TZ=America/New_York
    说明:设置系统的时区,影响程序中日期和时间的显示。
  5. LD_LIBRARY_PATH
    用途:指定动态链接器搜索动态库的路径。
    示例:LD_LIBRARY_PATH=/usr/local/lib:/opt/lib
    说明:动态链接器会在 LD_LIBRARY_PATH 指定的目录中查找动态库。
  6. USER
    用途:指定当前登录的用户名。
    示例:USER=zzx
    说明:程序可以使用 USER 环境变量获取当前用户的名称。

查看环境变量

echo $NAME 其中NAME为你要查找的环境变量名称,比如PATH,USER等
在这里插入图片描述

可执行文件的默认执行路径

我们先写一个简单程序

#include <stdio.h>
int main()
{printf("hello world");return 0;
}

对上面的源代码编译形成一个可执行文件 hello ,当我们在命令行输入 hello 来执行这个可执行文件时候发现执行不了,报错 Command 'hello' not found 这是为什么呢?
其实在 Linux 和类 Unix 系统中,可执行文件的默认执行路径是由环境变量 PATH 决定的。PATH 环境变量是一个以冒号(:)分隔的目录列表,操作系统会在这些目录中按顺序查找可执行文件,而 hello 这个命令我们默认执行路径也就是PATH指定的路径,而不是当前路径。
解决方法:

  1. 指定当前路径,执行命令 ./hello
  2. 临时修改 PATH 环境变量。将当前路径添加到 PATH 环境变量中,expot PATH=$PATH:hello
  3. 永久修改 PATH 环境变量,通过修改 shell 配置文件,我们可以在配置文件~/.bashrc 中添加下面这段代码
export PATH=$PATH:你的可执行文件所处路径

然后再执行 source ~/.bashrc 是配置文件生效

  1. 创建符号链接到已有的 PATH 目录。
ln -s /path/to/your/program/your_executable /usr/local/bin/your_executable

如果在 /usr/local/bin 中找到了符号链接 your_executable,操作系统会解析这个符号链接,找到它指向的实际文件 /path/to/your/program/your_executable,并运行该文件。

  1. 使用 alias 为程序创建一个简化的命令。
alias myprogram='/path/to/your/program/your_executable'

将上述命令添加到你的 shell 配置文件中(如 ~/.bashrc 或 ~/.zshrc),以永久生效。

环境变量相关命令

  • export : 在全局环境变量表中设置一个全新的环境变量
  • env : 显示所有环境变量
  • unset : 清楚环境变量
  • set : 显示本地定义的shell变量和环境变量

环境变量的组织方式

在这里插入图片描述
每个程序都有一个环境变量表,环境变量表是一个字符指针数组,每个指针指向一个以‘ \0 ’ 结尾的环境字符串

代码获取环境变量

  • 命令⾏第三个参数
#include <stdio.h>
int main(int argc, char *argv[], char *env[])
{int i = 0;for(; env[i]; i++){printf("%s\n", env[i]);}return 0;
}
  • 通过 extern 第三方变量 environ 获取
#include <stdio.h>
int main(int argc, char *argv[])
{extern char **environ;int i = 0;for(; environ[i]; i++){printf("%s\n", environ[i]);}return 0;
}

通过系统调用获取

通过系统调用 getenv(name) 来获取环境变量,其实现我们可以通过 man 手册来查找(man getenv)
在这里插入图片描述

#include <stdio.h>
#include <stdlib.h>
int main()
{printf("%s\n", getenv("PATH"));return 0;
}

子进程继承环境变量

  • 环境变量通常具有全局属性,可以被子进程继承下去。
代码演示
#include <stdio.h>
#include <stdlib.h>
int main()
{printf("%s\n", getenv("PATH"));return 0;
}

由我们在编译上面代码形成可执行程序,在运行时就会帮我们打印 PATH 环境变量可知,环境变量是会被子进程继承的(注意: 任何在命令行执行的可执行文件都是由 shell 进行 fork() 创建的子进程,在通过 进程切换 执行的命令,所以上面可进程就是 shell 的子进程)

程序地址空间

程序地址空间布局:
在这里插入图片描述
但上面的地址空间布局就是物理地址空间布局吗,答案是不是的。
我们可以通过一段程序验证

#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
int g_val = 0;
int main()
{pid_t id = fork();if(id < 0){perror("fork");return 0;}else if(id == 0){ //childprintf("child pid %d : %d : %p\n", getpid(), g_val, &g_val);}else{ //parentprintf("parent pid %d : %d : %p\n", getpid(), g_val, &g_val);}sleep(1);return 0;
}

输出结果:

parent pid 4635 : 0 : 0x56436823f014
child pid 4636 : 0 : 0x56436823f014

我们可以看见父子进程的 gval 的值是不一样的,但地址确实一样的,我们就可以得出一下结论:

  • 我们看到的地址值绝对不是物理地址,而是虚拟地址,即我们在C/C++语言中看到的地址都是虚拟地址!而不是物理地址,物理地址用户是看不到的,统一由操作系统管理
  • OS必须负责虚拟地址带物理地址的转换

进程地址空间

由上面可知 程序地址空间 的说法不准确,那应该为什么呢,准确来说应该为 进程地址空间

虚拟地址转换为物理地址

在这里插入图片描述
通过这个我们就可以看出,同一个变量地址相同,内容不同,其实是虚拟地址空间相同,但是物理内存上的地址其实是不同的。
也就是相当于操作系统给编译器画了一张大饼,告诉编译器这里的空间你全部可以用,但其是并不是全部可以用,你申请空间时 操作系统 就会看你申请的空间物理内存是否足够容纳的下,如果容纳不下,操作系统就不会帮你申请,直接打回你的申请,就像你兄弟告诉你我有100块,你说给我200块,你兄弟说不行一样

浅谈虚拟内存管理

那么既然有虚拟内存,那么操作系统就需要对虚拟内存管理,那操作系统是怎么对虚拟内存管理的呢?
和进程一样,也是先描述,再组织

描述

每一个进程都有一个 task_struct ,在 task_struct 中就有一个描述进程地址空间的结构体 mm_struct (内存描述符)

struct task_struct
{/*...*/struct mm_struct *mm; //对于普通的⽤⼾进程来说该字段指向他的//虚拟地址空间的⽤⼾空间部分,对于内核线程来说这部分为NULL。struct mm_struct *active_mm; // 该字段是内核线程使⽤的。当该进程是内核线程时,//它的mm字段为NULL,表⽰没有内存地址空间,可也并不是真正的没有,这是因为所有进程关//于内核的映射都是⼀样的,内核线程可以使⽤任意进程的地址空间。/*...*/
}
struct mm_struct
{/*...*/struct vm_area_struct *mmap;/* 指向虚拟区间(VMA)链表 */struct rb_root mm_rb;/* red_black树 */unsigned long task_size;/*具有该结构体的进程的虚拟地址空间的⼤⼩*//*...*/// 代码段、数据段、堆栈段、参数段及环境段的起始和结束地址。unsigned long start_code, end_code, start_data, end_data;unsigned long start_brk, brk, start_stack;unsigned long arg_start, arg_end, env_start, env_end;/*...*/
}

每一个进程都有独立的 mm_struct ,这样保证了进程之间的独立性。

组织

虚拟地址组织方式有两种:

  1. 当虚拟区较少时采取单链表,由 mmap 指针指向这个链表
  2. 当虚拟区间多时采取红黑树进行管理,由 mm_rb 指向这棵树

linux内核使用 vm_area_struct 结构来表示一个独立的虚拟内存区域(VMA),一个进程使用多个 vm_area_struct 来表示不同位置的虚拟内存区域。

struct vm_area_struct {unsigned long vm_start; //虚存区起始unsigned long vm_end;//虚存区结束struct vm_area_struct* vm_next, * vm_prev;//前后指针struct rb_node vm_rb;//红⿊树中的位置unsigned long rb_subtree_gap;struct mm_struct* vm_mm;//所属的 mm_structpgprot_t vm_page_prot;unsigned long vm_flags;//标志位struct {struct rb_node rb;unsigned long rb_subtree_last;} shared;struct list_head anon_vma_chain;struct anon_vma* anon_vma;const struct vm_operations_struct* vm_ops; //vma对应的实际操作unsigned long vm_pgoff;//⽂件映射偏移量struct file* vm_file;//映射的⽂件void* vm_private_data;//私有数据atomic_long_t swap_readahead_info;
#ifndef CONFIG_MMUstruct vm_region* vm_region;/* NOMMU mapping region */
#endif
#ifdef CONFIG_NUMAstruct mempolicy* vm_policy;/* NUMA policy for the VMA */
#endifstruct vm_userfaultfd_ctx vm_userfaultfd_ctx;
} __randomize_layout;

通过上面的描述,我们可以用图来表示以上结构:
在这里插入图片描述
在这里插入图片描述

为什么要有虚拟地址空间

  1. 安全风险,如果每个进程都可以访问任意内存空间,那么就意味着任意一个进程都能够读写系统先关的内存区域,如果是一个木马病毒,就意味着可以随意修改内存空间,导致很多不缺定因素
  2. 地址不确定,如果使用的是物理地址,每次运行的程序的地址是不确定的,因为每次运行的程序个数都不一样
  3. 效率低,如果直接使用物理内存的话,一个进程就是作为一个整体(内存块)操作的,如果出现内存不够用,就只能将不常用的进程拷贝到磁盘的交换分区中,等下次内存够了,在加载回来,如果是虚拟地址空间,就可以通过分页管理和页表映射分批加载进程,大大减小了内存的压力,使内存能够以更小的空间做更多的事
  4. 地址空间和页表都是OS来维护的,也就意味着想要使用地址空间和页表映射,就需要OS来监督,这也就保护了物理内存中的合法数据,包括各个进程以及内核的有效数据
  5. 由页表和地址空间的存在,也就意味着物理内存的分配和进程的管理没有关系了,进程管理模块和内存管理模块就完成了解耦
  6. 有了页表,程序在物理内存中理论上就可以在任意位置上加载。但它可以将地址空间上的虚拟地址空间和物理地址空间进程映射,所以在进程视角所有的内存分布都是有序的

相关文章:

【Linux】浅谈环境变量和进程地址空间

一、环境变量 基本概念 环境变量&#xff08;Environment Variables&#xff09;是操作系统提供的一种机制&#xff0c;用于存储和传递配置信息、系统参数、用户偏好设置等。 环境变量的作用 配置程序行为&#xff1a; 程序可以通过环境变量获取配置信息&#xff0c;例如日…...

vue数字公式篇(一)

一、使用插件来创造数字公式 因为只是展示和编辑 我看这个公式挺多&#xff0c;也对公式不太了解所以就这样&#xff0c;开始我的代码展示了 1、安装mathlive cnpm install mathlive2、页面 <template><div><label>输入 LaTeX 公式:</label><div …...

基于PMU的14节点、30节点电力系统状态估计MATLAB程序

“电气仔推送”获得资料&#xff08;专享优惠&#xff09; 程序简介&#xff1a; 程序采用三种方法对14节点和30节点电力系统状态进行评估&#xff1a; ①PMU同步向量测量单元结合加权最小二乘法&#xff08;WLS&#xff09;分析电力系统的电压幅值和相角状态&#xff1b; …...

5 分钟用满血 DeepSeek R1 搭建个人 AI 知识库(含本地部署)

最近很多朋友都在问&#xff1a;怎么本地部署 DeepSeek 搭建个人知识库。 老实说&#xff0c;如果你不是为了研究技术&#xff0c;或者确实需要保护涉密数据&#xff0c;我真不建议去折腾本地部署。 为什么呢&#xff1f; 目前 Ollama 从 1.5B 到 70B 都只是把 R1 的推理能力…...

QT QML实现音频波形图进度条,可点击定位或拖动进度

前言 本项目实现了使用QT QML创建一个音频波形图进度条的功能。用户可以在界面上看到音频波形图&#xff0c;并且可以点击进度条上的位置进行定位&#xff0c;也可以拖动进度条来调整播放进度。可以让用户更方便地控制音频的播放进度&#xff0c;并且通过音频波形图可以直观地…...

浅谈StarRocks SQL性能检查与调优

StarRocks性能受数据建模、查询设计及资源配置核心影响。分桶键选择直接决定数据分布与Shuffle效率&#xff0c;物化视图可预计算复杂逻辑。执行计划需关注分区裁剪、谓词下推及Join策略&#xff0c;避免全表扫描或数据倾斜。资源层面&#xff0c;需平衡并行度、内存限制与网络…...

味觉传送器E-Taste:开启虚拟世界的味觉之门

味觉传送器E-Taste&#xff1a;开启虚拟世界的味觉之门 一、发明背景与动机 随着虚拟现实&#xff08;VR&#xff09;和增强现实&#xff08;AR&#xff09;技术的飞速发展&#xff0c;人们在虚拟世界中的沉浸感不断提升&#xff0c;视觉和听觉体验已经取得了显著的突破。然而…...

ISE 14.7 IP核 Block Memory Generator 更换coe

ISE 14.7 IP核 Block Memory Generator 更换coe 打开XCO 后缀&#xff0c;修改下面的coe_file 目录&#xff0c;并且重新regenerate ip 核即可...

【Auto-Scroll-List 组件设计与实现分析】

Auto-Scroll-List 组件设计与实现分析 gitee代码仓库 https://gitee.com/chennaiyuan/dayup-record/tree/master/%E4%B8%80%E4%BA%9B%E7%BB%84%E4%BB%B6/auto-scroll-list 1. 组件概述 我们封装的 AutoScrollList 是一个自动滚动列表组件&#xff0c;主要用于展示需要自动循…...

用hexo初始化博客执行hexo init时碰到的问题

用hexo初始化博客执行hexo init时碰到的问题 $ hexo init myblog INFO Cloning hexo-starter https://github.com/hexojs/hexo-starter.git fatal: unable to access https://github.com/hexojs/hexo-starter.git/: SSL certificate problem: unable to get local issuer cer…...

【C++真题】P1739 表达式括号匹配

P1739 表达式括号匹配 题目描述 假设一个表达式有英文字母&#xff08;小写&#xff09;、运算符&#xff08;、-、*、/&#xff09;和左右小&#xff08;圆&#xff09;括号构成&#xff0c;以 作为表达式的结束符。请编写一个程序检查表达式中的左右圆括号是否匹配&#x…...

Java1.8与testNg兼容问题:bad class file和SocketTimeoutException: Read timed out

背景&#xff1a; 公司 java JDK默认用的是1.8版本&#xff0c;已经在跑的一个项目使用的testng用的是6.14.3&#xff0c;我拿到后通过Test 运行失败&#xff0c;因为这个是一直在用的项目&#xff0c;就没想到是版本兼容问题&#xff0c;折腾了好一阵&#xff08;原开发者是通…...

高项第十二章——项目质量管理

项目质量管理包括把组织的质量政策应用于规划、管理、控制项目和产品质量要求&#xff0c;以满足干系人目标的各个过程。 项目质量管理针对的是项目过程中所涉及的活动 可交付成果质量管理针对的是项目生产的具体可交付成果&#xff0c;与可交付成果的性质和特性紧密相关 12…...

C# WPF编程-Menu

C# WPF编程-Menu 布局&#xff1a;代码&#xff1a;效果 在WPF&#xff08;Windows Presentation Foundation&#xff09;中&#xff0c;Menu控件用于创建下拉菜单或上下文菜单&#xff0c;它提供了丰富的定制选项来满足不同的应用需求。下面将介绍如何在WPF应用程序中使用Menu…...

python日期

导入包 from datetime import datetime现在时间 now datetime.now() print("当前时间:", now)当前时间: 2025-03-18 23:51:08.418953 格式化 formatted_now datetime.now().strftime("%Y-%m-%d %H:%M:%S") print("格式化后的时间:", forma…...

flutter 专题 一百零三

前不久&#xff0c;谷歌官方正式发布了Flutter的首个发布预览版&#xff08;Release Preview 1&#xff09;&#xff0c;这标志着谷歌进入了Flutter正式版&#xff08;1.0&#xff09;发布前的最后阶段&#xff0c;同时作为Google的重量级跨平台开发方案&#xff0c;此次更新也…...

【conda activate无效】 conda: error: argument COMMAND: invalid choice: ‘activate‘

conda activate失效了 在使用conda activate时出现报错&#xff1a; usage: conda [-h] [-v] [--no-plugins] [-V] COMMAND ... conda: error: argument COMMAND: invalid choice: activate (choose from clean, compare, config, create, info, init, install, list, notice…...

Chainlit 自定义元素开发指南:使用 JSX 和受限导入实现交互式界面

自定义元素 Custom Element 类允许你渲染一个自定义的 .jsx 代码片段。.jsx 文件应当放置在 public/elements/ELEMEN_NAME.jsx 目录下。 属性 name 字符串 自定义元素的名称。它应该与你的JSX文件名相匹配(不包括 .jsx扩展名)。 props 字典 传递给 JSX 的属性。 display El…...

CEF 控制台添加一函数,枚举 注册的供前端使用的CPP交互函数有哪些

一、前序知识 1、设置单进程模式,方便调试 void ClientApp::OnBeforeCommandLineProcessing(const CefString& process_type, CefRefPtr<CefCommandLine> command_line) {if (process_type.empty()){//cef 在debug模式下有问题#ifdef _DEBUGcommand_line->Appe…...

C++之list类及模拟实现

目录 list的介绍 list的模拟实现 定义节点 有关遍历的重载运算符 list的操作实现 &#xff08;1&#xff09;构造函数 (2)拷贝构造函数 &#xff08;3&#xff09;赋值运算符重载函数 &#xff08;4&#xff09;析构函数和clear成员函数 &#xff08;5&#xff09;尾…...

C++八大常见的设计模式的实现与实践指南

目录 创建型模式 单例模式工厂方法模式抽象工厂模式 结构型模式 适配器模式装饰者模式代理模式 行为型模式 观察者模式策略模式命令模式 高级主题 现代C特性影响模式性能对比典型应用案例 设计模式分类 一、创建型模式 1. 单例模式&#xff08;Singleton&#xff09; 现代…...

02 windows qt配置ffmpeg开发环境搭建

版本说明 首先我使用ffmpeg版本是4.2.1QT使用版本5.14.2我选择是c编译...

什么是状态管理?有何种方式可以实现?它们之间有什么区别?

目录 一、状态管理的核心概念 二、常见状态管理方案及对比 1. 基础方案:setState 2. 官方推荐:Provider 3. 事件驱动:Bloc (Business Logic Component) 4. 响应式增强:Riverpod 5. 轻量级全能库:GetX 三、方案对比与选型指南 四、实战建议 在 Flutter 中,状态管…...

tf1.x和tf2.x在使用上的区别和联系是什么

tf1.x和tf2.x在使用上的区别和联系是什么 TensorFlow 1.x 和 2.x 在使用上有显著差异&#xff0c;主要体现在编程范式、API 设计和易用性上&#xff0c;但二者仍共享相同的核心目标&#xff08;深度学习框架&#xff09;和底层计算引擎。以下是主要区别和联系&#xff1a; 主要…...

Elasticsearch使用记录

一、配环境 1.docker版本部署es 8.x系列可以关掉ssl&#xff08;本地测试时&#xff09;&#xff0c;去docker的/usr/share/elasticsearch/config/elasticsearch.yml里面的“xpack.security.enabled:”设置成true就可以 2.window docker部署推荐教程&#xff1a;基于Docker安…...

【python web】一文掌握 Flask 的基础用法

文章目录 一、 Flask 介绍1.1 安装 Flask二、Flask的基本使用2.1 创建第一个 Flask 应用2.2 路由与视图函数2.3 请求与响应2.4 响应对象2.5 模板渲染2.6 模板继承2.7 静态文件管理2.8 Blueprint 蓝图2.9 错误处理三、Flask扩展与插件四、部署 Flask 应用五、总结Flask 是一个轻…...

第十六届蓝桥杯单片机组4T模拟赛二

难点&#xff1a; PCF8591同时测量两条通道数据 避免重复触发 采集触发时的时间数据存放 未采集的数据显示 清空数据 本题建议了解怎么去触发采集&#xff0c;怎么显示最近三次触发采集的时间即可。由于4T模拟赛的尿性有很多评测点是题目中没有要求的&#xff0c;另外测评的时候…...

《解锁华为黑科技:MindSpore+鸿蒙深度集成奥秘》

在数字化浪潮汹涌澎湃的当下&#xff0c;人工智能与操作系统的融合已成为推动科技发展的核心驱动力。华为作为科技领域的先锋&#xff0c;其AI开发框架MindSpore与鸿蒙系统的深度集成备受瞩目&#xff0c;开启了智能生态的新篇章。 华为MindSpore&#xff1a;AI框架的创新先锋…...

kotlin中的list set map整理

在 Kotlin 中&#xff0c;List、Set 和 Map 是三种核心集合类型&#xff0c;它们分别适用于不同的场景&#xff0c;具有独特的特性和操作方式。以下是它们的详细对比与使用指南&#xff1a; 1. List&#xff08;列表&#xff09; 核心特性 • 有序&#xff1a;元素按插入顺序…...

条款43:学习处理模板化基类内的名称

前提认知&#xff1a;模板类继承模板类&#xff0c;是需要建立在假设的前提下的&#xff0c;如果没有这个”假设“&#xff0c;编译将会失败 1.书上举例 2.完整代码举例 #include <iostream>class MsgInfo { };class BaseCompany { public:BaseCompany(){}~BaseCompan…...

五种方案实现双链路可靠数据传输

本文介绍五种双链路数据传输方案,目标是利用设备的多个传输通道,(如双有线网口,网口+wifi, 网口+5G等场景 , 网口+ 自组网, 自组网 + 5G等),将数据复制后分流、分路同时传输,以期提高数据传输可靠性,满足高可靠性传输的应用场景需求。部分方案给出了实际验证结果 。 …...

提升AI性能的秘密武器:量化、蒸馏与剪枝全面解析

通过高效的模型压缩技术推进 NLP 在快速发展的自然语言处理 (NLP) 领域,模型的大小和复杂性显著增加,从而显著提高了性能。然而,这些庞大模型的部署和维护也带来了挑战,特别是在计算成本、功耗和资源受限用户的可访问性方面。本博客深入探讨了量化、剪枝和蒸馏等尖端模型压…...

React Native 如何使用 Expo 快速开发?

React Native是当下热门的跨平台移动开发框架&#xff0c;而Expo则是它的重要开发工具之一。Expo提供了一套完整的开发环境&#xff0c;使开发者无需安装Android Studio或Xcode也能快速运行React Native项目。它包含了众多内置API&#xff0c;如相机、地理位置、推送通知等&…...

C++Primer 拷贝控制示例

欢迎阅读我的 【CPrimer】专栏 专栏简介&#xff1a;本专栏主要面向C初学者&#xff0c;解释C的一些基本概念和基础语言特性&#xff0c;涉及C标准库的用法&#xff0c;面向对象特性&#xff0c;泛型特性高级用法。通过使用标准库中定义的抽象设施&#xff0c;使你更加适应高级…...

Qt 读取数据库

在 Qt 中读取数据库文件通常涉及以下步骤。这里以 SQLite 为例&#xff08;Qt 内置支持&#xff09;&#xff0c;其他数据库&#xff08;如 MySQL、PostgreSQL&#xff09;需要对应驱动&#xff1a; 1. 添加 SQL 模块依赖 在项目文件 .pro 中添加&#xff1a; QT sql2. 基本…...

DeepSeek在学术研究方向初期工作提示词分享

目录 论文选题 研读文献 拟定提纲 大家好这里是AIWritePaper官方账号&#xff01;更多内容&#x1f449;AIWritePaper~在如今这个学术圈的“快车道”上&#xff0c;时间就像是一场永不停歇的赛跑&#xff0c;而论文质量则是那颗我们拼命追逐的“金苹果”。最近一款名为DeepS…...

CentOS下安装ElasticSearch(日志分析)

准备目录 搞一个自己喜欢的目录 mkdir /usr/local/app 切换到该目录 cd /usr/local/app 下载 wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.9.2-linux-x86_64.tar.gz 选择其他版本 点击进入官网...

科技云报到:AI Agent打了个响指,商业齿轮加速转动

科技云报到原创。 3月16日&#xff0c;百度旗下文心大模型4.5和文心大模型X1正式发布。目前&#xff0c;两款模型已在文心一言官网上线&#xff0c;免费向用户开放。 同时&#xff0c;文心大模型4.5已上线百度智能云千帆大模型平台&#xff0c;企业用户和开发者登录即可调用AP…...

布谷直播系统源码开发实战:从架构设计到性能优化

作为山东布谷科技的一名技术研发人员&#xff0c;我参与了多个直播系统平台从0到1的开发和搭建&#xff0c;也见证了直播行业从萌芽到爆发的全过程。今天&#xff0c;我想从研发角度&#xff0c;分享一些直播系统软件开发的经验和心得&#xff0c;希望能对大家有所帮助。 一、 …...

pytorch小记(十):pytorch中torch.tril 和 torch.triu 详解

pytorch小记&#xff08;十&#xff09;&#xff1a;pytorch中torch.tril 和 torch.triu 详解 PyTorch torch.tril 和 torch.triu 详解1. torch.tril&#xff08;计算下三角矩阵&#xff09;&#x1f4cc; 作用&#x1f50d; 语法&#x1f539; 参数&#x1f4cc; 示例&#x1…...

C语言每日一练——day_11

引言 针对初学者&#xff0c;每日练习几个题&#xff0c;快速上手C语言。第十一天。&#xff08;连续更新中&#xff09; 采用在线OJ的形式 什么是在线OJ&#xff1f; 在线判题系统&#xff08;英语&#xff1a;Online Judge&#xff0c;缩写OJ&#xff09;是一种在编程竞赛中…...

HCIA-PPP实验

一、LCP链路控制协议 1、链路建立阶段&#xff1a;通过交互LCP报文协商参数&#xff0c;包含了MRU、认证类型、魔术字等。 2、链路维护阶段&#xff1a; 3、链路终止 二、NCP网络控制协议&#xff1a;交互PPP IPCP报文,检测地址、学习路由、下发地址 1、通过IPCP协议的请求消…...

C++学习之云盘项目nginx

1.复习 2.知识点概述 1. 一些基本概念 1.1 Nginx 初步认识 1.2 正向 / 反向代理 1.3 域名和 IP 2. Nginx 安装和配置 2.1 安装 2.2 配置 3. Nginx 的使用 3.1 部署静态网页 3.2 反向代理和负载均衡 课外知识导读 1. URL 和 URI 2. DNS 解析过程 1. 一些基…...

7-字符串

1-ASCII 0-9 对应 48-57 A-Z 对应 65-90 a-z 对应 97-122 2-字符数组 字符变量存储单个字符 字符数组存储多个字符 字符串就是字符数组加上结束符 ’ \0 ’ #include <iostream> using namespace std; int main(){//是字符数组&#xff0c;不是字符串char a1[]{C,,};…...

vue学习八

十七 组件通信方式 1 props 父传子 //父组件 <script setup>//book来源省略import Subview1 from ./Subview1.vue;function updatebook(updatetimes){book.value.updatetimes updatetimes} </script> <template><Subview1 :book"book" :upd…...

Vue 渲染 LaTeX 公式 Markdown 库

&#x1f31f; 前言 欢迎来到我的技术小宇宙&#xff01;&#x1f30c; 这里不仅是我记录技术点滴的后花园&#xff0c;也是我分享学习心得和项目经验的乐园。&#x1f4da; 无论你是技术小白还是资深大牛&#xff0c;这里总有一些内容能触动你的好奇心。&#x1f50d; &#x…...

基于大模型的喉癌全程预测与治疗方案优化研究报告

目录 一、引言 1.1 研究背景与意义 1.2 研究目的与目标 1.3 研究方法与数据来源 二、大模型在喉癌预测中的应用原理 2.1 大模型概述 2.2 预测喉癌的技术原理 2.3 相关技术对比 三、术前预测与方案制定 3.1 术前风险预测 3.1.1 淋巴结转移预测 3.1.2 其他风险因素预…...

SpringBoot第三站:配置嵌入式服务器使用外置的Servlet容器

目录 1. 配置嵌入式服务器 1.1 如何定制和修改Servlet容器的相关配置 1.server.port8080 2. server.context-path/tx 3. server.tomcat.uri-encodingUTF-8 1.2 注册Servlet三大组件【Servlet&#xff0c;Filter&#xff0c;Listener】 1. servlet 2. filter 3. 监听器…...

通向AGI的未来之路!首篇2D/视频/3D/4D统一生成框架全景综述(港科大中山等)

文章链接&#xff1a; https://arxiv.org/pdf/2503.04641 摘要 理解并复现现实世界是人工通用智能&#xff08;AGI&#xff09;研究中的一个关键挑战。为实现这一目标&#xff0c;许多现有方法&#xff08;例如世界模型&#xff09;旨在捕捉支配物理世界的基本原理&#xff0…...

什么是MCP(Model Context Protocol)?对话、意图识别、服务调用和上下文管理

什么是MCP&#xff1f; MCP&#xff08;Model Context Protocol&#xff09; 是一种专为人工智能模型设计的通信协议&#xff0c;旨在解决复杂 AI 系统中多个模型或组件之间的协同、状态管理和资源优化问题。它尤其适用于大型语言模型&#xff08;LLM&#xff09;、多模态系统及…...