自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Centos环境下离线升级Gcc版本

本博客记录Centos下升级Gcc编译器到5.4.0的过程。1. 准备的材料Gcc 5.4.0源码压缩包Mpc-1.1.0源码压缩包Gmp-6.1.2源码压缩包Mpfr-3.1.1.1源码压缩包2. 安装顺序三个库不能随意安装,安装顺序必须是gmp,mpfr,mpc。因为后面的库编译安装时需要依赖前面已安装的库。3.安装过程1.安装gmpa) 解压源码压缩包,在终端切换到已解压的目录。b) 创建编译目录 mkdir gmp-buildc) cd gmp-build/d) …/c

2021-05-28 17:52:20 973 1

原创 详细介绍Boost消息队列

1. 前言boost中的消息队列(Message Queue)是进程间通信的一种机制,实际上是其内部也是采用共享内存的方式来达到进程间通信的目的。这也就意味这Message Queue有其局限性:只有处在同一台计算机中的不同进程才能使用消息队列进行通信。消息队列类似于消息列表,每个线程能够往列表里塞消息,也能从列表里读取消息。每一条消息都有三个属性:1.消息优先级2.消息长度3.消息内容2. 消息队列的使用1. 消息队列的构造函数消息队列的构造函数有三个分别是:message_queue_t

2020-12-29 16:10:37 3278 6

原创 C/C++ string转数值类型的方法总结

1. C库函数

2020-09-14 23:37:23 2368 1

原创 Linux C语言定时任务的实现

1. 前情提要https://blog.csdn.net/zxl_1996/article/details/79138748https://blog.csdn.net/sinat_36184075/article/details/80489402http://www.voidcn.com/article/p-ybnmbawn-bgn.html最近需要编写一个小的测试程序,在while循环中读取数据并且不间断的读取10分钟,10分钟之后就不再读取数据。一开始是想用一个很大的数来计数,每次循环减一,减到

2020-08-27 18:42:16 4596

原创 Linux C++ 共享内存

前言

2020-08-24 17:34:07 2931

原创 Linux Shell入门学习(五)

1. Shell中的流程控制

2020-08-13 16:28:05 97

原创 Linux Shell入门学习(四)

1. Shell的注释在shell脚本中也可以有注释,不过和大多数编程语言不同的是,shell中采用#来添加注释。#!/bin/bashi=10str="hello world"#以下是输出echo $iecho $str在要注释的行开头加上#号就可以将改行注释。但是如果要注释很多行的时候,给每一行加#号非常繁琐,效率低。在c语言中可以用/* */来注释一个代码块。在shell中则可以用:<<+注释名来注释整块代码。其注释的一般形式为::<< a 注释的代

2020-08-07 17:27:28 135

原创 Linux Shell入门学习(三)

1. Shell数组若干个数据构成的集合,在编程语言上称之为数组。和大多数编程语言一样,shell同样也支持数组。并且也可以用[]加下标来访问数组里的数据,数组下标从0开始。但是shell中的数组和其他编程语言(例如C语言)中的数组又有一些不同之处,主要有如下:定义数组时不用指明数组的大小。数组中的数据可以是不同类型的,例如可以将浮点型和整型存放在同一个数组里。shell中的数组只支持一维数组,不支持多维数组。2. 数组的定义在shell当中用()代表一个数组,括号里面的数据则是数组里的元素

2020-08-05 19:12:17 100

原创 Linux Shell入门学习(二)

1. Shell变量无论哪一门编程语言,变量都是一个必不可少的部分,shell脚本语言也是如此。变量的作用是用来存储数据,大多数编程语言在定义变量时都需要指明变量的类型,例如整型,字符型等等。但是shell脚本语言在定义变量时无需指明变量类型直接赋值即可。a=5b=6.6str="abc"如上,在shell脚本语言中直接赋值即可定义变量。但是值得注意的是在赋值时,等号的两边不能有空格。和大多数的编程语言一样,在变量名称的命名上也有一些规则来限制,shell脚本语言变量命令规则如下:1.命名只

2020-08-04 17:34:57 241

原创 Linux Shell入门学习(一)

1. Linux Shell 简介什么是shell?shell也是一个应用程序,它连接了用户和 Linux 内核,用户可以通过shell更加安全,高效的使用Linux内核。同时,shell也是一种程序设计语言,但是和c,java等语言不同的是,shell是一种解释型的语言,无需编译即可运行。Linux中的shell种类有很多,常见的有以下几种:● Bourne Again Shell(/bin/bash)● Bourne Shell(/bin/sh)● C Shell(/bin/csh)●

2020-08-04 15:10:44 123

原创 Linux命令之seq详解

1.seq命令seq是单词sequence序列的缩写,其功能就是输出序列化的一串整数。seq使用起来也非常简单,其语法有如下三种:1. seq + 选项 + 尾数2. seq + 选项 + 首数 + 尾数3. seq + 选项 + 首数 + 增量 + 尾数第一种就是输出从1(默认1)到尾数之间的所有整数。第二种就是输出从首数开始到尾数结束的所有整数。第三种就是输出从首数开始到尾数结束,每隔一个增量输出一个整数,类似于一个等差数列。seq的选项有以下三种:1. -f : 使用prin

2020-07-14 16:04:16 7442

原创 Linux命令之sed详细介绍

1. sed简介大纲:1.介绍sed,与grep,awk的区别2.介绍其工作原理,主要是存在缓冲区概念3.命令格式 sed + 选项 ‘执行命令’ + 文件3.介绍选项

2020-07-09 00:01:46 893

原创 Linux命令之awk详细介绍

1.简介awk是linux下的一个强大的文本分析处理工具,同时awk其实是一门编程语言,它支持条件判断、数组、循环等功能。awk处理数据的方式是逐行扫描文件,对符合条件的行进行处理。接下来,我们一起来了解一下awk的基础使用。2.awk命令解析awk命令的格式如下:awk [选项] '脚本命令' 文件名常用的选项主要有以下几种:-F //指定输入的分隔符-f //从脚本文件中读取awk的命令,取代从命令行输入指令-v //设置一个变量awk命令中的脚本命令由两个部分组成,如下:'匹

2020-07-03 00:13:58 998

原创 c++ const的详细总结

1.const关键字c语言关键字const是constant的缩写,意思是不变的。当程序员定义了一个const对象,则编译器就不允许程序员再对该对象进行修改,相当于该对象仅仅是一个只读对象。const语法变化多端,而且许多面试中也会涉及到const的相关知识点。所以在此做一个总结,加深一下const的印象,也方便自己以后回顾相关的知识点。2.定义一个const对象定义一个const对象非常简单,只要对普通的对象加上const的修饰成了一个const对象:const int i = 10; cons

2020-06-30 23:50:04 212

原创 C++程序的内存布局

1.c++内存布局对于一个C/C++程序员来说,搞清楚一个C/C++程序在计算机内存中的布局尤为重要。了解了程序在计算机内存中的布局,对程序员解决段错误,内存泄漏等问题也有一定的帮助,也能更加深刻的理解一个程序。在一个32位的Linux操作系统上,计算机将会为每一个进程分配4GB的虚拟空间。其中高地址的1GB内存为内核空间,低地址的3GB空间为用户空间,如下:代码中的所有内存分配操作都会在各个进程的用户空间进行。而3GB的进程用户态空间又会被分为好几个区域,用来分配不同类型数据的内存,具体的分布如下

2020-06-28 23:05:15 616 1

原创 Thrift的安装及分布式调试

1.Thrift的简单介绍Thrift是一个跨语言跨平台的服务部署框架,由Facebook在2007年开发,2008年进入Apache开源项目。Thrift通过接口定义语言来定义RPC的接口和数据类型,再通过Thrift编译器生成不同的语言代码,并由生成的代码负责RPC协议层和传输层的实现。其架构如下:在上图中,最上层的是用户的业务逻辑代码,中间两层则是thrift编译器生成的代码,用于结构化数的解析,发送和接收等。TProtocol则是协议层,定义了数据的传输格式,主要支持数据格式有二进制格式、压缩

2020-06-22 19:25:11 684

原创 C++11 新特性总结——全干货(上)

序言作为一名C/C++程序员,C++11的新特性想必大家多多少少都了解一些。对于实际项目,C++11的很多新特性给每一位C++程序员带来了不少的便利,例如智能指针,正则,自动推导,多线程编程等等;零一方面,对于面试,C++11又是很多面试的高频考点。因此,掌握C++11的新特性真是百利而无一害。对于BOOST库比较熟悉的人应该知道,实际上C++11许多的特性都是从BOOST中参考过来的。BOOST库被誉为是准标准库,有时间学习学习BOOST库也是一个不错的选择。好了,废话不多说,下面一起来看一下C++11

2020-06-07 19:03:16 445

原创 C++深浅拷贝的理解

1.浅拷贝概念:浅拷贝也叫位拷贝,即在拷贝发生时,编译器只是将对象中的值按照基本的数据类型复制过来。例如以下就是个简单的复制过程:int a = 10;int b = a;将a的值赋给b的过程就是一个浅拷贝过程,这不会有任何问题。但是如果一个类中包含有指针成员变量,采用浅拷贝则会引发一些问题。例如以下:#include <iostream>#include <string>using namespace std;class String{public: St

2020-05-17 13:39:38 217

原创 c++ static_assert关键字

前言static_assert在c++0x中加入该关键字,用来做编译期间的断言,也叫静态断言。该关键字是从c语言的assert中继承过来的,但是assert是在运行期间的断言。static_assert语法static_assert的语法有两种:static_assert ( 布尔常量表达式 , 消息 ) (C++11 起)static_assert ( 布尔常量表达式 ) (C++...

2020-05-06 19:32:29 766

原创 c++智能指针----unique_ptr

前言继auto_ptr智能指针之后,在c++11中又提供了三种智能指针,分别是unique_ptr,shared_ptr和weak_ptr。auto_ptr在上一篇文章中以及详细介绍过了,接下来我们就来了解一下其他的几种智能指针。unique_ptr通过上一篇文章的学习(auto_ptr详解),我们知道auto_ptr在赋值之后会产生悬挂指针,稍不注意就会因为访问悬挂指针而导致程序奔溃。为了...

2020-05-06 16:25:56 614

原创 Ubuntu中安装ICE3.7.3

前言上一篇博客,我大概讲述了一下ICE中间件在windows上搭建的过程以及跑通一个小的demo。今天,我们来看一下Ubuntu下如何安装ICE,在Ubuntu上安装ICE相对于windows上简单一些。安装过程1.下载并且解压ICE源码压缩包以及第三方库源码的压缩包。2.使用install指令安装部分第三方库。sudo apt-get install libssl-dev liblmd...

2020-04-28 18:21:50 799

原创 C++设计模式之策略模式

前言在日常生活中,我们经常会遇到为完成某件事情,通常我们的方法都有很多种选择。例如,从上海去北京,我们可以坐火车,坐飞机或者自己开车去。事实上,在软件开发中也经常会有相类似的情况,当需要实现某一需求或功能时,可能存在多种算法。例如,在做一道算法题时,我们可以根据要求的时间复杂度或者空间复杂度采取不同的算法去实现。假设这样一种场景,当我们要出门旅游时,去近的地方,我们可能选择自驾,去远一些的地方...

2020-04-12 22:21:22 120

原创 ICE中间件环境搭建

前言本次搭建ICE中间件的环境对我来说还是比较艰辛的,一来是没有听过ICE中间件,连个初学者都算不上,二来网上关于ICE的环境搭建少之又少,而且很多都是java的,而我需要搭建的是C++相关的。不过好在功夫不负有心人,经过不断的琢磨,总算是把环境搭建好了并且运行demo,测试结果也符合预期。正好有时间,所以就把整个过程记录一下,也算是自己的一个小总结,也可以给正要搭建ICE环境的朋友们一个参...

2020-04-02 13:26:35 1337 1

原创 进程/线程绑定到特定CPU核的linux实现(有代码有实例)

前言现在计算机上的CPU大多都是多核的,有4核甚至是8核的。但是一个计算机启动之后其进程数是远远多于CPU核数的,因为操作系统会给自动调度这些进程在CPU核上轮流运行。但是对于应用程序或者进程,其性能要求较高时,可能有必要绑定该进程到指定的CPU核来运行,避免调度带来的额外开销。我自己也是因为最近的项目上有需要进程运行在指定的CPU核上的要求,所以了解了一下这项技术,并且将过程和总结记录于此。...

2020-01-07 14:21:18 887

原创 使用boost处理xml和json

前言由于工作需要,后面可能会处理xml和json相关的数据。因此在前期就需要确定采用哪种库来处理两种数据格式的文件。考虑到跨平台和库的流行程度,最终选择使用boost库来处理这两种文件,下面我就记录一下我在windows和linux两种环境下搭建boost库环境以及简单测试一下boost库如何处理这两种文件的。搭建boost环境1.到boost官网上下载boost源码: http://www...

2020-01-02 17:21:13 473 1

原创 c++智能指针之auto_ptr详解(有源码有实例)

前言内存泄漏大概是每一个c/c++程序员最深恶痛绝的问题,因为大部分此类问题都是令广大c程序员很抓狂,掉头发的疑难杂症。而内存泄漏的根本原因就是指针的使用不当引起的,例如指针指向的内存没有释放,导致产生了程序无法控制的内存块,而随着程序不断执行,这样的内存越积越多,最终导致程序使用的内存空间不够导致宕机等一些严重的后果。为了解决这种让人讨厌的问题,c++提供了一系列的智能指针例如auto_ptr...

2019-12-26 14:44:31 641

原创 c++设计模式之装饰模式

前言装饰,顾名思义,就是对现有的物件进行优化,比如加一些好看的物件等等。例如拍出来的照片需要进行美化,刚建好的房子需要装修等等。在软件设计中,有时候也需要对现有的类进行“装饰”,以满足客户的要求。装饰模式的定义装饰模式:指在不改变现有对象结构的情况下,动态地给该对象增加一些职责(即增加其额外功能)的模式,它属于对象结构型模式。装饰模式能够实现动态的为对象添加新的功能,并且是从类的外部来增加...

2019-12-19 19:55:42 180

原创 c++设计模式之适配器模式

前言在生活中,经常出现因为两个对象的接口不兼容而不能一起工作的情况。例如中国人和美国人进行交流,就需要一个翻译;还有家用的220V电压在给一些电器如手机,电脑等进行充电时就需要电源适配器,还有一台电脑要读取一张sd卡的数据也需要将sd卡先插在读卡器上,再插在电脑上才能读取数据,这些都是因为两个对象之间的接口不兼容,所以需要一个适配者来使他们能够一起工作,在软件设计中依旧如此。当软件设计中出现这种...

2019-12-18 20:01:36 134

原创 makefile的使用总结(一)

概述什么是makefile?或许也有许多的程序员不知道是什么是makefile,特别是windows上开发的程序员对此应该是了解的更少了。但是我觉得作为一个合格的程序员特别是linux环境下开发的程序员,是不能不掌握makefile的。想必许多unix程序员在编译小型程序或者测试程序都写过类似 g++ test.c -o test这样的编译命令吧。但是在大型工程,特别是包含了许多源文件的时候,...

2019-12-17 13:59:30 406

原创 c++隐式类类型转换和explicit关键字详解

前言关于c++中的隐式类型转换,一种是内置数据类型的转换,还有一种就是自定义数据类型的转换,例如类。下面我们来详细探讨一下c++中隐式类类型转换。在c++prime中有:可以用单个形参来调用的构造函数都定义了从形参类型到类类型的隐式转换。在这里需要特别注意用单个形参来调用的构造函数并不是一定只有一个参数,它可以有多个参数,但是这些形参都是有默认值的。下面会通过几个例子把这两种形式(构造函数只有...

2019-12-16 10:46:15 257

原创 c++设计模式之代理模式

前言在某些情况下,客户不能或者不想直接访问一个对象时,可以通过寻找一个中介来帮他完成访问对象的任务。例如自己不愿意去上课时,可以找一个人A代替你去上课,A就扮演了代理者的角色。在软件设计中,代理模式的使用也是为了完成这样的一种机制。代理模式的定义由于某些原因需要给某对象提供一个代理以控制对该对象的访问。这时,访问对象不适合或者不能直接引用目标对象,代理对象作为访问对象和目标对象之间的中介。...

2019-12-12 18:24:57 180

原创 c++设计模式之观察者模式

前言观察者模式是使用频率最高最常用的模式之一,观察者模式要解决的问题为:建立一个一( Subject)对多( Observer) 的依赖关系, 并且做到当“一” 变化的时候, 依赖这个“一”的多也能够同步改变。模式的定义和特点观察者(Observer)模式的定义:指多个对象间存在一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。这种模式有时又称作发布-订...

2019-12-09 20:10:25 105

原创 c++单例模式与线程安全(二)

前言上一篇文章中(c++单例模式与线程安全(一)),简单的介绍了单例模式的概念以及两种实现方式(懒汉和饿汉)。这里首先回顾一下懒汉和饿汉的概念。懒汉:在第一次使用时创建实例。饿汉:在类加载时创建实例。线程安全分析试想一下,如果有多线程的情况下,两种单例模式是否安全?是否会出现创建多个实例的情况呢?下面先来看一下饿汉方式的单例模式,在此之前,我再把饿汉方式的实现代码拷贝过来,有助于分析。...

2019-12-06 14:46:19 133

原创 c++单例模式与线程安全(一)

1.什么是单例模式单例模式是设计模式中的一种,也是最常用和简单的设计模式之一。单例模式,顾名思义,它是为了保证一个类只能有一个实例或者说该类只能被实例化一次。标准的定义如下:单例模式确保一个类只有一个实例,并且自行实例化向整个系统。单例类提供了全局的访问点。2.单例模式的实现假设我们有一个配置文件类,提供了read配置文件,set配置文件等方法,但是系统中只需要一个配置文件,该类只需要实例...

2019-12-03 17:15:27 219

原创 c++设计模式之工厂模式

前言工厂模式是23种设计模式中用的频率比较高,同时也是较为简单的模式。工厂模式,顾名思义,是一种创建型的模式,其实现方式有三种,分别是简单工厂模式,工厂方法模式和抽象工厂方法。简单工厂简单工厂模式又称静态工厂方法模式,是最简单的一种工厂模式。简单工厂模式是通过传入参数给工厂对象,指定创建某一种产品实例。简单工厂模式的UML图如下:接下来看一个例子,以生产电脑为例,假设有一个工厂可以生产联...

2019-11-30 13:03:32 94

原创 c++ lambda 看这篇就够了!(有点详细)

前言lambda表达式是C++11新特性之一,下面一起来看一下lambda表达式。先来看一个例子,假设有一个整数列表,我们希望统计一下其中有多少个整数可以被7整除。第一种方案,我们先采用普通函数的形式来实现。我们使用vector来存储数字,使用generate()来往vector中填充随机数。 这里介绍一下generate()的用法,该函数接受一个区间,由前两个参数指定,并将区间中的每个元素...

2019-11-29 14:57:45 30078 12

原创 浮点数和十六进制数的转换

前言浮点数和十六进制或者二进制转换的问题,以前没有关注过这类问题,没想到最近在工作当中遇到了,先记录一波。出现该问题的原因定义了一个unsigned int类型的指针,然后指向了一块由mmap映射上来的虚拟地址,然而后续我往地址写入的值是float类型的,一开始没有注意到指针和传入的值类型是不同的,所以一直找不到问题出在哪里。后来通过检测寄存器相应地址的数值,才发现自己用unsigned in...

2019-11-26 20:27:50 5752

原创 c++基本排序之插入排序

1.插入排序简介插入排序是一种比较直观简单的排序方法,同时也是基于比较方法的排序。插入排序有点类似于打扑克时给扑克排序的方法,每一次摸完牌都会从后往前逐个比较手上的牌和摸到牌的大小,直到找到合适的位置就把摸到的牌插入。插入排序的工作原理也是如此。在进行插入排序时,我们也可以把元素区域分成有序区和无序区,每一次都把无序区的第一个元素从有序区的末尾由后往前比较,如果待排序的元素小于与之比较的元素,就...

2019-11-21 13:51:43 549

原创 c++经典排序之选择排序

选择排序(Selection sort)是一种简单直观的排序算法。它的工作原理是每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,直到全部待排序的数据元素排完。当使用选择排序时,可以看作是有一个无序区和一个有序区(即已经排好序的区域),刚开始所有的元素都位于无序区,第一次遍历找出所有元素中最小的元素,然后交换第一个元素和最小的元素的位置,此时有序区有一个最小元素,且位...

2019-11-19 11:56:34 800

原创 c++经典排序之冒泡排序算法

c++冒泡排序算法实现冒泡排序,是一种计算机科学领域的较简单的排序算法。它通过遍历要排序的元素,依次比较相邻元素的大小,如果前面的元素大于后面的元素,则交换两个元素的位置。因此,在第一趟遍历完成时,会把最大的元素排在最末尾,第二趟遍历完成时,会把次大的元素排在倒数第二位,依次类推直到要排序的元素以升序的方式排列。由于该过程类似于鱼吐的泡泡一样向上浮,所以冒泡排序也由此得名。接下来来看一下c++...

2019-11-18 19:21:31 2682 2

空空如也

空空如也

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

TA关注的人

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