自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 云备份项目

我们要做的项目是云备份项目,云备份项目的功能是将客户端的指定目录下的所有文件进行备份管理,将文件上传到服务端进行备份,并且对备份的文件进行管理。该项目的核心技术是要了解掌握有关于http网络协议等知识,该项目采用C++语言进行开发,客户端的主要功能就是将目录下的文件通过http协议,上传到服务端。

2025-06-08 20:50:59 697

原创 【QT】 控件 -- 显示类

也可以通过设置图标的方式设置图片,但是并非是一个好的选择,更多的时候还是希望通过 QLabel 来作为一个更单纯的显示图片的方式。这里一连串的修改都是需要按照一定的顺序来完成的。此时就可以得到同上面效果一样,但是颜色不同的进度条了,同样的,通过上述方式,也可以修改文字的颜色,字体大小等样式。这样的约定主要是因为 GUI 中的状态往往是牵一发动全身的,修改一个地方,就需要同步的对其他内容进行调整。比如需要读取一个很大的文件,就可以获取文件的总的大小和当前读取完毕的大小,来设置进度条的比例。

2025-05-23 16:48:39 897

原创 【QT】 控件 -- 按钮类(Button)

涉及到的各种属性/函数/使用方法,针对接下来等下要介绍的 Qt 的各种控件都是。属性改变时触发的(当选中这个按钮时,会调用一次他的槽函数,当这个按钮的状态从。(3)当前代码中,如果程序启动时并不会选择任何选项,但是可以修改代码,让程序。Qt 的 api 设计风格是非常清晰的,此处列出的属性都是可以获取和设置的。是更彻底的禁用按钮的方式,此时该按钮无法被选中,也无法响应任何输入(这是属于。运行程序可以看到,点击 “其他” 按钮的时候,虽然不会被选中,函数,然后运行程序就可以看到随着选择不同的单选按钮,

2025-05-22 21:27:09 573

原创 【QT】: 初识 QWidget 控件 | QWidget 核心属性(API) | qrc 文件

如果资源比较大(比如是几个 MB 的文件),或者资源特别多,生成的最终的 exe 体积就会比较大,程序运行消耗的内存也会增大,程序编译的时间也会显著增加。其中有效数字是用二进制表示的,比如 .1(B),表示0.5,.01(B) 表示 0.25,而 0.1 这样的小数无法用二进制精确表示出来,只能凑一个非常接近 0.1 的数。中就可以看出来,并且 Qt 也提供了 “自定义控件” 的能力,可以让我们在现有控件不能满足需求的时候,对现有控件做出扩展,或者手搓出新的控件。直接修改,也可以通过代码的方式修改。

2025-05-08 23:04:00 1084

原创 【C++项目实战】日志系统

本项目主要实现的是一个日志系统,其支持以下功能:支持多级别日志信息支持同步日志和异步日志支持可靠写入日志到控制台、文件、滚动文件、数据库中支持多线程程序并发写日志支持扩展不同的日志落地在生产环境中的产品,为了保证其稳定性以及安全性,是不允许开发人员附加调试器去排查问题的,可以借助日志系统来打印一些日志帮助开发人员解决问题上线客户端的产品出现的Bug无法复现并解决,可以借助日志系统打印日志并且上传到服务端帮助开发人员进行分析。

2025-05-05 12:42:29 1019

原创 Python基础语法

变量名 = 值变量名自定义,要满足标识符命名规则。2.1 标识符由数字、字母、下划线组成不能数字开头不能使用内置关键字严格区分大小写内置类型:2.2 命名习惯见名知义。大驼峰MyName。小驼峰myName。下划线my_name。2.3 使用变量my_name = "张三"myAge = 23让代码更高效的重复执行。元组特点:定义元组使用小括号,且逗号隔开各个数据,数据可以是不同的数据类型。# 多个数据元组# 单个数据元组t2 = (10,)

2025-05-03 21:42:26 1195

原创 【QT】QT 的窗口坐标 & 信号与槽

这种自动生成代码的机制称为。

2025-05-01 21:27:23 878

原创 【QT】编写第一个 QT 程序 & 对象树 & Qt 编程事项 & 内存泄露问题

在Qt中创建很多对象的时候会提供一个Parent对象指针,下面来解释这个parent到底是干什么的。QObject是以对象树的形式组织起来的。当创建一个QObject对象时,会看到QObject的构造函数接收一个QObject指针作为参数,这个参数就是parent,也就是父对象指针。这相当于,在创建QObject对象时,可以提供一个其父对象,我们创建的这个QObject对象会自动添加到其父对象的children()列表。当父对象析构的时候,这个列表中的所有对象也会被析构。

2025-04-30 23:12:43 1122

原创 Qt:(创建项目)

普通窗体模板,传统基于部件的窗体界⾯程序。:Qt控制台应⽤程序。因为Qt主要⽤于图形界⾯设计,这个控制台项⽬ 模板基本不⽤。:Qt提供的⼀种⾼级⽤⼾界⾯技术,使⽤它可以⽅便快速的为移动以及嵌⼊ 式设备开发流畅美观的⽤⼾界⾯。QtQuick模块是开发QML应⽤的标准库,提供了使⽤QML创建 ⽤⼾界⾯所需的⼀切,包括可视化、交互、动画、模型、视图、粒⼦效果以及着⾊效果等。

2025-04-30 18:06:35 1261

原创 Linux:(多路转接(中)——poll和epoll)

private_data回调函数会将红黑树节点中的next和prev指针的指向关系做修改,让该节点链入就绪队列中去,也就是图中的struct epoll_event结构,凡是处于就绪队列中的节点必然有事件已经就绪。:int epfd该值是epoll模型的描述符,int op表示修改句柄的选项,int fd要操作的文件描述符,struct epoll_event* event是用于epoll中的描述符属性结构体指针。比方说,我们增加一些指针变量等数据,红黑树的一个节点,也能成为链表中的一个节点。

2025-04-12 23:55:38 836

原创 Linux:多路转接(上)——select

fd_set* reads与fd_set* writefds、fd_set* exceptfds在使用上是一样的,只不过fd_set* writefds只关心进程向文件描述符中写数据的操作,而fd_set* exceptfds只关心该文件描述符是否出现了错误。:返回值大于0表示有相应个文件描述符就绪,返回值等于0表示没有文件描述符就绪,超时返回,返回值小于0表示select调用失败。也就是说,传参时这个位图代表需要监听的描述符,调用返回时这个位图代表已就绪的文件描述符。如果没有则超时返回。

2025-04-12 21:45:28 675 1

原创 Linux:(五种IO模型)

我们知道,IO过程我们在意的是拷贝,而不是等待。而拷贝需要的时间是由电路还有系统实现等保证的。随着科技的发展,拷贝本身花费的时间已经基本没有提升空间了,所以拷贝本身的效率已经很难再有提升了。那么等待时间的长度就决定了IO的效率。

2025-04-05 22:52:45 1051

原创 Linux:(DNS,ICMP,ping,NAT,代理服务器)

运营商服务器接收到服务器发来的数据。路由器在映射表中查找,发现这个数据的四元组信息能找到对应元素。此时,运营商路由器就将公网中的四元组替换为局域网中的四元组,再次进行发送。此时,在局域网中,四元组的唯一性被保证,家用服务器也能接收到数据。路由器通常情况下都带有NAT功能,否则无法完成内网和公网的IP地址转换问题,四元组的映射关系转换表也是由路由器自动维护的。假设使用TCP协议,当连接建立时,路由器中就会生成这对通信双方的映射表项,断开连接后也会删除这个表项。

2025-04-04 15:29:31 932

原创 Linux:(数据链路层)

我们完成了传输层TCP、UDP和网络层IP协议的讲解,现在我们进入数据链路层,学习MAC桢协议和ARP协议。

2025-04-03 22:12:02 679

原创 Linux:(IP协议)

我们前面画的网段划分是公网网段划分的理想示意图,没有加入任何内网。实际上在到达一个国家的某个行政区时,就已经开始采用这种构建内网的方式了。所以,我们平时在B站,抖音等软件里都能看到评论归属地,但最细也只能到我国的省级行政区,无法看到区县这样的信息。这是因为各个行政区见使用的还是公网IP,识别属地很容易。在本行政区内大多使用内网IP,识别就比较困难了。

2025-04-03 16:34:18 816

原创 Linux:(UDP与TCP协议,三次握手,四次挥手,滑动窗口,拥塞控制,listen第二个参数)

目录一、再谈端口号1.端口号2.五元组3.端口号划分(1)知名端口号(2)操作系统动态分配的端口号(3)端口号与进程之间的关系4.一些Linux指令(1)netstat(2)pidof二、UDP2.解包和分用(1)解包(2)分用3.特点4.TCP缓冲区5.UDP缓冲区6.常见的基于UDP的应用层协议三、TCP1.协议格式2.解包和分用3.缓冲区4.面向字节流5.粘包问题6.网络协议和协议栈四、确认应答机制1.通信的可靠性2.确认应答(ACK)机制3.超时重传机制五、TCP报头信息的理解1.序号和确认序号2.

2025-03-31 22:53:12 796

原创 Linux:(HTTPS协议加密,服务端和客户端发送信息的安全)

数字指纹(数据摘要):其基本原理是利⽤单向散列函数(哈希函数)对信息进⾏运算,⽣成⼀串固定⻓度的数字摘要。数字指纹不是加密机制,但可以⽤来判断数据有没有被窜改。如果有两个非常大的文本文件,如果我们逐字逐句地去核对该文件中的内容,那么付出的精力会相当大。如果我们使用某个Hash算法将文本内容转化为一个长度固定的字符串,那比较起来就简单很多了。该字符串就被称为数据摘要,由于重复性极低,所以也称为数据指纹。常用的算法有MD5、SHA1、SHA256、SHA512等。

2025-03-26 17:52:46 906

原创 Linux:(模拟HTTP协议,GET和POST方法,Http的状态码)

所以,在第一次登录CSDN后,在站内进行网页跳转(从一篇文章跳转到另一篇文章)时,你打开了一个新的网页,理论上需要再次输入账号密码登录,浏览器发送表单验证身份信息,但现实是我们不需要第二次登录就可以浏览站内的各个网页。使用浏览器访问根目录的时候,如上图所示,会得index.html文件表示的网页,查看该网页的Cookie信息,可以看到name是123456abc,有效时间是3分钟,和我们在服务端构建响应时写的内容一模一样。HTTP协议中文名为超文本传输协议,既是最经典的应用层协议,也是应用最广泛的协议。

2025-03-25 10:46:20 1379

原创 Linux:(网络协议定制)

我们以后代码中的序列化和反序列化,绝对不要自己写。在微信聊天的过程中,用户A发送的与用户B接受的都是同一种数据结构,所以用户A构建的message是按照特定的成员顺序组成的,用户B就必须按照这样的成员顺序去使用它接收到的message。协议本质是一种“约定”,在前面的TCP和UDP网络通信中,读写数据的时候都是按照"字符串"的形式发送和接收的,那我们如果不发送字符串,而是要传送一些结构化的数据怎么办呢?用户B接收到一个字符串报文,然后用户B的应用层(微信软件)将接收到的报文反序列化,还原回原来结构化的。

2025-03-20 00:59:59 539

原创 Linux:(socket套接字——TCP协议,守护进程)

我们让服务器进程运行起来打开另一个会话,使用查看使用网络的进程网络信息其中,第一个协议为tcp,IP第hi为0.0.0.0,端口号为8080的s进程就是我们的服务器进程。此时我们关闭运行服务器进程的Xshell对话框,再从另一个没关闭的对话框内再次查看网络进程信息,此时发现我们的服务器进程不见了。那问题就出现了,我只是关闭会话,并没让服务器进程退出,怎么服务器进程也没了。实际上,我们每次在Xshell上创建一个会话,Linux机器上都会运行一个名字为bash的进程。

2025-03-17 15:51:40 896

原创 Luinx:(socket套接字——UDP协议)

当bind绑定的IP地址是0.0.0.0的时候,这台计算机就会接收所有网络的请求,也会根据相关的端口处理。而Linux下一切皆文件,所以网络在系统看来也是一个"文件",也有维护它的结构体,也有自己的文件描述符。比如说,我们用QQ聊天,实际上使用的是手机上的客户端应用,我们使用QQ聊天等都是在向QQ的服务器进程发起网络请求。如果服务器仅绑定本地环回的IP地址,那么当另一台计算机的客户端想要通过公网IP向计算机发出请求时,由于绑定的IP地址与客户端IP地址不一样,服务端就会忽略客户端的请求。

2025-03-15 12:53:39 900

原创 Linux:网络(网络编程基础)

其实在我们的生活中就有协议,比如说我跟同学约好了去水上公园玩,我告诉他,只要我给你打电话了,你下楼来找我就可以了。在这里,虽然我打电话只是一个行为,但是我们二人早就商量好了,只要我打电话他就下楼,这是我们之间不需要解释共识。所以,协议的本质就是约定。在计算机中也是一样,比如说两台计算机进行通信。两台计算机约定好,其中一台计算机给另一台计算机发送一个整形数字,每个整形数字代表的操作不同。比如 ,一台计算机给另一台计算机发送整型数字1,而数字1代表重启电脑,那另一台计算机收到数字1后就会直接重新启动。

2025-03-10 23:31:02 1033 1

原创 Linux:多线程(单例模式,其他常见的锁,读者写者问题)

设计模式就是一些大佬在编写代码的过程中,针对一些经典常见场景,给定对应解决方案,于是将其设计成一种模式,以后我们想使用就只需要套这个模式就好了。某些类,只应该具有一个对象(实例化),称之为单例。在很多服务器开发场景中,经常需要让服务器加载很多数据到内存中,此时往往需要单例的类来管理这些数据。1. 初始化读写锁功能:该函数用于初始化一个读写锁对象rwlock,可以指定属性attr,一般情况下可以传入NULL使用默认属性。参数rwlock:指向读写锁对象的指针,attr:读写锁的属性对象指针,可以为NULL。

2025-03-09 01:17:22 853

原创 Linux:多线程(三.POSIX信号量、生产消费模型、线程池)

超市是数据“交易”的场所,即共享资源或临界资源的存储空间(也可以叫缓冲区)。在多线程编程中,这通常是一个数据结构(如队列、缓冲区等),用于临时存储数据,供生产者和消费者线程进行访问。

2025-03-08 00:18:48 771

原创 Linux:多线程(二.理解pthread_t、线程互斥与同步)

关于静态变量与全局变量的小知识:静态变量(包括静态局部变量和静态全局变量)以及全局变量的初始化时间是在程序执行之前的一个特定阶段对于全局变量,静态变量,它们的生命周期与整个程序的生命周期相同。当程序结束时,操作系统会自动释放程序占用的资源作用域不同全局变量的作用域是整个程序,即在定义它的文件中的任何地方都可以访问。静态变量的作用域限定在定义它的函数或文件内部,外部无法直接访问。生命周期不同全局变量的生命周期是整个程序的运行期间,即在程序启动时分配内存,在程序结束时释放内存。

2025-03-04 23:19:05 984

原创 Linux:多线程(一.Linux线程概念、线程控制——创建、等待、退出、分离,封装一下线程)

目录1. Linux线程概念1.1概念1.2线程的理解Linux中线程设计的巧思1.3Linux线程VS进程1.4调度与轻量级进程1.5程序如何划分(重拾页表、见一下LWP)2.线程控制2.1引言与原生库2.2线程创建pthread_create()与pthread_self()线程的特殊情况2.3线程等待pthread_join()函数2.4线程退出pthread_exit()函数pthread_cancel()函数2.5线程分离基本概念pthread_detach 函数3.重要结论线程是进程内部的一个执

2025-03-02 00:19:40 798

原创 Linux:进程信号(二.信号的保存与处理、递达、volatile关键字、SIGCHLD信号)

使得这个集合不包含任何信号,也就是不阻塞任何信号。此函数通常在设置信号处理程序(signal handler)之前调用,以确保信号集的正确初始化。

2025-02-25 23:22:09 1027

原创 Linux:进程信号(一.认识信号、信号的产生及深层理解、Term与Core)

同时,由于Core文件是在程序崩溃时自动生成的,因此它也可以作为一种自动记录程序崩溃信息的机制,方便程序员进行事后分析和排查。因此,信号的发送是异步的,进程需要通过信号处理函数来处理这种异步事件。:这指的是信号的异步性。当进程正在执行某些重要任务时,如果接收到信号,可能无法立即处理,此时系统会将信号暂时保存,等到合适的时机再进行处理。系统调用,一个进程可以向另一个进程发送不同类型的信号,从而实现进程之间的通信和控制。等),每个信号都有特定的含义和默认处理方式,进程可以根据需要识别和处理这些信号。

2025-02-23 23:17:34 859

原创 Linux:进程间通信(二.共享内存详细讲解以及小项目使用和相关指令、消息队列、信号量)

ftok()函数 Linux中用于生成一个唯一的键值(key)的系统调用,这个键值通常用于在进程间通信(IPC)中标识共享内存段、消息队列或信号量集。ftok()函数基于一个已经存在的文件路径和一个非零的标识符(通常是一个小的正整数)来生成这个键值。pathname:指向一个已经存在的文件路径的指针。这个文件通常被用作生成键值的“种子”或“基础”。proj_id:一个非零的标识符,通常是一个小的正整数。这个值将与文件路径一起被用于生成键值。返回值:如果成功,ftok()函数返回一个唯一的键值(

2025-02-22 23:18:24 415

原创 Linux:进程间通信(一.初识进程间通信、匿名管道与命名管道、共享内存)

ftok()函数 Linux中用于生成一个唯一的键值(key)的系统调用,这个键值通常用于在进程间通信(IPC)中标识共享内存段、消息队列或信号量集。ftok()函数基于一个已经存在的文件路径和一个非零的标识符(通常是一个小的正整数)来生成这个键值。pathname:指向一个已经存在的文件路径的指针。这个文件通常被用作生成键值的“种子”或“基础”。proj_id:一个非零的标识符,通常是一个小的正整数。这个值将与文件路径一起被用于生成键值。返回值:如果成功,ftok()函数返回一个唯一的键值(

2025-02-19 22:58:54 876

原创 Linux:基础IO(三.软硬链接、动态库和静态库、动精态库的制作和加载)

在x86架构的处理器中,CR3寄存器用于指示当前进程的页目录表的物理地址,从而实现虚拟内存的地址转换。是另一个重要的寄存器,用于存储当前正在执行的指令的地址或下一条将要执行的指令的地址。在操作系统中,可以同时存在大量的已加载库,这些库可能是系统自带的标准库、第三方库或用户自定义的库。这些区域的划分通常是在编译器生成可执行文件时完成的,根据程序的结构和需要,编译器会将程序划分为不同的区域,并为每个区域分配相应的权限和访问属性。动态库的加载是延迟加载的,即在程序需要调用动态库中的函数时才会加载相应的库。

2025-02-17 19:58:11 1179

原创 Linux:基础IO(二.缓冲区、模拟一下缓冲区、详细讲解文件系统)

记录的信息主要有:bolck 和 inode的总量,未使用的block和inode的数量,一个block和inode的大小,最近一次挂载的时间,最近一次写入数据的时间,最近一次检验磁盘的时间等其他文件系统的相关信息。4. 分配数据块:根据文件大小和文件系统的块大小,确定需要分配的数据块数量,并在块位图中找到未被使用的数据块。硬盘的磁头可以沿着磁道移动,读取或写入数据。因此,可以说C语言的缓冲区(用户空间缓冲区)在将数据写入文件时,会先将数据存储在用户空间的缓冲区中,然后在适当的时候(如缓冲区满或显式调用。

2025-02-04 21:07:52 875

原创 Linux:基础IO(一.C语言文件接口与系统调用、默认打开的文件流、详解文件描述符与dup2系统调用)

虚拟文件系统:Linux中的虚拟文件系统(Virtual File System,VFS)将不同类型的文件系统(如ext4、NTFS、procfs等)抽象成统一的文件接口,使得用户和应用程序可以以统一的方式访问不同的文件系统。当进程打开文件时,内核会在文件描述符表中为该文件分配一个表项,并将相应的信息存储在表项中。所以,只要拿着文件描述符,就可以找到对应的文件。所以,打开的文件OS一定要对其进行管理,怎么管理——先描述再组织:那么内核中一定有用来描述被打开文件的结构体,并用它来定义一个个对象。

2025-01-30 17:33:11 1246

原创 Linux:进程控制(二.详细讲解进程程序替换)

就是程序替换:程序替换是操作系统的接口,所谓的把磁盘里的数据加载到内存就是把磁盘设备的数据拷贝到内存里。操作系统会加载新程序的可执行文件,并将其代码、数据和堆栈等部分加载到进程的地址空间中。进程程序替换是指在运行过程中将一个进程的地址空间中的代码、数据和堆栈等内容完全替换为另一个程序的代码、数据和堆栈的过程。会检查该目标的所有依赖项,并递归地处理这些依赖项,直到所有必要的依赖项都被构建或确认为是最新的。这个函数的作用是在当前进程的上下文中启动一个新的程序,并替换当前进程的映像为新的程序映像。

2025-01-25 20:46:37 1047

原创 Linux:进程地址空间、进程控制(一.进程创建、进程终止、进程等待)

1. 字符串常量字符串常量通常存储在高地址,其地址是固定的,不可更改。字符串的下标从0到n一直在增加,即字符串中的每个字符在内存中是连续存储的。2. main函数地址main函数地址通常是程序中最底部的地址,因为它是程序的入口点。3. 初始化数据和未初始化数据初始化数据(如全局变量、静态变量)存储在比main函数地址高的位置,因为它们在程序启动时需要被初始化。未初始化数据(如全局未初始化变量、静态变量)存储在比初始化数据更高的位置,因为它们在程序启动时不需要被初始化。4. 堆区。

2025-01-21 21:37:34 736

原创 Linux:进程概念(四.main函数的参数、环境变量及其相关操作)

Shell。

2025-01-18 19:33:05 648

原创 Linux:进程概念(三.详解进程:进程状态、优先级、进程切换与调度)

因此,及时处理子进程的退出状态是非常重要的,可以避免僵尸进程的积累,提高系统的稳定性和性能。虽然在任意时刻只有一个进程在 CPU上执行,但由于进程切换的快速性,给人的感觉就像是多个进程在同时执行一样。:Linux 内核的调度器通常采用 O(1) 调度算法(使用了位图(bitmap)来实现),该算法在常数时间内选择下一个要执行的进程,而不受进程数量的影响。指系统中进程的数量多于可用的CPU资源。数组的下 标表示进程的优先级,因此可以直接根据优先级来访问对应的进程队列,提高了访问效率。

2025-01-14 21:02:59 1039

原创 Linux:进程概念(二.查看进程、父进程与子进程、进程状态详解)

在操作系统中,当一个进程(称为父进程)创建另一个新进程(称为子进程)时,父子进程之间建立了一种特殊的关系。这种关系具有以下特点和行为:子进程的父进程是创建它的进程,即父进程。每个进程都有唯一的父进程。子进程的PID(进程标识符)是由父进程调用fork()或类似系统调用创建的。子进程的PPID(父进程标识符)与创建它的父进程的PID相同。子进程继承了父进程的大部分属性和资源,包括内存映像、文件描述符、信号处理器等。子进程在创建时拥有父进程的副本,但在其生命周期中可以独立修改这些副本。

2025-01-11 20:50:18 1889

原创 Linux:冯诺依曼体系结构、操作系统、进程概念(一.初识进程)

操作系统的设计目的是管理计算机系统的软硬件资源,为用户程序提供执行环境。它通过对资源的描述和组织,以及提供系统调用和库函数的方式,来实现对计算机系统的管理和控制。从上到下是不可以发生越级访问。不可以绕过操作系统操作系统从头到尾是贯穿的。

2025-01-10 00:26:04 824

原创 Linux:常用软件、工具和周边知识介绍

Yum是Linux系统中用于管理软件包的工具,类似于手机上的应用商店。是基于的系统,用于管理 RPM 软件包 ,它提供了一种方便的方式来搜索、下载、安装和卸载软件包,使得软件的管理变得简单而高效。源代码安装:需要手动下载源代码并进行编译安装,比较繁琐,需要处理依赖关系。RPM包直接安装:可以直接使用RPM包进行安装,但是需要手动处理依赖关系,不够方便。Yum(或apt-get):Yum是Linux系统预装的一个命令,也可以通过apt-get在Debian系列的系统中使用。

2024-11-27 19:22:34 1495

空空如也

空空如也

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

TA关注的人

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