自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

tecoes的博客

本博客仅仅是作者对学习的一个记录,转载自网络的文章,如果有侵犯的权益请联系作者做一个声明~~~

  • 博客(252)
  • 收藏
  • 关注

转载 C++ mutable、 final及noexcept 关键字

见下面几篇文章。

2023-10-23 17:41:36 393

转载 C++ 重写关键字override(强制编译器检查该函数是否覆盖已存在的虚函数)

如果派生类重载了基类中的同名函数,则该函数将成为派生类中的虚函数,可以通过调用基类中的函数来实现该函数的功能。例如,如果基类虚函数的返回类型是Base*或Base&,那么派生类中重写的函数的返回类型可以是Derived*或Derived&,其中Derived是Base的子类。:如果基类的虚函数在未来发生改变(例如参数类型或数量的改变),但是派生类中的重写函数没有相应地改变,那么使用了override关键字的函数会在编译时报错,这样可以及时发现并修复问题。:你只能重写基类中的公有和保护的虚函数。

2023-10-23 17:32:25 528

转载 unix本地套接字(Unix Domain Socket)

因为不会再在文件系统中创建文件了,所以对于抽象路径名来说,就不需要担心与文件系统中已存在的文件产生名字冲突的问题了,也不需要在使用完套接字之后删除附带产生的这个文件了,当套接字被关闭之后会自动删除这个抽象名。还有,在默认情况下,在调用bind()函数时,会给所有者、组和其他用户赋予所有的权限(即777),如果想改变这个行为,可以在bind()之后再修改创建的文件的权限和属性。在这里,不同进程像这个服务器端进程发送的流数据是在内核里面区分的,并绑定到了accept()创建的套接字中了。

2023-10-21 16:47:59 512

转载 TCP粘包问题及各方解决方案

TCP粘包是指发送方发送的若干包数据到接收方接收时粘成一包,从接收缓冲区看,后一包数据的头紧接着前一包数据的尾。出现粘包现象的原因是多方面的,它既可能由发送方造成,也可能由接收方造成。什么时候需要考虑粘包问题?如果利用tcp每次发送数据,就与对方建立连接,然后双方发送完一段数据后,就关闭连接,这样就不会出现粘包问题(因为只有一种包结构,类似于http协议)。关闭连接主要是要双方都发送close连接(参考tcp关闭协议)。

2023-10-20 13:49:12 246

转载 linux 内核 – ioctl 函数详解

在新版内核中, 与 取代了。在实际应用中,ioctl 最常见的 errorno 值为 ENOTTY(error not a typewriter),顾名思义,即第一个参数 fd 指向的不是一个字符设备,不支持 ioctl 操作,这时候应该检查前面的 open 函数是否出错或者设备路径是否正确。ioctl 是设备驱动程序中设备控制接口函数,一个字符设备驱动通常会实现设备打开、关闭、读、写等功能,在一些需要细分的情境下,如果需要扩展新的功能,通常以增设 ioctl() 命令的方式实现。

2023-10-09 19:43:47 1151

转载 Linux 文件锁 fcntl 函数详解

fcntl() 功能是针对文件描述符提供控制,根据不同的 cmd 对文件描述符可以执行的操作也非常多,用的最多的是文件记录锁,也就是 F_SETLK 命令,此命令搭配 flock 结构体,对文件进行加解锁操作,例如执行加锁操作,如果不解锁,本进程或者其他进程再次使用 F_SETLK 命令访问同一文件则会告知目前此文件已经上锁,加锁进程退出(正常、异常)后会自行解锁,使用此特性可以实现避免程序多次运行、锁定文件防止其他进行访问等操作。如果共享锁或独占锁被其他的锁阻塞,进程将等待直到这个请求能够完成。

2023-10-07 20:41:58 590

转载 信号基础知识

信号(signal)是一种进程间通信机制,它给应用程序提供一种异步的软件中断,使应用程序有机会接受其他程序活终端发送的命令(即信号)。应用程序收到信号后,有三种处理方式:忽略,默认,或捕捉。进程收到一个信号后,会检查对该信号的处理机制。如果是SIG_IGN,就忽略该信号;如果是SIG_DFT,则会采用系统默认的处理动作,通常是终止进程或忽略该信号;如果给该信号指定了一个处理函数(捕捉),则会中断当前进程正在执行的任务,转而去执行该信号的处理函数,返回后再继续执行被中断的任务。

2023-10-07 20:11:06 388

转载 container_of宏简介

这里使用的是一个利用编译器技术的小技巧,即先求得结构成员在结构中的偏移量,然后根据成员变量的地址反过来得出主结构体的地址。这句代码意思是用typeof()获取结构体里member成员属性的类型,然后定义一个该类型的临时指针变量__mptr,并将ptr所指向的member的地址赋给__mptr;既不是C语言规范的所要求,也不是某个标准的一部分。((size_t) &((TYPE*)0)->MEMBER) 结合之前的解释,我们可以知道这句话的意思就是求出MEMBER相对于0地址的一个偏移值。

2023-10-06 13:05:20 178

转载 make -C M= modules编译流程解析

C $(KERNEL_DIR) 代表切换工作目录,因为内核源码顶层的Makefile文件定义了伪目标 modules,所以要先将工作目录切换到内核源码顶层 Makefile 所在位置。这个可以让makefile 回到自己所指定的目录下查找模块源码,将其编译,生成 ko 文件。obj-m 表示把文件 chrdevbase.o 作为"模块"编译,不会编译进内核,但会生成一个独立的 ko 文件。下面是最简易的单文件单模块编译,假设我们要将源文件 chrdevbase.c 编译成 ko 文件。

2023-10-05 21:27:06 177

转载 ubuntu与windows之间的文件共享

最近在配置ubuntu与windows之间的文件共享,最先想到的就是samba,samba在win10系统上配置了好久,还是无法打开共享文件,因此打算换种方式实现两者之间的共享,看了下面这篇文章(),发现tftp方式和方式3是好的.最近在做项目,需要用到ubuntu进行代码编译生成可执行文件,但是我个人阅读和编写代码喜欢用source insight这个软件IDE。安利一下这个软件,阅读代码和编辑代码真的很棒啊,谁用谁知道吧!

2023-10-05 14:44:43 560

原创 主机能ping通Ubuntu,Ubuntu无法ping通主机

我在主机(window10系统)上安装了一个虚拟机Ubuntu使用NAT模式连接主机,使用的是使用VMnet8网卡,主机是wifi无线连接,主机和Ubuntu都在同一个网段上,遇到主机能ping通Ubuntu,Ubuntu无法ping通主机。发现是需要修改“网络和Internet”高级网络设置里面的文件和打印机共享配置,查看自己的电脑,发现控制面板---网络和internet---网络和共享中心---高级共享设置里面的问你件和打印机共享被关闭了,设置成启用。Ubuntu无法ping通主机。

2023-10-04 21:56:22 506 1

转载 arm中SP,LR,PC寄存器及处理器运行模式

当程序执行完毕时,PC寄存器的值会指向程序的结束地址。用户模式(User),快速中断模式(FIQ),普通外部中断模式(IRQ),超级管理模式(Svc,裸机就是跑的这个模式,cpu复位也是这个模式),数据访问中止模式(Abort),未定义指令中止模式(Und),系统模式(Sys),监视模式(Mon),超级监视模式(Hyp)除了上述每种模式所需寄存器外,还有6状态寄存器,最主要的就是两个CPSR和SPSR,arm进入异常模式后,SPSR自动保存进入异常前的CPSR的值,以便异常返回后恢复异常发生时的工作状态。

2023-10-02 21:48:13 1850 1

转载 GDB扫盲教程

另外,需要注意的是,如果你的程序编译时开启了优化选项,那么在用GDB调试被优化过的程序时,可能会发生某些变量不能访问,或是取值错误的情况。这个是很正常的,因为优化程序会删改你的程序,整理你程序的语句顺序,剔除一些无意义的变量等,所以在GDB调试这种程序时,运行时的指令和你所编写指令就有不一样,也就会出现你所想象不到的结果。UNIX下的软件全是命令行的,这给程序开发提代供了极大的便利,命令行软件的优势在于,它们可以非常容易的集成在一起,使用几个简单的已有工具的命令,就可以做出一个非常强大的功能。

2023-09-24 18:12:00 103

转载 应用调试之strace命令跟踪系统调用

如果被跟踪调用syscall_trace,发信号给父进程strace,父进程处理完后(记录)让子进程继续运行。3、配置:./configure --host=arm-linux CC=arm-linux-gcc。strace作为父进程去调用open函数,open函数会产生一个异常然后进入到内核里面,首先strace会作为一个父进程,而被跟踪的系统调用作为子进程,我们用open函数来。---是原来的文件,+++是修改后的文件,+是添加的代码,要加参数把第1个斜杠前的。内容去掉,才能找到要给哪一个文件打补丁。

2023-09-24 17:48:31 346

转载 代码打补丁的利器——diff和patch

patch即补丁之意,记录文件中的不同,能够与文件进行整合,从而改变文件中的内容。patch命令用于将补丁文件应用到源代码文件中,以实现对源代码的修改。补丁文件通常是由开发者或者社区提供的,用于修复源代码中的错误或者添加新功能。语法patch [选项] [补丁文件]选项-p:指定路径剥离级别,用于去除补丁文件中的路径前缀。通常在patch补丁文件中会包含源代码文件的相对路径,使用该选项可以去除这些路径前缀。-d :指定工作目录,用于在指定目录下执行补丁操作。

2023-09-24 16:55:59 1658

原创 busybox简介

BusyBox 包含了许多常见的 Unix 工具和命令,例如文件操作命令(如 ls、cp、mv)、文本处理工具(如 grep、sed、awk)、系统管理工具(如 ps、top、ifconfig)、网络工具(如 telnet、ftp、ping)等等。它的可执行文件相对较小,占用的内存和存储空间较少,适合于嵌入式设备、虚拟机、容器和其他资源有限的环境。BusyBox 是一个单一可执行文件的软件集合,旨在提供一个轻量级的 Unix 工具箱,包含了许多常用的命令和实用程序。

2023-09-23 21:34:33 476

转载 Flash、RAM、ROM的区别

闪存,它属于内存器件的一种,是一种不挥发性( Non-Volatile )内存,结合了ROM和RAM的长处,不仅具备电子可擦除可编程(EEPROM)的性能,还不会断电丢失数据同时可以快速读取数据(NVRAM的优势),U盘和MP3里用的就是这种存储器。内存是用来存放当前正在使用的(即执行中)的数据和程序,我们平常所提到的计算机的内存指的是动态内存(即 DRAM ),动态内存中所谓的"动态"指的是当我们将数据写入 DRAM 后,经过一段时间,数据会丢失,因此需要一个额外设电路进行内存刷新操作。

2023-09-09 14:47:23 253

转载 求子数组的最大和

1、有一个数组a[n],里面的数只有两种:-1或1。i,j是两个整数,假设0<=i<=j<=n-1,找出a[i]到a[j]中连续数之和最大的部分(如果最大部分存在相等的则优先找最短的)。例如输入的数组为 1, -2, 3, 10, -4, 7, 2, -5 ,和最大的子数组为 3, 10, -4, 7, 2 ,因此输出为该子数组的和18。2、有一个数组a[n],里面含有正数负数,假设0<=i<=j<=n-1,找出a[i]到a[j]中连续数之和最大的部分(如果最大部分存在相等的则优先找最短的)。

2023-09-02 19:41:25 89

转载 C++Lambda表达式简单理解

C++ 11 中的 Lambda 表达式用于定义并创建匿名的函数对象,以简化编程工作。Lambda 的语法形式如下:[捕获列表] (参数) mutable 或 exception 声明 -> 返回值类型 {函数体}//计算两个值的和//当返回值的类型是确定时,可以忽略返回值//调用。

2023-08-31 19:10:17 79

转载 C++智能指针理解

(1)auto_ptr:管理权唯一,释放权唯一存在的问题:当多个智能指针指向同一堆内存时,新智能指针具有管理权,原智能指针指向空,导致原智能指针失效(2)unique_ptr:禁止拷贝和移动来保证所有权唯一unique_ptr存在的问题:(1)不能数据共享;(2)在设计层面保证所有权唯一,但使用时并不能保证(3)shared_ptr:带有引用计数存在的问题:智能指针之间的相互引用问题会导致内存泄漏(4)weak_ptr:不可单独使用,常与强智能指针结合使用,以解决强智能指针相互引用的问题。

2023-08-30 20:55:20 45

转载 C++强制类型转换运算符

C++支持四种显示类型转换:static_cast :用于C++中隐式转换,两种不相干的类型不能转换,编译会报错reinterpret_cast:C++非隐式转换,可以支持两种不相干的类型转换,操作危险以上两种等价于C语言风格的转换dynamic_cast:C++独有。用于RTTI中基类和派生类中间相关转化,向上转换本身就是安全的,一般用于安全的向下转换const_cast:用于去除变量或表达式的const属性,用于将const类型转换为非const类型。

2023-08-28 11:19:26 33

转载 不要返回局部变量的指针或引用

这是因为,上面的information_1是一个对象,而这里的infomation_2是一个引用,而且还是非常量引用,由于非常量引用的初始值必须为左值,8经过隐式转换之后的对象是个临时变量,非常量引用不能与临时变量进行绑定,所以这句代码是错误的。若是在栈区,函数调用结束,这块空间就被释放了,其对应的局部变量的指针或引用也就紧跟着销毁了,如果此时接收了返回的局部指针或引用并使用的话,会导致未定义问题,存在着一定的风险。所谓的不可以返回局部变量的引用或指针,指的是不能返回局部变量的引用或地址给引用或指针。

2023-08-25 21:47:18 55

转载 C++ 成员函数的重载,继承,覆盖和隐藏

编译器只会根据函数的名字来查找,不管参数是什么,如果一个同名的函数在派生类的作用域内没有找到那么再去基类的作用域中寻找。当存在继承关系时,派生类的作用域嵌套在基类的作用域之内,如果一个名字在派生类的作用域内无法找到,编译器会继续到外层的基类作用域中查找该名字的定义。(注意别与重载混合)注意,派生类的作用域位于基类作用域之内,因为类作用域有这种继承嵌套的关系,所以派生类才能像使用自己的成员一样来使用基类的成员。其中(1)(2)是重复定义,故编译不能通过,而(3)与(1)(2)是不同类型的函数,是重载。

2023-08-25 17:38:35 312

转载 C++引用深入理解

指针就是数据或代码在内存中的地址,指针变量指向的就是内存中的数据或代码。这里有一个关键词需要强调,就是,指针只能指向内存,不能指向寄存器或者硬盘,因为寄存器和硬盘没法寻址。 C++ 代码中的大部分内容都是放在内存中的,例如定义的变量、创建的对象、字符串常量、函数形参、函数体本身、或分配的内存等,这些内容都可以用来获取地址,进而用指针指向它们。还有一些平时不太留意的临时数据,例如表达式的结果、函数的返回值等,它们可能会放在内存中,也可能会放在寄存器中。一旦它们被放到了寄存器中,就没法用获取它们的地址了,也就没

2023-08-18 20:27:05 36

原创 解析IO 多路复用:select、poll、epoll

了解多路复用可以看下这两篇:

2023-06-08 22:13:23 88

转载 深入理解 Linux 虚拟内存和物理内存管理

可以看下面三篇文章:

2023-06-08 22:07:42 94

转载 Linux 性能分析之 IO 篇

这个值越大,说明产生的 IO 请求较多,IO 压力较大,我们可以结合 %idle 参数来看,如果 %idle < 70% 就说明 IO 比较繁忙了。rrqm/s 和 wrqm/s:分别每秒进行合并的读操作数和写操作数,这是什么意思呢,合并就是说把多次 IO 请求合并成少量的几次,这样可以减小 IO 开销,buffer 存在的意义就是为了解决这个问题的。一般这几个值偏大,都意味着系统 IO 的消耗较大,对于读请求较大的服务器,b、bo、wa 的值偏大,而写请求较大的服务器,b、bi、wa 的值偏大。

2023-06-08 21:52:17 3247

转载 linux性能分析之网络篇

本文总结了几种初级的网络工具,基本的网络性能分析,通过组合以上几种工具,基本都能应付,但对于复杂的问题,以上工具可能就无能为力了。更多高阶的工具将在下文送上,敬请期待。基础Linux常用网络诊断工具整理 | 伊图linux 的 ip 命令 和 ifconfig 命令_擒贼先擒王的博客-CSDN博客网络性能测试最佳实践 - 云服务器 ECS - 阿里云。

2023-06-08 21:42:16 377

转载 linux性能分析之内存篇

20时52分25秒 0 3268 0.00 0.50 0.00 0.00 0.50 0 kworker/0:1-events。20时52分27秒 0 3268 0.00 0.50 0.00 0.00 0.50 0 kworker/0:1-events。然后,memleak可以打印一份摘要,说明哪些调用堆栈执行了随后未释放的分配。

2023-06-08 21:30:28 236

转载 linux性能分析之CPU篇

缓存的是热点的内存数据。本文介绍linux性能优化CPU相关的知识点,首先介绍了CPU相关的性能指标,接着介绍经常使用的工具如 pidstat、sar、vmstat等并演示其使用方法,最后介绍性能分析时常用的方法与策略。把系统的平均负载监控起来,然后根据更多的历史数据,判断负载的变化趋势,一般当平均负载高于 CPU 数量 70% 的时候,应该分析排查负载高的问题。3)top 输出的平均负载升高,可以跟 vmstat 输出的运行状态和不可中断状态的进程数做对比,观察是哪种进程导致的负载升高。

2023-06-08 21:28:21 2916

转载 Linux性能检测常用的10个基本命令

下面的图片很好的展示了各个命令的主要作用,如使用vmstat查看系统的整体性能,mpstat用于查看cpu的性能,pidstat用于查看进程的状态,iostat用于查看io的状态,free用于产看内存的状态,sar用于产看网络的状态等。剩余输出的都是在指定的时间间隔内的平均值,上述例子中delay的值设置为1,除第一次以外,剩余的都是1秒统计一次,count未设置,将会一直循环打印。await,表示应用程序排队等待和被服务的平均I/O时间,该值若大于预期的时间,这表示I/O设备处于饱和状态或者异常。

2023-06-08 21:16:36 378

转载 Linux 性能分析工具汇总

出于对Linux操作系统的兴趣,以及对底层知识的强烈欲望,因此整理了这篇文章。本文也可以作为检验基础知识的指标,另外文章涵盖了一个系统的方方面面。如果没有完善的计算机系统知识,网络知识和操作系统知识,文档中的工具,是不可能完全掌握的,另外对系统性能分析和优化是一个长期的系列。

2023-06-08 21:11:27 118

转载 如何杀死处于进程状态D的进程

如何杀死处于进程状态D的进程Linux进程状态:D (TASK_UNINTERRUPTIBLE),不可中断的睡眠状态 ,此时进程不能被信号唤醒,GDB等调试工具也不能对它调试,因为GDB也是用到了信号,也杀不死它查找D进程。

2023-06-08 20:58:42 1758 2

转载 Linux 下的 /proc 目录介绍

当前运行的每一个进程都有对应的一个目录在 /proc 下,以进程的 PID 号为目录名,它们是读取进程信息的接口。lrwx------. 1 mysql mysql 64 11月 12 12:07 20 -> /var/lib/mysql/mysql/time_zone_transition_type.ibd。lrwx------. 1 mysql mysql 64 11月 12 12:07 21 -> /var/lib/mysql/mysql/time_zone_leap_second.ibd。

2023-06-08 20:46:24 3999

转载 括号匹配算法 检查表达式合法性

/只要是左括号就入栈。printf("输一个含义有()[]{}的括号表达式:\n");//栈当前的存储空间。#define S_SIZE 100 //栈的空间大小。printf("括号匹配成功");

2023-05-29 13:43:50 75

转载 C++关于引用总结

引用相当于是变量的别名,对引用的操作与对变量直接操作完全一样,因为引用不重新生成洗的呢内存地址,引用与指向的变量内存地址是同一个。虽然不存在局部变量的被动销毁问题,但如果被返回的函数的引用只是作为一个临时变量出现,而没有将其赋值给一个实际的变量,那么就可能造成这个引用所指向的空间(有new分配)无法释放的情况(由于没有具体的变量名,故无法用delete手动释放该内存),从而造成内存泄漏。当const引用指向了不同类型的数据时,会产生临时变量,即引用指向的并不是初始化时的那个变量。

2023-05-28 22:18:38 143

转载 【转】C++友元函数和友元类(C++ friend关键字)

② 程序将 Student 类的声明和实现分开了,而将 Address 类的声明放在了中间,这是因为编译器从上到下编译代码,show() 函数体中用到了 Address 的成员 province、city、district,如果提前不知道 Address 的具体声明内容,就不能确定 Address 是否拥有该成员(类的声明中指明了类有哪些成员)。友元类中的所有成员函数都是另外一个类的友元函数,可以访问另一类的所有成员,包含public、protected、private 属性的。

2023-05-28 14:26:05 76

转载 C++ const成员变量 const成员函数 const对象

非const成员函数可以调用const成员函数,const成员函数不能调用非const成员函数。非const成员函数、const成员函数可以任意访问const成员变量、普通变量。const对象只可以调用const成员函数,非const对象任意调用成员函数。类中的const成员变量。

2023-05-28 13:47:04 133

转载 C++静态成员变量和静态成员函数

在类中,static 除了可以声明静态成员变量,还可以声明静态成员函数。普通成员函数可以访问所有成员(包括成员变量和成员函数),静态成员函数只能访问静态成员(包括静态成员变量和静态成员函数)。普通成员变量占用对象的内存,静态成员函数没有 this指针 ,不知道指向哪个对象,无法访问对象的成员变量,也就是说静态成员函数不能访问普通成员变量,只能访问静态成员变量。普通成员函数必须通过对象才能调用,而静态成员函数没有 this 指针,无法在函数体内部访问某个对象,所以不能调用普通成员函数,只能调用静态成员函数。

2023-05-28 12:38:12 43

转载 C++文件中编译C代码

对比 C++ 和 C 语言之间的关系。简单的理解,C++ 就是在 C 语言的基础上增加了一些新特性,从大的方面讲,C++ 不仅支持面向过程编程,还支持面向对象编程和泛型编程;从小的方面讲,C++ 还支持命名空间、函数重载、内联函数等。在此基础上,很多读者都存在一个疑问,即在一个项目中,能否既包含 C++ 程序又包含 C 程序呢?换句话说,C++ 和 C 可以进行混合编程吗?要知道,在 C++ 出现之前,很多实用的功能都是用 C 语言开发的,很多底层的库也是用 C 语言编写的。

2023-05-27 19:06:42 593

空空如也

空空如也

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

TA关注的人

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