自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 libevent库的使用-2实现TCP下的C/S模型-客户端

【代码】libevent库的使用-2实现TCP下的C/S模型-客户端。1创建底座2socket()创建通信套接字3创建带缓冲区的事件// 封装cfd4给bufferevent的读、写缓冲区设置回调函数5开启bufferevent的读缓冲区Q:客户端想写数据给服务器怎么办?6新建1个常规事件(监听它的写事件)7常规事件要想监听, 插到底座上8启动循环监听, 2种事件满足-回调9常规事件的写事件发生9bufferevent的读事件发生10销毁常规事件、bufferevent事件、底座

2023-05-13 11:00:32 374

原创 libevent库的使用-2实现TCP下的C/S模型-服务器端

【代码】libevent库的使用-2实现TCP下的C/S模型-服务器端 1、创建底座 2、创建监听器 3、一旦监听器满足, 自动回调监听器对应的回调函数, (有cfd通信套接字)4、在listencb内新建1个带缓冲区的事件5、设置bufferevent事件的读、写缓冲区对应的回调函数6、开启bufferevent的读缓冲区7、循环监听8、一旦(监听器)事件满足回调readcb读客户端数据、处理数据9、释放底座、释放监听器

2023-05-12 21:10:22 252

原创 libevent库的使用-1基础的5步模型 2、按epoll理解使用, 是fd就可以监听, 进程间通信(IPC) + 网络通信都可以用 3、使用命名管道fifo测试 写事件(缓冲区未满即会触发写事件)

libevent库的使用-1基础的5步模型1、创建1个底座event_base_new()函数2、创建1个事件event_new()3、把事件插到底座上event_add()4、循环监听事件是否满足, 一旦满足调用x事件设置的回调函数event_base_dispatch()5、销毁1个事件event_free()销毁底座event_base_free()

2023-05-11 20:54:18 221

原创 Linux网络编程-14、本地套接字用于进程间通信参考TCP下的C/S模型 不同: 1、socket(AF_UNIX,,) 2、sockaddr_un地址结构 3、双端都得自己bind(), 不能隐式

【代码】Linux网络编程-14、本地套接字用于进程间通信参考TCP下的C/S模型 不同: 1、socket(AF_UNIX,,) 2、sockaddr_un地址结构 3、双端都得自己bind(), 不能隐式绑定。

2023-05-10 17:21:01 139

原创 Linux网络编程-13、UDP(自身支持并发)下的C/S模型recvfrom代替read并传出对端的sockaddr地址结构(ip + port) sendto代替write

【代码】Linux网络编程-13、UDP(自身支持并发)下的C/S模型recvfrom代替read并传出对端的sockaddr地址结构(ip + port) sendto代替write。1、socket()建立通信套接字2、setsockopt设置端口复用3、bind绑定服务器自己的sockaddr地址结构(方便客户端知道发给谁)4、recvfrom从sfd阻塞读数据隐式绑定, 随机分配可用端口号1个端口号 = 1个进程1个ip = 1台设备ip + 端口号 = 网络环境中的唯一的x进程

2023-05-10 15:47:29 132

原创 Linux网络编程-12、epoll的事件模型1、ET(边沿触发)(监听的fd数据到达的那一刻才会触发epoll_wait)常常搭配fd的非阻塞属性(read(fd,,)时忙轮询)

【代码】Linux网络编程-12、epoll的事件模型1、ET(边沿触发)(监听的fd数据到达的那一刻才会触发epoll_wait)搭配fd的非阻塞属性(read(fd,,)时忙轮询)epoll事件模型: ET(边沿触发)下1、fd先设置非阻塞属性int flags = fcntl(wevent[i].data.fd, F_GETFL);flags |= O_NONBLOCK;ret = fcntl(wevent[i].data.fd, F_SETFL, flags);2、再把fd加入监听树中

2023-05-08 21:35:50 198

原创 Linux网络编程-12、epoll的两种事件模型1、LT(默认水平触发)(监听的fd有数据就触发epoll_wait)2、ET(边沿触发)(监听的fd数据到达的那一刻才会触发epoll_wait)

【代码】Linux网络编程-12、epoll的两种事件模型1、LT(默认水平触发)(监听的fd有数据就触发epoll_wait)2、ET(边沿触发)(监听的fd数据到达的那一刻才会触发epoll_wait)(监听的fd的事件 | EPOLLET)即可设置ET(边沿触发)

2023-05-08 20:45:32 157

原创 Linux网络编程-11、epoll监听文件描述符 --用于其他进程间通信pipe read管道一样阻塞

【代码】Linux网络编程-11、epoll监听文件描述符 --用于其他进程间通信pipe read管道一样阻塞。epoll默认的事件模型:LT(水平触发):监听的fd中有数据, 就会触发epoll_wait导致---read()管道中的数据;0、epoll小秘书只负责监听的fd[0]1、epoll_create()创建1棵监听树2、epoll_ctl()把fd[0]加入监听树, 并监听fd[0]的读事件3、epnum = epoll_wait()监听4、解析epnum, 是否有读事件发生

2023-05-08 20:31:44 342

原创 Linux网络编程-10、epoll实现多路IO转接服务器, TCP下的C/S模型优化, 两个阻塞 1新客户端connect建立连接 服务器accept阻塞 2旧客户端想发数据 服务器read阻塞

Linux网络编程-10、epoll实现多路IO转接服务器, TCP下的C/S模型优化, 两个阻塞 1新客户端connect建立连接 服务器accept阻塞 2旧客户端发数据read阻塞5、epoll小秘书只负责监听(1次调用, 只监听1次)6、epoll_create创建1棵监听树7、epoll_ctl往监听树上添加结点(想要监听的客户端=文件描述符) 8、分析 传出的数组-挨个看是谁产生的读事件9、lfd有读事件-新客户端建立连接10、新cfd加入监听树9、其他fd有读事件-旧客户端发数据

2023-05-08 16:09:45 91

原创 Linux网络编程-9、服务器进程突破1024文件描述符限制(不想重新编译内核) 1命令ulimit -n 值 随进程短暂生效 2修改/etc/security/limits.conf永久生效

Linux网络编程-9、服务器进程突破1024文件描述符限制(不想重新编译内核) 1命令ulimit -n 值 随进程短暂生效 2修改/etc/security/limits.conf永久生效

2023-05-08 12:02:12 571

原创 Linux网络编程-8、read()函数返回值-1具体分析:1被(信号等)中断2以非阻塞方式读但没数据3真的出错了

【代码】Linux网络编程-8、read()函数返回值-1具体分析:1被(信号等)中断2以非阻塞方式读但没数据3真的出错了。

2023-05-08 11:39:10 698

原创 Linux网络编程-7、poll实现多路IO转接服务器, TCP下的C/S模型优化, 两个阻塞 1新客户端connect建立连接 服务器accept阻塞 2旧客户端想发数据 服务器read阻塞

【代码】Linux网络编程-7、poll实现多路IO转接服务器, TCP下的C/S模型优化, 两个阻塞 1新客户端connect建立连接 服务器accept阻塞 2旧客户端想发数据 服务器read阻塞。1、lfd = socket()建立监听套接字2、setsockopt() 允许端口复用3、bind() 给监听套接字绑定sockaddr地址结构4、listen() 设置监听上限5、ret = poll( &pfds) 小秘书只负责监听6、对ret分类判断 解析读事件(都由谁产生)

2023-05-07 21:39:06 83

原创 Linux网络编程-6、select实现多路IO转接服务器, TCP下的C/S模型优化, 两个阻塞 1新客户端connect建立连接 服务器accept阻塞 2旧客户端想发数据 服务器read阻塞

【代码】Linux网络编程-6、select实现多路IO转接服务器, TCP下的C/S模型优化, 两个阻塞 1新客户端connect建立连接 服务器accept阻塞 2旧客户端想发数据 服务器read阻塞1、lfd = socket()建立监听套接字2、setsockopt() 允许端口复用3、bind() 给监听套接字绑定sockaddr地址结构4、listen() 设置监听上限5、ret = select( &readset) 小秘书只负责监听6、对ret分类判断 解析读事件(都由谁产生)

2023-05-06 21:08:01 114

原创 Linux网络编程-5、服务器主动关闭连接-TIME_WAIT状态, 需要等2MSL时长到CLOSED状态, 在等待期间无法./server 端口被占用-设置端口复用 netstat -apn查看状态

Linux网络编程-服务器主动关闭连接-处于TIME_WAIT状态, 需要等2MSL时长到CLOSED状态, 在等待期间无法./server 端口被占用-设置端口复用 netstat -apn查看状态

2023-05-04 20:53:41 254

原创 Linux网络编程-4、多线程并发服务器 1、accept()成功调用并返回才能pthread_create()创建子线程 2、(不同于多进程服务器)主线程不能关闭sfd(通信套接字) 3、nc测试

【代码】Linux网络编程-3、多线程并发服务器 1、accept()成功调用并返回才能pthread_create()创建子线程 2、(不同于多进程服务器)主线程不能关闭sfd(通信套接字) 3、nc测试。

2023-05-03 20:52:43 112

原创 Linux网络编程-3、多进程并发服务器 1、父进程先注册信号捕捉函数(避免循环注册), 借助SIGCHLD信号回收子进程 2、accept()成功调用并返回才能fork()创建子进程 3、nc测试

【代码】Linux网络编程-3、多进程并发服务器 1、父进程先注册信号捕捉函数(避免循环注册), 借助SIGCHLD信号回收子进程 2、accept()成功调用并返回才能fork()创建子进程 3、nc测试。

2023-05-03 20:46:19 117

原创 Linux网络编程-2、代码健壮性的TCP下的C/S模型(检查所有函数返回值)-封装常用函数-代码逻辑更简洁清晰 只写服务器端程序, nc 127.0.0.1 9527测试

【代码】Linux网络编程-2、代码健壮性的TCP下的C/S模型(检查所有函数返回值)-封装常用函数-代码逻辑更简洁清晰 只写服务器端程序, ncp 127.0.0.1 9527测试。

2023-05-03 11:40:12 101

原创 Linux网络编程-1、TCP下的C/S模型 server服务器端 client客户端 -隐式绑定, 系统帮忙分配本机(可用ip)和(随机的端口号) 只写服务器端程序, nc IP地址 端口号 测试

【代码】Linux网络编程-1、TCP下的C/S模型 server服务器端 client客户端 -隐式绑定, 系统帮忙分配本机(可用ip)和(随机的端口号) 只写服务器端程序, nc IP地址 端口号 测试。

2023-05-02 19:40:50 191

原创 Linux系统编程-线程 1、创建 2、线程之间共享 3、回收 4、设置线程分离 5、杀死线程 6、线程间同步mutex互斥锁 7、死锁 8、rwlock读写锁9、条件变量、信号量 生产者消费者模型

Linux系统编程-线程 1、创建 2、线程之间共享 3、回收 4、设置线程分离 5、杀死线程 6、线程间同步mutex互斥锁 7、死锁 8、rwlock读写锁9、条件变量、信号量 生产者消费者模型

2023-04-30 19:54:06 61

原创 Linux系统编程-精灵进程的搭建 1、子进程(非组长)创建会话 2、守护进程的搭建

【代码】Linux系统编程-精灵进程的搭建 1、子进程(非组长)创建会话 2、守护进程的搭建。

2023-04-30 19:48:47 70

原创 Linux系统编程-进程间通信-信号 1、kill函数发送信号 2、定时器 alarm setitimer周期定时 3、自定义阻塞信号集mask 4、注册信号捕捉函数 5、借助信号捕捉回收子进程

Linux系统编程-进程间通信-信号 1、kill函数发送信号 2、定时器 alarm setitimer周期定时 3、自定义阻塞信号集mask 4、注册信号捕捉函数 5、借助信号捕捉回收子进程

2023-04-30 19:45:53 104

原创 Linux系统编程-进程间通信1、pipe匿名管道 2、命名管道 3、文件 4、mmap共享内存映射

【代码】Linux系统编程-进程间通信1、pipe匿名管道 2、命名管道 3、文件 4、mmap共享内存映射。

2023-04-30 19:34:41 97

原创 Linux系统编程1、fork函数 getpid函数 父子进程共享 不共享2、execl换壳 -后台进程打印到文件 3、孤儿进程 僵尸进程 4、wait和waitpid回收子进程

【代码】Linux系统编程1、fork函数 getpid函数 父子进程共享 不共享2、execl换壳 -后台进程打印到文件 3、孤儿进程 僵尸进程 4、wait和waitpid回收子进程。

2023-04-30 17:48:34 106

原创 Linux系统编程1、open函数 2、read读设备文件、网络文件、管道文件会阻塞 3、lseek重新制定read write的偏移 4、dup2重定向 5、常见命令(ls cp mv)的源码实现

【代码】Linux系统编程1、open函数 2、read读设备文件、网络文件、管道文件会阻塞 3、lseek重新制定read write的偏移 4、dup2重定向 5、常见命令(ls cp mv)的源码实现。

2023-04-30 17:33:01 137

原创 进阶算法(二) 《算法笔记》自定义实现 1、创建、遍历、图 2、DFS及BFS优先搜索 3、最短路径优先(迪杰斯特拉)算法 4、全源最短路径(弗洛伊德)算法 5、最小生成树prim算法 克鲁斯卡尔算法

进阶算法(二) 《算法笔记》自定义实现 1、创建、遍历、图 2、DFS及BFS优先搜索 3、最短路径优先(迪杰斯特拉)算法 4、全源最短路径(弗洛伊德)算法 5、最小生成树prim算法 克鲁斯卡尔算法

2023-04-30 16:28:49 76

原创 进阶算法(二) 《算法笔记》自定义实现 1、创建、遍历、二叉树 2、排序二叉树 3、AVL树 4、哈夫曼树 5、并查集

【代码】进阶算法(二) 《算法笔记》自定义实现 1、创建、遍历、二叉树 2、排序二叉树 3、AVL树及性质 4、哈夫曼树 5、并查集。

2023-04-30 16:16:40 42

原创 进阶算法(二) 《算法笔记》自定义实现1、栈 2、队列 3、链表 4、图 5、DFS深度优先搜索 6、BFS广度优先搜索

【代码】进阶算法(二) 《算法笔记》自定义实现1、栈 2、队列 3、链表 4、图 5、DFS深度优先搜索 6、BFS广度优先搜索。

2023-04-30 16:05:33 39

原创 进阶算法(二) 《算法笔记》1、贪心思想 2、二分思想 3、双指针

【代码】进阶算法(二) 《算法笔记》1、贪心思想 2、二分思想 3、双指针。

2023-04-30 11:43:49 73

原创 进阶算法(二) 《算法笔记》 1、math的使用 2、递归斐波那契数列

【代码】进阶算法(二) 《算法笔记》 1、math的使用 2、递归斐波那契数列。

2023-04-28 21:05:36 74 1

原创 进阶算法(二) 《算法笔记》sort的简单使用 sort()区间排序

进阶算法(二) 《算法笔记》sort的简单使用 sort()区间排序

2023-04-28 21:03:14 139

原创 进阶算法(二) 《算法笔记》哨兵的使用 1、简单选择排序 2、直接插入排序 3、归并排序 4、快速排序 5、随机选择算法 6、堆排序

【代码】进阶算法(二) 《算法笔记》哨兵的使用 1、简单选择排序 2、直接插入排序 3、归并排序 4、快速排序 5、随机选择算法 6、堆排序。

2023-04-28 21:02:37 226

原创 基础排序算法(一)选择排序1、简单选择排序 2、堆排序

【代码】基础排序算法(一)选择排序1、简单选择排序 2、堆排序。

2023-04-28 20:58:34 40

原创 基础排序算法(一) 交换排序1、冒泡排序 2、快速排序

【代码】基础交换排序算法(一) 1、冒泡排序 2、快速排序。

2023-04-28 20:57:24 55

原创 基础排序算法(一)插入排序 1、直接插入(顺序) 2、二分插入 3、希尔排序(顺序+二分结合)

【代码】基础排序算法(一)插入排序 1、直接插入(顺序) 2、二分插入 3、希尔排序(顺序+二分结合)

2023-04-28 20:55:37 68

原创 基础查找算法(一)线性表的查找 1、顺序查找 2、二分查找 树表的查找 1、二叉排序树

【代码】基础查找算法(一)线性表的查找 1、顺序查找 2、二分查找 树表的查找 1、二叉排序树。

2023-04-28 20:44:51 200 1

原创 基础数据结构(一)图的实现(邻接矩阵+邻接表)+BFS广度优先搜索+DFS深度优先搜索

【代码】基础数据结构(一)图的实现(邻接矩阵+邻接表)+BFS广度优先搜索+DFS深度优先搜索。

2023-04-28 20:42:29 377

原创 基础数据结构(一)二叉树的实现+(先序、中序、后序、层次)遍历算法+普通树的实现+哈夫曼树的实现

【代码】基础数据结构(一)二叉树的实现+(先序、中序、后序、层次)遍历算法+普通树的实现+哈夫曼树的实现。

2023-04-28 20:40:06 567 1

原创 基础数据结构(一)线性表的实现(链表、栈、队列、字符串)

【代码】基础数据结构(一)线性表的实现(链表、栈、队列、字符串)

2023-04-28 20:22:42 71 1

Linux网络编程里的多进程服务器和多线程服务器用到的错误封装函数

Linux网络编程里的多进程服务器和多线程服务器用到的错误封装函数, 对TCP下的C/S模型常用的函数进行返回值检查, 在主代码里可以省去返回值检查, 突出代码逻辑

2023-05-03

linux系统编程-静态库-动态库-gdb调试.zip

linux系统编程-静态库-动态库的制作-gdb调试常见段错误-c语言实现

2023-04-30

自定义的makefile文件及测试

自定义的makefile文件, 适合Ubuntu下编译c文件, make 源码名(无.c后缀)

2023-04-30

算法笔记-2、STL容器的学习使用.zip

用于初步学习STL容器方便后续的算法学习, 来源于《算法笔记》, 适用于初学者,强力推荐这本书, 非常简单的把C、C++的STL、基础数据结构的实现、查找算法、排序算法、二分思想、贪心思想的起源思想

2023-04-30

算法笔记-1、C语言的学习使用.zip

用于初步学习C语言, 方便后续的算法学习, 来源于《算法笔记》, 适用于初学者,强力推荐这本书, 非常简单的把C、C++的STL、基础数据结构的实现、查找算法、排序算法、二分思想、贪心思想的起源思想

2023-04-30

空空如也

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

TA关注的人

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