Linux信号的使用
进程间异步通信的核心机制信号(Signal)是 Linux 系统中用于进程间异步通信的一种基础机制,主要用于通知进程发生了某种特定事件(如用户交互、硬件错误、超时等)。当进程接收到信号时,会暂时中断当前的执行流程,转而处理信号(执行预设的处理函数、遵循系统默认行为或直接忽略)。与信号相关的系统调用及宏定义均在 <signal.h> 头文件中声明,是 Linux 进程管理与事件响应的核心组件。 信号的核心特点信号的设计围绕“异步通知”展开,具备以下四个关键特性,使其能灵活应对各类系统事件: 异步性信号的产生和处理时机是不确定的,进程无法提前预测信号何时到达。例如,用户在进程运行过程中突然按下 Ctrl+C(触发 SIGINT 信号),进程会立即中断当前的循环或计算,优先处理该信号。这种异步性让进程无需持续轮询事件,大幅提升了资源利用率。 事件驱动每个信号都对应一种特定的系统事件,信号本身就是“事件发生”的通知载体。例如: SIGSEGV 对应“进程访问无效内存地址”(如空指针解引用); SIGCHLD 对应“子进程终止或状态改变”; SIGALRM 对应“定时器超时”...
Timestamp时间戳
Timestamp是一款专注于时间戳高效处理的轻量级C++工具库,支持微秒级精度时间获取与多格式输出,适用于日志系统、文件命名、时间戳记录等场景,可跨Windows与Linux平台使用。 核心功能特点 高精度时间获取:支持获取当前微秒级时间戳,满足对时间精度要求较高的场景(如高频日志、性能统计)。 多格式格式化输出: 标准可读格式:YYYY/MM/DD HH:MM:SS.微秒(例:2025/11/23 17:45:09.812002),适合人类阅读与日志记录; 文件友好格式:YYYYMMDD-HHMMSS.微秒(例:20251123-174509.812002),无特殊字符,可直接作为文件名避免系统兼容问题。 时间戳有效性校验:通过vaild()方法判断时间戳是否有效(微秒数>0即为有效),规避无效时间数据。 多粒度数值获取:支持直接获取微秒级(getMicroSec())与秒级(getSeconds())时间数值,便于时间差计算、时间戳存储等场景。 跨平台兼容:Linux系统依赖gettimeofday实现,Windows系统基于std::chro...
轻量云Meetup 西安站
轻云之上,无尽想象 2025年11月22日,恰逢农历十月初三小雪,我们参与了在西安新长安广场C座举办轻量云Meetup西安站,与一众云技术领域的产品、爱好者相聚,在秋日的氛围里,共同开启了一场技术交流与思想碰撞的活动。 破冰互动,以趣味形式拉近距离 活动伊始,现场设置了“你画我猜”的破冰环节,旨在通过轻松的互动快速消除陌生感,为后续的交流奠定良好氛围。 我所在的小组抽取的题目为“裸金属云服务器”,小组成员通过图形化的方式逐步呈现相关元素,从硬件形态延伸至云服务属性,虽最终未成功猜出答案,但过程中的思考与协作,让大家快速建立了默契; 其他小组的题目涵盖“混元大模型”“王者荣耀”“CNB”等内容,不同主题的呈现与互动,既结合了技术相关的专业方向,也融入了大众熟悉的内容,现场在有序的讨论与轻松的笑声中,让原本来自不同领域的参与者迅速熟络,为后续的深度交流做好了铺垫。 干货分享,聚焦云技术的实践与探索在主题分享环节,各位嘉宾与参与者依次带来了精彩的内容: 小杨现场演示了通过腾讯云HAI部署腾讯混元大模型的实操过程,详细讲解了相关技术逻辑与操作要点; 天下结合自身经历,分享了在腾讯云...
LangChain Agents
代码仓库ChainReaction 代理将语言模型与工具结合,创建能够推理任务、决定使用哪些工具,并迭代地工作以寻求解决方案的系统。create_agent提供了一种生产就绪的代理实现。LLM 代理在循环中运行工具以实现目标。代理会一直运行,直到满足停止条件——即模型发出最终输出或达到迭代限制。 核心组件Model 模型模型是您代理的推理引擎。它可以通过多种方式指定,支持静态和动态模型选择。 Static model 静态模型静态模型在创建代理时配置一次,并在整个执行过程中保持不变。这是最常见和直接的方法。 从模型标识符字符串初始化静态模型: 123456789101112@tooldef get_weather_for_location(city: str) -> str: """Get weather for a given city.""" return f"It's always sunny in {city}!"model = ChatO...
Model I/O
代码仓库ChainReaction 模型作为LangChain框架的底层核心组件,是构建基于语言模型(LLM)应用的关键要素。从技术本质来看,LangChain应用开发是以LangChain为技术框架,通过API调用大语言模型(LLM)解决特定业务问题的实现过程。 可以说,LangChain框架的整体运行逻辑均以LLM为核心驱动力。若脱离模型支撑,LangChain框架将丧失其核心应用价值,其存在的意义也无从谈起。 Model I/O对模型的使用流程可拆解为三个核心环节,分别是输入提示(Format)、模型调用(Predict) 与输出解析(Parse)。上述三个环节构成有机整体,在LangChain框架中,该过程被统一定义为Model I/O(Input/Output,即输入/输出)。 在Model I/O的各环节中,LangChain均提供标准化模板与工具组件,可快速构建适配各类语言模型的调用接口,降低模型集成与应用开发的技术门槛。具体环节功能如下: 提示模板:作为模型使用的首个环节,需向模型输入提示信息。基于Lang...
LangChain快速开始
代码仓库ChainReaction 本指南将帮助你在几分钟内从简单的设置到构建一个功能完整的AI智能体。 构建基础智能体 Quickstart.py 首先创建一个简单的智能体,能够回答问题并调用工具。该智能体将使用DeepSeek作为语言模型,一个基础的天气函数作为工具,以及一个简单的提示来指导其行为。 对于此示例,你需要设置一个 DeepSeek 账户并获取API密钥。然后,在你的终端中设置 DEEPSEEK_API_KEY 环境变量,或创建.env文件,通过 python-dotenv 加载它。 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051import os # 导入操作系统接口模块,用于访问环境变量等系统功能from langchain_openai import ChatOpenAI # 导入LangChain的OpenAI聊天模型类,用于与AI模型进行交互from dotenv import load_dotenv # 导入...
友元
代码仓库shanchuann/CPP-Learninng 基本概念在C++面向对象编程中,封装是核心特性之一。类通过private和protected访问控制符,将内部数据和实现细节隐藏起来,仅暴露public接口与外部交互,以此保证数据安全和代码的可维护性。但在某些场景下,这种严格的封装可能带来不便——比如两个紧密协作的类需要互相访问对方的内部状态,或者某个外部函数需要直接操作类的私有成员以实现特定功能(如运算符重载)。此时,友元机制便提供了一种灵活的解决方案,它允许特定的外部实体临时获得访问类私有成员的权限,成为类的“特殊访客”。 友元可以是函数,也可以是类,甚至可以是另一个类的某个成员函数。它们的共同特点是,一旦被类声明为友元,就能够绕过访问控制符的限制,直接访问类中的private和protected成员。这种机制并非破坏封装的设计,而是在保证整体封装性的前提下,为特殊场景提供的灵活接口。 外部函数的特殊访问权普通函数可以被声明为友元函数。要将一个函数声明为类的友元,只需在类的内部(通常是public区域,也可在private或protected区域...
Linux进程复制与替换
在Linux系统中,fork()是创建新进程的核心系统调用,它通过“复制父进程”生成子进程,二者形成独立但关联的执行单元。理解fork()的返回特性、父子进程关系及底层优化机制,是掌握多进程编程的基础。 fork()函数的基本用法与返回特性fork()函数用于创建新进程,调用者为父进程,新生成的进程为子进程,其核心特点是“一次调用,两次返回”,返回值是区分父子进程的关键。 函数定义与返回值fork()的函数原型为: 12#include <unistd.h>pid_t fork(void); 返回值类型:pid_t本质是int类型(Linux内核中通过typedef定义),用于表示进程ID。 返回规则(核心特性): 父进程中:返回子进程的PID(正整数),用于父进程识别和管理子进程; 子进程中:返回0(无特殊含义,仅作为子进程的标识); 失败时:返回**-1**(如系统资源不足、进程数达到上限),并设置errno提示错误原因。 父子进程的执行逻辑fork()调用后,子进程并非从main函数开始执行,而是从fork()调用的下一行代码继续执行,且初始状态与父进...
Linux系统上的库文件生成与使用
库文件的基本概念库文件是一组预先编译好的函数、方法或数据的集合,封装了常用功能(如输入输出、字符串处理、数学计算等),目的是避免重复编写代码、简化工程编译流程。开发时只需引用库的“接口声明”(头文件),无需关注内部实现,编译时直接链接库文件即可使用其功能。 Linux系统中,库文件的存储位置有明确规范: 库文件本体:主要存于 /lib(系统核心库)、/usr/lib(用户级库);64位系统额外有 /usr/lib64(64位专用库); 库的头文件:对应存于 /usr/include 或其下子目录(如数学库头文件 math.h 在 /usr/include,OpenGL库头文件在 /usr/include/GL)。 两种核心库文件:静态库与共享库Linux下的库分为静态库和共享库(也称动态库),二者在命名规则、编译链接方式、使用场景上差异显著,核心区别在于“是否将库代码嵌入可执行文件”。 静态库(Static Library)静态库是“编译时完整嵌入可执行文件”的库,一旦链接,可执行文件便不再依赖原库文件,独立运行。 核心特征 命名规则:固定以 lib 开头、....
Linux系统上C程序的编译与调试
gcc 分步编译链接GCC(GNU Compiler Collection)是一套功能强大的编译器套件,可将 C/C++ 等源代码转化为可执行程序。从源代码(.c)到可执行程序的过程分为预编译、编译、汇编、链接四个核心阶段,每个阶段生成特定格式的中间文件,最终输出可执行程序。这些过程共同搭建了从 “人类可读的高级语言” 到 “机器可执行的二进制指令” 的桥梁,最终产物需加载到计算机存储器(内存)中,由控制器按指令顺序调度,运算器执行算术 / 逻辑运算,通过输入设备(如键盘)获取数据,输出设备(如显示器)展示结果,完成程序功能。 预编译(Preprocessing)命令:gcc -E main.c -o main.i作用是处理源代码中的预处理指令,生成预处理后的文本文件(.i)。具体操作包括展开所有#include头文件(将头文件内容插入当前文件)、处理所有#define宏定义(替换宏名与宏体,删除#define指令)、删除注释(//或/*...*/)、处理条件编译指令(如#if、#elif、#else、#endif,保留满足条件的代码)。输出文件为main.i...




