自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 如何使用gdb调试多线程死锁问题,并定位触发死锁的线程

gdb调试多线程、多线程死锁问题

2022-06-08 15:44:39 1519 1

转载 mac下编译ffmpeg

1、源码地址下载下载地址git clone https://git.ffmpeg.org/ffmpeg.git ffmpeg2、进入下载目录cd ffmpeg目录3、configure配置./configure --prefix=/usr/local/ffmpeg --enable-gpl --enable-nonfree --enable-libfdk-aac --enable-libx264 --enable-libx265 --enable-filter=delogo --

2021-09-28 19:42:11 847

转载 如何快速定位程序Core?

1. 程序Core定义及分类程序core是指应用程序无法在保持正常running状态而发生的崩溃行为。程序core时会生成相关的core-dump文件,core-dump文件是程序崩溃时程序状态的数据备份。core-dump文件包含内存、处理器、寄存器、程序计数器、栈指针等状态信息。我们可以借助core-dump文件分析定位程序Core的原因。这里我们从三个方面对程序Core进行分类:机器、资源、程序Bug。下表对常见的Core原因进行了分类: 分类 原因

2021-07-06 18:36:54 1149

原创 如何只cherry-pick 一个commit里面的某几个文件而不是全部?

问题描述:有时候我们做cherry pick的时候不想把整个commit 都pick过来,典型的原因比如:commit里面只有一个或几个文件对我们自己的branch是有用的。解决方案:试验下来,觉得最简单的方式是:git cherry-pick -n <commit_id>-n 的意思是:-n, --no-commit don't automatically commit如果commit里面有多个文件,执行此命令后需要先unstage 并恢复不想要...

2021-04-06 23:36:43 3065 1

转载 kubectl logs和docker logs输出日志不同的问题

kubectl logs用来查询pod日志docker logs用来查询容器日志问题描述但是近期在分析日志时发现一个问题,kubectl logs查询pod日志输出的不全,和对应容器docker logs查询输出的日志相去甚远,kubectl logs查询出来的日志比查询容器日志少了将近三分之一。而且容器的日志也会出现丢失的现象,日志并不是从容器启动的那一刻开始记录的,貌似部分日志被清理了。问题分析首先,当看到kubectl logs输出的日志的时候,就觉得不对,开始时间就有问题,没有pod

2021-04-04 11:36:59 2449

转载 Linux 命令中 more、less、head、tail 命令的用法

more 命令功能类似 cat ,cat 命令是将整个文件的内容从上到下显示在屏幕上。 more 命令会一页一页的显示,方便使用者逐页阅读,而最基本的指令就是按空白键(space)往下一页显示,按 b 键就会往回(back)一页显示,而且还有搜寻字串的功能 。more 命令从前向后读取文件,因此在启动时就加载整个文件。(1)命令格式more [选项] 文件(2)常用参数参数 描述+n 从笫 n 行开始显示-n 定义屏幕大小为 n 行+/pattern 在每个档...

2021-04-04 11:35:20 388

转载 Gflags开源库使用--解析命令行参数

一、简介gflags是Google的一个命令行参数处理的开源库,使用C++开发,具备Python接口,可以替代getopt。gflags支持从环境变量、配置文件读取参数。gflags使用起来比getopt方便,但是不支持参数缩写(例如getopt支持--list缩写成-l,gflags不支持)。gflags不支持列表,用户可通过借助string参数实现:可看作以逗号分隔的参数列表:DEFINE_string(languages, “english, french, german, chi.

2021-03-27 01:45:52 1565

原创 C++宏定义中#和##的用法

前段时间很到了宏定义中的新知识:#与##,感觉打开了新天地的大门。首先来介绍一下这两种功能:##的用法是负责将其后面的东西转化为字符串,比如:#define TO_STRING(str) #strint main(){ cout << TO_STRING(this is a string) << endl; return 0;}这段代码中,TO_STRING宏就会将括号中的内容转化为字符串,生成"this is a string",然后由co...

2021-03-27 01:09:49 4911 1

原创 Linux下常用压缩 解压命令和压缩比率对比

常用的格式有: tar, tar.gz(tgz), tar.bz2,不同方式,压缩和解压方式所耗CPU时间和压缩比率也差异也比较大。1. tar 只是打包动作,相当于归档处理,不做压缩;解压也一样,只是把归档文件释放出来。(1)打包归档格式:tar -cvf examples.tar files|dir#说明:-c, --create create a new archive 创建一个归档文件-v, --verbose verbosely list files processed

2021-03-21 18:13:44 8810 1

转载 Kubectl常用命令大全

参考:https://www.jianshu.com/p/07455dbfd6bbKubectl 常用参数分类基础命令:create,delete,get,run,expose,set,explain,editcreate 命令:根据文件或者输入来创建资源# 创建Deployment和Service资源$ kubectl create -f demo-deployment.yaml$ kubectl create -f demo-service.yamldele..

2021-03-19 13:44:53 704

原创 生成独立的gcc调试文件及利用调试文件调试core文件

1、生成独立的gcc调试文件编译调试信息:gcc -g -o main main.c分离调试信息:objcopy--only-keep-debug main main.debug或者cp main main.debug strip--only-keep-debug main.debug从原始文件中剥离调试信息:objcopy --strip-debug main或者strip --strip-debug --strip-unneeded main通过..

2021-03-18 22:41:51 3614

原创 linux如何将一个正在运行的进程转入到后台执行

要求:将一个正在当前前台执行的进程转入后台执行,并且要求退出shell后依然保持不退出进程。 ctrl+zto stop (pause) the program and get back to the shell bgto run it in the background disown -h [job-spec]where [job-spec] is the job number (like%1for the first running job; find about your n

2021-03-11 13:31:00 4222

原创 ProtoBuf 语法简介

一、简介。protobuf是由Google开发的一套对数据结构进行序列化的方法,可用做通信协议,数据存储格式,等等。其特点是不限语言、不限平台、扩展性强,就像XML一样。与XML相比,protobuf有以下特点:1、操作更简单。例如,我们要定义一个个人信息的结构,其中包括名称和邮箱地址两个部分。用XML定义如下:<person><name>John Doe</name><email>[email protected]&...

2021-02-20 20:18:28 11018 1

转载 ProtoBuf 官方文档(二)- 语法指引(proto2)

翻译查阅外网资料过程中遇到的比较优秀的文章和资料,一是作为技术参考以便日后查阅,二是训练英文能力。此文翻译自 Protocol Buffers 官方文档 Language Guide 部分翻译为意译,不会照本宣科的字字对照翻译以下为原文内容翻译语法指引(proto2)本指南介绍如何使用 protocol buffer 语言来构造 protocol buffer 数据,包括 .proto 文件语法以及如何从 .proto 文件生成数据访问类。它涵盖了 protocol buffer 语言.

2021-02-20 19:40:05 1327

原创 netstat命令查看 进程占用的端口 以及某个端口是否被占用

1 查看进程占用的端口(需要用到进程的pid)[root@localhost ~]# netstat -ntlp | grep 1221tcp 0 0 0.0.0.0:8750 0.0.0.0:* LISTEN 1221/./bin/sub_vid进程1221 占用端口8750;2 查看某个端口是否被占用[root@localhost ~]# netstat -ntlp | grep 8750t...

2021-02-20 17:46:32 3297

转载 C++11新增alignas关键字作用

alignas关键字用来设置内存中对齐方式,最小是8字节对齐,可以是16,32,64,128等。下面先写个alignas对齐的实际代码,等下再来说为什么会这样。#include <iostream>using namespace std; struct struct_Test1{ char c; int i; double d;}; struct alignas(8) struct_Test2{ char c; int i; double d;};

2021-02-20 11:36:26 2287 1

转载 本地文件夹关联(添加)到git上

最近放假在家呆的有些废了,今天在家上完班打算把过去一年写的代码都整理一下,结果又忘了怎么把本地的文件夹上传到git上了。好吧好吧,这回记录下来,下次忘了再看吧。。。1、在git上新建一个project2、找到要上传的文件夹路径,右键空白处打开git bash3、git初始化$ git init4、git remote add origin "自己在三方代码托管平台上所创建仓库对应的地址"$ git remote add origin [email protected]:thematic

2020-10-29 14:38:02 1948

转载 C++11新特性:参数绑定——std::bind

概述std::bind函数定义在头文件functional中,是一个函数模板,它就像一个函数适配器,接受一个可调用对象(callable object),生成一个新的可调用对象来“适应”原对象的参数列表。一般而言,我们用它可以把一个原本接收N个参数的函数fn,通过绑定一些参数,返回一个接收M个(M可以大于N,但这么做没什么意义)参数的新函数。同时,使用std::bind函数还可以实现参数顺序调整等操作。函数原型std::bind函数有两种函数原型,定义如下:template< cl.

2020-10-22 22:08:18 830

转载 C++11之Lambda表达式

Lambda表达式C++11的一大特性就是引入了Lambda表达式,并在后续的C++14进行了加强。利用Lambda表达式,可以方便定义和创建匿名函数。一个Lambda表达式表示一个可调用单元,我们可以将其理解为一个未命名的内联函数。Lambda语法定义[capture list] (paramters list) mutable exception-> return type{function body}其中——capture list,捕获外部变量列表; paramte

2020-10-22 19:48:17 692

转载 关于typedef void (*sighandler_t)(int)的理解

最近,在学习Linux信号量时,看到signal函数中typedef的一个用法,觉得很有意思。于是就拿出来说道说道。 它定义了一个类型sighandler_t,表示指向返回值为void型(参数为int型)的函数(的)指针。它可以用来声明一个或多个函数指针。 sighandler_t sig1, sig2; 这个声明等价于下面这种晦涩难懂的写法: void (*sig1)(int), (*sig2)(int); 1. 关于typed...

2020-10-22 19:45:19 1040 1

转载 C++17之『折叠表达式』

C++11 提供了可变模板参数包, 使函数可以接受任意数量的参数. 但在 C++11中展开参数包稍显麻烦, 而 C++17 的折叠表达式使得展开参数包变得容易,其基本语法是使用(...)的语法形式进行展开.支持的操作符折叠表达式支持 32 个操作符:+,-,*,/,%,^,&,|,=,<,>,<<,>>,+=,-=,*=,/=,%=,^=,&=,|=,<<=,>>=,==,...

2020-10-22 17:56:00 637

原创 VSCode不能C++代码跳转

把扩展插件 C/C++和C++ Intellinsense卸载在安装一下。

2020-10-22 16:19:46 4536

转载 SignalHandler 处理系统信号

在服务器端后台开发中,常常需要写 daemon 程序在后台默默执行一些任务。除了正常的逻辑之外,还需要考虑处理异常退出时怎么办。这时可以用到 signal 这个函数来注册异常信号的回调函数。示例#include <iostream>#include <csignal>#include <time.h>#include <stdlib.h>#include <unistd.h>using namespace std;void

2020-10-20 11:22:18 3505

转载 BOOST 之filesystem, path

目录[-]使用 boost::filesystem 的第一个程序 清单 1. 用于确定某个文件的类型是否为 Directory 的代码 了解 Boost path 对象 清单 2. 创建 Boost path 对象的方法 清单 3. 使用本机格式初始化 path 清单 4. 使用可移植格式初始化 path path 成员函数概述 清单 5. 使用 path::iterator(begin 和 end 接口) 清单 6. 路径字符串的串联 错误处理 清单 7. Boost 中的错误处理

2020-10-19 17:25:03 2875

转载 prctl函数的应用

intprctl( intoption,unsigned long arg2,unsigned long arg3,unsigned long arg4,unsigned long arg5 )这个系统调用指令是为进程制定而设计的,明确的选择取决于option:PR_GET_PDEATHSIG :返回处理器信号;PR_SET_PDEATHSIG :arg2作为处理器信号pdeath被输入,正如其名,如果父进程不能再用,进程接受这个信号。PR_GET_DUMPABLE :返回处理器标...

2020-10-14 16:58:23 600

转载 TCP流量控制-滑动窗口机制

TCP窗口机制TCP header中有一个Window Size字段,它其实是指接收端的窗口,即接收窗口。用来告知发送端自己所能接收的数据量,从而达到一部分流控的目的。其实TCP在整个发送过程中,也在度量当前的网络状态,目的是为了维持一个健康稳定的发送过程,比如拥塞控制。因此,数据是在某些机制的控制下进行传输的,就是窗口机制。窗口缩放因子(Window Scaling)以前,window size最大为2的16次方,为65535,随着宽带不断提高,65535字节已经小了,为了突破限.

2020-09-03 10:07:32 1949

原创 TCP拥塞控制算法分析

TCP拥塞避免拥塞控制就是防止过多的数据注入网络中,这样可以使网络中的路由器或链路不致过载。拥塞控制是一个全局性的过程,和流量控制不同,流量控制指点对点通信量的控制。超时重传机制超时重传机制主要是为了解决数据包在传输过程中丢失的问题。TCP每发送一个报文段,就会为这个报文段开启一个定时器,如果定时器溢出时仍然没有收到接收端的应答报文,那么TCP就认为这个报文段在传输过程中丢失,然后重新发送这个报文段。这便是超时重传机制举例:客户端请求发送”and hi”报文段时启动了定时器,..

2020-09-03 09:33:28 1280

转载 C++ 数值最大最小标识符一网打尽,INT_MIN/ INT_MAX/LONG_MIN/LONG_MAX 等等

Constant Meaning Value CHAR_BIT Number of bits in the smallest variable that is not a bit field. 8 SCHAR_MIN Minimum value for a variable of typesigned char. -128 SCHAR_MAX Maximum value for a variable of typesigned char. 12..

2020-08-24 14:58:41 569

转载 C++11模版元编程

1.概述  模版元编程(template metaprogram)是C++中最复杂也是威力最强大的编程范式,它是一种可以创建和操纵程序的程序。模版元编程完全不同于普通的运行期程序,它很独特,因为模版元程序的执行完全是在编译期,并且模版元程序操纵的数据不能是运行时变量,只能是编译期常量,不可修改,另外它用到的语法元素也是相当有限,不能使用运行期的一些语法,比如if-else,for等语句都不能用。因此,模版元编程需要很多技巧,常常需要类型重定义、枚举常量、继承、模板偏特化等方法来配合,因此编写模版元编程比

2020-08-12 23:08:01 1049

转载 MySQL在线模拟平台

MySQL在线模拟平台1. http://sample.jimstone.com.cn/xsql/2. http://sqlfiddle.com/3. https://sqlbolt.com/lesson/select_queries_introduction4. https://www.w3resource.com/sql-exercises/sql-retrieve-from-table.php...

2020-08-10 17:23:10 1073

原创 C/C++在程序中获取CPUID+网卡Mac的几种方法

直接上代码。命令行获取到结果之后需要将16值字符串转换成整数:int tolower(int c){ if (c >= 'A' && c <= 'Z') { return c + 'a' - 'A'; } else { return c; }}unsigned long htoul(char s[]){ int i; unsigned long n = 0; if (s[0] == '0' && (s[1]=='x' ||

2020-07-31 21:02:14 1772 1

原创 基于ARM架构的芯片获取CPU信息(cpuID)的多种方法

由于工作的原因,要获取到ARM芯片的cpuid。了解下存储cpu信息的寄存器内容:CPUID寄存器内容:字段名:Implementer(venter 销售ID)|Variant(大版本号) | Architecture(架构版本)| Part Num(产品代码)|Revision(小版本号)基址偏移量: [31-24] | [23-20] | [19-16]

2020-07-31 20:52:30 12659 3

转载 SQL 语法速成手册

本文针对关系型数据库的一般语法。限于篇幅,本文侧重说明用法,不会展开讲解特性、原理。一、基本概念数据库术语 数据库(database)- 保存有组织的数据的容器(通常是一个文件或一组文件)。 数据表(table)- 某种特定类型数据的结构化清单。 模式(schema)- 关于数据库和表的布局及特性的信息。模式定义了数据在表中如何存储,包含存储什么样的数据,数据如何分解,各部分信息如何命名等信息。数据库和表都有模式。 列(column)- 表中的一个字段。所...

2020-07-06 09:17:02 169

原创 网络编程——C++实现socket通信(TCP)高并发之epoll模式

相关链接:TCP连接与释放、网络编程——C++实现socket通信(TCP)相关函数:服务端:socket()bind()listen()epoll_create() 高并发poll模式epoll_ctl()epoll_wait()accept()read() 或 recv()等write() 或 send()等close()客户端:socket()connect()write() 或 send()等read() 或 recv()等close()着重说明下epol

2020-06-29 14:15:49 5491 2

转载 epoll中epoll_data_t 中fd和ptr的用法

文章是网上内容总结,为了自己下次好找,所以写到自己博客里边了。typedef union epoll_data {void *ptr;int fd;__uint32_t u32;__uint64_t u64;} epoll_data_t;struct epoll_event {__uint32_t events; /* Epoll events /epoll_data_t data; / User data variable */};epoll_data中fd存放文件描述符,所以我们一

2020-06-26 20:36:12 1954

转载 epoll详解及优点

epoll详解更详细的讲解-->【Linux学习】epoll详解什么是epoll? epoll是为处理大批量句柄而作了改进的poll, 是性能最好的多路I/O就绪通知方法; 只有三个系统调用: epoll_create, epoll_ctl, epoll_wait; epoll_ctl - epoll的事件注册函数,它不同于select()是在监听事件时告诉内核要监听什么类型的事件,而是在这里先注册要监听的事件类型; epoll的工作原理 epoll同样只告知那些就绪的文件描

2020-06-26 18:22:15 2168

原创 网络编程——C++实现socket通信(TCP)高并发之poll模式

相关链接:TCP连接与释放、网络编程——C++实现socket通信(TCP)相关函数:服务端:socket()bind()listen()poll() 高并发poll模式accept()read() 或 recv()等write() 或 send()等close()客户端:socket()connect()write() 或 send()等read() 或 recv()等close()着重说明下poll函数用法。跟select功能类似,可以设置的同时监听上限会更多,

2020-06-19 16:43:49 1446

原创 网络编程——C++实现socket通信(TCP)高并发之select模式

相关链接:TCP连接与释放、网络编程——C++实现socket通信(TCP)相关函数:服务端:socket()bind()listen()FD_ZERO()等辅助函数select() 高并发select模式accept()read() 或 recv()等write() 或 send()等close()客户端:socket()connect()write() 或 send()等read() 或 recv()等close()着重说明下select函数及辅助函数用法说明。

2020-06-18 11:35:22 2985

原创 网络编程——C++实现socket通信(TCP)

相关链接:TCP连接与释放相关函数:服务端:socket()bind()listen()accept()read()write()close()客户端:socket()connect()write()read()close()注意:每当服务端连接断开后,废话不多说,上源码!服务端TCP_Server.cpp#include <stdio.h>#include <sys/types.h>#include <sys/socket.h

2020-06-10 16:09:23 10579 3

原创 APTITUDE解决UBUNTU各种依赖问题-下列软件包有为满足的依赖等

完成正在分析软件包的依赖关系树正在读取状态信息… 完成有一些软件包无法被安装。如果您用的是 unstable 发行版,这也许是因为系统无法达到您要求的状态造成的。该版本中可能会有一些您需要的软件包尚未被创建或是它们已被从新到(Incoming)目录移出。下列信息可能会对解决问题有所帮助:下列软件包有未满足的依赖关系:gcc : 依赖: gcc-4.8 (>= 4.8.1-4~) 但是它将不会被安装E: 无法修正错误,因为您要求某些软件包保持现状,就是它们破坏了软件包间的依赖关...

2020-05-28 11:26:06 1965

MFC实现高仿画板、绘图软件功能(带详细注释)

在VS2015环境下,利用MFC框架实现的一款高仿“画图”工具,实现绝大部分功能甚至更多创新点。(注释超详细) 实现了点、直线、曲线、折线、矩形、圆形、多边形等等形状,并且具有区域限制、鼠标捕捉等功能; 实现了不同笔型,包括铅笔、圆珠笔、荧光笔等等; 可以根据不同的笔设置不同的笔宽和笔色以及虚线、点线等等功能; 实现了多种画图工具,包括不限于橡皮、笔刷子、油漆桶、部分区域颜色填充、设置字体和颜色、添加文字; 实现放大镜功能等; 添加多个资源文件,制作工具栏,设置工具栏,实现滚动条滚屏操作等; 实现保存图片、关闭保存等等功能。 一句话概括一下,“画图”有的这里基本都有,“画图”没有的,这里还有。

2018-10-26

空空如也

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

TA关注的人

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