自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(250)
  • 资源 (1)
  • 收藏
  • 关注

原创 muduo 日志打印改造

在 Impl 对象的 finish() 函数里,把文件名、行号、函数名加上,最后输出到stdout。时间戳改成本地的了,线程id 改成了[线程id],函数名称放到最后。讲过,这里创建一个匿名对象。

2024-08-23 16:45:18 120

原创 strchr 和 strrchr

在 s 中查找最后一次出现字符c的位置,返回指向找到的位置,找不到返回null。在 s 中查找第一次出现字符c的位置,返回指向找到的位置,找不到返回null。

2024-08-23 14:39:36 71

原创 Window访问Linux目录权限问题

而且当用 sourceinsight 添加文件时,这些目录下也搜索不到任何文件,其原因是目录权限问题。只有改成其他用户是5或7的时候才能访问,不知道为什么,即改成745 或 755 或 777 后目录才是可以访问的, 为何766 不行呢?

2024-08-23 11:26:47 54

原创 new 类对象时构造函数是否带括号?

编译失败,无法找到对应的构造函数,那这个对应的构造已经给出了提示,就是:CTest::CTest(),不带参数的构造函数。因为有类类型变量 a,在创建 CTest 对象时会调用a类型的构造函数,但找不到,所以编译失败,解决办法很简单,给 a 一个空的构造函数即可,或是显式调用还参数的 a 的构造函数。就是一个很简单的例子,如在new一个类对象时,是否要带上括号呢?那什么情况下必须要写构造函数而不是使用编译器给的默认构造函数呢?如果一个类里包含了其他类类型,而这个被包含的类类型没有默认构造函数时,

2024-08-16 11:25:42 154

原创 ‘#‘ is not followed by a macro parameter 关于宏定义的错误

这个是因为在宏定义中不能嵌套#ifdef,#ifndef 这个些,具体为什么不能找不到文档说明。因为有平台之分需要用到编译宏,但不想每个调用的地方都写 #ifdef ... #endif,所以想这样一个宏图省事。在非指定平台下直接定义成空的宏就可以了,或者直接代码里写 #ifdef 吧。

2024-08-03 13:23:42 188

原创 c++ map operator[] 陷阱

因为我知道 map 的 key,所以我就直接输入 xx_mset[80041],看结果这个 set 里是没有元素的,然后我又想直接打印整个 map,输入p xx_mset,结果吓我一跳,因为还有一个元素在呢,怎么没有删除掉呢?最后发现是 key 不一样,原来 map 里是 800041,而我输入的是 80041,删除后 map 里的 800041 确实都删除掉了,是正常的,而多出来的 这个_M_s = std::map with 1 element = {

2024-07-15 16:39:53 269

原创 window 无法访问 samba

其中用户名那一行 force user 的用户被删除掉了,所以导致 window 无法访问,解决办法我是重新添加了一个新用户,force user 和 force group 都填写这个新用户名,解决了。问了IT部,说是重启一下试试,结果重启后还是这个样子,ssh 是可以连接的,就是这个共享目录访问不了了。有点奇怪,因为周六的时候还是可以访问的。

2024-07-15 16:09:01 173

原创 c/c++ 打印调用栈

然后可以把这个函数放在信号回调函数里,所以先需要设置一下信号处理函数,函数:int sigaction (int __sig, const struct sigaction *__restrict __act, struct sigaction *__restrict __oact),打印调用栈可以在程序出现死机的时候(如出现 SIGABRT、SIGSEGV等一些信号错误)是很有用的信息,有可能就不需要 core file 来协助排查问题了。

2024-07-13 16:19:00 361

原创 find 查找与删除

【代码】find 查找与删除。

2024-07-12 23:25:58 189

原创 shell 字符串列表操作

我的需求是这样的:编译多个模块的时候,把失败的模块添加到列表里,最后输出。这个列表类似这样:failModuleList="a b c d e"列表(List):在Shell中,列表是由空格分隔的字符串序列。注意:shell 的语法,“=”、“+=” 两边都不能有空格。

2024-07-12 16:19:40 288

原创 xargs 和 sed 一起使用

全局将 basiclibrary 替换为 basicLibrary。全局将 yt/Documents/code 替换为 ty/practice。注意:xargs 后不要使用 |

2024-07-12 15:54:15 149

原创 c++ new 与二级指针

跟第一个例子有点像,第一个例子里的 int *p = new int[MAX_ARRAY_NUM];可以理解为申请了一个MAX_ARRAY_NUM 个连续的 int 型内存地址,p 指向了首地址处。而这里的 int **p = new int*[MAX_ARRAY_NUM];这样定义出来的就是一个常量的指针数组,而用 new 出来的就如上面的 int **p = new int*[MAX_ARRAY_NUM];释放内存自然就是对应的。

2024-07-11 15:13:24 194

原创 Bad substitution 奇怪的问题

结果以前写的那个脚本无法执行了,错误就是 Bad substitution,网上搜索基本都是 {} 和 () 误用导致的,但我这个脚本没有用错,最后是发现 sh 不同版本的区别,CentOS 默认用的应该是 bash,而 Ubuntu 用的是 dash。此时搜索 dash 和 bash 的区别会发现,Debian 和 Ubuntu 用的就是 dash,这两个的语法还是有很大区别的,这里不讨论了,脚本不修改的情况下,直接用 /bin/bash 来执行了。记得之前写过一篇文章是关于shell 脚本的,

2024-07-10 10:34:24 288

原创 you should not run configure as root, 升级tar出错

根据提示不能用 root 用户执行,不知为何,不想切换到其他用户可以根据提示设置环境变量,直接设置:export FORCE_UNSAFE_CONFIGURE=1,不要使用 set FORCE_UNSAFE_CONFIGURE=1。

2024-07-08 16:34:47 195

原创 《汇编语言程序设计》例子之查找最大数

2,参数传送方式不一样了,movq $output, %rdi 和 movq temp, %rsi 传递第1、2 个参数,但在传递第2个参数时,如果直接用 movq %ecx, %rsi 会出现编译错误,这是两个不一样长度的寄存器,刚学我也不知道该如何正确使用,所以添加了一个临时变量来存放最大数,然后再从这个临时变量加载到 %rsi 寄存器中以达到目的。1,修改入口点为 main,因为我直接用的 gcc 编译,Makefile 如上所示。

2024-06-17 19:13:36 346

原创 《汇编语言程序设计》例子出现segmentation fault

网上搜索到解决办法有 2 种,一种是在源码开头添加.code32 告诉编译器按照32位进行编译,另外一种是使用 pushq,q 即为 quad word 表示 8 字节长度的,即 64 位。编译通过后,运行时出现 segmentation fault。网上搜了很多,没有一样的,但很多相似的在调用 printf 的时候出现 segmentation fault,这个跟调用约定有关系,64 位和32 位还不一样,64 位下是通过寄存器和栈来传递参数的,而 32 位下则是通过栈来传递参数的。

2024-06-17 14:05:19 158

原创 汇编中标签的引用$符号

此时 eax 寄存器里已经变成了 500,而原来的 value 的值是没有必变的,用 x 查看其内存里的值还是200。可以看到,用 movl $500, (%eax) 来修改 eax 里地址指向的值,eax 里的值是没变化的,但它的值所指向的值被修改了,即 value 变成了 500。在执行 movl $value, %eax 后,eax 寄存器里存入了 value 的地址 0x601028(十进制为6295592),那如果往下执行 movl $500, %eax 会是怎样的结果呢?

2024-06-14 18:51:17 220

原创 GDB 宏的调试

在 GDB 调试宏定义似乎没有好办法(这里说的调试指的是定位到宏定义里,比如说断点到宏的定义里),网上搜索了一下,以及查看GDB手册,只看能调试的地步是是否能展示宏的定义。因为我们所定义的宏基本都是一行的,虽然看起来是很多行,其实用的"\"换行连接符。无法打断点,所以宏调试很麻烦。

2024-05-21 15:27:46 255

原创 GDB 里关于变量修改及定义

其实,set variable xx=yy 是修改变量 xx 的值,那前提肯定是要有变量 xx,否则就会提示错误。变量定义好,然后遇到一个函数调用的问题,原先想着定义了变量,然后把这个变量地址传入函数,函数原型如:void *o_get_obj(euint32 type, void *key);总结:set variable xx=yy 是修改变量的值,set $xx=yy 是自定义变量,变量定义后自然就可以用 set variable 来修改变量了。用 ptype 打印变量类型,前后变量类型变化。

2024-05-20 20:15:06 553

原创 获取 set 的元素

使用 map 的时候一定要注意了,在获取 map 元素的时候,最好是用 find 一下先,如果喜欢用下标法 [] 来取的时候,则必须保证已经存在该 key,否则这个 [] 操作会插入一个新元素的, 新元素的值具体看类型了,因为它调用的是那个类型的构造函数。而 set 是没有 operator [] 操作的,要获取元素只能有 find() 了,上面的例子只取了 set 里的第一个。最近在用 map 和 set ,两个一起使用,set 作为 map 的 value。其结果和期望就不一样了。

2024-04-15 15:29:51 395

原创 stl set 的 insert()

set 跟 map 容器很像,但它俩又有很大的不同,它们的底层实现都是树,元素都是有序的,但map是可以修改元素的,而 set 就不行了,set 里的元素只有删除的情况,没有修改的情况;set 是没有 operator[] 操作的。因为 set 里的元素是有序的,所以跟 map 一样,如果元素是自定义类型的,必须实现 operator

2024-04-10 15:14:39 361

原创 errno 和 strerror函数

到这里我们已经知道函数 strerror() 是怎么实现的了,而且也知道函数使用方法也是对的,但为什么会出现 Segmentation fault 呢?原因是没包含头文件,导致 strerror() 函数变成隐式声明了,而隐式声明的函数它的默认返回值是 int 类型(没找到C语言关于这点的说明文档,有同学知道的话烦告知一下),所以用 %s 打印 int 类型导致 segmentation fault 了。搞得我还去看了源码,顺便学习了一下 errno,原因后面再讲到。

2024-03-06 19:01:35 477

原创 指针数组初始化,不常见啊

这里很明显定义了一个指针数组,也就是首先 _sys_errlist_internal 是一个数组,并且这个数组里元素都是指针,所以它是一个指针数组毫无疑问。所以这种初始化方式应该是指定元素的初始化方式,未初始化到的元素是空的(指针类型时是null,其他类型未验证)。因为没有指定数组大小,所以这样初始化数组大小是多少呢?从 C 语言数组类型知识点我们应该能猜出来,数组大小应该是 6,即包含 6 个元素。在 errlist.h 头文件里使用了宏定义,然后完成对指针数组的初始化。

2024-03-06 17:08:07 410

原创 mongoose源码解读(二) -- mg_mgr_init 初始化

所以 user_data 指针为 nullptr, 所以mg_mgr_init_opt() 里后两个参数是都是空的。在用 mongoose 源码开发的时候,这个初始化函数 mg_mgr_init()则是必须的,我们看下它到底做了哪些初始化操作。那调用的都是上面的函数指针,如果是启用了 ssl 的可能又是另外一套函数指针接口了。而这个 mg_default_iface_vtable 就是函数指针的集合,这里用到了一个全局变量 mg_ifaces,它的定义是这样的。

2024-02-29 18:51:28 498

原创 HTTP 的 multipart 类型

里有一个 multipart 多部分对象集合类型,这个类型 http 指南里有讲到:MIME 中的 multipart(多部分)电子邮件报文中包含多个报文,它们合在一起作为单一的复杂报文发送。每一部分都是独立的,有各自的描述及内容的集;而在 Mongoose.c 源码里,是这样处理 multipart 类型的报文的,判断头部字段 Content-Type 为 multipart 时,交由相关处理函数进行处理,然后就 return 了,不再后续处理了。表格情形还没试验过,这里主要讲文档情形的。

2024-02-27 15:47:50 880

原创 HTTP MIME 类型

子类型也可以是主类型(如:text/text)、IANA 注册的子类型、或者是(以”x-“开头的)实验性扩展标记。这个类型就是 Web 服务端返回的 Content-Type 字段的内容,例子可以参考。MIME 类型是一种文本标记,表示一种主要的对象类型和一个特定的子类型,中间由一条斜杠来分隔。2,普通的 ASCII 文档由 text/plain 类型来标记。1,HTML 格式的文本文档由 text/html 类型来标记。其语法为:主类型/子类型 (可选的参数列表)常见的主类型 MIME。

2024-02-02 15:20:08 821

原创 static 成员函数

这个 this 指针把 ‘在成员函数中存取的nonstatic 数据成员’ 绑定于 ‘对象内的对应的成员之上’,如果没有一个任何一个成员被存取,事实上就不需要这个 this 指针,因此也没有必要通过一个 class 对象来调用一个成员函数“。那应该是成功的,因为此时转换的就是一个地址而已,跟转换 0 性质是一样的。这种是程序方法上的解决之道,而语言层面上的解决之道就是引入了 static 成员函数,它的主要特性就是没有 this 指针。我想这个应该是语言特性上支持的。两个不相关的类进行转换,必定是失败的。

2024-02-01 15:56:39 404

原创 指向 Data Member 的指针

origin::x 的结果居然是 8,为什么呢?因为 &origin::x 和 &A.x 是不一样的,前一个取data member 在 class 中的偏移量,因为有虚表指针的存在,所以它偏移 class 的量是 8 byte;而后一个是取 ”绑定在真正的对象上的 data member“ 的地址,则会得到该 data member 在内存中的真正地址。它们两个的输出结果是一样的吗?

2024-02-01 14:41:49 368

原创 C++ 类的初始化列表

return 0;因为 const 类型的变量是常量,必须有初始化值,且后续不可以进行修改操作。return 0;和上面的错误一样,引用类型的变量必须初始化。

2024-01-26 17:45:23 638

原创 C++对象模型(二)

可以看到,虚函数表里第一个永远是基类的虚函数指针,如果被派生类重写了,则用派生类的虚函数指针替换掉基类的虚函数指针,不被重写则依然是基类的虚函数指针。这个派生类的大小,包含了基类的大小 4,和自身的大小 12 ,一共 16 个字节。而这种情况是派生类没有重写基类的虚函数,如果派生类重写基类的虚函数呢?说到了一个类的大小,是单一未继承的类,并没有涉及派生类的大小,而如果是一个派生类呢,它的大小会受基类大小影响吗?这是基类没有虚函数的情况下,而基类有虚函数的情况,那派生类的内存情况是怎样的呢?

2024-01-26 14:47:20 374

原创 C++对象模型(一)

这样可以直观的看出,这个类有一个non-static 成员 float _x,一个 static 成员 int _point_count, 一个static 函数 int PointCount(),两个non-static 函数,其中一个是构造函数,一个是普通函数 float x() ,而虚表指针是隐形的,指向了一个虚函数表,表里都是虚函数的地址,即表里都是指针(就是函数指针,即函数入口)。它不属于对象,而是属于类的,即没有创建类对象,这个成员也是存在的。2,每一个类对象被添加一个指针,指向相关的虚表。

2024-01-26 11:30:40 401

原创 关于 pthread_create 传参的疑问

对于函数原型 int pthread_create(pthread_t *thread, const pthread_attr_t *attr, void *(*start_routine) (void *), void *arg) 里的参数 arg,之前一直有疑问,就是把 &thread 传给 arg时,新创建的线程里是否能取到这个值呢?新线程里打印了入参 arg 的值:printf("in child thread id: %lu\n", *((pthread_t*)arg));

2023-11-08 19:41:01 169

原创 链接自己编译的libpthread.so

最近在看 pthread 的源码,因为这个源码是在 glibc 源码里的,所以可以下载 glibc 源码进行编译,相应的 libpthread 库也会编译出来。尝试过修改库名称,如 libmypthread,及添加 -L./ -lmypthread,然后修改 LD_PRELOAD=./libmypthread.so,但不管执行什么命令都会出现这个错误,不知为何。执行结果并不是我想要的,没有链接到我编译的 libpthread.so,因为我在线程创建函数里添加了打印,这里没有看到我想要的结果。

2023-11-07 14:35:24 1095 3

原创 glibc 里的线程 id

就是执行程序里打印的线程 id。所以 pthread_create() 返回的线程 id,其实就是保存线程信息的结构体的首地址。这里讲的是通过 pthread_create() 函数返回的线程 id,其实就是 glibc 库里维护的线程id,它跟内核维护的线程 id 不一样,pthread_create() 返回的线程 id 并不一定是唯一的。我们看 pthread_create 函数的源码,它最后返回的线程 id 是什么样的?这个函数就是获取指定线程的信息,其中当然包括用户设置的栈大小。

2023-11-06 15:36:45 157

原创 libpthread.so.0: cannot open shared object file: No such file or directory

基本上啥也干不了了啊。连最简单的 ls、mv、cp 命令都无法执行,改都改不回去了。系统库文件不能乱改啊,备份可以,可千万别把原文件弄丢了。

2023-11-06 13:34:57 1063

原创 VSCode 连接不上 debian 的问题

因为 debian 是自动获取 ip 地址的,以前能连接上时,ip 地址是 104,然而今天开机起来后,ip 地址是 103,这里提示配置文件 C:\Users\ASUS\.ssh\known_hosts 里对应的 key 应该不对了。这些信息应该是自动写入的,我也没有手动添加过,所以尝试一下把对应 ip 地址 103 的 2 行全部删除掉。所以如果是 ip 地址变了,vscode 连接不上时,尝试把 known_hosts 里原 ip 信息删除,再重新打开 vscode 去连接也许就成功了。

2023-11-05 16:20:39 887

原创 SecureCRT 手动全部Tab窗口重连

在工作了一天后,到第二天上班的时候,前一天连接的服务会断开,因为公司内部网络自动断开了,所以一个个重新连接和登录 ,用脚本轻松搞定。因为默认是普通用户进行的登录,所以登录后还需要用 sudo su 到超级用户才能正常工作,然后还可以在特定窗口切换到指定的代码目录下,完美。

2023-11-02 14:27:54 180

原创 SecureCRT 发送文件内容

当需要连接 Linux 服务器或设备的时候,SecureCRT 是一个利器。有一个工作场景是这样的,工程代码在服务器上编译完后运行,然后用 secureCRT 连接程序的指定端口(用 telnet ),连接上后就往端口里下发配置(一些基础的配置大概有 3000 行,每次都需要拷贝-粘贴 比较麻烦)。于是用脚本的方式进行操作,首先从配置文件里读取,然后再一条条配置下发。然后在按钮栏加一个按钮,简直不要太方便了,按钮一点一条条配置自动下发。

2023-11-02 13:34:36 223

原创 pthread_attr_getstacksize 问题

仔细看 pthread_attr_getstacksize 的实现,它返回的栈大小其实是从入参 attr 里取的 stacksize 值,所以回到我们的代码中,我们是用 pthread_attr_init(&attr) 来初始化 attr 的,所以返回的也就是这个初始化后 attr 里的 stacksize 值。最近公司里遇到一个线程栈大小的问题,借此机会刚好学习一下这个线程栈大小相关的函数。如果公司里用的还是比较老的代码的话,都是用的 pthread 库支持线程的,而不是 c++11 里的线程类。

2023-11-01 09:55:41 842 8

原创 vector 的 capacity 增长

size() 取的是当前元素的个数,而入参 __n = 1, 所以 __len = size() + size(),这不就是 2 个 size() 吗?再 push_back 一次时,此时容器当中应该有 3 个元素,而 capacity 的大小为 4,可以看出 vector 的 capacity 的每次增长是当前大小的 2 倍。首次 push_back 后 vecotr 的 capacity = 1,之后的增长则是为当前 size() 的 2 倍。最关键的就是要申请的大小 __len 的值是多少?

2023-10-26 14:50:37 154

libwebServer.tar.gz

用mongoose搭建了一个简易的http的服务程序

2021-05-24

空空如也

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

TA关注的人

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