自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 pmap定位内存泄露

pmap定位内存泄露

2022-08-23 10:09:55 1883

原创 ipv6相关

Address already in use当同时监听某个端口的IPv4和IPv6时,运行bind函数将执行失败,提示“bind : Address already in use”。原因:ipv6的socket默认情况下也会接收ipv4的报文,不同的socket不能监听同IP 下的同端口方法:设置ipv6的socket只接收ipv6地址的报文int on = 1;if(0 > setsockopt(fd_v6, IPPROTO_IPV6, IPV6_V6ONLY, &on, size

2022-04-11 13:44:51 2451

原创 audit服务启动失败定位方法

audit服务启动失败一般有两个原因1,netlink端口被占用audit从内核往用户态发消息是通过netlink实现的,从include/linux/netlink.h中可查到预留端口NETLINK_AUDIT,即如果有用户态进程监听了此netlink端口,那么用户态服务就会启动失败,失败的原因就是因为netlink接收此端口的消息失败了。定位方法调用auditctl -s命令可查看到用户态的进程pid,进而查找到对应的进程信息2,audit.log的权限问题/var/log/audit/au

2022-03-24 10:30:53 3658

原创 各种第三方开发库交叉编译问题

openssl执行命令./Configure --prefix=/usr/loca/openssl_arm shared no-asm linux-aarch64make CC=“aarch64-linux-gnu-gcc” AR=“aarch64-linux-gnu-ar” RANLIB=“aarch64-linux-gnu-ranlib”说明:–prefix配置安装目录,如果只是编译openssl,不指定此配置也可以,但如果要编译curl等其他需要依赖openssl的库时,则需指定此配置

2022-02-21 20:41:22 964

原创 c++ virtual关键字的使用

new的对象是谁,其调用virtual函数时,即调用谁class father{public: virtual void v_pp() { printf("this is virtual father"); } void pp() { printf("this is father"); }};class child{public: void v_pp() { printf("this is virtual child"); } void pp() { p

2022-02-18 18:34:02 315 1

原创 c++继承、重载、覆盖、隐藏

继承:即父类实现的函数,在子类中即可调用。重载:相同作用内,如一个类中,函数名相同,但函数形参不同。覆盖:子类和父类中函数名相同,形参相同,基类中有virtual关键字,平常用的最多virtual实现的功能即是覆盖。隐藏:子类和父类的函数名相同,形参不同,无论基类中有无virtual关键字,此时父类中的函数被隐藏;子类和父类的函数名相同,形参相同,父类中无virtual关键字(有关键字即为覆盖,此处可看出覆盖和隐藏的区别)总述:继承是基础,有了继承才牵扯出覆盖和隐藏,覆盖和隐藏就是对子类和父.

2022-02-18 17:36:02 495

原创 visual studio使用问题

1,问题:MSVCRTD.lib(exe_main.obj) : error LNK2019: 无法解析的外部符号 main,该符号在函数 “int __cdecl invoke_main(void)” (?invoke_main@@YAHXZ) 中被引用解决方法:配置->常规->配置类型 改成"动态库dll”2, 问题:error LNK2038: 检测到“RuntimeLibrary”的不匹配项: 值“MDd_DynamicDebug”不匹配值“MTd_StaticDebug”(C

2022-02-11 16:42:46 457

原创 iconv_open返回错误码22

转码相关的动态库存储在/usr/lib64/gconv目录下如果此目录为空,则调用失败,可拷贝其他机器上的gconv目录下的动态库到当前设备上

2022-02-09 16:56:40 1423

原创 boost 监听端口服务器

第一种方式,较全面的方式1,创建acceptor ioboost::asio::io_service io_serv;boost::asio::ip::tcp::acceotpr acceotpr(io_serv);acceotpr.open(io_serv, ip::tcp::v4());2,设置端口复用int on = 1;setsockopt(acceotpr->native_handle(), SOL_SOCKET, SO_REUSEADDR, (void *)&on,

2021-12-17 09:29:26 700

原创 semget No space left on device

最近使用信号量时,调用semget失败,通过strerror查看报错为No space left on device要定位此问题,首先要知道一些系统命令ipcs -m  查看系统共享内存信息ipcs -q  查看系统消息队列信息ipcs -s  查看系统信号量信息cat /prc/sys/kernel/sem 或者ipcs -ls可查看当前系统支持的信号量信息cat /proc/sys/kernel/sem250 32000 32 128250 SEMMSL

2021-12-15 19:46:07 2387

原创 信号量函数

信号量头文件#include<sys/types>#include<sys/ipc.h>#include<sys/sem.h>semget执行成功则得到一个信号量集标识符或创建一个信号量集对象,出错返回-1,原因存在errno中。int semget(key_t key,int nsems, int semflg)例子: semid = semget(key, 1, IPC_CREAT|0666)参数key可以自定义产生,一般由key = ftok(

2021-12-14 20:41:32 268

原创 errno perrno与strerrno

errno头文件<errno.h>errno是一个由POSIX和ISO C标准定义的符号。当系统调用或库函数发生错误的时候,比如以制度方式打开一个不存在的文件时,它的值会被改变,根据errno值的不同,我们可以知道程序发生了什么错误。如错误码errno为12 其错误为Cannot allocate memoryperror函数原型:void perror(const char *s)函数说明:将上一个函数发生错误的原因输出到标准错误(stderr),参数s所指向的字符串会先打印出,

2021-12-14 19:55:06 1298

原创 如何打rpm包

本文介绍的是编译好使用的库以后,打包的过程,不包含编译部分基础信息rpm环境安装好后默认的打包路径为/root/rpmbuildSPECS是写spec文件的地方RPMS是生成的rpm包存储位置BUIDROOT临时存储中间文件的地方spec介绍Name:为rpm的名字Version:为rpm包版本号%prep 打包之前做的操作%pre 安装rpm包前的操作%%%% 此处为真正的安装过程,会将%prep中做好的文件目录拷贝到对应的地方%post 安装rpm包后的操作%pre

2021-11-16 17:38:27 1027

原创 curl库交叉编译相关

预置条件编译curl之前要先编译openssl,并且需要将openssl安装到编译的机器上配置如./configure CPPFLAGS=-fPIC --without-zlib --disable-ldap --disable-ldaps --without-nss --with-ssl=/usr/local/ssl_arm --enable-ipv6 CC=aarch64-linux-gnu-gcc CXX=aarch64-linux-gnu-g++ --host=arm-none-linux

2021-11-16 16:36:34 1607

原创 linux c+ json库使用 遍历、打印

JsonCpp主要的类和常见函数Json::Value 表示所有的类型,比如int,string,object,array等,即存储json的所有数据。假设实例类为rootJson::Reader 将json文件流或字符串解析到Json::Value对象中,使用parse成员函数。假设实例类为reader。 reader.parse()Json::Writer 与Json::Reader相反,将Json::Value转换成字符串流,其有两个子类Json::FastWriter和Json::Styl

2020-10-08 14:53:32 2344

原创 stderr和stdout相关的标准输出及其他C系统API

1,stderr和stdout是结合fprintf使用的2,使用实例,可执行程序假设为my.exeint main(){ fprintf(stderr, "err!\n"); fprintf(stdout, "out!\n"); return 0;}//假设运行./my.exe,则屏幕上的打印为err!out!//假设运行./my.exe >1.tx,将输出重定向到1.txt,则屏幕上的打印为err!//1.txt中的文件内容为out!综上所述stdout是可以打印到文

2020-07-30 13:35:26 315

原创 单用户模式

1,重启时按e进入单用户模式设置2,低版本进入后写入single或者数字13,centos 7 更改ro为rw将rhgb和quiet去掉,并在最后添加 init=/bin/bash,然后control + x重启

2020-07-13 19:09:37 819

原创 define 和linux架构编译宏

1,define的或与与#ifdef xxx#if defined(xx) && defined(xxxx)int i = 2;#endif2,非define#ifndef xxx#ifdef !defined(xxx)3,

2020-07-09 20:14:42 699

原创 机器人正在玩一个古老的基于DOS的游戏

机器人正在玩一个古老的基于DOS的游戏。游戏中有N+1座建筑——从0到N编号,从左到右排列。编号为0的建筑高度为0个单位,编号为i的建筑的高度为H(i)个单位。起初, 机器人在编号为0的建筑处。每一步,它跳到下一个(右边)建筑。假设机器人在第k个建筑,且它现在的能量值是E, 下一步它将跳到第个k+1建筑。它将会得到或者失去正比于与H(k+1)与E之差的能量。如果 H(k+1) > E 那么机器人就失去 H(k+1) - E 的能量值,否则它将得到 E - H(k+1) 的能量值。游戏目标是到达第个

2020-07-09 17:15:17 675

原创 AB字符串互换

有一个仅包含’a’和’b’两种字符的字符串s,长度为n,每次操作可以把一个字符做一次转换(把一个’a’设置为’b’,或者把一个’b’置成’a’);但是操作的次数有上限m,问在有限的操作数范围内,能够得到最大连续的相同字符的子串的长度是多少。/**利用前缀和数组例如:n=10,m=1,s=baabaabaabb a a b a a b a a b0 1 2 3 4 5 6 7 8 9将 b–>ab 的前缀和数组为 sums={ 0, 3, 6, 9, 10}//10 为字

2020-07-08 19:45:50 1460

原创 breakpad使用及dmp分析

breakpad编译1,breakpad源码下载路径https://chromium.googlesource.com/breakpad/breakpad最新版本需要g++支持c++11,如果g++不支持c++11,则可使用低版本breakpad,此处选择422,./configure && make3,编译过程中会遇到问题少lss文件,可在此处下载https://chromium.googlesource.com/linux-syscall-support/breakpad使用

2020-07-03 18:47:28 3010

原创 coredump的生成方法和使用

1,如何开启生成coredump文件echo “ulimit -c 1024” >> /etc/profile //限制生成core文件的大小为1024KB或直接在控制台输入ulimit -c //不限制core文件的大小取消限制 ulimit -c unlimited2,查看是否打开ulimit -a 查看3,修改core文件存储路径cho “/corefile/core-%e-%p-%t” > /proc/sys/kernel/core_patter

2020-05-21 14:50:16 424

原创 gdb基本使用方法和常用命令

一:符号表说明使用gdb调试的前提是要有符号表。如果程序是release版本,符号表不全,则使用gdb调试时,不能单步调试,成员变量等信息不可查如何生成符号表编译代码时加上-g参数,则编译的程序中会带有当前程序的符号表。如 gcc -o main main.c,则可对main程序进行单步调试二:调试假设有一进程testgdb test //调试某一可执行程序run(简写为r) //运行进程,假设有入参,则运行run agrc三:断点相关1.设置断点设置断点的命令为b

2020-05-14 15:30:11 336

原创 c/c++ 堆、栈、静态存储区

1,栈区由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。2,堆区由程序员分配和释放,若程序员不释放,则在程序退出时由系统释放。3,全局(静态)存储区全局变量和静态变量是存储在一块的,初始化的全局变量和静态变量在一块区域(.data), 未初始化的全局变量和未初始化的静态变量在相邻的另一块区域(.bss)。 程序结束后由系统释放。4,常量区存储常量字符串,程序结束后由系统释放5,程序代码段存储二进制代码int main(){int a; //栈区char *pc = mal

2020-05-12 10:24:06 243

原创 linux debug定位

strace -f -tt -p [pid] -f 跟踪所有子进程和线程 -tt可以显示时间top -Hp [pid] 可以查看一个进程所有线程的cpu使用情况pstack [pid] 可以查看进程所有线程的调用栈strace -f -tt -c -p [pid] 加上-c 可以查看一定时间...

2020-04-03 13:54:47 121

原创 申请大内存__get_free_pages

一页是一个机器字节即4K 4*1024个字节一页大小可以通过getconf PAGE_SIZE获取此函数就是通过申请内存页达到申请大内存的目的__get_free_pages(unsigned int flags, unsigned int order);入参:order,代表的是申请2的次方页,如果order为3,则申请8页,内存大小为4096*8释放内存用__free_pages...

2020-03-06 15:09:35 510

原创 rsync Failed to connect to x.x.x.x No route to host(113)

rsync Failed to connect to x.x.x.x No route to host(113)解决办法:打开873端口#iptables -I INPUT -p tcp -m state --state NEW -m tcp --dport 873 -j ACCEPT

2020-03-05 17:34:51 393 1

原创 chmod详解

学习chmod之前,先要对文件属性有一定的了解。由上图文件属性详解:第1位代表文件的类型,d表示文件夹;第2-4位表示文件或目录的拥有者,即user; **操作符为u**第5-7位表示文件或目录的所属组,即group; **操作符为g**第8-10位表示出了文件或目录拥有者或所属组之外,其他用户皆属于这个范围,即other;**操作符为o**权限设置r 读写权限,数字代号为4;...

2020-02-11 12:59:00 230

转载 解决linux下sudo更改文件权限报错xxxis not in the sudoers file. This incident will be reported.

Linux中普通用户用sudo执行命令时报”xxx is not in the sudoers file.This incident will be reported”错误,解决方法就是在/etc/sudoers文件里给该用户添加权限。如下:1.切换到root用户下  方法为直接在命令行输入:su,然后输入密码(即你的登录密码,且密码默认不可见)。2./etc/sudoers文件默认是只读的...

2020-02-11 12:32:19 290

空空如也

空空如也

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

TA关注的人

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