最新资讯

  • 【Linux】systemV消息队列和信号量

【Linux】systemV消息队列和信号量

2025-05-01 08:37:37 1 阅读

个人主页~


消息队列和信号量

  • 一、消息队列
    • 1、实现原理
    • 2、系统调用接口
      • (一)创建获取一个消息队列
      • (二)控制消息队列
      • (三)发送消息
      • (四)在消息队列中获取数据块
  • 二、信号量
    • 1、原理
    • 2、系统调用接口
      • (一)创建获取一个信号量
      • (二)控制信号量
      • (三)PV操作
  • 三、systemV IPC方法的比较
    • 1、描述IPC资源的结构体
    • 2、操作系统对IPC资源进行管理

一、消息队列

1、实现原理

操作系统在内核建立一个队列,通信的两个进程AB以数据块的形式将需要发送的数据pushback到队列中,数据块是一个结构体,其中有字段标识该数据块是谁发送的,所以我们只要让不同的进程看到同一个队列就可以了

2、系统调用接口

(一)创建获取一个消息队列

msgget函数的主要功能是创建一个新的消息队列或者获取一个已经存在的消息队列的标识符

#include 
#include 
#include 
int msgget(key_t key, int msgflg);

返回值:成功返回一个msgid,失败返回-1
key:ftok函数的返回值
msgflg:标识符

函数msgflg作用示例
msggetIPC_CREAT如果指定键对应的消息队列不存在,则创建一个新的消息队列;若已存在,则直接返回该消息队列的标识符msgget(key, IPC_CREAT | 0666)
msggetIPC_EXCL通常与 IPC_CREAT 一起使用,若同时设置这两个标志,当消息队列已经存在时,msgget 调用会失败并返回 -1,errno 会被设置为 EEXISTmsgget(key, IPC_CREAT | IPC_EXCL | 0666)
msgget0600消息队列的所有者具有读写权限,所属组和其他用户没有任何权限msgget(key, 0600)
msgget0660消息队列的所有者和所属组具有读写权限,其他用户没有权限msgget(key, 0660)
msgget0666消息队列的所有者、所属组和其他用户都具有读写权限msgget(key, 0666)

(二)控制消息队列

msgctl用于控制消息队列的系统调用函数,通常用于对消息队列执行各种管理操作,如获取消息队列状态、设置消息队列属性以及删除消息队列等

#include 
#include 
#include 
int msgctl(int msgid, int cmd, struct msqid_ds *buf);

返回值:返回0表示操作成功,返回-1表示操作失败
msgid:消息队列标识符,msgget函数返回值
cmdmsgctl函数的cmd参数常用命令如下:

命令说明
IPC_STAT获取消息队列的状态信息,将信息存储在buf指向的msqid_ds结构中。这些信息包括消息队列的权限、所有者信息、消息队列的大小、当前消息数量等
IPC_SET根据buf指向的msqid_ds结构中的值,设置消息队列的属性。可以设置的属性包括消息队列的权限、队列的最大字节数等
IPC_RMID删除指定的消息队列。调用该命令后,消息队列将被立即删除,所有排队的消息都会被丢弃,并且与该消息队列相关的资源也会被释放
MSG_INFO获取与消息队列相关的系统资源使用信息,例如当前系统中消息队列的总数、系统允许的最大消息队列数等
MSG_STAT该命令与IPC_STAT类似,但它返回的是一个指向struct msg_info结构的指针,该结构包含了更多关于消息队列的统计信息,如发送和接收消息的字节数等

buf:一个指向msgid_ds结构体的指针,用于存储或提供消息队列的相关信息,msqid_ds结构包含了消息队列的各种属性,如队列的权限、所有者信息、消息队列的大小等

(三)发送消息

msgsnd用于向消息队列发送消息的系统调用函数,它允许进程将一个消息添加到指定的消息队列中

#include 
#include 
#include 
int msgsnd(int msgid, const void *msgp, size_t msgsz, int msgflg);

返回值:成功返回0,失败返回-1
msgid:消息队列标识符,msgget函数返回值
msgp:指向要发送的消息结构体的指针,该结构体的第一个成员必须是 long 类型,用于指定消息的类型,后续可以包含消息的数据部分
msgsz:消息数据部分的长度,即msgp所指向结构体中除第一个long类型成员之外的数据长度
msgflg:该位置为0就是不设置

函数msgflg作用示例
msgsndIPC_NOWAIT非阻塞发送消息,当消息队列已满,无法立即发送消息时,如果设置了该标志,msgsnd 函数会立即返回 -1,errno 被设置为 EAGAIN;若未设置该标志,msgsnd 函数会阻塞,直到消息队列有空间可以发送消息msgsnd(msgid, &msgbuf, sizeof(msgbuf.mtext), IPC_NOWAIT)

(四)在消息队列中获取数据块

msgrcv用于从消息队列接收消息的系统调用函数,它允许进程从指定的消息队列中获取消息

#include 
#include 
#include 
ssize_t msgrcv(int msgid, void *msgp, size_t msgsz, long msgtyp, int msgflg);

返回值:成功返回实际收到的消息数据部分的字节数,不包括最前面的long
前两个参数与前面相同
msgsz:接收消息时用于存储消息数据部分的缓冲区的最大长度
msgtyp:如果等于0,那该函数只接收消息队列中的第一条消息,如果大于0,接收消息队列中消息类型为msgtyp的第一条消息,如果小于0,接收消息队列中消息类型小于等于msgtyp绝对值的最小类型的第一条消息
msgflg:该位置为0就是不设置

函数msgflg作用示例
msgrcvIPC_NOWAIT当消息队列中没有符合要求的消息时,如果设置了该标志,msgrcv 函数会立即返回 -1,errno 被设置为 ENOMSG;若未设置该标志,msgrcv 函数会阻塞,直到有符合要求的消息进入消息队列msgrcv(msgid, &msgbuf, sizeof(msgbuf.mtext), msgtype, IPC_NOWAIT)
msgrcvMSG_NOERROR如果接收到的消息长度超过了指定的缓冲区大小,若设置了该标志,消息会被截断为缓冲区大小,多余部分会被丢弃,msgrcv 函数正常返回;若未设置该标志,msgrcv 函数会返回 -1,errno 被设置为 E2BIGmsgrcv(msgid, &msgbuf, sizeof(msgbuf.mtext), msgtype, MSG_NOERROR)

二、信号量

1、原理

信号量是一种用于实现进程间同步与互斥的机制,信号量本质上是一个整数变量,用于控制对共享资源的访问,它可以看作是一种特殊的计数器,其值表示当前可用的共享资源数量,信号量的值可以被多个进程或线程读取和修改,通过对信号量的操作,进程或线程可以协调对共享资源的访问

信号量的工作基于两个基本操作:P操作(wait操作)和V操作(signal操作)
P操作:当一个进程或线程需要访问共享资源时,它会执行 P 操作。P 操作会将信号量的值减 1,如果减 1 后信号量的值大于等于 0,表示当前有可用的资源,进程或线程可以继续访问;如果减 1 后信号量的值小于 0,表示没有可用的资源,进程或线程会被阻塞,直到有其他进程或线程释放资源

V 操作:当一个进程或线程使用完共享资源后,它会执行 V 操作,V 操作会将信号量的值加 1,如果加 1 后信号量的值小于等于 0,表示有其他进程或线程正在等待该资源,此时会唤醒一个等待的进程或线程

2、系统调用接口

(一)创建获取一个信号量

semget是用于创建或获取信号量集的系统调用函数

#include 
#include 
#include 

int semget(key_t key, int nsems, int semflg);

返回值:成功返回信号量标识符semid,失败返回-1
nsems:表示要创建或获取的信号量集中信号量的数量,如果是创建新的信号量集则必须大于 0,如果是获取已有的信号量集则可以为0
semflg:标志位,用于指定创建或获取信号量集的方式和权限

(二)控制信号量

semctl是用于控制信号量集的系统调用函数,它可以对信号量集进行多种操作,如初始化信号量的值、获取信号量的状态、删除信号量集等

#include 
#include 
#include 

int semctl(int semid, int semnum, int cmd, ...);

返回值:取决于cmd的当前值,对于 GETVAL 命令,返回指定信号量的当前值,对于 IPC_STATIPC_SETIPC_RMID 等命令,返回 0 表示成功
semid:信号量标识符,semget函数返回
semnum:信号量集中信号量的编号,编号从 0 开始,如果 cmd 操作不需要针对特定的信号量(如删除整个信号量集),则可以忽略该参数,通常将其设为 0
cmd:要执行的命令,指定了对信号量集或特定信号量的操作类型

(三)PV操作

semop用于对信号量集执行操作的系统调用函数,它允许进程对一个或多个信号量进行原子性的 P和 V操作,从而实现进程间的同步与互斥

#include 
#include 
#include 

int semop(int semid, struct sembuf *sops, unsigned nsops);

返回值:成功返回0,失败返回-1
sops:指向struct sembuf结构体数组的指针,该数组包含了要对信号量集执行的操作序列
nsopssops数组中元素的数量,即要执行的操作序列的长度

三、systemV IPC方法的比较

1、描述IPC资源的结构体

描述共享内存IPC资源结构体:

struct shmid_kernel /* private to the kernel */
{	
	struct kern_ipc_perm	shm_perm;
	struct file *		    shm_file;
	int						id;
	unsigned long			shm_nattch;
	unsigned long			shm_segsz;
	time_t					shm_atim;
	time_t					shm_dtim;
	time_t					shm_ctim;
	pid_t					shm_cprid;
	pid_t					shm_lprid;
	struct user_struct		*mlock_user;
};

描述消息队列IPC资源结构体:

struct msg_queue {
	struct kern_ipc_perm q_perm;
	time_t 				 q_stime;			/* last msgsnd time */
	time_t 				 q_rtime;			/* last msgrcv time */
	time_t				 q_ctime;			/* last change time */
	unsigned long 		 q_cbytes;			/* current number of bytes on queue */
	unsigned long		 q_qnum;			/* number of messages in queue */
	unsigned long		 q_qbytes;			/* max number of bytes on queue */
	pid_t				 q_lspid;			/* pid of last msgsnd */
	pid_t				 q_lrpid;			/* last receive pid */

	struct list_head 	 q_messages;
	struct list_head	 q_receivers;
	struct list_head	 q_senders;
};

描述信号量IPC资源结构体:

struct sem_array {
	struct kern_ipc_perm	sem_perm;			/* permissions .. see ipc.h */
	time_t					sem_otime;			/* last semop time */
	time_t					sem_ctime;			/* last change time */
	struct sem				*sem_base;			/* ptr to first semaphore in array */
	struct sem_queue		*sem_pending;		/* pending operations to be processed */
	struct sem_queue		**sem_pending_last; /* last pending operation */
	struct sem_undo			*undo;				/* undo requests on this array */
	unsigned long			sem_nsems;			/* no. of semaphores in array */
};

他们有一个同样的特点就是第一个参数都是struct kern_ipc_perm类型的

struct kern_ipc_perm
{
	spinlock_t		lock;
	int				deleted;
	key_t			key;
	uid_t			uid;
	gid_t			gid;
	uid_t			cuid;
	gid_t			cgid;
	mode_t			mode; 
	unsigned long	seq;
	void			*security;
};

2、操作系统对IPC资源进行管理

所有的IPC资源都有一个struct kern_ipc_perm结构,所以操作系统通过数组将这些struct kern_ipc_perm结构组织起来

ipc_ids是 Linux 内核中用于管理IPC资源的核心数据结构

struct ipc_ids {
    int             in_use;//记录当前系统中正在使用的IPC资源的数量
    int             max_id;//表示系统中允许的最大IPC标识符值
    unsigned short  seq;//是一个序列号,用于生成唯一的IPC标识符
    unsigned short  seq_max;//是序列号的最大值
    struct          semaphore sem;//这是一个信号量,用于对IPC资源的并发访问进行同步控制    
    struct          ipc_id_ary nullentry;//一个空的ipc_id_ary结构
    struct          ipc_id_ary* entries;//指向ipc_id_ary结构体的指针
};
struct ipc_id_ary {
    int    size;
    struct kern_ipc_perm *p[0];
};

这里的柔性数组p的作用就是维护当前操作系统中所有IPC资源,我们通过强制类型转换来通过这个数组里存的struct ipc_id_ary*找到具体的IPC对象,因为kern_ipc_perm是这三个结构体中的第一个成员,我们只要知道了一个kern_ipc_perm的地址,就相当于知道了某个具体IPC对象的起始地址,然后通过强制类型转换就可以访问到该IPC对象中的所有成员属性,这样就实现了对一个具体IPC对象的访问,如((struct shmid_kernel*)p[0])->q_stime,在kern_ipc_perm中有字段来标识该kern_ipc_perm是属于哪种IPC资源,操作系统就知道要将其强制转化成什么类型了,我们在用户层面上使用的:shmidmsqidsemid在内核上看就是p数组的下标

ipc_id_arry属于操作系统,不属于任何进程,数组下标是线性递增的,但不会因为IPC资源的释放而改变它的递增属性,即当前操作系统中最后一个IPC资源的下标是100,释放掉这个IPC资源,下一次再创建IPC资源的时候它的下标是101,而不是100,当递增到一定值的时候,会回到0


今日分享就到这里了~

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

搜索文章

Tags

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