自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 libmosquitto库的一个bug,任务消息id(mid)分配后不起作用

mid依然是1,2,这个参数在这里失效了,不知道是bug还是mqtt的什么机制?

2023-11-24 20:34:17 522

原创 互帮互助,小bug记录:libcurl timeout不起作用,程序无法结束

libcurl的timout超时功能可能会失效,一种是若禁用SIGNAL的话,DNS查询可能会超过timeout设置的极限时间,这种官网上有说明,一种是我今天碰到的,如果使用POST请求,但是没有传递POST请求体,那么也会阻塞住,这个官网上没有说明,我也没有查到其他人提问,应该是个bug,记录在此,方便其他人.只用在上述代码中加入POST的请求体即可,例如。

2023-11-08 16:50:52 175

原创 【Effective C++】条款45: 运用成员函数模板接受所有兼容的类型

经过分析,可以发现,关键点在于拷贝构造函数,只要拷贝构造函数能复用编译器关于类型向上/向下,显式/隐式的转换规则,那我们的SmartPtr就可以模拟上面提到的类型转换.public继承意味着is-a关系,所有的基类都是派生类,但反之则不是,例如所有的学生都是人,但不是所有的人都是学生.但假设,我们写了一个智能指针类,当此智能指针的模板参数是这些类的时候,如何才能实现上述继承结构下的隐式转换呢?当我们使用了函数模板兼容了所以的类型后,如果模板类型参数T和U的类型相同,例如。此时两个对象的类型都相同,都是。

2023-11-02 11:42:58 133

原创 vmware workstation设置固定ip的几种方法

众所周知,vmware workstation在NAT模式下,会使用dhcp分配ip,每个ip的默认租约是半小时(1800s),最大租约时间也只有2小时(7200s),所以ip会频繁变动,对于我们远程开发,日常使用等都很不方便,所以把ip固定下来很重要,注意,是固定ip,而不是显示分配某个特定的ip,理清我们的需求,我们才能用最有效率的方式完成目标.

2023-09-06 16:46:23 1271

原创 “解引用“空指针一定会导致段错误吗?

其实呢,这个解引用被优化了,编译器看到这句时,并没有发生实际的解引用而获得到了m的地址,是一个真正的编译器开洞才能实现的功能.(如有错误,诚请斧正)可能有些朋友看见这个标题第一反应是嵌入式的某些内存中,0地址也是可以被正常访问的,所以对0地址的解引用不会发生错误,但我要说的情况不是这个,而是指一个真正的空指针,不仅是c/c++中的0,(void*)0,NULL,还有nullptr,一个真正的空指针.你会发现,也是可以正常工作的,至少gcc的c++14之前是可以的,gcc的c++14后,

2023-08-14 18:53:20 171

原创 Ubuntu20.04 GNOME桌面root用户无法登录,错误:sorry that didn‘t work please try again

我用的搜索关键词是"ubuntu20.04允许root用户登录桌面“,可以发现,其实不只是改这两个鉴权文件,还要做其他修改,虽然都不难,但为啥为这个小tip发一篇文章呢?再登录,可以正常登录。

2023-08-05 22:22:20 1380

原创 【深度探索C++对象模型】读书笔记

正如作者在前几页说的几个改变,现代编译器会将vftptr放置在对象顶部,而且最终只会有一个vftprt。对比书115页,可以看到现代编译器的生成的对象模型和以前模型的差异.

2023-07-26 11:25:46 54

原创 一个小bug让我发现了sprintf有复制重叠问题

show code:/* file name:demo.c system:ubuntu 20.04 compile command:gcc -std=c99 demo.c*/#include<stdio.h>#include<stddef.h>int main(){ char str[255]="My name is Li"; /*length of string is 13*/ int num=123456; printf("

2022-03-24 13:26:14 2376

原创 第一章复习题和习题答案

R1:①没什么不同,都指代网络两端的收发设备,并不特指PC,Web服务器或者linux工作站等.②平板,智能手机,个人PC,某些汽车③是R2:维基百科并无"外交协议"词条,故摘抄"网络传输协议"词条:通信协议(英语:Communications Protocol,也称传输协议)在电信领域中指的是,在任何物理介质中允许两个或多个在传输系统中的终端之间传播信息的系统标准,也是指计算机通信或网络设备的共同语言。 通信协议定义了通信中的语法学、语义学和同步规则以及可能存在的错误检测与纠正。通..

2021-10-19 23:49:23 1661

原创 2021-07-23

C++STL的对外接口就不能写的人性化一点吗?map容器的 find(const& key)函数为啥要返回一个迭代器?不又不是在迭代这个容器,我用python,java,C#都返回的是key对应的value,为啥就不提供一个这样的实现?我tm遍历key,再find(key)获取value不是理所应当吗,一定要特立独行吗?偏tm要返回iterator,然后再*iterator->first获取key,*iterator->second获取value,理解不了委员会的脑回路....

2021-07-23 20:47:11 156

原创 补码原理

首先,在有限且循环的计数系统中,模M是确定的,那(a-x) mod M == a+(M-x) mod M,即 a-x ≡ a+(M-x) (mod M),满足同余定理,x与M-x互补,有减法变为加法的数学基础,而且ALU的门电路设计成了可以对有限位进行循环的加操作,并且丢弃溢出位,也就是有规律的overflow(类似于指针表盘),那么减法变为加法也有了物理基础.在此种计数系统中 : a-x == a+(M-x) == a+(M-1-x+1)a+(M-x) :还有减法M-x,而且无法化简,无法施行.a+

2020-11-22 01:25:04 142

原创 使用自定义的静态链接库.

首先,一个.c程序经过只经过编译而没有链接,则就是对应实现的函数的集合,默认后缀名为.o,此时并没有静态链接库就是封装好的函数的归档文件.其后缀.a,全称为archive(归档).

2020-11-20 12:43:56 148

原创 符号及符号表是什么?

在编程语言中,不可避免的要定义全局变量,函数.在编译器编译源文件的时候,函数名转换为内存地址的引用,未定义的函数名要分配重定位条目,已初始化且初始化不为0变量要存入.data节,初始化为0的存入.bss节,未初始化的则指向COMMON伪节中.执行这些操作,需要一个合适的数据结构以组织这些信息和高效的获取数据.于是这一个个的函数名和全局变量名就称为符号,并有序的组织在一起,称为符号表.例图:Name是incr,Type是FUNC,Ndx是1,Size为26.解释: inct是一个占26byte的

2020-11-20 11:22:29 654

原创 内存从连续到离散(整块内存-->内存分段-->内存分页),大概脉络的随记,大白话讲解

分段程序载入内存,运行时的跳转位置引出 硬编码和重定位适用设备:硬编码:嵌入式,专用设备重定位:现代操作系统.硬编码:cpu执行时,在遇到关于内存地址的代码时,不翻译,直接执行程序关于内存地址的代码. 在单片机中,或者卫星中,设备的功能是单一的,执行的代码总是固定的,例如 总是从300这个内存位置开始执行播放音乐,则直接将播放音乐的代码烧在300处,事实上,现代操作系统的启动前,从硬盘载入的时的代码就是提前烧录在cpu上的.重定位:由操作系统将程序中的内存地址翻译到另一个内存地址(由绝对地址变为

2020-07-24 00:06:19 378

原创 Hadoop笔记

Hadoop安装的大概流程: Hadoop基于java开发,所以必须先安装JDK,并配置JDK的环境变量 Hadoop安装完成后,也必须配置Hadoop的环境变量 Hadoop还必须对配置文件进行相应的更该. 主要有:hadoop-env.sh --更改JAVA_HOME路径 core-site.xml --默认文件系统改为hdfs,hadoop的默认tmp目录 hdfs-si...

2020-07-22 20:32:26 72

原创 c语言实现类似python中list(元素类型为char)的切片操作

觉得python语言的list的切片操作很方便,用c语言实现一个简单版本的.#include<stdio.h>#include<stdlib.h>#include<string.h> /* 实现类似python中list(元素类型为char)的切片操作 ** test="abcdef" * slice(test,1,4,1) 返回:"bcd" * slice(test,-1,3,-1) 返回:"ef"* slice(test,0,5,2) 返回:"

2020-07-17 00:16:07 1040

原创 linux0.11启动时bootsect.s和setup.s的主要作用

cpu启动时为实模式,此时硬烧录的将cs=0xFFFF,ip=0x0,并自动开始执行0xFFFF0(ROM-BIOS的地址)的代码,BIOS会自检,并在0x0地址处设置中断向量表,此后实模式的int中断全部依赖此表,并将0磁道0扇区的512字节(引导扇区,放bootsect.s)读入内存0x7c000处,并跳转到此地址.bootsect.s只能占512字节,功能有限,所以需要setup.s, 首先bootsect.s将自身从0x7c000移动到0x90000(为setup.s将system移动到0x00

2020-07-04 00:35:18 973

原创 用python实现n个人围圈,报到m的人退出,最终留下几号的功能.

实现一个功能无非就是合适的数据结构+算法.要实现这个需求,首先想到的简单算法就是用一个flag来表示每个人报到的数,如果flag==m则报到此数的人退出.若剩余总人数等于一个时,则算法结束,此时这个人的号码就是要求出的数.此时若要表示一个人的状态,需要两个值:①此人的号码. ②此人是否已经被淘汰. 很自然的想到用数组这个数据结构来实现–数组下标表示号码,数组内容表示是否被淘汰.但python没有数组这种结构,但是有列表,经过搜索,python的列表是保证顺序的,也就是通过下标索引到的元素的内容不会变

2020-06-30 23:48:16 714

原创 python实现计算某年某月某天 是某年的第几天.

将某年的所有过去的月份加起来,再加上本月过去的天数,即为已经过去的天数.(注意闰年二月29天,平年二月28天)闰年分为普通闰年(年份是4的整数倍,但不为100的整数倍) 和 世纪闰年(年份是400的整数倍)代码实现:year=int(input("year:"))month=int(input("month:"))day=int(input("day:"))sum=0 #天数day_month = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31

2020-06-30 00:05:17 1019 1

转载 x86架构所有寄存器和标志位详细信息(全名+作用)

AX(accumulator):累加寄存器BX(base):基址寄存器CX(count):计数寄存器DX(data):数据寄存器SP(Stack Pointer):堆栈指针寄存器BP(Base Pointer):基址指针寄存器SI(Source Index):源变址寄存器DI(Destination Index):目的变址寄存器IP(Instruction Pointer):指令指针寄存器CS(Code Segment)代码段寄存器DS(Data Segment):数据段寄存器SS(S

2020-05-23 14:43:56 1419

转载 8086cpu BIOS根据中断号得到中断程序入口地址

8086系统在存储器的最低1KB区域(00000H~003FFH)建立一个中断向量表,存放256个中断类型的中断向量。这1024个单元被分成256组,每组包括4个字节单元,存储一个中断向量的段基址和段内偏移地址,高2个字节用于存放段基址,低两个字节用于存放段内偏移地址。例如:(00AB 0BA9) => 0BA9:00AB(cs:ip)在执行某一条INT n指令时,CPU首先对断点和现场进行保护,然后将中断指令中的中断类型号n乘以4,得到一个地址,这个地址就是n号中断服务子程序的入口地址在中断向量

2020-05-22 23:33:23 10613 1

原创 windows注册表参数(%1,%2,%v)

windows注册表是不区分大小写的.参数含义%1文件路径%2系度统默认的打印机%3文件扇区%4端口%D文件路径%L文件长路径%V文件路径%W当前文件的父目录的路径参考:https://blog.csdn.net/meng_suiga/article/details/79485855...

2020-04-17 22:27:15 7069 1

原创 c#操作注册表

RegistryKey 类(表示 Windows 注册表中的项级节点)定义:[System.Runtime.InteropServices.ComVisible(true)]public sealed class RegistryKey : MarshalByRefObject, IDisposable命名空间:Microsoft.Win32程序集:mscorlib.dllRegis...

2020-04-17 22:16:50 129

原创 c# 整数数字的具体类型

c#与java不同,数字类型并不是具体不变的,java若整数没有特定后缀,则默认为int型.浮点数默认为double型无后缀的数字 :类型与大小有关.(2147483647–Int32,9223372036854774807–Int64)有后缀的数字 :类型为后缀声明的类型.(1L–Int64,9223372036854774807UL–UInt64)Console.WriteLine(21...

2020-04-02 21:38:46 245

原创 使用命令行编译c#程序

c#编译器名为csc(c sharp compile),只要安装了framework框架,在框架版本目录下都会有默认的c#编译器(csc.exe),例如C:\Windows\Microsoft.NET\Framework64\v3.5目录会有csc.exe,只用把上述目录加入环境变量就可以使用csc编译.cs文件格式:csc -filename(带拓展名)但是,框架下默认的csc只支持c# ...

2020-03-28 13:34:16 487

原创 java的foreach与c#的foreach

语法:foreach(type var : object){ /* ... body of the function */}foreach必须定义一个临时变量(无法使用已经定义好的变量,也无法定义一个和外面名称冲突的变量),且作用域仅限于foreach的函数主体中(在函数外无法调用)....

2020-03-23 00:12:00 164 1

原创 循环的判断条件中使用赋值语句的问题

c语言:支持当前赋值后的变量 直接作为判断条件(零为假,非零为真)c#: 支持当前赋值后的变量 转换为布尔值后 作为判断条件python:不支持赋值语句作为判断条件(python3.8有 := 运算符(格式为NAME:= expr)可以既赋值又取赋值后变量作为判断条件)...

2020-03-16 01:13:36 1917

原创 c语言\t跳位(留几个空格)

\t为水平制表符,键盘上为TAB键,一般为8个空格.\t具体留多少空格,取决于\t前面的字符数量.如果\t前面有x(x>=0)个字符.x>0:跳 8-(x%8)%8 个空格.x==0直接跳八个空格位简单说:\t就是8个\b(退格符),然后把\t前面八个以内的字符填进去,不足八个则填为空格....

2020-03-13 21:35:44 13063

原创 win32 api不支持函数重载的原因(个人理解)

win32 api使用c语言编写(c语言本身不支持函数重载).函数重载依据: ① 形参类型不同 ② 形参个数不同C函数接受可变参数,在函数内部判断参数个数,然后执行不同功能(函数内调用不同的其他函数),可以间接实现函数重载.但只能依据形参个数,无法依据形参类型.如果win32某api内部针对不同参数个数,调用其他不同api,久而久之api之间相互依赖,藕断丝连,冗余量增加.有违api...

2020-03-13 20:44:46 145

原创 xpath通过text()方式获取div节点下的文本存在bug

环境:scrapy1.8 , python3.7.3div块如下:<div class="li_b_l"> <span class="money">12k-20k</span> <!--<i>&lt...

2020-02-20 23:48:02 2305 2

空空如也

空空如也

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

TA关注的人

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