自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 【项目】在线编译系统

一、需求分析1、客户端(1)允许用户选择不同的语言,比如说:C,C++。(2)提供用户编写代码的功能,将用户编写代码保存到本地(3)将用户编写的代码传输到服务器(4)能够接受服务器处理结果并显示2、服务器(1)接受客户端传输的数据,包括语言类型和代码(2)能根据用户选择的语言类型对代码进行编译,编译完成后有两种结果编译成功:将编译的可执行文件执行,将执行结果发送给客户端编译失败:将出错信息反馈给客户端3、功能流程二、具体功能实现1、服务器功能实现(1)首先要实现的是服务器

2020-08-31 23:50:48 558 1

原创 【项目】P2P文件快传

一、概要1、需求定档功能:让网络上任意两台主机之间可以互相下载共享文件2、概要设计(1)网络上任意两台主机共享首先要直到在网络上有哪些主机能够建立共享关系(2)从一个指定的主机上去下载自己想要的文件,也可以将自己的文件提供给别人下载3、模块功能框架4、功能流程图二、详细讲述P2P下载器1、包含模块客户端①查看网络上有哪些共享主机向网络中广播配对请求,得到响应②获取指定主机文件列表向指定主机发送获取列表请求③从指定主机上下载文件向指定主机发送下载指定文件的请求服务端

2020-08-29 20:33:21 1263 1

原创 【刷题】合并两个有序链表

题目描述将两个升序链表合并为一个新的升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。解题思路先判断两个链表是否为空,如果有一个链表为空,那么结果就是另一个链表;递归的方法:指的是在函数定义中使用函数自身的方法。(A调用A)递归相当于一个树结构,从字面可以其理解为重复**“递推”和“回归”**的过程,当“递推”到达底部时就会开始“回归”,其过程相当于树的深度优先遍历将两个链表的第一个数据进行比较,并且直接将较小链表的第一个节点指向下一个数据较小的节点,也就是说如果 l1 的

2020-08-10 22:41:58 230

原创 【刷题】 链表中倒数第k个节点

题目描述输入一个链表,输出该链表中倒数第k个节点。为了符合大多数人的习惯,本题从1开始计数,即链表的尾节点是倒数第1个节点。例如,一个链表有6个节点,从头节点开始,它们的值依次是1、2、3、4、5、6。这个链表的倒数第3个节点是值为4的节点。解题思路设计双指针fast和slow,我们要找倒数第 k 个节点,那就让fast指针先走 k 步,然后让两个指针同时开始遍历,当fast为空的时候,此时slow所在的位置就是该链表中倒数第k个节点。代码/** * Definition for singly-

2020-08-10 21:03:06 125

原创 【C++】运算符重载——复数类

CComplex类class CComplex{public: CComplex(int real, int image) :mreal(real), mimage(image) {} private: int mreal;//实部 int mimage;//虚部};int main(){ CComplex c1(10, 20); CComplex c2 = c1 + 10; CComplex c3 = 10 + c1; CComplex c4 = c1 + c2;

2020-07-16 11:32:21 2203

原创 【C++】运算符重载——整形类

CInt类class CInt{public: CInt(int val) :mvalue(val) {}private: int mvalue;};int main(){ int arr[] = { 1, 321, 4, 3, 54, 7 }; int len = sizeof(arr) / sizeof(arr[0]); for (CInt i = 0; i < len; i++) { std::cout << arr[i] << "

2020-07-16 10:56:12 443

原创 【C++】详细解读:typename声明模板中的一个类型

用C++封装一个不带头结点的单链表要求:用嵌套类型的方式template<typename T>class CLink//模板{public: CLink() { phead = NULL; } ~CLink() { Node* pCur = phead; Node* pNext; while (pCur != NULL) { pNext = pCur->pnext; delete pCur; pCur = pNext; }

2020-07-14 13:50:58 332

原创 【C++】用vector容器封装顺序表(完整代码)

完整代码#include<iostream>template<typename T>class Vector{public: Vector(int size = 2) { parr = new T[size]();//动态开辟空间 cursize = 0; totalsize = size; } ~Vector() { delete[] parr; parr = NULL; } //扩容 void resize() { T*

2020-07-13 22:25:38 426

原创 【C++】函数模板相关内容

先考虑一个问题写一个代码,两个数相加,要求在任何形式下都能通用方法一:宏 #define在预编译阶段处理,相当于文本替换但是它没有类型检查和安全检查。方法二:C泛型void*void*是半开半闭的区间,非常容易越界方法三:函数重载我们考虑到可以用以下形式,可以将类型进行列举,但是类型分为内置类型(int、double等等)和自定义类型(struct结构体、class类类型),函数重载无法对所有自定义类型进行处理int Sum(int ,int );double Sum(double ,d

2020-07-04 13:13:35 154

原创 【C++】讲述explicit、volatile、mutable三个关键字用法

explicit用法禁止隐式生成临时对象测试用例1、不加explicit时,运行通过,因为test = 60;该行,编译器会认为它隐式生成临时对象,所以运行成功,即编译自行推演处理。但是它是不可控的。加上explicit后,程序就会报错。错误提示如下:class Test{public: explicit Test(int a) :ma(a) {}private : int ma;};int main(){ Test test(20); test = 60;//

2020-07-03 20:01:48 425 4

原创 【牛客网】写一个函数,求两个整数之和,要求在函数体内不得使用+、-、*、/四则运算符号。

题目写一个函数,求两个整数之和,要求在函数体内不得使用+、-、*、/四则运算符号。需要掌握1、异或运算两个数不相同,结果为1。两个数相同,结果为0。2、与运算两位同时为“1”,结果才为“1”,否则为03、左移将一个二进制操作数对象按指定的移动位数向左移,左边溢出的位数被丢弃,右边的空位用0补充。4、计算机二进制加法运算:思路第一步将两个数进行异或运算,此时得到的结果相当于不进位进行的加法运算第二步将两个数进行与运算,并将其结果进行左移得到最后的结果第三步将第一步的结果与左移

2020-07-01 19:39:31 372

原创 【Linux】多线程与线程池的区别

多线程1、解决多任务同时执行的需求,合理使用CPU资源。多线程的运行是由CPU切换完成,如何切换由CPU决定,因此多线程运行具有不确定性。2、由于不同进程中的线程可能并发执行,因而Windows支持进程间的并发性。此外,同一个进程中的多个线程可以分配给不同的处理器并且同时执行。一个含有多线程的进程在实现并发时,不需要使用多进程的开销。同一个进程中的线程可以通过它们的公共地址空间交换信息,并访问进程中的共享资源。不同进程中的线程可以通过在两个进程间建立的共享内存交换信息。3、(插入)并发与并行的关系:

2020-06-30 23:25:38 623

原创 【Linux】了解I/O复用的LT模式和ET模式

LT模式和ET模式1、LT模式:内核如果检测就绪事件并将其通知给应用程序后,应用程序可以不立即处理该事件,因为下次调用epoll _wait时,还会将此事件通知给应用程序。2、ET模式:内核如果检测就绪事件并将其通知给应用程序后,应用程序必须立即处理该事件,否则下次调用epoll wait时,不会将此事件再通知给应用程序。3、select和poll只能工作在LT模式下,epoll支持高效的ET模式实例说明1、epoll在默认情况下是LT模式,如果想要让他支持ET模式,可以在获取新连接的代码下在事件

2020-06-29 18:54:12 543

原创 【Linux】I/O复用之poll和epoll的用法

select系统调用可参见此博客poll1、原型:#include <poll.h>int poll(struct pollfd *fds, nfds_t nfds, int timeout);2、fds:用户数组的首地址,记录所有文件描述符以及关注的事件类型,将用户空间的数据传递给内核,在poll返回时,也用于将内核检测到就绪事件通知给应用程序。struct pollfd结构如下:struct pollfd{ int fd; //文件描述符 shor

2020-06-28 22:20:43 268

原创 【Linux】I/O复用之select的用法

I/O复用概念一个单进程、单线程的服务器程序同时监听多个文件描述符上是否有关注的事件发生,如果某些文件描述符上有事件发生,则程序接着处理有事件发生的文件描述符,没有事件发生的文件描述符则不予理会。这样就可以极大的提高程序的性能。1、I/O复用使得程序能同时监听多个文件描述符,这对于提高程序的性能至关重要。2、通常,网络程序在下列情况下需要使用1/O复用技术(1)TCP服务器同时要处理监听套接字和连接套接字。(2)服务器要同时处理TCP请求和UDP请求。(3)程序要同时处理多个套接字。(4)客户

2020-06-27 21:43:35 154

原创 【计算机网络】HTTP协议和web服务器

1、浏览器与web服务器在应用层通信使用的是http协议(超文本传输协议),而http协议在传输层使用的是tcp协议。2、浏览器向服务器发起连接前,需要得到服务器的IP及端口。用户在浏览器中通常只输入网址(网站域名),浏览器会通过DNS服务查询获取到服务器的IP地址。对于端口来讲,使用http 协议的程序一般默认使用 80端口。面试题:如果在浏览器上输入网址,之后会发生什么?3、浏览器服务器建立连接后,如果两次以上的请求复用同一个tcp连接,则称之为长连接。如果浏览器发送一次请求报文,服务器回复

2020-06-27 13:33:27 1024

原创 【计算机网络】IP协议及其头部详解

IP协议基础1、IP协议是网络层协议,网络层协议负责数据的选路和转发2、IP协议特点:无连接、无状态、不可靠每一台网络设备(路由器)只是实现尽力转发,只负责将收到的数据转发出去。至于能够到达目的地,每一台路由器都不负责。(1)无连接是指IP通信双方都不长久地维持对方的任何信息。这样,上层协议每次发送数据的时候,都必须明确指定对方的IP地址。(2)无状态是指IP通信双方不同步传输数据的状态信息,因此所有IP数据报的发送、传输和接收都是相互独立、没有上下文关系的。网络层的IP协议并不能保证数据到达

2020-06-26 19:39:51 1668

原创 【计算机网络】拥塞控制算法

拥塞窗口cwnd发送方维持一个叫做拥塞窗口cwnd (congestion window)的状态变量。拥塞窗口的大小取决于网络的拥塞程度,并且动态地在变化。发送方让自己的发送窗口等于拥塞窗口。(如果再考虑到接收方的接收能力,那么发送窗口还可能小于拥塞窗口。)发送方控制拥塞窗口的原则是:只要网络没有出现拥塞,拥塞窗口就再增大一些,以便把更多的分组发送出去。但只要网络出现拥塞,拥塞窗口就减小一些,以减少注入到网络中的分组数。只要发送方没有按时收到应当到达的确认报文,就可以猜想网络可能出现了拥塞拥塞

2020-06-26 13:08:34 1718

原创 【计算机网络】零窗口、糊涂窗口以及Nagle算法

滑动窗口发送方发送数据速率与接收方接收数据速率相匹配。零窗口问题定义TCP报头结构中有1 6位的窗口大小:由接收方填充, 用来告知发送方当前本端还能接收的数据长度。如果接收方不断从网络中接收并缓存数据,但是应用程序并没有处理缓存的数据。直到最后,接收方就会向发送方发送一个0窗口的报文段。如何处理?持续计时器 +零窗口探测报文段为了解决这个问题,TCP为每一个连接设有一个持续计时器(persistence timer)。只要TCP连接的一方收到对方的零窗口通知,就启动持续计时器。若持续计时器设

2020-06-26 12:11:06 1899

原创 【计算机网络】TCP的报文头部

怎样保证TCP的可靠性?(1)保证数据能够到达对方(2)保证数据不重复、不乱序应答确认、超时重传滑动窗口:发送方发送数据,接收方速率匹配拥塞控制算法:发送方发送数据的速率,与当前网络情况的匹配(3)保证数据不失真16位校验和,冗余检验、TCP头部和数据部分TCP的报文头部1、序号(seq):在一个TCP连接中传送的每一个字节流中的每一个字节都按顺序编号。序号值由系统初始化的某一个随机值ISN和本报文段第一个字节数据在整个字节流中的偏移量组成。2、确认号(ack):用作对另一方发送的tc

2020-06-25 16:23:00 708

原创 【面试题】TCP的建立和断开连接(三次握手和四次挥手)相关考点

TCP建立连接的三次握手客户端①[CLOSED -> SYN_SENT] 客户端调用connect, 发送同步报文段;③[SYN_SENT -> ESTABLISHED] 接收到服务器端发送的SYN报文,并向服务器端发送SYN确认报文。此时connect调用成功, 则进入ESTABLISHED状态, 开始读写数据;服务器端①[CLOSED -> LISTEN] 服务器端调用listen后进入LISTEN(监听)状态, 等待客户端连接;②[LISTEN -> SYN

2020-06-22 17:35:18 316

原创 【计算机网络】UDP协议的完整代码

头文件#include <stdio.h>#include <stdlib.h>#include <assert.h>#include <unistd.h>#include <string.h>#include <sys/socket.h>#include <sys/types.h>#include <arpa/inet.h>#include <netinet/in.h>服务器

2020-06-21 18:50:42 781

原创 【计算机网络】UDP协议的编程流程

1、UDP相比于TCP是无连接的,所以在进行服务器与客户端的建立时是不需要建立连接的。2、服务器流程(被动)及函数调用(1)int socket();创建一个用于监听客户端连接的网络套接字(2)int bind();将创建的套接字与本段的地址信息进行绑定。(3)int recvfrom();接收任意一个客户端的数据原型ssize_t recvfrom(int sockfd,void *buf,size_t len,unsigned int flags, struct socka

2020-06-21 17:58:14 426

原创 【计算机网络】TCP协议编程流程

一、传输层协议TCP协议:面向连接的、可靠的、字节流服务UDP协议:无连接的、不可靠的、数据报服务二、TCP协议的编程流程(一)服务器系统调用用法1、int socket();创建一个用于监听客户端连接的网络套接字原型:int socket(int domain,int type,int protocol)返回值:成功时返回一个socket文件描述符,失败则返回-1并设置errno。domain参数表示告诉系统使用哪个底层协议族。我们现在一般还使用IPV4,所以协议簇使用 AF_

2020-06-02 18:06:12 596

原创 【计算机网络】计算机网络协议、分层及数据传输的过程

1、网络的概念网络是由若干个节点和连接这些节点的链路组成,网络中的节点包括计算机交换机,路由器等设备。简而言之,网络是通过设备和线路将计算机互联起来2、互联网互联网是将不同的网络互联起来。3、网络设备串联各网络或者各主机的节点:路由器和交换机。网络的线路:网线(双绞线)、同轴电缆、光纤4、IP地址和MAC地址(1)IP 地址①主机的逻辑地址Ip地址就是给因特网上的每一个主机(或路由器)的每一个接口分配的一个在全世界范围内唯一的标识符。②IP地址的结构便于寻址。(2)IP地址分

2020-06-01 19:55:07 1183

原创 【Linux】线程与fork的联系以及线程中子进程的锁的状态?

多线程中有一个线程调用fork,创建的子进程中会有几个线程?创建的子进程中,只有调用fork的线程被启动,其他线程并没有执行。实例:多线程创建子进程,并且在创建之前有对互斥锁加锁,子进程中锁的状态如何?答案:在子进程中出现了死锁,因为在子进程中只有一个线程被启动起来,而执行时他已经是加锁状态。即子进程会继承父进程的锁状态。实例:如何解决子进程中出现的死锁?有一个线程库的方法prepre对所有的锁执行加锁操作。其保证在fork执行过程中,所有的锁都是加锁状态的。...

2020-05-28 20:10:20 373

原创 【Linux】了解线程安全

什么是线程安全?线程安全,即就是在多线程运行时,不论线程的调度顺序怎样,最终的结果都是一样的、正确的,那么就说这些线程是安全的。保证线程安全的条件(1)对于线程同步,保证同一时刻只有一个线程访问临界资源。(2)在多线程中使用线程安全的函数(可重入函数),所以线程安全的函数指的是如果一个函数能够被多个线程同时调用,且不发生竞态事件,则我们认为是线程安全的。什么是重入?重入是指同一个函数被不同的执行流调用,当前一个流程还没有执行完,就有其他的执行流再次进入,我们称之为重入。一个函数在重入的情况下不会

2020-05-28 19:32:06 127

原创 【Linux】对线程同步的总结

一、前言1、 一个进程在同一时刻能够处理多个线程,每个线程处理各自独立的任务,用线程操作能够简化异步事件。2、程序可以通过使用线程得以简化,即使多线程程序在串行化任务时不得不阻塞, 由于某些线程在阻塞的时候还有另外一些线程可以运行。所以多线程程序在单处理器上运行仍然能够改善,响应时间和吞吐量。3、每一个进程有一个进程ID,是唯一的,进程ID用pid_t数据类型来表示。每一个线程有一个线程ID,但线程ID只在他所属的进程环境有效,线程ID用pthread_t数据类型来表示。4、当多个线程共享相同的内

2020-05-27 22:47:31 250

原创 【Linux】线程同步——信号量、读写锁和条件变量

一、信号量1、和进程类似,信号量就是特殊的计数器。可以参考进程间通信——信号量2、多线程的信号量操作是在全局进行定义信号量类型sem_t3、初始化int sem_init(sem_t *sem, int shared, int val);4、P操作int sem_wait(sem_t *sem);5、V操作int sem_post(sem_t *sem);6、销毁int sem_destory(sem_t *sem);...

2020-05-27 22:40:23 214

原创 【Linux】线程同步——互斥量(互斥锁)

一、基础1、线程同步的目的是不管线程之间的执行如何穿插,其运行结果都是正确的。即保证多线程执行下结果的确定性。2、同步就是让所有线程按照一定的规则执行,使得其正确性和效率都有迹可循,即线程同步就是对线程之间的穿插进行控制。3、每个对象都对应于一个**" 互斥锁"** 的标记,这个标记用来保证在任一时刻,只能有一个线程访问该对象。4、互斥锁线程在进入临界区之前加锁操作为了保证不同时访问一个资源。就要使临界区的代码不被同时执行线程在退出临界区之后解锁操作5、锁的特性:初始状态必须是打开的

2020-05-26 12:05:46 215

原创 【Linux】了解线程实现方式以及相关函数

一、线程的相关1、概念(1)线程是进程内部的一条执行序列(执行流),一个进程包含多个线程。(2)将main 函数执行的线程称为主线程,其他线程称为函数线程。main函数为进程执行入口,函数线程在创建线程时指定线程的执行序列。(3)一个线程就是一个执行流,是一组有序指令。2、函数调用int main(){ fun();}函数调用时,main函数的线程和fun方法的线程是串行执行的,fun函数执行完后才会继续进入main执行下一条指令。3、函数线程int main(){ pthr

2020-05-25 17:57:26 167

原创 【Linux】【面试题】进程与线程的区别

进程与线程的区别1、进程是资源分配的最小单位,线程是CPU调度的最小单位。2、进程有自己的独立地址空间,线程共享进程中的地址空间。进程有自己的独立地址空间,每启动一个进程,系统就会为它分配地址空间;而线程是共享进程中的数据的,使用相同的地址空间,因此CPU切换一个线程的花费远比进程要小很多,同时创建一个线程的开销也比进程要小很多。3、进程的创建消耗资源大,线程的创建消耗相对较小。4、进程的切换开销大,同一个进程中的线程的切换相对较小。5、进程是在CPU上实现共享,对CPU的操作只有操作系统内核

2020-05-25 17:15:44 737 1

原创 【Linux】总结进程间通信以及相关面试考点

一、相关知识点1、进程地址空间分布图:2、什么是临界资源?临界资源同一时刻只允许一个进程访问的资源叫临界资源。3、什么是临界区?临界区访问临界资源的代码段叫临界区。4、全双工和半双工通信有什么区别?半双工数据可以从A到B发送,也可以从B到A发送,但同一时刻只能是一个方向的。全双工数据在任意时刻都可以在两个方向同时进行。即A到B和B到A二、管道详细讲述管道以及实现1、什么是有名管道?有名管道FIFO:在内核中申请一块固定大小的缓冲区,程序拥有写入和读取的权利,没有血缘关系的进程也可以

2020-05-19 15:29:46 532

原创 【Linux】了解进程间通信——共享内存

一、共享内存1、进程的地址空间都是独立,受保护的。2、A、B进程有一块逻辑地址空间共同映射到同一块物理内存上,作为共享内存。用内核对象来保存。二、相关函数1、shmget函数得到一个共享内存标识符或创建一个共享内存对象并返回共享内存标识符(1)原型:int shmget(key_t key, size_t size, int flg);(2)key:共享内存标识(3)size:共享内存大小例如:申请128字节会映射到4k大小的物理内存,但是使用也只是使用128字节,其他的用不了,但内

2020-05-19 14:36:30 229

原创 【Linux】了解进程间通信——信号量

一、概念1、 信号量相当于一个计数器,它用于多进程对共享数据对象的访问。2、信号量是一个特殊的变量,程序对其访问都是原子操作,且只允许对它进行等待( P )和发送(V)。最常见的也就是只能取0和1的二进制信号量。3、信号量的两种操作:P 操作(等待操作):如果信号量sv的值大于0,就给他 -1,如果sv的值等于0,就挂起该进程。V 操作(发送信号):如果有其他进程因等待sv而被挂起,就让他恢复运行;如果没有进程因等待sv而挂起,就给他+1。举例:两个进程共享信号量sv,一旦其中一个进程进行了P操

2020-05-18 21:35:25 337

原创 【Linux】了解进程间通信——消息队列

1、理解消息队列消息:类型+数据队列:先进先出一、消息队列相关函数1、msgget函数创建一个新消息队列或打开一个已有的消息队列int msgget(key_t key, int msgflg);(1)返回值:成功返回内核对象的ID值,失败返回-1(2)key:用户标识,如果多个进程想通过同一消息队列完成数据通信,则每个进程使用相同的key值,创建或者获取同一个消息队列的内核对象ID。(3)msgflg:标志位IPC_CREAT:新建一个消息队列IPC_EXCL:与IPC_CREA

2020-05-16 23:32:57 216

原创 【Linux】了解进程间通信——管道

一、进程间通信1、 进程都是独立的个体,每个进程之间数据是不共享的。2、在之前学习的文件中我们知道可以利用,fork之后父、子进程可以共享fork之前打开的文件描述符,来实现进程间通信。例如:父进程给子进程发送"hello world"int main(){ int fd = open("a.txt",O_RDWR ); assert(fd != -1); if(pid == 0) { sleep(1);//保证父进程已经将字符串写入到文件中。

2020-05-16 22:59:32 251 1

原创 【Linux】Linux仿写bash程序(二)

1、上一个我们只是简单的写了bash程序,但是如果要用bash实现一些自己实现的命令,比如pwd、ls等命令。仿写bash程序2、将这些文件存放在一个文件夹中,在bash中调用即可。3、pwd实现int main(){ char path[128] = { 0 }; getcwd(path,127); printf("%s\n",path); exit(0);}在bash.c 的外置命令中将路经改成pwd所在路经即可。如:4、ls 实现(1)ls 为默认显示当前共工作路径下的

2020-05-15 15:39:53 273

原创 【Linux】Linux仿写bash程序(一)

一、分析1、输入一些提示符信息提示符信息的格式一般是这样的:[用户名@主机名 当前工作目录]标识符例如:[zwx@localhost Desttop]$2、等待用户输入命令3、完成简单的解析也就是对命令进行简单划分:(1)没有输入命令(2)内置命令(cd、exit)集成到 bash 程序中(3)外置命令(ls)外置命令是单独实现的,之后再用exit替换举例:为什么bash创建的子进程会执行用户输入的命令???原因:在 /bin 下存储了 ps 程序,再进行进程替换将 bas

2020-05-14 19:53:14 259

原创 【Linux】利用信号解决僵死进程

1、遗留问题僵死进程及其解决代码在之前我们实现了用 wait 解决僵死进程的问题,但是调用 wait 也就是等待子进程的结束,它遗留的问题是wait本身会阻塞,等待事件发生,本身会挂起,直到有一个任意子进程退出,然后才会执行父进程。2、利用信号(1)利用信号实现子进程结束会给父进程发送信号SIGCHLD,当父进程接收到信号时,再调用wait,这样父进程就不会阻塞(2)但是我们如何知道父进程哪些代码能够保证在收到信号之后执行?给信号绑定一个信号处理函数,信号处理函数收到信号才会被调用。3、实现代

2020-05-14 09:20:31 126

空空如也

空空如也

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

TA关注的人

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