最新资讯

  • 【Linux】进程间通信:详解 VSCode使用 | 匿名管道

【Linux】进程间通信:详解 VSCode使用 | 匿名管道

2025-05-02 15:00:04 1 阅读

目录

0. 引入:vscode 的使用

下载

推荐插件

连接云服务器

1. 进程间通信

1.1 是什么

1.2 为什么

1.3 怎么办

介绍 :

2. 匿名管道

2.1 引入

2.2 原理

3. 建立管道的系统调用pipe

3.1 介绍

形参

返回值

3.2 代码

3.3 站在内核的角度

编码实现


0. 引入:vscode 的使用

下载

官⽹下载地址:https://code.visualstudio.com/Download

下载太慢,推荐下载链接:

https://vscode.cdn.azure.cn/stable/30d9c6cd9483b2cc586687151bcbcd635f373630/VSCodeUser

然后一直 next 安装即可

推荐插件

安装完成后在如下地方,继续安装插件即可

  1. Remote - SSH - 远程登录Linux
  2. C/C++ - 必装
  3. C/C++ Extension Pack - C/C++扩展包,下载直接安装,它包含了 vscode 编写 C/C++ ⼯程需要的插件(C/C++、C/C++ Themes、CMake、CMake Tools和Better C++ Syntax等),和以前⽐不需要⼀个个找了。
  4. C/C++ Themes - 主题设置,插件⾥⾯可以点击设置
  5. Chinese (Simplified) (简体中⽂)
  6. vscode-icons - 改变编辑器⾥⾯的⽂件图标
  7. filesize - 左下⻆显⽰源⽂件⼤⼩的插件
  8. Include AutoComplete - ⾃动头⽂件包含
  9. GBKtoUTF8 - ⾃动将 GBK 转换为 UTF8

连接云服务器

安装如下软件后,对照 README 操作,输入主机号即可

可以在我的电脑的如下路径下查看 config ,检查连接

记事本查看

连接完成后,打开需要的文件夹即可

使用小tips:

  • ctrl ~ :打开终端
  • ctrl s : 保存文件
  • ctrl/ :可以实现注释

1. 进程间通信

1.1 是什么

  • 数据传输:一个进程需要将它的数据发送给另一个进程。
  • 资源共享:多个进程之间共享同样的资源。
  • 通知事件:一个进程需要向另一个或一组进程发送消息,通知它(它们)发生了某种事件(如进程终止时要通知父进程)。
  • 进程控制:有些进程希望完全控制另一个进程的执行(如Debug进程),此时控制进程希望能够拦截另一个进程的所有陷入和异常,并能够及时知道它的状态改变。

1.2 为什么

为了实现两个或者多个进程实现数据层面的交互,因为进程独立性的存在,导致进程通信的成本比较

通信可以用于:1. 基本数据 2. 发送命令 3. 某种协调 4. 通知 ...很多场景下需要多个进程协同工作来完成要求。例如

两个进程cat和grep协同工作,将log.txt文件中带有hello的文字显示出来。

1.3 怎么办

当前主要是通过三种策略来实现进程间通信的:

管道:通过文件系统通信

  • 匿名管道
  • 命名管道

System Ⅴ:聚焦在本地通信

  • 共享内存
  • 消息队列
  • 信号量

POSIX:让通信可以跨主机

  • 共享内存
  • 消息队列
  • 信号量
  • 互斥量
  • 条件变量
  • 读写锁

每一种策略下都有很多种通信方式,在这篇文章中将详细讲解管道策略的通信方式。

介绍 :

a. 进程间通信的本质:必须让不同的进程看到同一份“资源

b. 资源?特定形式的内存空间

c. 这个资源谁提供?一般是操作系统

为什么不是我们两个进程中的一个呢?假设一个进程提供,这个资源属于谁?

这个进程独有,破坏进程独立性,所以要借用第三方空间

d. 我们进程访问这个空间,进行通信,本质就是访问操作系统!

进程代表的就是用户,资源从创建,使用(一般),释放--系统调用接口

从底层设计,从接口设计,都要由操作系统独立设计,一般操作系统,会有一个独立的通信模块--隶属于文件系统--IPC 通信模块

定制标准 -- 进程间通信是有标准的 -- system V && posix

e. 基于文件级别的通信方式 --管道

2. 匿名管道

2.1 引入

父子间通信仍然正常进行,并且效率还非常的高,而且还没有影响进程的独立性。而这种不进行IO(不刷到磁盘),就是内存级文件

这种由文件系统提供公共资源的进程间通信,就叫做管道

2.2 原理

匿名管道:没有名字的文件(struct file)。

匿名管道用于父子间通信,或者由一个父创建的兄弟进程(必须有“血缘“)之间进行通信

现在我们知道了匿名管道就是没有名字的文件,通过管道进行通信时,只需要通信双方打开同一个文件就可以。

我们通过系统调用open打开文件的时候,会指定打开方式,是读还是写。

  • 当父进程以写方式打开一个文件的时候,创建的子进程会继承父进程的一切
  • 此时子进程以写的方式打开的这个文件。

既然是通信,势必有一方在写,一方在读,而现在父子双方都是以写的方式打开,它们怎么进行通信呢?

父进程以读和写的方式打开同一份文件两次。可以理解为管道就是文件,有缓冲区,由父子进程引入管道文件

父进程拷贝创建出子进程,PCB 是肯定要的,files_struct 指向同一文件

父子进程公用文件实现了,那么对于读写的控制是怎么实现的呢?

  • 为了防止父进程对管道进行误读,以及子进程对管道进行误写,破坏通信规则。
  • 将父进程的读端关闭,将子进程的写端关闭,使用系统调用close(fd)。

只想让父子进程进行单向通信!所以称为管道通信。把文件这套拿过来,用就是为了简单

我们想让子进程进行写入,父进程进行读取

细节图

如果我要进行双向通信呢?多个管道

如果文件没有任何关系,可以用我们刚刚讲的原理进行通信呢?

不能,必须是父子关系/兄弟关系/爷孙关系...进程之间需要有血缘关系,常用于父子,才能继承一套 file_struct。制作如下动图

sum: 至此,通信了吗??没有。建立通信信道--为什么这么费劲?--因为进程具有独立性,要操作系统忙活才能建立出信道,通信是有成本的!

3. 建立管道的系统调用pipe

3.1 介绍

上面都是理论上的,具体到代码中是如何建立管道的呢?既然是操作系统中的文件系统提供的公共资源,当然是用系统调用来建立管道了。

man 2 pipe

形参
  • int pipefd[2] 是一个输出型参数,表示一个数组,该数组有两个元素,下标分别为0和1。
    • 下标为0的元素表示管道读端的文件描述符 fd。(0像张嘴读书)
    • 下标为1的元素表示管道写端的文件描述符 fd。(1像拿笔写字)

通过系统调用 pipe,可以直接获得这两个文件描述符,并将其添加到父进程的文件描述符表中,无需两次打开内存级别的文件。

返回值
  • 返回值为 int 类型的整数,用来反馈管道创建的情况。
    • 返回0表示管道创建成功。
    • 返回-1表示管道创建失败,并且会将错误码自动写入 errno 中。

那么,父进程创建管道后,得到的两个文件描述符是多少呢?是3和4吗?我们可以通过代码来验证这一点。

输出型参数:文件的描述符数字带出来,让用户使用-->3,4,因为0,1,2分别被stdin,stdout,stderr占用。

3.2 代码

下面代码示例展示了如何通过管道(pipe)在父子进程之间进行通信。为了更好地理解代码,我们将其拆分开来并逐段解释每部分的含义。

#include     // 包含pipe, fork, waitpid, write, read等函数的头文件
#include  // 包含pid_t类型的头文件
#include       // 包含std::string类的头文件
#include     // 包含std::cout, std::endl等输入输出流的头文件
#include      // 包含exit函数和一些其他通用函数的头文件

这些头文件提供了程序中使用的函数和类型的声明。

const int NUM = 100; // 定义缓冲区大小
const int N = 2;     // 定义管道数组的大小

这两行代码定义了一些常量,NUM 是缓冲区的大小,N 是管道数组的大小。

void Writer(int wfd) {
    std::string s = "hello, I am child";
    pid_t self = getpid();
    int number = 0;

    char buffer[NUM]; // 定义一个缓冲区

    while (true) {
        sleep(1);

        // 构建发送字符串
        snprintf(buffer, sizeof(buffer), "%s-%d-%d", s.c_str(), self, number++);
        // 发送/写入给父进程, system call
        write(wfd, buffer, strlen(buffer) + 1); // 注意这里需要加1来包括''

        std::cout << number << std::endl;

        if (number >= 5) break;
    }
}

这个函数Writer用于子进程向父进程写入数据。wfd是写端文件描述符,s是发送的字符串,self是子进程ID,number是一个计数器。每次循环中,构建一个包含字符串、子进程ID和计数器的消息,然后写入管道。每写一次,计数器加一,循环5次后退出。

void Reader(int rfd) {
    char buffer[NUM];

    while (true) {
        buffer[0] = 0;
        ssize_t n = read(rfd, buffer, sizeof(buffer));
        if (n > 0) {
            buffer[n] = 0; // 终止字符串
            std::cout << "father get a message[" << getpid() << "]# " << buffer << std::endl;
        } else if (n == 0) {
            std::cout << "father read file done!" << std::endl;
            break;
        } else {
            std::perror("Error reading from pipe"); // 打印错误信息
            break;
        }
    }
}

这个函数Reader用于父进程从管道读取数据。rfd是读端文件描述符。每次循环中,尝试从管道读取数据,如果成功读取到数据,将其打印出来。如果读取到文件结尾或发生错误,则退出循环。

主函数中:

  1. 创建一个管道,pipefd数组包含两个文件描述符,一个用于读,一个用于写。
  2. 调用fork()创建子进程。
  3. 如果fork()失败,打印错误信息并退出。
  4. 如果是子进程,关闭读端,调用Writer函数写数据,写完后关闭写端并退出。
  5. 如果是父进程,关闭写端,调用Reader函数读数据,等待子进程结束,关闭读端。
  6. 最后,打印程序结束的信息并返回。
int main() {
    int pipefd[N] = {0}; // 管道文件描述符
    int n = pipe(pipefd);
    if (n < 0) {
        std::perror("Error creating pipe");
        return 1;
    }

    pid_t id = fork(); // 创建子进程
    if (id < 0) {
        std::perror("Error forking");
        return 2;
    }
    if (id == 0) { // 子进程
        close(pipefd[0]); // 关闭读端

        Writer(pipefd[1]); // 写入数据

        close(pipefd[1]); // 关闭写端
        exit(0);
    } else { // 父进程
        close(pipefd[1]); // 关闭写端

        Reader(pipefd[0]); // 读取数据

        pid_t rid = waitpid(id, nullptr, 0);//回收子进程
        if (rid < 0) {
            std::perror("Error waiting for child process");
            return 3;
        }

        close(pipefd[0]); // 关闭读端
    }

    std::cout << "Program finished." << std::endl;
    return 0;
}

回忆点:

  1. return 2 的设置 : 如果 fork() 失败,程序将返回 2。这里的数字 2 是一个约定的返回值,用于表示 fork() 调用失败。通常情况下,不同的错误情况会使用不同的返回值来区分。
  2. 子进程关闭管道的写端 (pipefd[1]) 并随后调用 exit(0) 是为了:确保子进程只执行写操作,一旦写操作完成,子进程就退出
  3. pid_t rid = waitpid(id, nullptr, 0) :使用 waitpid 函数来等待子进程的结束,结束后父进程一定要实现资源回收
  • waitpid 是一个系统调用,用于等待指定子进程的终止状态。
  • 参数 id 是子进程的 PID(进程标识符)。
  • 参数 nullptr 表示不关心子进程的状态信息。
  • 参数 0 表示默认的行为,即等待任何子进程的终止。

运行:

批注:

  1. buffer[0] = 0; - 清空字符串,标志数组 buffer 作为字符串使用。
  2. buffer[n] = 0; --终止字符串,进行打印
  3. snprintf(buffer, sizeof(buffer), "%s-%d-%d", s.c_str(), self, number++); - 使用安全的格式化函数,防止缓冲区溢出。

snprintf 参数设计简洁说明:

  • buffer:目标字符数组,用于存储格式化后的字符串。
  • sizeof(buffer):指定缓冲区大小,防止溢出。
  • "%s-%d-%d":定义字符串格式,包含字符串、两个整数和一个分隔符。
  • s.c_str():提供要插入的字符串。
  • self:插入的第一个整数。
  • number++:使用并递增的第二个整数。

完整代码:

#include 
#include 
#include 
#include 
#include 
#include 
#include  // 包含snprintf和perror的头文件

const int NUM = 100; // 缓冲区大小
const int N = 2;     // 管道数组的大小
using namespace std;

void Write(int wfd) {
    string s = "hello, I am child";
    int number = 0;
    char buffer[NUM]; // 定义一个缓冲区
    while (true) {
        sleep(1);
        snprintf(buffer, sizeof(buffer), "%s-%d-%d", s.c_str(), getpid(), number++);
        // 构建字符串
        write(wfd, buffer, sizeof(buffer)); // 实现传参写入
        cout << number << endl; // 打印计数
        if (number >= 5) break;
    }
}

void Reader(int rfd) {
    char buffer[NUM];
    while (true) {
        buffer[0] = 0;
        ssize_t n = read(rfd, buffer, sizeof(buffer)); // 读取缓冲区
        if (n > 0) {
            buffer[n] = 0; // 终止字符串,打印
            cout << "father get a message[" << getpid() << "]# " << buffer << endl;
        } else if (n == 0) {
            cout << "father read file done!" << endl;
            break;
        } else {
            perror("Error reading from pipe"); // 打印错误信息
            break;
        }
    }
}

int main() {
    int pipefd[N] = {0}; // 管道数组描述符
    int n = pipe(pipefd);
    if (n < 0) {
        perror("Error pipe");
        return 1;
    }

    pid_t id = fork(); // 创建子进程
    if (id < 0) {
        perror("Error forking");
        return 2; // 回忆点1
    }
    if (id == 0) {
        // 子进程
        close(pipefd[0]);
        Write(pipefd[1]); // 传入写端
        close(pipefd[1]);
        exit(0); // 回忆点2
    } else {
        // 父进程
        close(pipefd[1]);
        Reader(pipefd[0]);

        // 回忆点3
        // 等待回收
        pid_t rid = waitpid(id, NULL, 0);
        if (rid < 0) {
            perror("Error waiting for child process");
            return 3;
        }

        close(pipefd[0]); // 关闭读端
    }

    cout << "Program finished." << endl;
    return 0;
}

3.3 站在内核的角度

必须要调用 write read,系统调用,防止群众当中有坏人,操作系统起到了一个媒介的作用

note:

  • 混编C/C++需掌握字符串处理转换;
  • 管道通信需制定字节流数据协议。

编码实现

管道的 5 大特征

1. 具有血缘关系的进程,进行进程间通信

2. 管道只能单向通信

  • 为什么子进程休眠,父进程也会休眠?是的
  • 看到同一份资源实现了,多执行流共享,难免出现访问冲突的问题,存在临界资源竞争的问题

3. 管道是基于文件的,而文件的生命周期是随进程的例如:不需要我们去关 0 1 2

下面特性之后会详细解释:

4. 父子进程是会进程协同的,同步与互斥的---保护管道文件的数据安全

那父进程休眠,子进程呢?

不读的时候,一瞬间就把管道写满了,可以发现:管道是有固定大小的

5. 管道是面向字节流

可能写端写了十次一百次,读端都不管,看着就是一个一个字节的,上面提到管道有固定大小,那么是多少?

验证管道的固定大小: 使用 ulimit -a 命令可以查看当前用户进程的资源限制,其中包括管道的大小。管道大小在输出中通常标记为 pipe size

ulimit -a | grep "pipe size"
  1. 解释管道大小: 管道的默认大小在不同内核版本中可能有所不同。在许多 Linux 系统上,默认的管道大小是 64 KB。

查看 Linux 发行版和版本: 使用 cat /etc/redhat-release 命令可以查看 Red Hat 或 CentOS 系统的发行版和版本信息。

cat /etc/redhat-release

测试管道大小: 要测试管道大小是否为 64 KB,可以使用 dd 命令尝试写入一个大于 64 KB 的文件到管道,并观察是否能够成功写入。

dd if=/dev/zero of=/dev/null bs=65536 count=1 2>&1 | grep records

如果管道大小确实是 64 KB,那么上面的命令应该能成功写入 64 KB 数据。

查找 pipe_buf 大小pipe_buf 的大小定义在内核头文件中,可以通过查看内核源码或使用 grep 命令在内核头文件中搜索。制

grep -R "define PIPE_BUF" /usr/include/linux

或者,如果你有内核源码树,可以在源码中搜索:

grep -R "define PIPE_BUF" /path/to/linux-source-code/include/linux

进行原子性读取测试: 为了确保在不间断的情况下完整读取 “hello world” 字符串,并保证原子性,可以创建一个管道,并在一个进程中写入字符串,在另一个进程中读取。

管道的四种情况

  1. 读写段正常,管道如果为,读端就要阻塞
  2. 读写端正常,管道如果被写满,写端就要阻塞
  3. 读端正常读,写端关闭读端就会读到 0,表面读到了文件(pipe)结尾,不会被阻塞

eg. 父进程等待子进程(Z)退出,测试 n=0;

      4. 写端是正常写入,读端关闭了的情况呢?敬请期待下篇分解~

一些小思考:

1. 一个进程中可以开两个 pipe:

  • 一个进程可以创建多个管道,每个管道都有独立的读写端

2. read 读到文件尾,write 一写就会更新到文件头:

  • 管道是循环缓冲区,写入数据会覆盖最早的数据,read 指针会自动跳到新的数据开始处

3. 覆盖写,但为什么不会读取垃圾信息?read 指针也在移动:

  • 管道确保了写入和读取的原子性,每次读取都是连续的数据块,不会读取到被覆盖的旧数据。

拓展:

管道(pipe)是一种在进程间进行单向通信的机制。

为什么管道文件无法实现“写了就马上读到”:

  1. 缓冲区限制:管道有一个固定大小的缓冲区。当这个缓冲区满了之后,进一步的写操作将会被阻塞,直到有空间可用。这意味着,如果写入的数据超过了缓冲区的大小,那么这些数据不会立即被读取,因为它们还在等待空间变得可用
  2. 读写顺序:管道是按照顺序操作的。写入端(writer)必须先写入数据,然后读取端(reader)才能从管道中读取这些数据。如果读取端没有进行读取操作,写入端的数据可能会留在缓冲区中。
  3. 原子性:管道的读写操作具有原子性。这意味着每次读取操作要么读取一个完整的数据块,要么读取0个字节(如果缓冲区为空)。这防止了读取到不完整或“垃圾”数据。
  4. 阻塞与非阻塞:默认情况下,读取端如果尝试从一个空的管道中读取数据,将会被阻塞,直到有数据可读。
  5. 进程调度:操作系统的进程调度可能影响管道的读写操作。即使缓冲区中有数据,如果读取进程没有获得CPU时间,那么读取操作也不会发生。

总结来说,管道不是立即写入即读取的同步机制,而是一个提供了有序、缓冲的通信方式,其设计考虑了数据的完整性和进程间的同步。如果需要立即写入后读取,可能需要考虑其他通信机制,如消息队列或信号量。

本文地址:https://www.vps345.com/7221.html

搜索文章

Tags

PV计算 带宽计算 流量带宽 服务器带宽 上行带宽 上行速率 什么是上行带宽? CC攻击 攻击怎么办 流量攻击 DDOS攻击 服务器被攻击怎么办 源IP 服务器 linux 运维 游戏 云计算 javascript 前端 chrome edge llama 算法 opencv 自然语言处理 神经网络 语言模型 ubuntu ssh deepseek Ollama 模型联网 API CherryStudio 数据库 centos oracle 关系型 安全 分布式 RTSP xop RTP RTSPServer 推流 视频 科技 ai java 人工智能 个人开发 python MCP 进程 操作系统 进程控制 Ubuntu 阿里云 网络 网络安全 网络协议 harmonyos 华为 开发语言 typescript 计算机网络 HarmonyOS Next 运维开发 云原生 YOLO efficientVIT YOLOv8替换主干网络 TOLOv8 Flask FastAPI Waitress Gunicorn uWSGI Uvicorn pip conda ui 华为云 华为od 宝塔面板访问不了 宝塔面板网站访问不了 宝塔面板怎么配置网站能访问 宝塔面板配置ip访问 宝塔面板配置域名访问教程 宝塔面板配置教程 vue.js audio vue音乐播放器 vue播放音频文件 Audio音频播放器自定义样式 播放暂停进度条音量调节快进快退 自定义audio覆盖默认样式 android 鸿蒙 ssl EtherCAT转Modbus ECT转Modbus协议 EtherCAT转485网关 ECT转Modbus串口网关 EtherCAT转485协议 ECT转Modbus网关 fastapi mcp mcp-proxy mcp-inspector fastapi-mcp agent sse tcp/ip 物联网 mcu iot 信息与通信 filezilla 无法连接服务器 连接被服务器拒绝 vsftpd 331/530 macos adb 嵌入式 linux驱动开发 arm开发 嵌入式硬件 智能路由器 外网访问 内网穿透 端口映射 面试 性能优化 jdk intellij-idea 架构 numpy asm rust http 机器学习 目标检测 计算机外设 电脑 mac 软件需求 向日葵 flutter Hyper-V WinRM TrustedHosts jenkins AI 爬虫 数据集 mount挂载磁盘 wrong fs type LVM挂载磁盘 Centos7.9 vue3 HTML audio 控件组件 vue3 audio音乐播放器 Audio标签自定义样式默认 vue3播放音频文件音效音乐 自定义audio播放器样式 播放暂停调整声音大小下载文件 学习 微信 微信分享 Image wxopensdk live555 源码剖析 rtsp实现步骤 流媒体开发 ESXi c# vscode ide 编辑器 .netcore github 创意 社区 WSL2 cpu 内存 实时 使用 git elasticsearch dell服务器 go 代理模式 开源 ollama 大模型 ipython 数据结构 c语言 笔记 经验分享 学习方法 后端 Qwen2.5-coder 离线部署 react.js 前端面试题 node.js 持续部署 ai小智 语音助手 ai小智配网 ai小智教程 智能硬件 esp32语音助手 diy语音助手 YOLOv8 NPU Atlas800 A300I pro asi_bench pycharm windows Dify 统信UOS 麒麟 bonding 链路聚合 docker 容器 命名管道 客户端与服务端通信 c++ 深度学习 安装教程 GPU环境配置 Ubuntu22 CUDA PyTorch Anaconda安装 ddos qt stm32项目 单片机 stm32 mysql gpu算力 chatgpt llama3 Chatglm 开源大模型 大数据 数据挖掘 网络用户购物行为分析可视化平台 大数据毕业设计 1024程序员节 Dell R750XS unix debian PVE zotero WebDAV 同步失败 golang 温湿度数据上传到服务器 Arduino HTTP udp unity flask spring boot AI编程 AIGC C 环境变量 进程地址空间 json tomcat websocket sql KingBase 政务 分布式系统 监控运维 Prometheus Grafana uni-app tcpdump oceanbase rc.local 开机自启 systemd Agent 银河麒麟 kylin v10 麒麟 v10 php 僵尸进程 智能手机 NAS Termux Samba Linux postman mock mock server 模拟服务器 mock服务器 Postman内置变量 Postman随机数据 Windsurf .net GaN HEMT 氮化镓 单粒子烧毁 辐射损伤 辐照效应 maven intellij idea pytorch nginx dubbo 计算机视觉 YOLOv12 word图片自动上传 word一键转存 复制word图片 复制word图文 复制word公式 粘贴word图文 粘贴word公式 jar gradle protobuf 序列化和反序列化 安装 C# MQTTS 双向认证 emqx kubernetes ESP32 camera Arduino 电子信息 sqlserver 豆瓣 追剧助手 迅雷 nas 前端框架 aws googlecloud vSphere vCenter 软件定义数据中心 sddc rag ragflow ragflow 源码启动 vim LDAP VMware安装mocOS VMware macOS系统安装 cuda cudnn anaconda jmeter 软件测试 微服务 springcloud HCIE 数通 rpc gateway Clion Nova ResharperC++引擎 Centos7 远程开发 MacOS录屏软件 pillow 产品经理 agi microsoft html5 firefox rust腐蚀 WSL win11 无法解析服务器的名称或地址 程序人生 自动化 迁移指南 ffmpeg 音视频 ue5 vr DeepSeek-R1 API接口 DevEco Studio 客户端 java-ee 鸿蒙系统 rtsp rtp Trae IDE AI 原生集成开发环境 Trae AI Open WebUI 驱动开发 硬件工程 嵌入式实习 eureka bash k8s集群资源管理 云原生开发 https 微信开放平台 微信公众平台 微信公众号配置 三级等保 服务器审计日志备份 wsl2 wsl matlab EasyConnect bootstrap html redis Cline web安全 Kali Linux 黑客 渗透测试 信息收集 devops ci/cd trae zabbix 监控 系统架构 系统安全 ecmascript nextjs react reactjs 黑客技术 流式接口 llm 本地部署 api matplotlib Docker Hub docker pull 镜像源 daemon.json DigitalOcean GPU服务器购买 GPU服务器哪里有 GPU服务器 apache Kylin-Server 国产操作系统 服务器安装 机器人 LLM 大模型面经 职场和发展 Deepseek 大模型学习 AnythingLLM AnythingLLM安装 hadoop 多层架构 解耦 缓存 CPU 主板 电源 网卡 压测 ECS safari Mac 系统 ssrf 失效的访问控制 nvidia 开发环境 SSL证书 虚拟化 半虚拟化 硬件虚拟化 Hypervisor DeepSeek 分析解读 rime 课程设计 xrdp 远程桌面 远程连接 string模拟实现 深拷贝 浅拷贝 经典的string类问题 三个swap thingsboard postgresql 负载均衡 odoo 服务器动作 Server action NPS 雨云服务器 雨云 并查集 leetcode 能力提升 面试宝典 技术 IT信息化 环境迁移 outlook gpt list 模拟实现 IIS .net core Hosting Bundle .NET Framework vs2022 信号处理 直播推流 网络药理学 生信 生物信息学 gromacs 分子动力学模拟 MD 动力学模拟 小艺 Pura X 毕设 prometheus 监控k8s集群 集群内prometheus excel VMware安装Ubuntu Ubuntu安装k8s k8s gitea 媒体 ssh漏洞 ssh9.9p2 CVE-2025-23419 C语言 django threejs 3D svn RAGFLOW SenseVoice vmware 卡死 状态管理的 UDP 服务器 Arduino RTOS yum W5500 OLED u8g2 TCP服务器 自动化编程 openEuler openwrt fpga开发 Wi-Fi DNS jupyter css ros2 moveit 机器人运动 kylin Invalid Host allowedHosts vue 云电竞 云电脑 todesk OD机试真题 华为OD机试真题 服务器能耗统计 selenium 测试工具 压力测试 n8n dity make 网络结构图 okhttp express wireshark 显示过滤器 ICMP Wireshark安装 UOS 统信操作系统 低代码 pygame 远程工作 mybatis 交换机 telnet 远程登录 智能音箱 智能家居 实战案例 webrtc k8s资源监控 annotations自动化 自动化监控 监控service 监控jvm 远程 命令 执行 sshpass 操作 transformer ping++ 华为认证 网络工程师 拓扑图 宝塔面板 部署 AI大模型 ArcTS 登录 ArcUI GridItem arkUI dba visual studio code kafka 线程 多线程 P2P HDLC 思科 测试用例 功能测试 shell 磁盘监控 服务器配置 linux上传下载 无人机 程序员 ocr TRAE 硬件架构 其他 RAID RAID技术 磁盘 存储 ansible playbook 剧本 dify spring jellyfin 实时音视频 实时互动 王者荣耀 redhat 小游戏 五子棋 AI代码编辑器 openvpn server openvpn配置教程 centos安装openvpn 博客 rdp 实验 gpt-3 文心一言 设计模式 软件工程 硬件 设备 GPU PCI-Express Google pay Apple pay 微信小程序 小程序 Linux无人智慧超市 LInux多线程服务器 QT项目 LInux项目 单片机项目 android studio 交互 grafana SSH 腾讯云大模型知识引擎 mysql离线安装 ubuntu22.04 mysql8.0 p2p spring cloud 源码 毕业设计 etcd 数据安全 RBAC 消息队列 混合开发 环境安装 JDK 企业微信 Linux24.04 deepin 金融 深度优先 图论 并集查找 换根法 树上倍增 ruoyi 命令行 基础入门 编程 DeepSeek行业应用 Heroku 网站部署 报错 hive Hive环境搭建 hive3环境 Hive远程模式 Java gitee 视觉检测 游戏机 centos-root /dev/mapper yum clean all df -h / du -sh 产测工具框架 IMX6ULL 管理框架 VMware创建虚拟机 京东云 SWAT 配置文件 服务管理 网络共享 gaussdb nuxt3 JAVA chrome 浏览器下载 chrome 下载安装 谷歌浏览器下载 开发 mamba Vmamba docker搭建nacos详解 docker部署nacos docker安装nacos 腾讯云搭建nacos centos7搭建nacos IIS服务器 IIS性能 日志监控 next.js 部署next.js gitlab 腾讯云 springboot远程调试 java项目远程debug docker远程debug java项目远程调试 springboot远程 交叉编译 Reactor C++ micropython esp32 mqtt lio-sam SLAM 算力 串口服务器 银河麒麟服务器操作系统 系统激活 r语言 数据可视化 数据分析 Ubuntu Server Ubuntu 22.04.5 windwos防火墙 defender防火墙 win防火墙白名单 防火墙白名单效果 防火墙只允许指定应用上网 防火墙允许指定上网其它禁止 多进程 Node-Red 编程工具 流编程 高效远程协作 TrustViewer体验 跨设备操作便利 智能远程控制 wps 安卓 飞牛NAS 飞牛OS MacBook Pro webstorm hibernate KylinV10 麒麟操作系统 虚拟机 Vmware 中间件 可信计算技术 安全架构 网络攻击模型 漏洞 kind 游戏程序 ios pdf 同步 备份 建站 安全威胁分析 工作流 workflow linux安装配置 自动驾驶 firewalld 大模型入门 大模型教程 强制清理 强制删除 mac废纸篓 IPMI KVM bug 弹性计算 云服务器 裸金属服务器 弹性裸金属服务器 arcgis iBMC UltraISO unity3d 网络穿透 Xterminal Cookie Ark-TS语言 恒源云 pyautogui mongodb iftop 网络流量监控 致远OA OA服务器 服务器磁盘扩容 开机自启动 cmos CORS 跨域 Portainer搭建 Portainer使用 Portainer使用详解 Portainer详解 Portainer portainer 飞书 virtualenv dns ue4 着色器 虚幻 yum源切换 更换国内yum源 QQ bot Docker arm oneapi 大模型微调 重启 排查 系统重启 日志 原因 rabbitmq sqlite MS Materials openssl 密码学 自动化运维 code-server MQTT mosquitto echarts 信息可视化 网页设计 AP配网 AK配网 小程序AP配网和AK配网教程 WIFI设备配网小程序UDP开 进程信号 系统开发 binder 车载系统 framework 源码环境 CLion AISphereButler 图像处理 kamailio sip VoIP mariadb 大数据平台 ukui 麒麟kylinos openeuler 统信 虚拟机安装 ollama下载加速 服务器繁忙 框架搭建 Java Applet URL操作 服务器建立 Socket编程 网络文件读取 remote-ssh CH340 串口驱动 CH341 uart 485 大语言模型 RoboVLM 通用机器人策略 VLA设计哲学 vlm fot robot 视觉语言动作模型 具身智能 springboot RustDesk自建服务器 rustdesk服务器 docker rustdesk 医疗APP开发 app开发 web3.py VPS pyqt linux 命令 sed 命令 微信小程序域名配置 微信小程序服务器域名 微信小程序合法域名 小程序配置业务域名 微信小程序需要域名吗 微信小程序添加域名 权限 ux npm RTMP 应用层 服务器主板 AI芯片 CentOS Stream CentOS 孤岛惊魂4 WebRTC 游戏服务器 TrinityCore 魔兽世界 asp.net大文件上传 asp.net大文件上传源码 ASP.NET断点续传 asp.net上传文件夹 asp.net上传大文件 .net core断点续传 .net mvc断点续传 fd 文件描述符 蓝耘科技 元生代平台工作流 ComfyUI 代码调试 ipdb adobe 传统数据库升级 银行 LLMs log4j 蓝桥杯 Python 网络编程 聊天服务器 套接字 TCP Socket IPMITOOL BMC 硬件管理 opcua opcda KEPServer安装 kali 共享文件夹 AI写作 prompt 服务器管理 配置教程 网站管理 NFS 群晖 文件分享 iis 多线程服务器 Linux网络编程 云服务 springsecurity6 oauth2 授权服务器 token sas FTP 服务器 矩阵 工业4.0 单元测试 集成测试 rsyslog 灵办AI Redis Desktop kvm 服务器数据恢复 数据恢复 存储数据恢复 raid5数据恢复 磁盘阵列数据恢复 远程控制 远程看看 远程协助 visualstudio 银河麒麟操作系统 国产化 小智AI服务端 xiaozhi ASR TTS 3d GIS 遥感 WebGIS AD 域管理 网站搭建 serv00 edge浏览器 链表 Windows ai工具 v10 软件 ldap 边缘计算 rclone AList webdav fnOS Linux的权限 图形化界面 怎么卸载MySQL MySQL怎么卸载干净 MySQL卸载重新安装教程 MySQL5.7卸载 Linux卸载MySQL8.0 如何卸载MySQL教程 MySQL卸载与安装 换源 国内源 Debian 多个客户端访问 IO多路复用 回显服务器 TCP相关API langchain deep learning sublime text 监控k8s 监控kubernetes tensorflow 健康医疗 GCC crosstool-ng URL Ubuntu 24 常用命令 Ubuntu 24 Ubuntu vi 异常处理 历史版本 下载 上传视频至服务器代码 vue3批量上传多个视频并预览 如何实现将本地视频上传到网页 element plu视频上传 ant design vue vue3本地上传视频及预览移除 etl SSE Claude 网卡的名称修改 eth0 ens33 c 大文件分片上传断点续传及进度条 如何批量上传超大文件并显示进度 axios大文件切片上传详细教 node服务器合并切片 vue3大文件上传报错提示错误 大文件秒传跨域报错cors 网工 搜索引擎 反向代理 cnn DenseNet 数据库架构 数据管理 数据治理 数据编织 数据虚拟化 Deepseek-R1 私有化部署 推理模型 CrewAI elk qemu libvirt vue-i18n 国际化多语言 vue2中英文切换详细教程 如何动态加载i18n语言包 把语言json放到服务器调用 前端调用api获取语言配置文件 SRS 流媒体 直播 金仓数据库 2025 征文 数据库平替用金仓 增强现实 沉浸式体验 应用场景 技术实现 案例分析 AR Ubuntu 24.04.1 轻量级服务器 dash 正则表达式 pgpool ip命令 新增网卡 新增IP 启动网卡 GoogLeNet 端口测试 自动化测试 性能测试 田俊楠 c/c++ 串口 常用命令 文本命令 目录命令 崖山数据库 YashanDB python3.11 视频编解码 MacMini 迷你主机 mini Apple ArkTs ArkUI es jvm 宠物 免费学习 宠物领养 宠物平台 5G 3GPP 卫星通信 高效日志打印 串口通信日志 服务器日志 系统状态监控日志 异常记录日志 USB网络共享 相差8小时 UTC 时间 ssh远程登录 netty 远程过程调用 Windows环境 文件系统 用户缓冲区 risc-v 输入法 Jellyfin swoole FTP服务器 gcc centos 7 docker run 数据卷挂载 交互模式 无桌面 yolov8 程序员创富 Kali 渗透 web selete 高级IO 我的世界 我的世界联机 数码 软考 VR手套 数据手套 动捕手套 动捕数据手套 计算机 技能大赛 版本 联想开天P90Z装win10 rustdesk 宕机切换 服务器宕机 linux环境变量 av1 电视盒子 机顶盒ROM 魔百盒刷机 执法记录仪 智能安全帽 smarteye 数学建模 SysBench 基准测试 互信 ecm bpm minio eNSP 网络规划 VLAN 企业网络 鲲鹏 昇腾 npu DOIT 四博智联 北亚数据恢复 oracle数据恢复 searxng keepalived PPI String Cytoscape CytoHubba Docker引擎已经停止 Docker无法使用 WSL进度一直是0 镜像加速地址 sonoma 自动更新 人工智能生成内容 xshell termius iterm2 Ubuntu22.04 开发人员主页 音乐服务器 Navidrome 音流 MCP server C/S windows日志 DBeaver 数据仓库 kerberos neo4j 数据库开发 database trea idea Minecraft XCC Lenovo Docker Compose docker compose docker-compose 繁忙 解决办法 替代网站 汇总推荐 AI推理 MQTT协议 消息服务器 代码 H3C iDRAC R720xd can 线程池 freebsd openstack Xen ruby chrome devtools chromedriver skynet 服务器无法访问 ip地址无法访问 无法访问宝塔面板 宝塔面板打不开 IM即时通讯 剪切板对通 HTML FORMAT Cursor XFS xfs文件系统损坏 I_O error 键盘 nac 802.1 portal QT 5.12.12 QT开发环境 Ubuntu18.04 saltstack embedding 聊天室 互联网医院 前后端分离 Playwright FunASR file server http server web server 阿里云ECS 云桌面 微软 AD域控 证书服务器 LORA NLP muduo ROS 个人博客 X11 Xming 集成学习 聚类 程序 性能分析 uni-file-picker 拍摄从相册选择 uni.uploadFile H5上传图片 微信小程序上传图片 yaml Ultralytics 可视化 图形渲染 虚拟局域网 ceph 黑苹果 sdkman sequoiaDB 计算虚拟化 弹性裸金属 Linux awk awk函数 awk结构 awk内置变量 awk参数 awk脚本 awk详解 alias unalias 别名 深度求索 私域 知识库 小番茄C盘清理 便捷易用C盘清理工具 小番茄C盘清理的优势尽显何处? 教你深度体验小番茄C盘清理 C盘变红?!不知所措? C盘瘦身后电脑会发生什么变化? prometheus数据采集 prometheus数据模型 prometheus特点 阻塞队列 生产者消费者模型 服务器崩坏原因 远程服务 jetty undertow 相机 grub 版本升级 扩容 显卡驱动 rocketmq less 大模型应用 ISO镜像作为本地源 稳定性 看门狗 磁盘镜像 服务器镜像 服务器实时复制 实时文件备份 Erlang OTP gen_server 热代码交换 事务语义 序列化反序列化 MNN Qwen SSH 密钥生成 SSH 公钥 私钥 生成 ip jina 备份SQL Server数据库 数据库备份 傲梅企业备份网络版 匿名管道 frp seatunnel dns是什么 如何设置电脑dns dns应该如何设置 银河麒麟桌面操作系统 Kylin OS 在线预览 xlsx xls文件 在浏览器直接打开解析xls表格 前端实现vue3打开excel 文件地址url或接口文档流二进 composer 本地化部署 pppoe radius hugo 考研 游戏引擎 Netty 即时通信 NIO seleium tidb GLIBC HTTP 服务器控制 ESP32 DeepSeek Linux的基础指令 flash-attention vasp安装 私有化 AI作画 信创 信创终端 中科方德 AI agent 思科模拟器 Cisco sqlite3 MySql uv glibc Radius wordpress 无法访问wordpess后台 打开网站页面错乱 linux宝塔面板 wordpress更换服务器 qt项目 qt项目实战 qt教程 国标28181 视频监控 监控接入 语音广播 流程 SIP SDP 物联网开发 软负载 HiCar CarLife+ CarPlay QT RK3588 社交电子 数据库系统 EMQX 通信协议 邮件APP 免费软件 银河麒麟高级服务器 外接硬盘 Kylin SEO chfs ubuntu 16.04 fast 显示管理器 lightdm gdm vscode 1.86 rnn 直流充电桩 充电桩 deepseek r1 单例模式 idm xml 火绒安全 Nuxt.js 内网服务器 内网代理 内网通信 aarch64 编译安装 HPC iphone 目标跟踪 OpenVINO 推理应用 域名服务 DHCP 符号链接 配置 备选 网站 调用 示例 AD域 虚拟显示器 ShenTong make命令 makefile文件 easyui 运维监控 树莓派 VNC uniapp 代理 AutoDL ros 镜像 cd 目录切换 RAGFlow OpenManus 业界资讯 模拟退火算法 宝塔 路径解析 x64 SIGSEGV xmm0 技术共享 策略模式 miniapp 真机调试 调试 debug 断点 网络API请求调试方法 xcode 华为机试 AI-native Docker Desktop Attention 自定义客户端 SAS 指令 英语 xpath定位元素 curl wget 办公自动化 自动化生成 pdf教程 RAG 检索增强生成 文档解析 大模型垂直应用 Linux PID 大大通 第三代半导体 碳化硅 UDP的API使用 本地部署AI大模型 LInux 做raid 装系统 armbian u-boot 模拟器 教程 h.264 设置代理 实用教程 ftp 升级 CVE-2024-7347 Ubuntu DeepSeek DeepSeek Ubuntu DeepSeek 本地部署 DeepSeek 知识库 DeepSeek 私有化知识库 本地部署 DeepSeek DeepSeek 私有化部署 VM搭建win2012 win2012应急响应靶机搭建 攻击者获取服务器权限 上传wakaung病毒 应急响应并溯源 挖矿病毒处置 应急响应综合性靶场 bcompare Beyond Compare tcp Dell HPE 联想 浪潮 SSH 服务 SSH Server OpenSSH Server vscode1.86 1.86版本 ssh远程连接 cursor open Euler dde 自动化任务管理 LLM Web APP Streamlit big data opensearch helm WebUI DeepSeek V3 nlp MI300x web3 飞牛nas fnos 推荐算法 EMUI 回退 降级 gnu 单一职责原则 epoll open webui IMM minicom 串口调试工具 Xinference HarmonyOS apt asp.net大文件上传下载 VSCode 移动云 spark HistoryServer Spark YARN jobhistory mq zookeeper nfs 服务器部署ai模型 SSL 域名 Anolis nginx安装 linux插件下载 免费域名 域名解析 UOS1070e docker命令大全 DocFlow perl 双系统 元服务 应用上架 影刀 #影刀RPA# 内网环境 Python基础 Python教程 Python技巧 axure 富文本编辑器 WLAN 架构与原理 banner deekseek 毕昇JDK 实习 Mermaid 可视化图表 triton 模型分析 ubuntu20.04 开机黑屏 防火墙 NAT转发 NAT Server Unity Dedicated Server Host Client 无头主机 figma WebVM 基础环境 流水线 脚本式流水线 安防软件 WSL2 上安装 Ubuntu Zoertier 内网组网 vpn 沙盒 信号 sentinel 知识图谱 支付 微信支付 开放平台 区块链 PX4 midjourney 代码托管服务 虚幻引擎 css3 virtualbox 浏览器开发 AI浏览器 cocoapods 佛山戴尔服务器维修 佛山三水服务器维修 进程优先级 调度队列 进程切换 存储维护 NetApp存储 EMC存储 TrueLicense Mac内存不够用怎么办 烟花代码 烟花 元旦 嵌入式系统开发 干货分享 黑客工具 密码爆破 本地知识库部署 DeepSeek R1 模型 lsb_release /etc/issue /proc/version uname -r 查看ubuntu版本 超融合 fonts-noto-cjk 强化学习 rancher 加解密 Yakit yaklang 磁盘清理 像素流送api 像素流送UE4 像素流送卡顿 像素流送并发支持 powerpoint 环境配置 tailscale derp derper 中转 线性代数 电商平台 网络建设与运维 网络搭建 神州数码 神州数码云平台 云平台 热榜 kernel 服务器时间 C++软件实战问题排查经验分享 0xfeeefeee 0xcdcdcdcd 动态库加载失败 程序启动失败 程序运行权限 标准用户权限与管理员权限 7z su sudo perf 语音识别 抗锯齿 nftables word CDN 服务网格 istio 多路转接 firewall cfssl TCP协议 Typore 大模型技术 本地部署大模型 GRUB引导 Linux技巧 Logstash 日志采集 iventoy VmWare OpenEuler MVS 海康威视相机 OpenHarmony 项目部署 鸿蒙开发 移动开发 代理服务器 语法 Spring Security lb 协议 Linux环境 rtsp服务器 rtsp server android rtsp服务 安卓rtsp服务器 移动端rtsp服务 大牛直播SDK dock 加速 捆绑 链接 谷歌浏览器 youtube google gmail 我的世界服务器搭建 OpenSSH 带外管理 linux内核 conda配置 conda镜像源 游戏开发 安卓模拟器 IPv4 子网掩码 公网IP 私有IP 主从复制 大模型推理 大模型部署 regedit 开机启动 xss 本地环回 bind webgl Ubuntu共享文件夹 共享目录 Linux共享文件夹 iperf3 带宽测试 minecraft db K8S k8s管理系统 onlyoffice 在线office ArtTS 分布式训练 玩机技巧 软件分享 软件图标 搭建个人相关服务器 虚拟现实 智能电视 SVN Server tortoise svn 根服务器 clickhouse IO模型 移动魔百盒 USB转串口 harmonyOS面试题 HAProxy ubuntu24.04.1 自学笔记 小米 澎湃OS Android 端口 查看 ss 上传视频文件到服务器 uniApp本地上传视频并预览 uniapp移动端h5网页 uniapp微信小程序上传视频 uniapp app端视频上传 uniapp uview组件库 读写锁 AI Agent 字节智能运维 laravel junit IDEA 需求分析 规格说明书 hosts lua g++ g++13 软件构建 autodl IMX317 MIPI H265 VCU 音乐库 飞牛 k8s二次开发 集群管理 查询数据库服务IP地址 SQL Server HarmonyOS NEXT 原生鸿蒙 DeepSeek r1 AzureDataStudio wpf 计算生物学 生物信息 基因组 EtherNet/IP串口网关 EIP转RS485 EIP转Modbus EtherNet/IP网关协议 EIP转RS485网关 EIP串口服务器 flink eclipse Qwen2.5-VL vllm NLP模型 bat 李心怡 java-rocketmq Doris搭建 docker搭建Doris Doris搭建过程 linux搭建Doris Doris搭建详细步骤 Doris部署 docker部署Python docker部署翻译组件 docker部署deepl docker搭建deepl java对接deepl 翻译组件使用 项目部署到linux服务器 项目部署过程 react native 离线部署dify GameFramework HybridCLR Unity编辑器扩展 自动化工具 DIFY win服务器架设 windows server 企业网络规划 华为eNSP cpp-httplib 软链接 硬链接 llama.cpp sysctl.conf vm.nr_hugepages 嵌入式Linux IPC Headless Linux 中兴光猫 换光猫 网络桥接 自己换光猫 maxkb ARG opengl 状态模式 多端开发 智慧分发 应用生态 鸿蒙OS yolov5 ubuntu24 vivado24 VS Code 僵尸世界大战 游戏服务器搭建 服务器部署 本地拉取打包 nosql hexo 跨平台 visual studio 软件卸载 系统清理 Helm k8s集群 burp suite 抓包 mysql安装报错 windows拒绝安装 vnc 智慧农业 开源鸿蒙 团队开发 Web服务器 多线程下载工具 PYTHON ranger MySQL8.0 CPU 使用率 系统监控工具 linux 命令 yum换源 浪潮信息 AI服务器 zip unzip ebpf uprobe Linux权限 权限命令 特殊权限 Linux 维护模式 MAC SecureCRT Web应用服务器 windows 服务器安装 网络爬虫 scapy 电视剧收视率分析与可视化平台 风扇控制软件 UEFI Legacy MBR GPT U盘安装操作系统 iNode Macos 问题解决 MacOS ABAP java-rabbitmq ELF加载 Carla 智能驾驶 lvm 磁盘挂载 磁盘分区 Sealos 论文阅读 cmake 性能调优 安全代理 scikit-learn UDP proxy模式 华为证书 HarmonyOS认证 华为证书考试 samba 流量运营 copilot CosyVoice 网页服务器 web服务器 Nginx fork wait waitpid exit ip协议 export import save load 迁移镜像 MAVROS 四旋翼无人机 top Linux top top命令详解 top命令重点 top常用参数 mcp服务器 client close 输入系统 工具 shell脚本免交互 expect linux免交互 milvus python2 ubuntu24.04 合成模型 扩散模型 图像生成 Unity插件 内核 ubuntu 18.04 浏览器自动化 安装MySQL 通信工程 毕业 Alexnet 极限编程 Reactor反应堆 Apache Beam 批流统一 案例展示 数据分区 容错机制 多产物 容器技术 网络文件系统 vu大文件秒传跨域报错cors cron crontab日志 docker搭建pg docker搭建pgsql pg授权 postgresql使用 postgresql搭建 查看显卡进程 fuser 对比 meld DiffMerge 服务器安全 网络安全策略 防御服务器攻击 安全威胁和解决方案 程序员博客保护 数据保护 安全最佳实践 端口聚合 windows11 达梦 DM8 nvm whistle 机柜 1U 2U System V共享内存 进程通信 ros1 Noetic 20.04 apt 安装 React Next.js 开源框架 docker desktop image 云耀服务器 ROS2 mm-wiki搭建 linux搭建mm-wiki mm-wiki搭建与使用 mm-wiki使用 mm-wiki详解 deployment daemonset statefulset cronjob 图片增强 增强数据 Mac软件 欧标 OCPP 宝塔面板无法访问 powerbi 粘包问题 rpa 国产数据库 瀚高数据库 数据迁移 下载安装 IO 开源软件 Linux find grep 钉钉 话题通信 服务通信 抓包工具 navicat fstab wsgiref Web 服务器网关接口 oracle fusion oracle中间件 硅基流动 ChatBox ardunio BLE WebServer MDK 嵌入式开发工具 论文笔记 AI员工 服务器扩容没有扩容成功 视频平台 录像 视频转发 视频流 授时服务 北斗授时 notepad tar kotlin 隐藏文件 隐藏目录 管理器 通配符 lighttpd安装 Ubuntu配置 Windows安装 服务器优化 零售 MobaXterm 显示器 VMware Tools vmware tools安装 vmwaretools安装步骤 vmwaretools安装失败 vmware tool安装步骤 vm tools安装步骤 vm tools安装后不能拖 vmware tools安装步骤 弹性服务器 WINCC 服务器ssl异常解决 Chatbox 蓝牙 netlink libnl3 西门子PLC 通讯 js 代码规范 大屏端 工具分享 ubuntu安装 linux入门小白 csrutil mac恢复模式进入方法 恢复模式 stable diffusion zerotier NFC 近场通讯 智能门锁 macOS 生活 录音麦克风权限判断检测 录音功能 录音文件mp3播放 小程序实现录音及播放功能 RecorderManager 解决录音报错播放没声音问题 联机 僵尸毁灭工程 游戏联机 开服 服务器正确解析请求体 Docker快速入门 数字证书 签署证书 DevOps 软件交付 数据驱动 解决方案 镜像下载 qt5 客户端开发 搜狗输入法 中文输入法 接口优化 文件传输