自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 TCP拥塞控制机制

TCP拥塞控制如何控制发送方的速率如何让发送方感知网络拥塞采用何种算法总结 TCP为运行在两个不同主机上的进程提供了可靠的传输服务,它还有另一个重要部分的就是拥塞控制机制。在传输数据时,发送方想要尽快的将数据送出去,而接受方也想尽快的收到数据,但超出网络接受能力的传输会造成拥塞。为了处理网络拥塞,TCP上实现了一套拥塞控制机制。 TCP采用的方法是让发送方感受到网络拥塞的程度来限制发送方的发送速率。那么就出现了三个问题,一是如何控制发送方的速率,二是如何让发送方感知网络拥塞,三是采用何种算法。 如何控制发送

2021-11-12 20:49:17 3178

原创 c++primer笔记类类型转换

类类型转换类型转换运算符二义性调用实参匹配且进行相同的类型转换转换目标为内置类型的多重类型转换 一个double可以很容易的转换成int,我们的类与类之间自然也可以进行转换,转换构造函数和类型转换运算符共同定义了类类型转换,这样的转换有时也被称作用户定义的类型转换。 类型转换运算符 下面是一个定义了类型转换运算符的类 class example{ public: example(int i=0):a(i){if (i<0) throw std::out_of_range("bad un

2021-08-18 21:32:11 214

原创 聊天室源码分析

聊天室源码分析实现功能模型服务器服务器存储消息客户端传输信息处理信息客户端存储消息发送文件与接受文件 实现功能 模型 服务器 使用了epoll模型,并为每一个处理请求新开一个线程进行处理,并进行线程分离,使它们结束后可以自动释放资源。如果使用线程池自然是更好的,但本人能力不足怕写成多线程难以处理。 epoll模型如下 for(;;) { nfds = epoll_wait(epfd,events,EVENTS_MAX_SIZE,-1);//等待可写事件

2021-08-18 21:31:07 250

原创 聊天室源码

聊天室源码 链接: github. 需要注意的需要切换到test分支上去,主分支bug太多了。 编译时 服务器: gcc server.c serverfun.c -o server -lpthread -lmysqlclient 客户端: gcc c.c cfun.c -o client -lpthread server.c #include "mysqlc.h" #define EVENTS_MAX_SIZE 20 #define SERV_PORT 9000 #define MAX_CONTECT

2021-08-18 17:17:32 443

原创 移动构造函数

C++primer移动构造函数笔记什么是移动右值引用move函数介绍移动构造函数与移动赋值函数 c++支持移动而非拷贝一个对象的能力。在很多情况下我们都会拷贝一个对象,对象在拷贝后就立即销毁了。这种情况下使用移动会大幅度提升性能。 什么是移动 移动一个对象就是直接将它使用的内存交由另一个对象使用。类似于用一个指针指向另一个指针指向的对象,不同的是移动后的对象只支持赋新值和销毁操作,不能再依赖于之前的值。 右值引用 了解移动之前我们必须了解什么是右值引用,右值引用就是必须绑定到右值的引用。右值引用有一个重要的

2021-08-18 14:29:43 483

原创 c++primer类学习笔记

c++primer类学习笔记定义类成员和非成员函数数据成员成员函数thisconst在外部定义成员函数非成员函数构造函数默认构造函数合成的默认构造函数拷贝,赋值,析构类的封装class和structpublic和private友元类的作用域类的其他特性静态成员聚合类字面值常量类 定义类 我们暂时先用struct来定义类,到类的封装封装再来讲struct和class的区别。 下面是一个简单的类。 struct exmple{ exmple(int s):a(s){}; //这是一个构造函数 in

2021-08-17 20:20:39 176

原创 C++primer智能指针的笔记

c++智能指针介绍shared_ptr定义使用make_shared 函数用另一个shared_ptr来初始化使用new来初始化一个shared_ptr使用拷贝和赋值自动销毁shared_ptr易错点:new和shared_ptrgetunique_ptrweak_ptr 介绍 为了更容易的使用动态内存,标准库提供了两种智能指针和一个伴随类。智能指针在使用完毕后会自动释放十分方便,但不规范而使用还是会造成错误。 shared_ptr 定义 智能指针也是模板需要我们提供额外的信息(指向的对象)。 shared

2021-08-17 14:43:24 194

原创 C++primer函数部分笔记

这里写自定义目录标题欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入 欢迎使用Markdown编辑器 你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Mar

2021-08-17 09:10:41 184

原创 LINUX下poll函数用法

LINUX下poll函数用法 文章目录LINUX下poll函数用法一、函数介绍二、使用步骤1.引入库2.读入数据总结 一、函数介绍 int poll(struct pollfd *fds, nfds_t nfds, int timeout); 第一个参数为一个结构体数组,它存储需要监听的文件描述符和需要监听的事件。 结构体定义如下 struct pollfd {        int fd; /* 待监听的文件描述符*/        short events;

2021-06-09 21:46:59 4538

原创 linux下C语言实现简单线程池

实现一个简单的线程池 我们知道同一进程中的多条线程将共享该进程中的全部系统资源,频繁的创建和结束线程会占用大量的系统资源,而线程池可以避免这种情况。 简单的来说,线程池就是多个线程的集合。这些线程在执行完当前任务后不会立即结束,而是执行下一个任务。若没有任务可执行,它们就会阻塞并等待下一个任务。线程池只在销毁时会结束所有线程。这样以来就避免了频繁创建和结束线程的情况,下面讲讲如何实现一个简单的线程池。 作者的线程池主要是由多个常驻线程和任务队列组成的。任务队列由链表来实现,里面的每个任务中都有相应的处理函数

2021-05-25 19:38:25 253

原创 简单实现ls

简单实现ls 文章目录简单实现ls需要注意的点二、代码1.用于输出错误的函数2.用于打开目录并读取所有文件名并存在动态数组中3.实现-R命令4.完整代码 需要注意的点 1.若你打算用字符数组存储文件名,因为栈的大小是有限的,很容易造成栈溢出。所以建议用动态内存分配空间或修改栈的大小。本文使用的是动态内存分配,若想修改栈的大小请参考下面的博文。 Linux修改栈空间的大小 2.及时输出错误信息可以帮助你快速找出错误。 3.遍历根目录时有可能出现权限不足的情况,可用root身份执行。 4.若opendir失

2021-04-11 20:57:13 162

原创 C语言实现简单的无头单链表

C语言实现简单的无头单链表目录定义节点功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入 目录 本人为初学者,如有错误请及时指出。 定义节点 一个简单的节点只包括数据和指向下一个节点的指针 struct Node{ int p

2020-12-27 20:56:15 508 1

空空如也

空空如也

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

TA关注的人

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