01 2019 档案
摘要:POSIX标准 open函数属于Linux中系统IO,用于“打开”文件,代码打开一个文件意味着获得了这个文件的访问句柄。 int fd = open(参数1,参数2,参数3); int fd = open(const char *pathname,int flags,mode_t mode); 1.
阅读全文
摘要:点击直接跳转 第01课:调试信息与调试原理 第02课:启动GDB调试 第03课:GDB常用的调试命令概览 第04课:GDB常用命令详解(上) 第05课:GDB常用命令详解(中) 第06课:GDB 常用命令详解(下) 第07课:【实战】调试Redis准备工作 第08课:【实战】Redis网络通信模块源
阅读全文
摘要:今天突然想起来几个问题,在程序运行起来时,存在一些限制: 1,数组的长度(成员的个数)存在限制!(数组定义的空间大小)2,一个进程里打开的文件数。3,一个文件的名字的长度。4,一个进程里创建线程的个数。 数组的长度(成员的个数)存在限制! 宏观上的限制因素: 首先,如果要确定一个数组的最大长度,我们
阅读全文
摘要:redis-server 接收到客户端的第一条命令 redis-cli 给 redis-server 发送的第一条数据是 *1\r\n\$7\r\nCOMMAND\r\n 。我们来看下对于这条数据如何处理,单步调试一下 readQueryFromClient 调用 read 函数收取完数据,接着继续
阅读全文
摘要:侦听 fd 与客户端 fd 是如何挂载到 EPFD 上去的 同样的方式,要把一个 fd 挂载到 EPFD 上去,需要调用系统 API epoll_ctl ,搜索一下这个函数名。在文件 ae_epoll.c 中我们找到 aeApiAddEvent 函数: 当把一个 fd 绑定到 EPFD 上去的时候,
阅读全文
摘要:我们这里先研究redis-server端的网络通信模块。除去Redis本身的业务功能以外,Redis的网络通信模块实现思路和细节非常有代表性。由于网络通信模块的设计也是Linux C++后台开发一个很重要的模块,虽然网络上有很多现成的网络库,但是简单易学且可以作为典范的并不多,而redis-serv
阅读全文
摘要:7.1 Redis源码下载与编译 Redis源码下载与编译在前面已经说过了,同学们可以去第04课:GDB常用命令详解(上)学习。 编译成功后,会在src目录下生成多个可执行程序,其中redis-server和redis-cli使我们即将调试的程序,进入src目录,使用GDB启动redis-serve
阅读全文
摘要:本课的核心内容: disassemble 命令 set args 和 show args 命令 tbreak 命令 watch 命令 display 命令 6.1 disassemble 命令 当进行一些高级调试时,我们可能需要查看某段代码的汇编指令去排查问题,或者是在调试一些没有调试信息的发布版程
阅读全文
摘要:本科核心内容: info和thread命令 next、step、util、finish和return命令 5.1info和thread命令 在前面使用info break命令查看当前断点时介绍过,info命令是一个复合指令,还可以用来查看当前进程的所有线程运行情况。下面以redis-server进程
阅读全文
摘要:本课的核心内容如下: run命令 continue命令 break命令 backtrace与frame命令 info break、enable、disable和delete命令 list命令 print和ptype命令 为了结合实践,这里以调试Redis源码为例来介绍没一个命令,这里先介绍一些常用命
阅读全文
摘要:先给出一个常用命令的列表,后面结合具体的例子详细介绍每个命令的用法。 命令名称 命令缩写 命令说明 run r 运行一个程序 continue c 让暂停的程序继续运行 next n 运行到下一行 step s 如果有调用函数,进入调用函数内部,相当于step into until u 运行到指定行
阅读全文
摘要:使用GDB调试程序一般有三种方式: gdb filename gdb attach pid dgb filename corename 也对应这本节课的核心内容: 直接调试目标程序 附加进程 调试core文件 接下来我们逐一讲解。 2.1直接调试目标程序 在开发阶段或者研究别人的项目时,当编译成功生
阅读全文
摘要:Linux下C/C++程序开发,即使使用Makefile、Cmake等编译工具,其最终都是调用GCC这一编译工具组的。这里说的工具组,是因为编译C程序和C++程序使用的编译工具还是有一点差别的,一般编译C程序使用GCC,编译C++程序使用G++。(下文统一使用GCC这一名词代指)。 我使用的操作系统
阅读全文
摘要:SELECT语句基础 1.查询指定列:SELECT关键字 --语法: --SELECT ,…… --希望查询列的名称 --FROM --指定选取数据的表 --从Shohin中取 3 列 SELECT shohin_id,shohin_mei,hanbai_tanka --列的顺序可以任意指定,逗号(",")分隔,查询结果的顺...
阅读全文
摘要:数据库结构 1.服务器:用于接收并处理其他程序发出的请求的程序(软件),或者是安装此类程序的设备(计算机)。 2.客户端:向服务器发出请求的程序(软件),或者是安装此类程序的设备(计算机)。 3.表(table):类似Excel,由行和列组成的二维表。 4.字段:表的列(垂直方向)。 5.记录:表的
阅读全文
摘要:#include "stdio.h" #define MAXSIZE 20 typedef int ElemType; typedef struct { ElemType r[MAXSIZE+1]; int length; }SortList; //简单选择排序 void SelectSort(SortList *L) { int i,j;ElemType t; ...
阅读全文
摘要:/************************************************************************* > File Name: slink.c > Author: > Mail: > Created Time: Thu 25 Oct 2018 06:24:28 PM CST ******************...
阅读全文
摘要:/************************************************************************* > File Name: only_one.c > Author: > Mail: > Created Time: Thu 01 Nov 2018 09:21:50 AM CST ***************...
阅读全文
摘要:/* 栈的特性:先进后出。 栈在计算语言处理和将递归算法改为非递归算法等方面起着非常重要的作用。 */ #define INITSIZE 100 //储存空间的初始分配量 typedef int ElemType; typedef struct { int top; //栈顶指针 ElemType *base; //存放元素的动态数组空...
阅读全文
摘要:# 查看当前目录下的文件数量(不包含子目录中的文件) # 查看当前目录下的文件数量(包含子目录中的文件) 注意:R,代表子目录 # 查看当前目录下的文件夹目录个数(不包含子目录中的目录),同上述理,如果需要查看子目录的,加上R # 查询当前路径下的指定前缀名的目录下的所有文件数量# 例如:统计所有以
阅读全文
摘要:#include "stdio.h" #define MAXSIZE 20 typedef int ElemType; typedef struct { ElemType r[MAXSIZE+1]; int length; }SortList; /* 冒泡排序:BubbleSort */ void BubbleSort(SortList *L) { int i,j;E...
阅读全文
摘要:#include "stdio.h" #define MAXSIZE 20 typedef int ElemType; typedef struct { ElemType r[MAXSIZE+1]; int length; }SortList; void crelist(SortList *L) { int i = 0; ElemType x; printf("...
阅读全文
摘要:(1)插入排序:将无序序列区中的记录向有序序列区中插入,使有序序列长度增加的排序方法。 (2)交换排序:通过比较记录的关键字大小来决定是否交换记录,从而排定记录所在位置的方法。 (3)选择排序:从无序序列区中选出关键字最小(升序排列)或最大(降序排列)的记录,并将它交换到有序序列区中指定位置的方法。
阅读全文
摘要:二叉排序树,也称作二叉查找树,一般定义为或者是空树,或者是满足以下条件的二叉树: (1)若它的左子树不空,则左子树上所有记录的关键字值均小于根记录关键字的值。 (2)若它的右子树不空,则右子树上所有记录的关键字均大于根记录关键字的值。 (3) 它的左、右子树本身也是二叉排序树。 ! 二叉排序树的查找
阅读全文
摘要:unique_ptr 可以实现如下功能: 1、为动态申请的内存提供异常安全 2、讲动态申请的内存所有权传递给某函数 3、从某个函数返回动态申请内存的所有权 4、在容器中保存指针 5、auto_ptr 应该具有的功能 share: 从名字share就可以看出了资源可以被多个指针共享,它使用计数机制来表
阅读全文