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

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 错误码

错误码宏含义
EPERM1操作无权限
ENOENT2文件或目录不存在
EINTR4系统调用被中断
EIO5输入/输出错误
EBADF9错误的文件描述符
EAGAIN11资源暂时不可用
ENOMEM12内存不足
EACCES13权限不足
EFAULT14非法内存访问
EEXIST17文件已存在
EDOM33数学参数超出定义域
ERANGE34结果超出范围

一般和和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.herrno.h>)。

  • <cerrno> 是 C++ 标准化的头文件,明确属于 C++ 标准库。
  • <errno.h> 是 C 风格的头文件,虽然 C++ 兼容它,但不推荐在新代码中使用。

2. 潜在的命名空间管理

理论上,<cerrno> 将相关名称(如 errnoEDOMERANGE)放入 std 命名空间,而 <errno.h> 直接将它们暴露在全局命名空间。虽然实际实现中(由于兼容性要求):

  • errno 仍然是全局宏(无法放入 std)。
  • EDOMERANGE 等宏通常在全局命名空间也可用。

但使用 <cerrno> 能更清晰地表达“这是 C++ 代码”的意图,并可能在未来的标准中更好地支持命名空间隔离。


注意事项

  • errno 仍是全局宏:即使使用 <cerrno>errno 也不会变成 std::errno(因为它是宏)。
  • 错误码宏(如 EDOM:大多数实现仍允许全局访问,但理论上可以额外通过 std::EDOM 访问(尽管实践中很少需要)。

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() 时,操作系统会按顺序执行以下操作:

  1. 调用 atexit() 注册的函数(按注册的逆序执行)。

  2. 刷新所有标准 I/O 缓冲区(如 printf 未输出的内容会被强制写入)。

  3. 关闭所有打开的文件描述符

  4. 释放进程占用的内存和其他资源

  5. 向父进程发送状态码(可通过 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),即使缓冲区不够。
错误:返回负值(如编码错误)。

    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(正整数)
    不会失败(无错误码)

    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 系统中的一个系统调用&#xff0c;用于创建一个匿名管道 #include <unistd.h> int pipe(int pipefd[2]); 参数说明&#xff1a; pipefd[2]&#xff1a;一个包含两个整数的数组&#xff0c;用于存储管道的文件描述符&#xff1a; pi…...

    vscode 异常关闭后无法远程连接服务器

    笔记本没关机只是合上&#xff0c;结果第二天上班整台笔记本高度发热发烧&#xff0c;吓坏了。。。 强制关机后再开机&#xff0c;幸好能用。但是vscode连接服务器一直不对。 解决方式&#xff1a; 解决一&#xff1a;打开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 内容的翻译与整理, 有适当删减, 相关指标和结论以原作为准 在以下中&#xff0c;我们将比较 Rust 生态中最受欢迎的几个框架。我会将三个应用程序…...

    二氧化铪(HfO2)市场发展分析:从基础到前沿应用

    引言&#xff1a;探索二氧化铪的重要性与市场潜力 在现代材料科学中&#xff0c;二氧化铪&#xff08;HfO2&#xff09;作为一种关键的高介电常数&#xff08;High-k&#xff09;材料&#xff0c;正逐渐成为半导体行业不可或缺的一部分。二氧化铪是一种白色的固体&#xff0c;…...

    写一个简单的demo来理解数据库外键

    准备工作 安装MySQL 确保已安装MySQL&#xff0c;并启动服务。可以通过命令行或工具&#xff08;如MySQL Workbench&#xff09;操作。 创建数据库 sql 复制 CREATE DATABASE school; USE school;创建父表和子表 步骤 1&#xff1a;创建父表&#xff08;students&#xff09;…...

    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中的安全以及如何教授 安全编程&#xff0c;或者说C编程中&#xff0c;降低崩溃&#xff0c;内存泄露、非法访问等问题 C11&#…...

    根据 PID 找到对应的 Docker 容器

    引言 在日常运维与调试过程中&#xff0c;我们常常需要查找某个进程所属的 Docker 容器。当系统出现问题或资源异常时&#xff0c;根据进程的 PID 找到其所属容器可以帮助我们迅速定位问题。本文将介绍如何利用 Linux 的 cgroup 机制&#xff0c;以及 Docker 提供的工具来完成…...

    传统项目纯前端实现导出excel之xlsx.bundle.js

    传统项目纯前端实现导出excel之xlsx.js 自从vue问世后&#xff0c;使得前端开发更加简洁从容&#xff0c;极大的丰富组件样式和页面渲染效果&#xff0c;使得前端功能的可扩展性得到极大地加强。虽然vue的使用对于前后端分离的项目对于功能实现与扩展有了质的飞跃&#xff0c;但…...

    大型手游 DDoS 攻击怎么防护?游戏盾 SDK 技术解剖实录

    一、重灾区警报&#xff1a;大型手游为何成为 DDoS 靶心&#xff1f; 1. 血淋淋的行业数据 攻击规模暴涨&#xff1a;2024 年全球手游遭受 > 300Gbps 攻击次数同比激增 173%&#xff08;Akamai 报告&#xff09;经济杀伤链&#xff1a;1 小时 500Gbps 攻击可造成&#xff…...

    【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 系统中&#xff0c;USB 插拔事件的判断涉及从内核到用户空间的多层协作。以下是源码中关键判断点的梳理&#xff1a; 事件流程 内核层&#xff1a;UEvent 机制 USB 插拔事件首先由内核通过 UEvent 机制 上报。内核中的 USB 驱动&#xff08;如 drivers/…...

    【算法】【蓝桥23国A软件C】四版代码思路分析与逐步优化

    题目来源&#xff1a;第十四届蓝桥杯大赛软件赛国赛C/C 大学 A 组 题目描述&#xff1a; 问题描述 给定一个 WH 的长方形&#xff0c;两边长度均为整数。小蓝想把它切割为很多个边长为整数的小正方形。假设切割没有任何损耗&#xff0c;正方形的边长至少为 2&#xff0c;不允…...

    程序设计竞赛1

    题目1 2025年春节期间&#xff0c;DeepSeek作为“AI界的天降紫微星”成为新晋效率神器&#xff0c;热度席卷全球&#xff0c;其团队主创成员也迅速引起了大家的关注。 DeepSeek之所以能在短时间内取得如此不凡成绩&#xff0c;与其团队成员的背景密不可分。团队汇聚了来自清华…...

    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制作歌词特效&#xff0c;白嫖大佬的自动化模板时&#xff0c;经常会遇到如下报错&#xff1a; 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&#xff1f; Shell 是 Linux 系统中用户与内核之间的桥梁&#xff0c;作为 命令解析器&#xff0c;它负责将用户输入的文本命令转换为计算机可执行的机器指令。 本质&#xff1a;Shell 是一个程序&#xff08;如常见的 Bash、Zsh&#xff09…...

    Franka 机器人x Dexterity Gen引领遥操作精细任务新时代

    教授机器人工具灵活操作难题 在教授机器人灵活使用工具方面&#xff0c;目前主要有两种策略&#xff1a;一是人类遥控&#xff08;用于模仿学习&#xff09;&#xff0c;二是模拟到现实的强化学习。然而&#xff0c;这两种方法均存在明显的局限性。 1、人类遥控&#xff08;用…...

    网络通讯协议UDP转发TCP工具_UdpToTcpRelay_双向版

    UDP/TCP网络转发器程序说明书 1. 程序概述 本程序是一个高性能网络数据转发工具&#xff0c;支持UDP和TCP协议之间的双向数据转发&#xff0c;并具备以下核心功能&#xff1a; 协议转换&#xff1a;实现UDP↔TCP协议转换数据转换&#xff1a;支持十六进制/ASCII格式的数据转…...

    深入理解 RxSwift 中的 Driver:用法与实践

    目录 前言 一、什么是Driver 1.不会发出错误 2.主线程保证 3.可重放 4.易于绑定 二、Driver vs Observable 三、使用场景 1.绑定数据到UI控件 2.响应用户交互 3.需要线程安全的逻辑 4.如何使用Driver&#xff1f; 1.绑定文本输入到Label 2.处理按钮点击事件 3…...

    【XML基础-3】深入理解XML Schema:XML的强大语义约束机制

    XML&#xff08;可扩展标记语言&#xff09;作为数据交换的标准格式&#xff0c;在当今信息技术领域扮演着重要角色。然而&#xff0c;仅有基本的XML语法规则往往不足以满足复杂的数据验证需求。这正是XML Schema发挥作用的地方——它为XML文档提供了强大的语义约束能力。本文将…...

    神经网络语言模型与统计语言模型的比较

    神经网络语言模型&#xff08;Neural Language Models, NLMs&#xff09;与统计语言模型&#xff08;Statistical Language Models, SLMs&#xff09;是自然语言处理&#xff08;NLP&#xff09;中两类核心的语言建模方法&#xff0c;其核心差异体现在建模方式、表示能力、数据…...

    大模型论文:CRAMMING TRAINING A LANGUAGE MODEL ON ASINGLE GPU IN ONE DAY(效率提升)-final

    大模型论文&#xff1a;CRAMMING: TRAINING A LANGUAGE MODEL ON ASINGLE GPU IN ONE DAY(效率提升) 文章地址&#xff1a;https://arxiv.org/abs/2212.14034 摘要 近年来&#xff0c;语言建模的研究趋势集中在通过大规模扩展来提升性能&#xff0c;导致训练语言模型的成本变…...

    构建AI应用(持续更新)

    常用的框架&#xff1a; dify、coze&#xff1a;低代码模块化编程 langchain&#xff1a;面向程序人员 常规的应用&#xff1a; 语音转文字ASR&#xff0c;文字转语音TTS&#xff0c;下一步问题建议&#xff0c; 旅游计划&#xff0c;买点提取&#xff0c;情感陪聊&#x…...

    【JAVA】JVM 堆内存“缓冲空间”的压缩机制及调整方法

    1. 缓冲空间是否可压缩&#xff1f; 是的&#xff0c;JVM 会在满足条件时自动收缩堆内存&#xff0c;将未使用的缓冲空间释放回操作系统。但需满足以下条件&#xff1a; GC 触发堆收缩&#xff1a;某些垃圾回收器&#xff08;如 G1、Serial、Parallel&#xff09;在 Full GC …...

    NLP高频面试题(三十八)——什么是LLM的灾难性遗忘?如何避免灾难性遗忘?

    近年来,大语言模型在人工智能领域取得了显著进展。然而,随着模型的不断更新和新任务的引入,出现了一个重要的问题,即灾难性遗忘(Catastrophic Forgetting)。灾难性遗忘指的是大模型在连续学习新知识或新任务时,先前掌握的旧知识会迅速被覆盖或遗忘,从而导致模型在旧任务…...

    Keepalived+LVS高可用集群实战:从原理到落地

    在分布式系统架构中&#xff0c;服务的高可用性和负载均衡是保障业务连续性的核心要素。本文通过一次实验&#xff0c;深入探索了基于KeepalivedLVS的高可用负载均衡集群方案&#xff0c;带您从零开始理解原理、动手实践配置&#xff0c;并验证其可靠性。 一、实验目标 本次实…...

    【JVM】JVM调优实战

    &#x1f600;大家好&#xff0c;我是白晨&#xff0c;一个不是很能熬夜&#x1f62b;&#xff0c;但是也想日更的人✈。如果喜欢这篇文章&#xff0c;点个赞&#x1f44d;&#xff0c;关注一下&#x1f440;白晨吧&#xff01;你的支持就是我最大的动力&#xff01;&#x1f4…...

    Linux系统安全-开发中注意哪些操作系统安全

    Hey小伙伴们~&#x1f44b; 在Linux开发中&#xff0c;确保操作系统的安全真的太太太重要啦&#xff01;&#x1f6e1;️ 今天就来和大家聊聊几个超关键的注意事项&#xff0c;记得拿小本本记下来哦&#xff01;&#x1f4dd; 1️⃣ ‌用户管理与权限控制‌&#x1f465; 合理…...

    Qt问题之 告别软件因系统默认中文输入法导致错误退出的烦恼

    1. 问题 使用Qt进行研发时&#xff0c;遇到一个问题&#xff0c;当在系统默认输入法中文&#xff08;英文输入法或者搜狗就不会触发闪退&#xff09;的情况下&#xff0c;选中QTableWidget控件&#xff08;QTableWidgetItem有焦点&#xff0c;但是不双击&#xff09;&#xff…...

    2025 年“认证杯”数学中国数学建模网络挑战赛 D题 无人机送货规划

    在快递和外卖等短途递送小件货物的业务中&#xff0c;无人机或许大有可为。现 有一个城市的快递仓库准备使用若干无人机进行派件&#xff0c;设有若干架无人机从 仓库出发&#xff0c;分别装载了若干快递包裹。每架无人机装载的包裹的收货地点会 被排列为一个目的地列表&#x…...

    【2025年认证杯数学中国数学建模网络挑战赛】A题解题思路与模型代码

    【2025年认证杯数学建模挑战赛】A题 该题为典型的空间几何建模轨道动力学建模预测问题。 ⚙ 问题一&#xff1a;利用多个天文台的同步观测&#xff0c;确定小行星与地球的相对距离 问题分析 已知若干地面天文台的观测数据&#xff1a;方位角 (Azimuth) 和 高度角 (Altitude)&…...

    Redhat红帽 RHCE8.0认证体系课程

    课程大小&#xff1a;7.7G 课程下载&#xff1a;https://download.csdn.net/download/m0_66047725/90546064 更多资源下载&#xff1a;关注我 红帽企业 Linux 系统的管理技能已经成为现代数据中心的核心竞争力。 Linux 在支持混合云、跨物理服务器、虚机、私有云和公共云计…...

    Python 实现的运筹优化系统数学建模详解(最大最小化模型)

    一、引言 在数学建模的实际应用里&#xff0c;最大最小化模型是一种极为关键的优化模型。它的核心目标是找出一组决策变量&#xff0c;让多个目标函数值里的最大值尽可能小。该模型在诸多领域&#xff0c;如资源分配、选址规划等&#xff0c;都有广泛的应用。本文将深入剖析最大…...

    MySQL快速入门

    MySQL快速入门 SQL语句 SQL语句概述 1.SQL 是用于访问和处理数据库的标准的计算机语言。 2.SQL指结构化查询语言&#xff0c;全称是 Structured Query Language。 3.SQL 可以访问和处理数据库。 4.SQL 是一种 ANSI&#xff08;American National Standards Institute 美国…...

    离线安装 nvidia-docker2(nvidia-container-toolkit)

    很多时候大家都有用docker使用gpu的需求&#xff0c;但是因为网络等原因不是那么好用&#xff0c;这里留了一个给ubuntu的安装包&#xff0c;网络好的话也提供了在线安装方式 安装 nvidia-docker2 1 离线安装 &#xff08;推荐&#xff09; unzip解压后进入目录 dpkg -i *.d…...

    【自然语言处理】深度学习中文本分类实现

    文本分类是NLP中最基础也是应用最广泛的任务之一&#xff0c;从无用的邮件过滤到情感分析&#xff0c;从新闻分类到智能客服&#xff0c;都离不开高效准确的文本分类技术。本文将带您全面了解文本分类的技术演进&#xff0c;从传统机器学习到深度学习&#xff0c;手把手实现一套…...

    云原生运维在 2025 年的发展蓝图

    随着云计算技术的不断发展和普及&#xff0c;云原生已经成为了现代应用开发和运维的主流趋势。云原生运维是指在云原生环境下&#xff0c;对应用进行部署、监控、管理和优化的过程。在 2025 年&#xff0c;云原生运维将迎来更加广阔的发展前景&#xff0c;同时也将面临着一系列…...

    Windows系统Python多版本运行解决TensorFlow安装问题(附详细图文)

    Windows系统Python多版本运行解决TensorFlow安装问题&#xff08;附详细图文&#xff09; 摘要 TensorFlow 无法安装&#xff1f;Python版本太高是元凶&#xff01; 本文针对Windows系统中因Python版本过高导致TensorFlow安装失败的问题&#xff0c;提供三种降级解决方案&…...

    银行业务知识序言

    银行业务知识体系全景解析 第一章 金融创新浪潮下的银行业务知识革命 1.1 数字化转型驱动金融业态重构 在区块链、人工智能、物联网等技术的叠加作用下&#xff0c;全球银行业正经历着"服务无形化、流程智能化、风控穿透化"的深刻变革。根据麦肯锡《2023全球银行业…...

    《深度剖析分布式软总线:软时钟与时间同步机制探秘》

    在分布式系统不断发展的进程中&#xff0c;设备间的协同合作变得愈发紧密和复杂。为了确保各个设备在协同工作时能够有条不紊地进行&#xff0c;就像一场精准的交响乐演出&#xff0c;每个乐器都要在正确的时间奏响音符&#xff0c;分布式软总线中的软时钟与时间同步机制应运而…...

    RK3588 android12 适配 ilitek i2c接口TP

    一&#xff0c;Ilitek 触摸屏简介 Ilitek 提供多种型号的触控屏控制器&#xff0c;如 ILI6480、ILI9341 等&#xff0c;采用 I2C 接口。 这些控制器能够支持多点触控&#xff0c;并具有优秀的灵敏度和响应速度。 Ilitek 的触摸屏控制器监测屏幕上的触摸事件。 当触摸发生时&a…...

    pgsql:关联查询union(并集)、except(差集)、intersect(交集)

    pgsql:关联查询union(并集)、except(差集)、intersect(交集)_pgsql except-CSDN博客...

    模型材质共享导致的问题

    问题&#xff1a;当我选中其中某个网格模型并设置color的时候&#xff0c;相同种类的颜色都被改变&#xff0c;但是打印我选中的网格模型数据其实只有一个。 导致问题的原因&#xff1a; 加载Blender模型修改材质颜色 Blender创建一个模型对象&#xff0c;设置颜色&#xff0…...

    ThinkpPHP生成二维码

    导入依赖 composer require endroid/qr-code 封装成函数&#xff0c;传入二维码包含的值&#xff0c;存储路径&#xff0c;二维码大小&#xff0c;二维码边距 private function getCode($content, $directory, $size 300, $margin 10){// 创建二维码对象// $content: 二…...

    FLINK框架:流式处理框架Flink简介

    在大数据时代&#xff0c;数据的价值不言而喻&#xff0c;谁能利用好数据&#xff0c;谁就掌握了整个行业的先机。面对海量的数据&#xff0c;如何处理数据成为了一个难题。除了海量数据外&#xff0c;实时性也是一个重要的课题&#xff0c;所以流式数据处理便登上了技术舞台&a…...

    使用Python从零开始构建生成型TransformerLM并训练

    在人工智能的浩瀚宇宙中&#xff0c;有一种神奇的生物&#xff0c;它拥有着强大的语言魔法&#xff0c;能够生成各种各样的文本&#xff0c;仿佛拥有无尽的创造力。它就是——Transformer 模型&#xff01;Transformer 模型的出现&#xff0c;为人工智能领域带来了一场“语言魔…...

    xtrabackup备份

    安装&#xff1a; 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运行架构与流程包括几个核心概念&#xff1a;Driver负责提交应用并初始化作业&#xff0c;Executor在工作节点上执行任务&#xff0c;作业是一系列计算任务&#xff0c;任务是作业的基本执行单元&#xff0c;阶段是一组并行任务。Spark支持多种运行模式&#xff0c;包括单…...