Linux
adlatereturn
自己竟然不存在
展开
-
gdb学习笔记
gdb a.out -q 减少免责输出gdb 中c(continue)是在断点间跳跃的意思通过修改配置文件/proc/sys/kernel/core_pattern可以配置core文件的位置和命名格式,通过gdb ./a.out core-a.out-4879-1606749459可以调试core程序,可以看到程序崩掉的位置,#0 0x0000564a73ae3129 in main () at test1.c:6在gdb中file ./a.out可以读入可执行文件gdb --args ./a.o.原创 2020-12-02 20:12:45 · 400 阅读 · 3 评论 -
真香!终于知道怎么解决c++死锁了
死锁在写c/c++的过程中遇到死锁常常会让我们手无足错,因为死锁往往不像其他类型的错误一样会在终端直接打印报错,因此难以被发现并需要大量精力去排错。是时候思考,该如何防范或者避免死锁。死锁场景1在类里面或者全局无意识的使用过多的锁,并在函数中调用这些锁的时候未注意到锁的次序。如一个线程执行函数fun1时锁的顺序是A->B->C,另一个线程执行fun2时锁的顺序是C->B->A ,除非能保证fun1,fun2不会同时执行,否则及其容易发生死锁。解决途径1如果使用原创 2020-10-18 11:51:17 · 1993 阅读 · 2 评论 -
对LinYaCool WebServer 的学习(仿muduo)(http)
怎么说呢,又看了一个模仿moduo的server,不过之前那个mini-muduo是echo服务器,这个是http服务器,思想都差不多,在并发模型上这个服务器使用的是Reactor +线程池 ,每个连接子线程也是一个Reactor,这也是我第一次看到这种模型的实现,它相对mini-muduo的优点还有它使用了智能指针来避免内存泄漏,这的确增大了编程的难度,但其保证内存不泄漏的确是程序员格外需要去注意的地方.大致有这些类Server(入口类,其中包含了Accptor 用来处理连接事件)Channel (原创 2020-09-10 14:00:06 · 1860 阅读 · 1 评论 -
对别人写的mini-muduo的学习
之前想学muduo 但因为一些原因,暂时编译不过,碰巧看到一个博主是模仿着muduo写的mini-muduo,看了看觉得挺好,仅仅实现Echo服务器,从最简单的epoll模型开始到反应堆+多线程,为了简洁没有使用智能指针(它也提示了会内存泄漏),部分有bug,但依旧是一个很好的学习对象。本文就最后的 反应堆+多线程模型作一下分析。(原文分成了13小节)main.cpp#include "TcpServer.h"#include "EventLoop.h"#include "EchoServer.h"原创 2020-09-02 18:28:52 · 383 阅读 · 0 评论 -
c++网络五子棋Linux版
这次写的是一个网络版五子棋怎么说的,这次的cpp文件文件比较多,我就贴个github代码吧github编译主要看 makefile里那几个文件实现了 登录 匹配下棋。服务器用了 epoll+线程池(模仿《linux高性能编程写的》)但这次的教训就是这个棋局的主体业务逻辑应该放在服务器(我写在客户端由客户端判断棋局是否结束),而且线程池处理也是计算密集型任务,在这种俩个用户并非同时下棋的程序中可以不用。更何况放在客户端的业务逻辑可以伪造的,这样服务器就可能收到伪造的数据。给大家看下效果:经验:原创 2020-08-17 00:49:54 · 481 阅读 · 2 评论 -
linux 小工具
可用来检验内存泄漏出处valgrind --tool=memcheck --leak-check=full ./testadl@adl:~/桌面/json-tutorial/tutorial03/images$ valgrind ./leptjson_test --leak-check=full==7458== Memcheck, a memory error detector==7458== Copyright (C) 2002-2017, and GNU GPL'd, by Julian Se原创 2020-08-02 22:41:03 · 183 阅读 · 2 评论 -
mychatroom聊天室坑点简要分析
需求[服务器日志]emm,这个我就直接把服务器标准输出和错误重定向到文件里,由于函数太多,并没有在每个函数都去打印一句。主要要设置无缓冲 setbuf(stdout,NULL); setbuf(stderr,NULL);主服务器流程main注册服务器日志初始化套接字,epoll收取客户消息主客户端流程mainB初始化套接字登录注册退出找回密码 重新设置密码欢迎界面...原创 2020-07-27 17:56:23 · 417 阅读 · 0 评论 -
linux 定时器(c++)(2)时间轮
节点类相比较时间升序链表中的绝对时间expiretw_timer采用的是相对时间的概念也就多出rotation ,time_slot俩属性,rotation是转的“圈数”,time_slot是转到时间轮的哪一块区域。好比现在在1:05,过了65分钟时针走了闹钟的1rotation并走到10 time_slot;tw_timer.h//// Created by adl on 2020/7/22.//#ifndef TEST2_TW_TIMER_H#define TEST2_TW_TIME原创 2020-07-26 13:23:50 · 469 阅读 · 0 评论 -
linux 定时器(c++)时间升序链表
刚好前两天学长给我们讲座中提到服务器客户的超时处理,刚好又在看《高性能linx服务器编程》有发现这方面的知识,就拿出来总结一下。第一,我们为什么需要自制计时器,c++ /c 的alarm不是可以实现定时操作吗,还有sleep…???linux下一个进程共享一个alarm闹钟定时器,然而服务器肯定是多用户的,我们肯定得想方法给每个客户整一个定时器升序时间链表util_timer类代表着每一个节点,利用time()存储绝对时间,client_data是用户的数据util_timer.h//// C原创 2020-07-25 23:02:19 · 464 阅读 · 0 评论 -
俄罗斯方块c++linux版本
主程序RussiaBlock.cpp//// Created by adl on 2020/7/18.//#include "Block.h"#include "Table.h"#include <thread>#include <mutex>#include "hierarchical_mutex.h"#include "fstream"using namespace std;thread_local uint64_t hierarchic原创 2020-07-19 15:01:45 · 312 阅读 · 1 评论 -
c-mysql(常用)
MySQL C API 使用(基本函数)了解了以上基础知识,去包装一些函数用来给c使用accept_mysql 用来连接数据库MYSQL accept_mysql(){ MYSQL mysql; if(NULL==mysql_init(&mysql)){ err_sys("mysql_init err",__LINE__); } if(mysql_library_init(0,NULL,NULL)!=0){ err_sy原创 2020-07-11 15:22:11 · 186 阅读 · 0 评论 -
子进程可以复制父进程的缓冲区吗?
在阅读《UNIX 高级环境编程》进程控制那块,有个例子是差不多这样的:在子进程中改变变量,观察父进程之后变量的变化#include <stdio.h>#include <stdlib.h>#include <sys/types.h>#include <sys/stat.h>#include <fcntl.h>#include...原创 2020-04-22 21:03:36 · 412 阅读 · 0 评论 -
linux下c语言用execl使用vim 打开一个文件,出现了神奇的读错误的解答
我认为使用execl函数可以去使用vim。但是却出现了神奇的读错误,整个终端崩了。#include<stdio.h>#include<stdlib.h>#include<string.h>#include<fcntl.h>#include<unistd.h>int main(){ pid_t pid; ...原创 2020-04-11 15:03:11 · 369 阅读 · 1 评论 -
linux网络编程学习epoll模型分析(最简单那种哦!!!)
#include <stdio.h>#include <stdlib.h>#include <unistd.h>#include <sys/types.h>#include <sys/stat.h>#include <fcntl.h>#include <errno.h>#include <str...原创 2020-03-25 21:50:17 · 156 阅读 · 0 评论 -
linux下如何把一个自己写的命令(如ls)在任意文件夹下执行
我们需要把这个可执行文件所在目录加入PATH环境变量中。1sudo vim/etc/profile 加入一行:export PATH=$PATH:/脚本目录/再记得source 加载一下profile用这种有一点点小问题:命令行的东西的颜色全消失了2sudo vim /etc/environment ,将目录加到PATH后面。我使用了这种再记得source 加载一下profi...原创 2020-03-14 17:40:16 · 1405 阅读 · 0 评论