pipe匿名管道实操(Linux)
管道相关函数
1 pipe
- 是 Unix/Linux 系统中的一个系统调用,用于创建一个匿名管道
#include <unistd.h>
int pipe(int pipefd[2]);
参数说明:
pipefd[2]:一个包含两个整数的数组,用于存储管道的文件描述符:
pipefd[0]:管道的读端(用于从管道读取数据)巧记:用嘴巴口型(o)读
pipefd[1]:管道的写端(用于向管道写入数据)巧记:用笔(1)写
返回值:
成功时返回 0
失败时返回 -1 并设置 errno
2 error
errno
是 C 和 C++ 中用于报告错误的全局变量(或宏),全称为 "error number"。它由系统或标准库函数在操作失败时设置,用于指示具体的错误原因。代码出错时我们更想知道出错原因,就可以用error
常见 errno
错误码
错误码宏 | 值 | 含义 |
---|---|---|
EPERM | 1 | 操作无权限 |
ENOENT | 2 | 文件或目录不存在 |
EINTR | 4 | 系统调用被中断 |
EIO | 5 | 输入/输出错误 |
EBADF | 9 | 错误的文件描述符 |
EAGAIN | 11 | 资源暂时不可用 |
ENOMEM | 12 | 内存不足 |
EACCES | 13 | 权限不足 |
EFAULT | 14 | 非法内存访问 |
EEXIST | 17 | 文件已存在 |
EDOM | 33 | 数学参数超出定义域 |
ERANGE | 34 | 结果超出范围 |
一般和和strerror配合一起使用
#include <iostream>
#include <cerrno>
#include <cstring>int main() {errno = 0; // 先重置 errnodouble x = sqrt(-1.0); // 尝试计算负数的平方根if (errno == EDOM) { // EDOM 是域错误宏std::cerr << "Error: " << std::strerror(errno) << "\n";}
}
输出:
Error: Numerical argument out of domain
3 strerror
- 是 C 标准库中的一个函数,用于将错误代码(errno 值)转换为可读的错误描述字符串。下面我会详细解释它的用法和实际应用场景。
#include <string.h>
char *strerror(int errnum);
参数说明:
errnum:错误编号(通常是 errno 的值)
返回值:
返回指向错误描述字符串的指针(静态分配的字符串,不可修改)
不会失败(永远返回有效指针)
4 推荐使用 #include <cerrno>
而不是 #include <errno.h>
1. 符合 C++ 标准库的命名规范
C++ 标准库对 C 标准库的头文件进行了重新封装,采用无 .h
后缀的形式(如 <cstdio>
、<cstdlib>
、<cerrno>
),以区别于 C 的传统头文件(如 <stdio.h>
、stdlib.h
、errno.h>
)。
<cerrno>
是 C++ 标准化的头文件,明确属于 C++ 标准库。<errno.h>
是 C 风格的头文件,虽然 C++ 兼容它,但不推荐在新代码中使用。
2. 潜在的命名空间管理
理论上,<cerrno>
将相关名称(如 errno
、EDOM
、ERANGE
)放入 std
命名空间,而 <errno.h>
直接将它们暴露在全局命名空间。虽然实际实现中(由于兼容性要求):
errno
仍然是全局宏(无法放入std
)。EDOM
、ERANGE
等宏通常在全局命名空间也可用。
但使用 <cerrno>
能更清晰地表达“这是 C++ 代码”的意图,并可能在未来的标准中更好地支持命名空间隔离。
注意事项
errno
仍是全局宏:即使使用<cerrno>
,errno
也不会变成std::errno
(因为它是宏)。- 错误码宏(如
EDOM
):大多数实现仍允许全局访问,但理论上可以额外通过std::EDOM
访问(尽管实践中很少需要)。
5 fork()
系统调用详解
fork()
是 Unix/Linux 系统中的一个重要系统调用,用于创建一个新的进程(子进程)
#include <sys/types.h>
#include <unistd.h>
pid_t fork(void);
返回值:
父进程:返回子进程的 PID(进程ID,> 0)。
子进程:返回 0。
出错时:返回 -1(并设置 errno)。
6 exit
- 是一个标准库函数,用于终止当前进程,并返回一个状态码给操作系统。它是进程正常退出的标准方式
#include <stdlib.h>
void exit(int status);
参数:
status:进程的退出状态码:
0 或 EXIT_SUCCESS:表示成功退出。
非零值(通常 EXIT_FAILURE=1):表示失败退出(具体含义由程序定义)
exit()
的运行机制
(1) 进程终止流程
当调用 exit()
时,操作系统会按顺序执行以下操作:
-
调用
atexit()
注册的函数(按注册的逆序执行)。 -
刷新所有标准 I/O 缓冲区(如
printf
未输出的内容会被强制写入)。 -
关闭所有打开的文件描述符。
-
释放进程占用的内存和其他资源。
-
向父进程发送状态码(可通过
wait()
或$?
获取)。
(2) exit()
vs _exit()
函数 | 说明 |
---|---|
exit() | 标准 C 库函数,会执行清理(刷新缓冲区、调用 atexit() 等)。 |
_exit() | 系统调用(<unistd.h> ),直接终止进程,不执行任何清理。 |
7 snprintf
snprintf
是 C 标准库中的一个格式化输出函数,用于安全地格式化字符串并写入缓冲区,比传统的 sprintf
更安全,因为它可以防止缓冲区溢出(Buffer Overflow)
#include <stdio.h>
int snprintf(char *str, // 目标缓冲区size_t size, // 缓冲区大小(最多写入 size-1 个字符 + '\0')const char *format, // 格式化字符串(类似 printf)... // 可变参数(要格式化的数据)
);
返回值:
成功:返回理论写入的字符数(不包括结尾的 \0),即使缓冲区不够。
错误:返回负值(如编码错误)。
8 getpid()
getppid()
getpid()
是 Unix/Linux 系统编程中的一个基础系统调用,用于获取当前进程的进程ID(PID)getppid()
是 Unix/Linux 系统调用,用于获取当前进程的父进程 PID(Process ID)
#include <unistd.h> // 必须包含的头文件
pid_t getpid(void); // 返回当前进程的 PID
返回值:
成功:返回当前进程的 PID(正整数)
不会失败(无错误码)#include <unistd.h> // 必须包含的头文件
pid_t getppid(void); // 返回父进程的 PID
返回值:
成功:返回父进程的 PID(正整数)
不会失败(无错误码)
9 sizeof
sizeof
是 C/C++ 中的一个编译时运算符(不是函数!),用于计算变量、类型或表达式所占的内存大小(字节数)。它是静态计算的,不会在运行时影响程序性能
sizeof(变量或类型)
返回值:
size_t 类型的无符号整数(通常是 unsigned int 或 unsigned long)。
计算时机:在编译时确定,不会执行括号内的代码(如果传入表达式)
语法规则
操作对象 | 示例 | 是否必须加括号 | 备注 |
---|---|---|---|
变量名 | sizeof a | 可选 | 更简洁,但可能降低可读性 |
类型名 | sizeof(int) | 必须 | 不加括号会导致编译错误 |
表达式 | sizeof(a + b) | 必须 | 表达式需用括号包裹 |
示例
int arr[10];变量(括号可选)
size_t s1 = sizeof arr; // 计算数组总大小
size_t s2 = sizeof(arr); // 等效写法类型(括号必须)
size_t s3 = sizeof(int); // 计算 int 类型大小表达式(括号必须)
size_t s4 = sizeof(arr[0]); // 计算数组元素大小结构体/类成员的大小
struct S { int x; double y; };
size_t s = sizeof(S::x); // C++ 中合法,计算成员大小
创建管道实操
makefile
mypipe:mypipe.ccg++ -o $@ $^ -std=c++11
.PHONY:clean
clean:rm -rf mypipe
mypipe.cc
#include <iostream>
#include <string>
#include <cerrno>
#include <cassert>
#include <string.h>
#include <sys/types.h>
#include <unistd.h>
#include <sys/wait.h>int main()
{int pipefd[2] = {0};int n = pipe(pipefd);if(n < 0){std::cout << "pipe error, " << errno << ": " << strerror(errno) << std::endl;return 1;}pid_t id = fork();assert(id != -1); if(id == 0){close(pipefd[0]);int cnt = 0;while(true){char x = 'X';write(pipefd[1], &x, 1);std::cout << "Cnt: " << cnt++<<std::endl;sleep(1);}close(pipefd[1]);exit(0);}close(pipefd[1]);char buffer[1024];int cnt = 0;while(true){int n = read(pipefd[0], buffer, sizeof(buffer) - 1);if(n > 0){buffer[n] = '\0';std::cout << "我是父进程, child give me message: " << buffer << std::endl;}else if(n == 0){std::cout << "我是父进程, 读到了文件结尾" << std::endl;break;}else {std::cout << "我是父进程, 读异常了" << std::endl;break;}sleep(1);if(cnt++ > 5) break;}close(pipefd[0]);int status = 0;waitpid(id, &status, 0);std::cout << "sig: " << (status & 0x7F) << std::endl;sleep(100);return 0;
}
mypipe
:目标文件(可执行文件)名称mypipe.cc
:依赖文件(源代码文件)g++ -o $@ $^ -std=c++11
:编译命令$@
表示目标文件(mypipe)$^
表示所有依赖文件(这里只有 mypipe.cc)-std=c++11
指定使用 C++11 标准
.PHONY:clean
:声明 clean 是一个伪目标(不是实际文件)rm -rf mypipe
:删除生成的可执行文件
父进程管理多个子进程实现管道通信实操
Makefile
ctrlProcess:ctrlProcess.ccg++ -o $@ $^ -std=c++11
.PHONY:clean
clean:rm -rf ctrlProcess
Task.hpp
#pragma once#include <iostream>
#include <vector>
#include <unistd.h>typedef void (*fun_t)(); void a() { std::cout << "a任务正在执行...\n" << std::endl; }
void b() { std::cout << "b任务正在执行...\n" << std::endl; }
void c() { std::cout << "c任务正在执行...\n" << std::endl; }#define A 0
#define B 1
#define C 2class Task
{
public:Task(){funcs.push_back(a);funcs.push_back(b);funcs.push_back(c);}void Execute(int command){if (command >= 0 && command < funcs.size()) funcs[command]();}public:std::vector<fun_t> funcs;
};
ctrlProcess.cc
#include <iostream>
#include <string>
#include <vector>
#include <cassert>
#include <unistd.h>
#include <sys/wait.h>
#include <sys/types.h>
#include "Task.hpp"
using namespace std;const int gnum = 3;
Task t;class EndPoint
{
private:static int number;
public:pid_t _c_id;int _w_fd;string processname;
public:EndPoint(int id, int fd) :_c_id(id), _w_fd(fd){//process-0[pid:fd]char namebuffer[64];snprintf(namebuffer, sizeof(namebuffer), "process-%d[%d:%d]", number++, _c_id, _w_fd);processname = namebuffer;}string name() const { return processname; }
};int EndPoint::number = 0;void WaitCommand()
{while(1){int command = 0;int n = read(0, &command, sizeof(command));if (n == sizeof(int)) t.Execute(command);else if (n == 0){std::cout << "父进程关闭了写端" << getpid() << std::endl;break;}else break;}
}void createProcesses(vector<EndPoint> *end_points)
{vector<int> fds;for(int i = 0; i < gnum; ++i){int pipefd[2] = {0};int n = pipe(pipefd);assert(n == 0); (void)n;pid_t id = fork();assert(id != -1);if (id == 0){for(auto &fd : fds) close(fd);close(pipefd[1]);dup2(pipefd[0], 0);WaitCommand();close(pipefd[0]);exit(0);}close(pipefd[0]);end_points->push_back(EndPoint(id, pipefd[1]));fds.push_back(pipefd[1]);}
}int ShowBoard()
{std::cout << "##########################################" << std::endl;std::cout << "| 0. 执行日志任务 1. 执行数据库任务 |" << std::endl;std::cout << "| 2. 执行请求任务 3. 退出 |" << std::endl;std::cout << "##########################################" << std::endl;std::cout << "请选择# ";int command = 0;std::cin >> command;return command;
}void ctrlProcess(const vector<EndPoint> &end_points)
{int cnt = 0;while(true){int command = ShowBoard();if (command == 3) break;if (command < 0 || command > 2) continue;int index = cnt++;cnt %= end_points.size();string name = end_points[index].name();cout << "选择了进程: " << name << " | 处理任务: " << command << endl;write(end_points[index]._w_fd, &command, sizeof(command));sleep(1);}
}void waitProcess(const vector<EndPoint> &end_points)
{for(int i = 0; i < end_points.size(); ++i){std::cout << "父进程让子进程退出:" << end_points[i]._c_id << std::endl;close(end_points[i]._w_fd);waitpid(end_points[i]._c_id, nullptr, 0);std::cout << "父进程回收了子进程:" << end_points[i]._c_id << std::endl;}
}// #define A 0
// #define B 1
// #define C 2int main()
{vector<EndPoint> end_points;createProcesses(&end_points);ctrlProcess(end_points);waitProcess(end_points);return 0;
}
相关文章:
pipe匿名管道实操(Linux)
管道相关函数 1 pipe 是 Unix/Linux 系统中的一个系统调用,用于创建一个匿名管道 #include <unistd.h> int pipe(int pipefd[2]); 参数说明: pipefd[2]:一个包含两个整数的数组,用于存储管道的文件描述符: pi…...
vscode 异常关闭后无法远程连接服务器
笔记本没关机只是合上,结果第二天上班整台笔记本高度发热发烧,吓坏了。。。 强制关机后再开机,幸好能用。但是vscode连接服务器一直不对。 解决方式: 解决一:打开VS Code菜单"View"->“Command Palatt…...
Rust主流框架性能比拼: Actix vs Axum vs Rocket
本内容是对知名性能评测博主 Anton Putra Actix (Rust) vs Axum (Rust) vs Rocket (Rust): Performance Benchmark in Kubernetes 内容的翻译与整理, 有适当删减, 相关指标和结论以原作为准 在以下中,我们将比较 Rust 生态中最受欢迎的几个框架。我会将三个应用程序…...
二氧化铪(HfO2)市场发展分析:从基础到前沿应用
引言:探索二氧化铪的重要性与市场潜力 在现代材料科学中,二氧化铪(HfO2)作为一种关键的高介电常数(High-k)材料,正逐渐成为半导体行业不可或缺的一部分。二氧化铪是一种白色的固体,…...
写一个简单的demo来理解数据库外键
准备工作 安装MySQL 确保已安装MySQL,并启动服务。可以通过命令行或工具(如MySQL Workbench)操作。 创建数据库 sql 复制 CREATE DATABASE school; USE school;创建父表和子表 步骤 1:创建父表(students)…...
Prompt-to-prompt image editing with cross attention control
Project Page: https://prompt-to-prompt.github.io Paper: https://arxiv.org/abs/2208.01626 Code: https://github.com/google/prompt-to-prompt 文章目录 1. Introduction2. Method2.1 Cross-attention in text-conditioned Diffusion Models2.2 Controlling the Cross-att…...
C++Cherno 学习笔记day18 [71]-[75] C++安全、PCH、dynamic_cast、基准测试、结构化绑定
b站Cherno的课[71]-[75] 一、现代C中的安全以及如何教授二、C的预编译头文件PCH三、C的dynamic_cast四、C的基准测试五、C的结构化绑定 一、现代C中的安全以及如何教授 安全编程,或者说C编程中,降低崩溃,内存泄露、非法访问等问题 C11&#…...
根据 PID 找到对应的 Docker 容器
引言 在日常运维与调试过程中,我们常常需要查找某个进程所属的 Docker 容器。当系统出现问题或资源异常时,根据进程的 PID 找到其所属容器可以帮助我们迅速定位问题。本文将介绍如何利用 Linux 的 cgroup 机制,以及 Docker 提供的工具来完成…...
传统项目纯前端实现导出excel之xlsx.bundle.js
传统项目纯前端实现导出excel之xlsx.js 自从vue问世后,使得前端开发更加简洁从容,极大的丰富组件样式和页面渲染效果,使得前端功能的可扩展性得到极大地加强。虽然vue的使用对于前后端分离的项目对于功能实现与扩展有了质的飞跃,但…...
大型手游 DDoS 攻击怎么防护?游戏盾 SDK 技术解剖实录
一、重灾区警报:大型手游为何成为 DDoS 靶心? 1. 血淋淋的行业数据 攻击规模暴涨:2024 年全球手游遭受 > 300Gbps 攻击次数同比激增 173%(Akamai 报告)经济杀伤链:1 小时 500Gbps 攻击可造成ÿ…...
【Harmony】状态管理(V1)
一、概述 文章目录 一、概述二、组件状态管理1、State1.1、State简介1.2、State简单示例 2、Prop2.1、Prop简介2.2、Prop底层实现原理2.3、Prop简单示例 3、Link3.1、Link简介3.2、Link底层实现原理3.3、Link简单示例 4、Provide Consume4.1、Provide Consume简介4.2、Provide …...
udev规则实例:监听usb插拔事件并做出相应
在 Linux 和 Android 系统中,USB 插拔事件的判断涉及从内核到用户空间的多层协作。以下是源码中关键判断点的梳理: 事件流程 内核层:UEvent 机制 USB 插拔事件首先由内核通过 UEvent 机制 上报。内核中的 USB 驱动(如 drivers/…...
【算法】【蓝桥23国A软件C】四版代码思路分析与逐步优化
题目来源:第十四届蓝桥杯大赛软件赛国赛C/C 大学 A 组 题目描述: 问题描述 给定一个 WH 的长方形,两边长度均为整数。小蓝想把它切割为很多个边长为整数的小正方形。假设切割没有任何损耗,正方形的边长至少为 2,不允…...
程序设计竞赛1
题目1 2025年春节期间,DeepSeek作为“AI界的天降紫微星”成为新晋效率神器,热度席卷全球,其团队主创成员也迅速引起了大家的关注。 DeepSeek之所以能在短时间内取得如此不凡成绩,与其团队成员的背景密不可分。团队汇聚了来自清华…...
android studio 2022打开了v1 签名但是生成的apk没有v1签名问题
我使用了Android Studio Flamingo | 2022.2.1 Patch 2版本的IDE编译了一个apk,但是apksigner查看apk的签名信息时,发现只有v2签名,没有v1签名。 apksigner verify -v app-debug.apk Verifies Verified using v1 scheme (JAR signing): false Verified usin…...
EPGAN:融合高效注意力的生成对抗网络图像修复算法
简介 简介:利用掩码设计来遮掉输入图像的一部分,将这类图像输入给生成器。生成器结合ECA注意力机制架构,利用感知损失、对抗损失和均方误差损失的加权和来作为生成器的损失计算。鉴别器分别对应掩码和整张图做损失计算。 论文题目:融合高效注意力的生成对抗网络图像修复算…...
使用模板报错:_G.unicode.len(orgline.text_stripped:gsub(“ “,““))
使用aegisub制作歌词特效,白嫖大佬的自动化模板时,经常会遇到如下报错: Runtime error in template code: Expected 1 arguments, got 2 Code producing error: ci {0,0}; cn _G.unicode.len(orgline.text_stripped:gsub(" ",&q…...
linux入门六:Linux Shell 编程
一、Shell 概述 1. 什么是 Shell? Shell 是 Linux 系统中用户与内核之间的桥梁,作为 命令解析器,它负责将用户输入的文本命令转换为计算机可执行的机器指令。 本质:Shell 是一个程序(如常见的 Bash、Zsh)…...
Franka 机器人x Dexterity Gen引领遥操作精细任务新时代
教授机器人工具灵活操作难题 在教授机器人灵活使用工具方面,目前主要有两种策略:一是人类遥控(用于模仿学习),二是模拟到现实的强化学习。然而,这两种方法均存在明显的局限性。 1、人类遥控(用…...
网络通讯协议UDP转发TCP工具_UdpToTcpRelay_双向版
UDP/TCP网络转发器程序说明书 1. 程序概述 本程序是一个高性能网络数据转发工具,支持UDP和TCP协议之间的双向数据转发,并具备以下核心功能: 协议转换:实现UDP↔TCP协议转换数据转换:支持十六进制/ASCII格式的数据转…...
深入理解 RxSwift 中的 Driver:用法与实践
目录 前言 一、什么是Driver 1.不会发出错误 2.主线程保证 3.可重放 4.易于绑定 二、Driver vs Observable 三、使用场景 1.绑定数据到UI控件 2.响应用户交互 3.需要线程安全的逻辑 4.如何使用Driver? 1.绑定文本输入到Label 2.处理按钮点击事件 3…...
【XML基础-3】深入理解XML Schema:XML的强大语义约束机制
XML(可扩展标记语言)作为数据交换的标准格式,在当今信息技术领域扮演着重要角色。然而,仅有基本的XML语法规则往往不足以满足复杂的数据验证需求。这正是XML Schema发挥作用的地方——它为XML文档提供了强大的语义约束能力。本文将…...
神经网络语言模型与统计语言模型的比较
神经网络语言模型(Neural Language Models, NLMs)与统计语言模型(Statistical Language Models, SLMs)是自然语言处理(NLP)中两类核心的语言建模方法,其核心差异体现在建模方式、表示能力、数据…...
大模型论文:CRAMMING TRAINING A LANGUAGE MODEL ON ASINGLE GPU IN ONE DAY(效率提升)-final
大模型论文:CRAMMING: TRAINING A LANGUAGE MODEL ON ASINGLE GPU IN ONE DAY(效率提升) 文章地址:https://arxiv.org/abs/2212.14034 摘要 近年来,语言建模的研究趋势集中在通过大规模扩展来提升性能,导致训练语言模型的成本变…...
构建AI应用(持续更新)
常用的框架: dify、coze:低代码模块化编程 langchain:面向程序人员 常规的应用: 语音转文字ASR,文字转语音TTS,下一步问题建议, 旅游计划,买点提取,情感陪聊&#x…...
【JAVA】JVM 堆内存“缓冲空间”的压缩机制及调整方法
1. 缓冲空间是否可压缩? 是的,JVM 会在满足条件时自动收缩堆内存,将未使用的缓冲空间释放回操作系统。但需满足以下条件: GC 触发堆收缩:某些垃圾回收器(如 G1、Serial、Parallel)在 Full GC …...
NLP高频面试题(三十八)——什么是LLM的灾难性遗忘?如何避免灾难性遗忘?
近年来,大语言模型在人工智能领域取得了显著进展。然而,随着模型的不断更新和新任务的引入,出现了一个重要的问题,即灾难性遗忘(Catastrophic Forgetting)。灾难性遗忘指的是大模型在连续学习新知识或新任务时,先前掌握的旧知识会迅速被覆盖或遗忘,从而导致模型在旧任务…...
Keepalived+LVS高可用集群实战:从原理到落地
在分布式系统架构中,服务的高可用性和负载均衡是保障业务连续性的核心要素。本文通过一次实验,深入探索了基于KeepalivedLVS的高可用负载均衡集群方案,带您从零开始理解原理、动手实践配置,并验证其可靠性。 一、实验目标 本次实…...
【JVM】JVM调优实战
😀大家好,我是白晨,一个不是很能熬夜😫,但是也想日更的人✈。如果喜欢这篇文章,点个赞👍,关注一下👀白晨吧!你的支持就是我最大的动力!Ǵ…...
Linux系统安全-开发中注意哪些操作系统安全
Hey小伙伴们~👋 在Linux开发中,确保操作系统的安全真的太太太重要啦!🛡️ 今天就来和大家聊聊几个超关键的注意事项,记得拿小本本记下来哦!📝 1️⃣ 用户管理与权限控制👥 合理…...
Qt问题之 告别软件因系统默认中文输入法导致错误退出的烦恼
1. 问题 使用Qt进行研发时,遇到一个问题,当在系统默认输入法中文(英文输入法或者搜狗就不会触发闪退)的情况下,选中QTableWidget控件(QTableWidgetItem有焦点,但是不双击)ÿ…...
2025 年“认证杯”数学中国数学建模网络挑战赛 D题 无人机送货规划
在快递和外卖等短途递送小件货物的业务中,无人机或许大有可为。现 有一个城市的快递仓库准备使用若干无人机进行派件,设有若干架无人机从 仓库出发,分别装载了若干快递包裹。每架无人机装载的包裹的收货地点会 被排列为一个目的地列表&#x…...
【2025年认证杯数学中国数学建模网络挑战赛】A题解题思路与模型代码
【2025年认证杯数学建模挑战赛】A题 该题为典型的空间几何建模轨道动力学建模预测问题。 ⚙ 问题一:利用多个天文台的同步观测,确定小行星与地球的相对距离 问题分析 已知若干地面天文台的观测数据:方位角 (Azimuth) 和 高度角 (Altitude)&…...
Redhat红帽 RHCE8.0认证体系课程
课程大小:7.7G 课程下载:https://download.csdn.net/download/m0_66047725/90546064 更多资源下载:关注我 红帽企业 Linux 系统的管理技能已经成为现代数据中心的核心竞争力。 Linux 在支持混合云、跨物理服务器、虚机、私有云和公共云计…...
Python 实现的运筹优化系统数学建模详解(最大最小化模型)
一、引言 在数学建模的实际应用里,最大最小化模型是一种极为关键的优化模型。它的核心目标是找出一组决策变量,让多个目标函数值里的最大值尽可能小。该模型在诸多领域,如资源分配、选址规划等,都有广泛的应用。本文将深入剖析最大…...
MySQL快速入门
MySQL快速入门 SQL语句 SQL语句概述 1.SQL 是用于访问和处理数据库的标准的计算机语言。 2.SQL指结构化查询语言,全称是 Structured Query Language。 3.SQL 可以访问和处理数据库。 4.SQL 是一种 ANSI(American National Standards Institute 美国…...
离线安装 nvidia-docker2(nvidia-container-toolkit)
很多时候大家都有用docker使用gpu的需求,但是因为网络等原因不是那么好用,这里留了一个给ubuntu的安装包,网络好的话也提供了在线安装方式 安装 nvidia-docker2 1 离线安装 (推荐) unzip解压后进入目录 dpkg -i *.d…...
【自然语言处理】深度学习中文本分类实现
文本分类是NLP中最基础也是应用最广泛的任务之一,从无用的邮件过滤到情感分析,从新闻分类到智能客服,都离不开高效准确的文本分类技术。本文将带您全面了解文本分类的技术演进,从传统机器学习到深度学习,手把手实现一套…...
云原生运维在 2025 年的发展蓝图
随着云计算技术的不断发展和普及,云原生已经成为了现代应用开发和运维的主流趋势。云原生运维是指在云原生环境下,对应用进行部署、监控、管理和优化的过程。在 2025 年,云原生运维将迎来更加广阔的发展前景,同时也将面临着一系列…...
Windows系统Python多版本运行解决TensorFlow安装问题(附详细图文)
Windows系统Python多版本运行解决TensorFlow安装问题(附详细图文) 摘要 TensorFlow 无法安装?Python版本太高是元凶! 本文针对Windows系统中因Python版本过高导致TensorFlow安装失败的问题,提供三种降级解决方案&…...
银行业务知识序言
银行业务知识体系全景解析 第一章 金融创新浪潮下的银行业务知识革命 1.1 数字化转型驱动金融业态重构 在区块链、人工智能、物联网等技术的叠加作用下,全球银行业正经历着"服务无形化、流程智能化、风控穿透化"的深刻变革。根据麦肯锡《2023全球银行业…...
《深度剖析分布式软总线:软时钟与时间同步机制探秘》
在分布式系统不断发展的进程中,设备间的协同合作变得愈发紧密和复杂。为了确保各个设备在协同工作时能够有条不紊地进行,就像一场精准的交响乐演出,每个乐器都要在正确的时间奏响音符,分布式软总线中的软时钟与时间同步机制应运而…...
RK3588 android12 适配 ilitek i2c接口TP
一,Ilitek 触摸屏简介 Ilitek 提供多种型号的触控屏控制器,如 ILI6480、ILI9341 等,采用 I2C 接口。 这些控制器能够支持多点触控,并具有优秀的灵敏度和响应速度。 Ilitek 的触摸屏控制器监测屏幕上的触摸事件。 当触摸发生时&a…...
pgsql:关联查询union(并集)、except(差集)、intersect(交集)
pgsql:关联查询union(并集)、except(差集)、intersect(交集)_pgsql except-CSDN博客...
模型材质共享导致的问题
问题:当我选中其中某个网格模型并设置color的时候,相同种类的颜色都被改变,但是打印我选中的网格模型数据其实只有一个。 导致问题的原因: 加载Blender模型修改材质颜色 Blender创建一个模型对象,设置颜色࿰…...
ThinkpPHP生成二维码
导入依赖 composer require endroid/qr-code 封装成函数,传入二维码包含的值,存储路径,二维码大小,二维码边距 private function getCode($content, $directory, $size 300, $margin 10){// 创建二维码对象// $content: 二…...
FLINK框架:流式处理框架Flink简介
在大数据时代,数据的价值不言而喻,谁能利用好数据,谁就掌握了整个行业的先机。面对海量的数据,如何处理数据成为了一个难题。除了海量数据外,实时性也是一个重要的课题,所以流式数据处理便登上了技术舞台&a…...
使用Python从零开始构建生成型TransformerLM并训练
在人工智能的浩瀚宇宙中,有一种神奇的生物,它拥有着强大的语言魔法,能够生成各种各样的文本,仿佛拥有无尽的创造力。它就是——Transformer 模型!Transformer 模型的出现,为人工智能领域带来了一场“语言魔…...
xtrabackup备份
安装: https://downloads.percona.com/downloads/Percona-XtraBackup-8.0/Percona-XtraBackup-8.0.35-30/binary/tarball/percona-xtrabackup-8.0.35-30-Linux-x86_64.glibc2.17.tar.gz?_gl1*1ud2oby*_gcl_au*MTMyODM4NTk1NS4xNzM3MjUwNjQ2https://downloads.perc…...
2.3 Spark运行架构与流程
Spark运行架构与流程包括几个核心概念:Driver负责提交应用并初始化作业,Executor在工作节点上执行任务,作业是一系列计算任务,任务是作业的基本执行单元,阶段是一组并行任务。Spark支持多种运行模式,包括单…...