自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(107)
  • 收藏
  • 关注

原创 【Linux 网络编程】深入理解 Linux 高并发核心:epoll 机制全解析

本文深入解析Linux高性能网络编程中的epoll机制,针对C10K问题提出解决方案。传统模型如select/poll因资源消耗大、效率低(O(n)扫描)而受限。epoll通过三大API(创建实例、管理事件、等待事件)实现高效事件通知,内核与用户空间共享信息减少拷贝开销,时间复杂度优化为O(1)。其核心优势在于动态数据结构、就绪事件直接返回,并通过水平/边沿触发模式灵活适配场景,成为高并发服务器的关键技术。

2025-11-06 11:26:22 768

原创 【Linux 网络编程】poll系统调用深度解析:从原理到实践的多路复用改进方案

Linux中的poll机制及其应用 poll是Linux中高效的I/O多路复用技术,解决了select的文件描述符数量限制问题。它以struct pollfd数组为核心,通过分离输入(events)与输出(revents)参数,简化了事件管理流程。文章详细介绍了poll的函数原型和参数,并提供了一个TCP服务器的实现示例:初始化pollfd数组、监听读事件、处理连接请求和数据接收。相比于select,poll不仅突破了文件描述符数量限制,还避免了每次调用前重置参数的问题,使得网络编程更加高效和直观。

2025-11-06 11:25:51 665

原创 【Linux 网络编程】select系统调用深度解析:从原理到实践的多路复用实现

本文介绍了传统阻塞I/O模型在高并发场景下的不足,提出了I/O多路复用技术作为解决方案,重点讲解了select系统调用的原理与使用。select通过监视多个文件描述符的可读、可写和异常事件,实现单线程管理大量连接。文章详细解析了select函数参数和fd_set位图操作,并给出了一个简化版的服务端实现示例,展示了如何用select处理网络事件。核心优势在于:1)减少线程资源消耗;2)提高响应效率;3)支持单线程处理高并发连接。

2025-11-05 10:30:45 1031

原创 【Linux 网络编程】从阻塞 IO 到异步 IO

本文详细解析了五种IO模型:阻塞IO、非阻塞IO、信号驱动IO、多路复用IO和异步IO。前四种模型在数据拷贝阶段都是同步阻塞的,属于同步IO;只有异步IO实现了完全非阻塞。多路复用IO通过单线程管理多个连接,成为高并发网络编程的主流选择,而异步IO性能最优但实现复杂。文章通过钓鱼的生动比喻,阐述了各模型的特点和适用场景,强调应根据具体需求选择合适的IO模型,其中多路复用IO是构建高并发服务的行业标准。

2025-11-05 10:29:39 696

原创 输入URL后的网络世界

本文系统梳理了从输入URL到页面加载的完整通信流程,基于TCP/IP协议栈详细解析了各层交互过程。首先通过DNS解析获取服务器IP地址,随后建立TCP连接(三次握手),HTTPS协议还需进行TLS密钥协商。数据在协议栈中逐层封装传递:应用层构建HTTP请求,传输层TCP封装,网络层IP路由,数据链路层帧封装。服务器处理请求后返回响应,浏览器解析渲染页面内容,最终通过TCP四次挥手释放连接。整个过程展现了互联网通信的完整协议协作机制。

2025-11-04 12:21:01 878

原创 【计算机网络】数据链路层深度解析:从以太网帧到MAC地址寻址

本文主要介绍了数据链路层特别是以太网协议的工作原理。数据链路层负责局域网内设备间的数据传输,核心功能包括成帧和物理寻址(通过MAC地址)。以太网帧包含固定长度的报头(14字节)和报尾(4字节),并通过"类型"字段识别上层协议。MTU限制数据大小(1500字节),影响上层分片策略。交换机通过MAC地址表实现单播、广播和未知单播转发。文章还简要介绍了MAC地址的格式和作用,以及CRC校验等关键技术。

2025-11-04 12:20:24 1051

原创 【Linux 网络编程】深入理解Linux内核TCP实现:数据结构与系统调用处理流程

本文分析了Linux内核中TCP协议栈的管理机制,重点探讨了内核数据结构之间的继承关系及其与文件系统的交互。核心数据结构包括: 继承体系、、 文件描述符转换、协议操作实现。这些设计体现了Linux内核网络子系统通过分层抽象和面向对象思想,实现了高效灵活的协议管理机制,同时保持与上层文件系统的无缝集成。

2025-11-03 12:42:18 1728

原创 【计算机网络】UDP协议深度解析:从报文结构到可靠性设计

本文介绍了TCP/IP协议栈中传输层的UDP协议。UDP是一种无连接、不可靠的传输层协议,其特点包括面向数据报传输、不保证数据可靠性和顺序性、没有拥塞控制等。文章详细解析了UDP报文结构,包括源/目的端口号、长度和校验和等字段,并对比了UDP与TCP协议在连接性、可靠性、传输模式等方面的主要区别。此外,还探讨了在应用层实现UDP可靠性的方法,如确认机制、重传机制和序列号等。UDP适用于对速度和实时性要求高而能容忍数据丢失的场景,体现了传输效率与可靠性之间的设计权衡。

2025-11-03 12:40:58 1230

原创 【计算机网络】深入理解ARP协议:工作原理、报文格式与安全防护

ARP协议用于在局域网中通过IP地址解析对应的MAC地址。当主机A需要向主机B发送数据时,若ARP缓存中无目标MAC地址,会广播ARP请求;主机B收到后单播回复ARP响应,双方更新缓存后即可通信。ARP协议存在安全漏洞,攻击者可伪造ARP响应篡改缓存表,实施中间人攻击(如窃听、篡改数据)。防范措施包括静态ARP绑定、防护软件、交换机安全功能等。该协议解决了IP与MAC地址映射问题,但其无条件信任机制需额外防护措施保障网络安全。

2025-11-01 11:40:39 915

原创 【计算机网络】深入理解网络层:IP地址划分、CIDR与路由机制详解

本文介绍了TCP/IP协议栈中网络层的核心概念。首先阐述了IP地址的结构(网络号+主机号)和传统分类划分(A/B/C类)的局限性,包括地址浪费和路由表膨胀问题。随后详细讲解了CIDR技术,通过可变长子网掩码实现更灵活的网段划分,并举例说明了子网划分方法。文章还区分了公网IP和内网IP,解释了NAT技术的重要性。最后剖析了路由器的核心功能,包括WAN/LAN口IP配置、DHCP服务和路由表查询机制,并描述了数据包转发的完整流程。这些知识构成了现代网络通信的基础架构。

2025-11-01 11:40:05 923

原创 【计算机网络】IP协议深度解析:从报文结构到分片重组机制

本文探讨TCP/IP协议栈中网络层的IP协议。IP协议实现主机间通信,核心功能包括寻址路由和分片重组。IP报文采用固定报头与自描述字段分离数据,通过协议字段确定上层交付目标。关键字段包括版本、首部长度、总长度、TTL、协议类型及校验和。分片重组通过标识符、标志位和片偏移实现,但分片丢失会导致整个数据包重传。网络层分片优于传输层和数据链路层,因其能屏蔽网络差异并实现路径MTU发现。IP协议的无连接和不可靠特性由上层协议保障可靠性。

2025-10-31 16:32:27 764

原创 【计算机网络】NAT技术深度解析:从原理到NAPT实现的工作机制

本文介绍了NAT(网络地址转换)技术及其实现方式NAPT,用于解决IPv4地址不足问题。NAT将内网IP转换为公网IP进行通信,通过维护转换表记录内网IP:端口与公网IP:端口的映射关系。NAPT作为NAT的一种实现,不仅修改网络层源IP,还会修改传输层源端口,使多个内网主机共享单一公网IP。 优点包括节省公网IP、增强安全性和网络管理灵活性;缺点则是破坏端到端通信、造成性能瓶颈和单点故障风险。该技术虽解决了IPv4地址短缺问题,但也带来了新的网络架构挑战。

2025-10-31 16:31:52 1343

原创 【计算机网络】TCP协议深度解析:可靠性保障与性能优化机制全揭秘

TCP(传输控制协议)是一种面向连接、可靠的传输层协议,通过三次握手建立连接和四次挥手断开连接,并采用ACK确认应答、超时重传等机制确保数据传输的可靠性。TCP将数据视为无结构字节流,可能导致应用层粘包问题,需通过定长报文、特殊字符或自描述字段等方式解决。TCP协议报文格式包含源/目的端口、序列号、确认序列号、控制标志位等字段,其中ACK标志位和确认序列号实现ACK确认应答机制,而捎带应答机制则通过合并数据与ACK提升传输效率。

2025-10-30 11:33:22 1420

原创 【计算机网络】TCP连接管理详解:三次握手、四次挥手与异常处理机制

本文深入解析了TCP协议的三次握手和四次挥手过程。三次握手通过同步序列号、验证全双工通信可靠性来避免资源浪费,防止SYN Flood攻击。四次挥手则由于TCP全双工特性,需要双方独立关闭各自的数据通道。同时探讨了TIME_WAIT状态的作用,以及Socket API与TCP连接的关系,指出连接建立由操作系统完成,accept仅用于获取连接句柄。通过图解和详细分析,阐明了TCP通信的核心机制及其设计原理。

2025-10-30 11:32:52 1231

原创 【计算机网络】HTTPS加密机制详解:从对称加密到证书认证的安全通信

HTTPS加密过程通过结合对称加密、非对称加密和数字证书认证机制保障数据传输安全。首先,服务器向CA机构申请数字证书,证书包含服务器公钥和CA的数字签名。客户端内置可信CA公钥,通过验证证书签名确认服务器公钥的真实性。随后,客户端生成临时对称密钥,用服务器公钥加密后传输。服务器用私钥解密获得对称密钥,双方后续通信均使用该密钥进行高效加密。这种混合加密方案既解决了对称加密密钥传输的安全问题,又避免了非对称加密的效率低下。数字证书认证机制有效防止中间人攻击,确保通信双方身份的真实性。

2025-10-29 18:18:09 1106

原创 【数据结构】跳表

跳表是一种高效动态数据结构,通过多层索引优化有序链表的查询效率,将时间复杂度降至O(log n)。其设计核心在于随机层数分配,不再严格保持上下层1:2比例,而是通过概率p和最大层数maxlevelsize控制索引分布,平衡查找效率与空间开销。基本实现包括查找、插入和删除操作:查找时从高层向下遍历,插入时随机生成层数并更新前后指针,删除时调整相应层级的链接关系。这种设计避免了严格比例带来的维护成本,使其在Redis等系统中广泛应用。

2025-10-29 18:17:16 554

原创 【计算机网络】HTTP核心机制解析:方法、状态码、Header与会话管理

本文介绍了HTTP(超文本传输协议)的基本概念和URL(统一资源定位符)的结构。HTTP是应用层协议,用于浏览器与服务器之间的通信,遵循"一请求一响应"模式。

2025-10-28 12:22:10 915

原创 【算法】图的最小生成树

最小生成树(MST)是连通图中权值和最小的生成树。本文介绍了两种构建最小生成树的算法:Kruskal算法和Prim算法。Kruskal算法通过优先级队列选取权值最小的边,并用并查集判断是否成环,时间复杂度为O(ElogE)。Prim算法从初始顶点出发,逐步扩展已连接顶点集合,每次选取连接两个顶点集合的最小权值边,避免了成环判断,时间复杂度为O(V²)。两种算法均基于贪心策略,但适用场景不同:Kruskal适合稀疏图,Prim适合稠密图。代码实现展示了邻接矩阵下两种算法的具体操作。

2025-10-28 12:20:38 682

原创 【计算机网络】深入浅出DNS:网络世界的地址簿与导航系统

DNS(域名系统)技术解析:从主机名到IP地址的转换之旅 早期的互联网使用hosts文件管理主机名与IP地址的映射,但随着网络规模扩大,这种集中式管理变得低效。DNS系统应运而生,采用分布式层级结构来管理域名解析。域名采用从右到左的层级结构,包括根域、顶级域(如.com)、二级域(自主注册部分)和子域名。DNS查询过程经过多个环节:浏览器缓存→操作系统缓存→本地DNS服务器→根域名服务器→TLD服务器→权威服务器,最终返回IP地址并缓存。这种分层设计既保证了高效解析,又实现了分布式管理。

2025-10-27 12:32:33 972

原创 【算法】图的最短路径

本文介绍了三种经典的最短路径算法:Dijkstra算法(单源最短路径,不适用于负权值)、Bellman-Ford算法(单源最短路径,可处理负权值但不支持负权回路)和Floyd算法(双源最短路径)。重点解析了Dijkstra算法的贪心原理,通过集合划分和迭代选取最近顶点的方式实现路径优化,并给出了邻接矩阵实现代码。同时简要说明了Bellman-Ford算法的特点——能处理负权边但无法解决带负权回路的图。文中通过图示详细演示了Dijkstra算法的执行过程。

2025-10-27 12:30:12 671

原创 【C++11】std::atomic

C++11引入的std::atomic模板类提供了一种无锁机制实现线程安全操作。以及 CAS原理:通过硬件支持的比较交换(Compare-And-Swap)原子指令实现无锁编程,保证比较和交换操作的原子性

2025-10-16 11:42:52 1266

原创 【C++11】mutex和condition_variable

本文介绍了C++11并发编程中的互斥量(mutex)相关功能,重点讲解了std::mutex、std::recursive_mutex和std::timed_mutex的使用场景和特性。文章详细说明了如何使用std::lock_guard和std::unique_lock这两个RAII封装类来管理互斥量资源,强调了std::unique_lock的额外功能和灵活性(如延迟加锁、尝试加锁等)。此外,还介绍了防止死锁的两个函数模板std::lock和std::try_lock

2025-10-16 11:41:53 796

原创 【C++11】thread和this_thread

本文介绍了C++11线程库中的thread类和this_thread命名空间。thread类封装了各系统原生线程库,支持跨平台、面向对象编程,提供多种构造函数但不支持拷贝构造。通过案例展示了线程创建和线程管理容器的使用。this_thread提供了获取当前线程信息的方法,重点讲解了yield()的适用场景和注意事项,以及sleep_for/sleep_until配合chrono时间库的使用。chrono库支持高精度时间测量和运算,适用于性能测试、定时器等场景。

2025-10-15 10:40:40 1165

原创 【Linux 系统】会话和守护进程

本文介绍了Linux系统中的会话管理、守护进程及其实现,并补充了Xshell与远端Linux主机的连接过程。主要内容包括: 会话管理:解释了进程组、会话和控制终端的关系,说明终端断开时会话及其进程的终止机制,以及多个会话窗口的隔离性。 守护进程:描述了守护进程的特点(孤儿进程、独立会话等),并提供了两种实现方案:通过setsid系统调用自主实现,或使用库函数daemon。 Xshell连接过程:概述了Xshell通过SSH协议连接Linux主机的五个阶段,重点说明了TCP连接建立和用户认证过程。 文章强调守

2025-10-15 10:39:55 770

原创 【Linux 系统】互斥与同步

本文讨论了多线程编程中的互斥问题及其解决方案。首先通过一个抢票示例展示了多线程共享变量导致的数据不一致问题,如票数出现负数或重复。接着介绍了互斥锁机制,包括初始化、加锁和解锁操作,并通过代码演示如何用互斥锁保护临界区。文章还分析了加锁的原则,强调要平衡临界区大小与线程并发度。最后从汇编层面解释了互斥锁的工作原理,指出申请锁的本质是将共享数据变为线程私有,从而保证操作的原子性。关键点包括:互斥锁保护共享数据、临界区控制、加解锁机制及其底层实现原理。

2025-10-14 15:53:34 1449

原创 【Linux 系统】线程控制

本文介绍了Linux系统中pthread库提供的多线程控制接口。重点讲解了5个核心函数:创建线程的pthread_create、等待线程的pthread_join、线程退出的pthread_exit、取消线程的pthread_cancel以及分离线程的pthread_detach。文章还解释了多线程独立栈的实现原理,指出线程栈区维护在共享区,由上层库为每个线程单独管理,同时阐明了用户层tid与内核层LWP的区别。通过示例代码展示了这些接口的基本用法,帮助读者理解Linux下NTPL线程模型的实现机制。

2025-10-14 15:52:53 1184

原创 【Linux 系统】理解线程

本文探讨了Linux操作系统中的线程实现机制。首先从进程与线程的关系入手,指出线程是进程内部的轻量级执行分支,共享进程地址空间但拥有独立栈区。Linux采用task_struct结构同时描述进程和线程,通过轻量级进程(LWP)技术实现线程调度。重点分析了NPTL(原生POSIX线程库)的1:1线程模型,该模型将用户级线程与内核级LWP绑定,兼顾性能和兼容性。最后对比了进程与线程在资源分配、调度开销等方面的差异,指出线程切换成本仅为进程的1/10-1/100,且能更好地利用多核CPU。

2025-10-13 12:24:52 1188

原创 【Linux 系统】信号捕捉

本文介绍了Linux下信号处理的基本概念与实现机制。首先阐述了进程处理信号的三个特点:内置处理能力、延迟处理机制和信号保存能力。重点讲解了两种信号捕捉接口:signal()函数用于设置简单的信号处理函数,但存在同步信号可能重复触发的风险;更安全的sigaction()系统调用则提供了更精细的控制,包括设置阻塞信号掩码等功能。文章通过代码示例演示了信号处理的实际应用,并分析了信号处理的核心时机 - 即从内核态返回用户态时执行。最后解释了用户自定义信号处理方法的完整流程,包括程序替换对信号处理的影响。

2025-10-13 12:23:59 1230

原创 【Linux 系统】信号保存

本文探讨了Linux进程对信号的处理机制,重点分析了信号在内核中的存储和管理方式。文章首先指出进程处理信号与现实行为的相似性,包括信号识别、延迟处理和保存能力。随后详细介绍了PCB中信号保存的位图结构,以及内核通过三个关键字段(block阻塞、pending未决、handler处理函数)管理信号的机制。文中还讲解了信号集操作函数sigprocmask和sigpending的使用方法,并通过代码示例演示了如何屏蔽信号并观察pending表的变化。整体而言,本文系统阐述了Linux信号处理的核心概念和实现原理。

2025-10-11 10:23:34 830

原创 【Linux 系统】信号产生

这篇文章主要介绍了Linux系统中信号的产生和处理机制。

2025-10-11 10:23:01 1000

原创 【Linux 系统】用户态与内核态

文章摘要: 系统调用(如fork)需切换至内核态执行操作系统代码,用户程序无权直接访问内核。CPU通过用户态/内核态切换实现权限控制,类比银行客户与职员角色转换。进程地址空间分为用户空间和内核空间,内核级页表映射操作系统代码。系统调用通过int 80或syscall触发,CPU保存用户态上下文后执行内核代码,完成后恢复现场。中断机制强制CPU处理紧急事件,包括请求、判断、响应、处理(通过中断向量表跳转ISR)和返回五个步骤。内核态切换确保安全隔离,是操作系统核心机制。

2025-10-10 12:19:45 1092

原创 【Linux 系统】浅谈System V IPC

System V IPC 提供了三种进程间通信机制:共享内存、信号量和消息队列。共享内存通过映射同一物理内存实现高速数据共享,但缺乏同步机制;信号量用于进程间同步互斥,确保资源安全访问;消息队列则用于进程间消息传递。这些机制由内核持久化,生命周期随系统,可通过ipcs/ipcrm命令查看和删除。接口包括shmget/shmat(共享内存)、semget/semctl(信号量)等,使用时需注意权限和同步问题。共享内存效率最高但需用户维护数据安全,信号量通过原子操作保证互斥访问。

2025-10-10 12:18:55 930

原创 【Linux 系统】进程管道通信

本文介绍了进程间通信的两种管道方式:匿名管道和命名管道。匿名管道适用于具有亲缘关系的进程间通信,通过系统调用pipe创建读写文件描述符;命名管道则通过特殊文件实现无血缘关系进程的通信。文章阐述了管道的工作原理、接口使用方法及注意事项,并提供了简单的代码示例说明如何实现进程间的单向通信。两种管道方式都基于共享缓冲区实现数据传递,但各有适用场景和限制条件。

2025-10-09 11:36:17 723

原创 【Linux 系统】打开文件和文件系统

本文梳理了Linux系统中文件打开过程的底层机制。当执行open()系统调用时,内核会:1)逐级解析路径,通过dentry缓存查找各级目录inode;2)检查权限;3)在内存中创建inode对象和文件缓冲区;4)分配文件描述符建立连接通道。整个过程涉及磁盘I/O、内存管理和权限验证等关键步骤,内核通过缓存机制优化性能。最终返回的文件描述符作为用户程序与文件系统交互的接口。

2025-10-09 11:35:49 1238

原创 【Linux系统】页表结构

本文介绍了x86架构下的页表结构及其工作原理。虚拟地址通过分层页表结构映射到物理内存,该结构分为页目录、二级页表和偏移量三部分。页目录和二级页表采用类似数组的索引方式,通过10+10+12位的地址分割实现高效映射。这种设计不仅简化了内存管理,还支持权限控制、虚拟内存和地址空间隔离,同时减少内存碎片。4KB页面大小的选择平衡了内存管理和性能优化,并得到硬件广泛支持。MMU硬件组件负责实时地址转换,确保进程访问正确的物理内存地址。

2025-10-08 12:19:32 1026

原创 【Linux系统】PIC位置无关码

本文探讨了动态库编译中-fPIC选项的作用。在编译动态库时,-fPIC生成位置无关代码,通过全局偏移表(GOT)将绝对地址依赖转移到数据段,使代码段可共享且不需修改。这种方法解决了动态库链接器无法确定加载地址的问题,允许动态库被加载到进程地址空间的任意位置。静态链接与动态链接的关键差异在于前者拥有完整信息进行地址分配,而后者需与未来未知组件整合。通过-fPIC选项,动态库既满足了重定位需求,又保持了代码的共享特性。

2025-10-08 12:18:50 895

原创 【Linux 系统】动静态库

本文介绍了静态库和动态库的制作与使用方法。静态库通过将代码编译为.o文件后打包成libname.a文件,使用时需指定头文件路径(-I)和库路径(-L)。动态库则通过gcc -shared生成libname.so文件,编译时需使用-fPIC选项。使用动态库时还需解决运行时加载问题,如拷贝到系统路径或设置LD_LIBRARY_PATH。两者主要区别在于链接方式,静态库直接打包而动态库采用位置无关码。文章还提供了详细的makefile示例和编译选项说明。

2025-10-07 10:04:00 599

原创 【Linux 系统】缓冲区问题

本文探讨了C语言用户缓冲区的刷新机制及其在文件操作中的表现差异。通过三个案例对比分析:1)无换行符时C库函数延迟写入,2)添加fork导致缓冲区内容被复制两次,3)关闭文件描述符导致写入失败。文章指出C库函数(printf等)通过维护缓冲区优化IO效率,其刷新策略根据目标设备而异:显示器按行刷新,普通文件全缓冲或进程退出时刷新。深入解析了缓冲区位置(FILE结构体中)和写时拷贝机制导致的重复输出问题,并附示意图说明数据从用户缓冲区到内核的流动过程。

2025-10-07 10:03:21 953

原创 【Linux 系统】文件系统与软硬件连接

本文主要探讨了操作系统视角下文件在磁盘中的存储方式,重点关注ext2/ext3/ext4文件系统的逻辑存储结构。文件被分为文件属性和内容两部分分别存储:属性存储在inode中,内容存储在数据块中。 磁盘空间通过分区管理,每个分区划分为多个Block Group进行管理。Block Group包含关键结构:SuperBlock(文件系统元信息)、inode Table(文件属性)、Data blocks(文件内容)、Bitmap(空间管理)等。inode采用多级索引方式高效管理大文件内容存储。

2025-10-06 09:47:18 850

原创 【Linux 系统】理解Linux下一切皆文件

本文探讨了Linux"一切皆文件"的设计理念,从硬件到文件系统的层次化实现机制。文章通过三层结构解析:底层硬件设备由内核结构体描述并提供读写方法;中间层用函数指针统一封装不同设备的操作方法;上层文件系统通过struct file关联操作方法,实现统一接口。这种设计使得应用程序通过相同系统调用(如read/write)即可操作不同硬件设备,体现了C语言多态思想。内核根据文件描述符自动路由到对应设备驱动,完成实际操作,对上层保持透明性,从而实现了硬件设备的文件化抽象管理。

2025-10-06 09:46:27 1530

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除