自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 yocto从概念安装到应用

yocto从概念安装到应用一、yocto的功能及组成yocto是一个开源项目,该项目旨在帮助我们自定义linux系统。它只是一个构建环境,可以通过yocto编译出image,image就是你要烧录到板卡硬件的可执行程序;也可以不用yocto,就用Makefile构建也是一样的,只是选择的构建方法不同而已,最终目的都是得到image。使用该项目的原因(优点):该项目提供模板、工具和方法帮助我们创建定制的linux系统的嵌入式产品,而无需关心硬件体系,适合嵌入式开发人员使用,极大地简化了开发的过程,因为不

2020-08-25 16:13:45 1920

原创 C语言实现不同类型传入一个类型参数,分别以相应的不同类型以同一个参数输出

enum type{ CHAR, UCHAR, INT, UINT};int man(){ unsigned int data = 0;//data的类型可以随意指定 InFunction(INT,&data);//输入类型,转化为自己想要的类型 OutFunction(UINT,(void *)&data);//根据自己想要的类型输出 printf("%u\n",data);}void OutFunction(enum type,void* data){

2020-08-14 10:12:25 2014 1

原创 vs控制台一闪而过

修改项目配置,右键点击项目,在右键菜单中选择属性,然后在弹出的对话框左侧列表中中选择“配置属性”–>“链接器”–>“系统”,然后在右侧的列表中,在第一项”子系统“的值中选择”控制台(/SUBSUSTEM:CONSOLE)...

2020-07-27 17:32:56 277

转载 Cmake知识----编写CMakeLists.txt文件编译C/C++程序

1.CMake编译原理CMake是一种跨平台编译工具,比make更为高级,使用起来要方便得多。CMake主要是编写CMakeLists.txt文件,然后用cmake命令将CMakeLists.txt文件转化为make所需要的makefile文件,最后用make命令编译源码生成可执行程序或共享库(so(shared object))。因此CMake的编译基本就两个步骤:1. cmake2. makecmake 指向CMakeLists.txt所在的目录,例如cmake … 表示CMakeLists

2020-07-27 14:36:20 227

转载 Linux 下cmake生成SO库的使用实例

1、创建我的共享库:MysharedLibCMakeLists.txtcmake_minimum_required(VERSION 2.8)project(MySharedLib)# C++11 编译set(CMAKE_CXX_STANDARD 11)#创建共享库add_library(MySharedLib SHARED library.cpp library.h)library.h#ifndef MYSHAREDLIB_LIBRARY_H#define MYSHAREDLIB_LI

2020-07-15 10:06:59 622 1

转载 GDB调试时,出现value optimized out的解决办法小结

原因在于在对代码进行编译的时候默认开启了-O2选项,解决方法;1.单个C/C++文件进行编译时,可直接将-o更改为-O0,即编译时不进行优化;2.工程文件MakeFile中,可添加如下标签:C optimization flagsCOPT =-O0 -funroll-loops3.利用Cmake进行编译时,在cmakelist中修改如下:Add -O0 to remove optimizations when using gccIF(CMAKE_COMPILER_IS_GNUCC)set(C

2020-05-29 20:29:28 1626

原创 gcc、g++、cmake支持编译C++11的问题

gcc、g++编译第一种,直接包含在源程序文件中,如第一行代码所示#pragma GCC diagnostic error "-std=c++11"#include <iostream>using namespace std;int main(int argc,char **argv){ cout<<"hello world!"<<endl; auto i=10; cout<<i<<endl; retur

2020-05-25 15:09:11 327

转载 一致性哈希

前言伴随着系统流量的增大,出现了应用集群。在 Redis 中为了保证 Redis 的高可用也为 Redis 搭建了集群对数据进行分槽存放。在 Mysql数据库要存储的量达到一个很高的地步的时候,我们会对数据库进行分库分表操作。OK,到这儿先假设我们不知道什么是集群、什么是分库分表,我们先来看一个数据库水平切分演变的例子:假设我们的系统中有一张会员表 customer_info, 我们的系统刚开始无人问津,我们在一个单个的数据库中放这张表,所有的会员记录都插入到这个数据库的这张表中,这没什么问题,是一个很

2020-05-23 16:49:02 190

转载 深入Protobuf

何为 ProtoBuf我们先来看看官方文档给出的定义和描述:protocol buffers 是一种语言无关、平台无关、可扩展的序列化结构数据的方法,它可用于(数据)通信协议、数据存储等。Protocol Buffers 是一种灵活,高效,自动化机制的结构数据序列化方法-可类比 XML,但是比 XML 更小(3 ~ 10倍)、更快(20 ~ 100倍)、更为简单。你可以定义数据的结构,然后使用特殊生成的源代码轻松的在各种数据流中使用各种语言进行编写和读取结构数据。你甚至可以更新数据结构,而不破坏由旧

2020-05-21 00:28:29 145

原创 Tinyhttpd详解

本文先从TCP套接字讲起,其次回顾http报文,最后将tinyhttp的源代码进行解析第一部分 Linux网络编程:TCP socket套接字详解标识通信端点(对外):IP地址+端口号操作系统/进程如何管理套接字(对内):套接字描述符一个进程中的多线程对一个套接字的使用无计数基本概念1.socketsocket这个词可以表示很多概念: 在TCP/IP协议中,“IP地址+TCP或UDP端口号”唯一标识网络通讯中的一个进程,“IP地址+端口号”就称为socket。在TCP协议中,建立连接的两个

2020-05-18 18:01:22 1487

转载 计算机网络——socket编程

“一切皆Socket!” 话虽些许夸张,但是事实也是,现在的网络编程几乎都是用的socket。 ——有感于实际编程和开源项目研究。我们深谙信息交流的价值,那网络中进程之间如何通信,如我们每天打开浏览器浏览网页时,浏览器的进程怎么与web服务器通信的?当你用QQ聊天时,QQ进程怎么与服务器或你好友所在的QQ进程通信?这些都得靠socket?那什么是socket?socket的类型有哪些?还有socket的基本函数,这些都是本文想

2020-05-18 17:36:22 556

转载 redis全面解析【转】

什么是Redis?Redis 是开源免费的,遵守BSD协议,是一个高性能的key-value非关系型数据库。redis单线程问题所谓的单线程指的是网络请求模块使用了一个线程(所以不需考虑并发安全性),即一个线程处理所有网络请求,其他模块仍用了多个线程。redis采用多路复用机制:即多个网络socket复用一个io线程,实际是单个线程通过记录跟踪每一个Sock(I/O流)的状态来同时管理多个I/O流.Redis特点:Redis支持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候可以再次加载

2020-05-17 22:06:10 126

原创 单线程I/O多路复用

最近用到redis中间件,稍微了解了一下,发现redis采用多路复用机制。趁此机会,复习一下单线程的I/O多路复用。顺便扩展一下同步和异步,阻塞和非阻塞同步和异步的概念描述的是用户线程与内核的交互方式:同步是指用户线程发起IO请求后需要等待或者轮询内核IO操作完成后才能继续执行;而异步是指用户线程发起IO请求后仍继续执行,当内核IO操作完成后会通知用户线程,或者调用用户线程注册的回调函数。阻塞和非阻塞的概念描述的是用户线程调用内核IO操作的方式:阻塞是指IO操作需要彻底完成后才返回到用户空间;而非阻塞是

2020-05-17 21:41:53 2406

转载 C++语法——std::function 使用

function的使用这是c++11新添加的,头文件#include <functional>简单而言就是一个函数包装器,一个通用函数类型用法:function<int(int, int)> 里面传入的是返回值 和参数列表将其当做std::string 、std::vector<> 、这样的类型就可以了。只不过其值为函数指针,但比函数指针更灵活。因为std::function 是一种模板,所以要传入类型,就如std::vector<int>

2020-05-15 21:43:00 1190

转载 mysql的事务四个特性以及事务的四个隔离级别

一、事务四大属性分别是原子性、一致性、隔离性、持久性。1、原子性(Atomicity)原子性是指事务包含的所有操作要么全部成功,要么全部失败回滚,因此事务的操作如果成功就必须要完全应用到数据库,如果操作失败则不能对数据库有任何影响。2、一致性(Consistency)一致性是指事务必须使数据库从一个一致性状态变换到另一个一致性状态,也就是说一个事务执行之前和执行之后都必须处于一致性状态。举例来说,假设用户A和用户B两者的钱加起来一共是1000,那么不管A和B之间如何转账、转几次账,事务结束后两个用

2020-05-15 19:32:57 117

转载 设置mysql默认编码为utf8

Centos7.5:修改/etc/my.cnf配置文件,在[mysqld]下添加编码配置,即下图红框部分;保存、退出、重启mysqlvim /etc/my.cnf[mysqld]下添加character_set_server=utf8init_connect='SET NAMES utf8'systemctl restart mysqldUbuntu16.04::修改/etc/mysql/mysql.conf.d/mysqld.cnf配置文件,在[mysqld]下添加编码配置,即下图红框

2020-05-13 18:24:11 319

原创 数据库——三大范式

一、第一范式1NF是对属性的原子性,要求属性具有原子性,不可再分解;表:字段1、 字段2(字段2.1、字段2.2)、字段3 ......如学生(学号,姓名,性别,出生年月日),如果认为最后一列还可以再分成(出生年,出生月,出生日),它就不是一范式了,否则就是;通俗来说:字段能否被拆分。方法:拆字段二、第二范式2NF是对记录的惟一性,要求记录有惟一标识,即实体的惟一性,即不存在部分依赖;必须在满足第一范式的前提下,第二范式要求,除主键外的每一列都必须完全依赖于主键表:学号、课程号、姓名、学分

2020-05-13 15:02:21 126

转载 信号SIGINT

SIGINT信号:程序终止(interrupt)信号, 在用户键入INTR字符(通常是Ctrl-C)时发出,用于通知前台进程组终止进程。例子1:#include <stdio.h>#include <signal.h>#include <stdlib.h> void sig_int(int signo){ printf("sig_int\n"); //exit(0);} int main(int argc, char *argv[])

2020-05-10 16:01:18 431

转载 C++ lock_guard 互斥锁

概述根据对象的析构函数自动调用的原理,c++11推出了std::lock_guard自动释放锁,其原理是:声明一个局部的lock_guard对象,在其构造函数中进行加锁,在其析构函数中进行解锁。最终的结果就是:在定义该局部对象的时候加锁(调用构造函数),出了该对象作用域的时候解锁(调用析构函数)。使用方法1.首先需要包含mutex头文件2.然后创建一个锁 std::mutex mutex3.在需要被加锁的作用域内 将mutex传入到创建的std::lock_guard局部对象中#include

2020-05-09 18:02:07 372

转载 C++语法——创建vector<T>容器

vector<T> 容器是包含 T 类型元素的序列容器,和 array<T,N> 容器相似,不同的是 vector<T> 容器的大小可以自动增长,从而可以包含任意数量的元素;因此类型参数 T 不再需要模板参数 N。只要元素个数超出 vector 当前容量,就会自动分配更多的空间。只能在容器尾部高效地删除或添加元素。vector<T> 容器可以方便、...

2020-05-07 23:37:40 1224

原创 编译环境——CMake构建集成环境

CMake是一个跨平台的安装(编译)工具,可以用简单的语句来描述所有平台的安装(编译过程)。他能够输出各种各样的makefile或者project文件,能测试编译器所支持的C++特性,类似UNIX下的automake。下面举例一个简单的cpp文件,用cmake来构建编译环境。假如有一个机遇muduo库的服务器cpp文件,如果要运行该文件。我们可以在linux终端执行下面语句g++ -o se...

2020-05-07 14:32:58 261

原创 muduo网络库服务器编程

muduo库介绍muduo是一个高质量的事件驱动型的网络库,其核心代码不超过4500行,使用的non-blocking IO(IO multiplexing)+ one loop perthread模型。此模型每个IO线程里面只有一个事件循环(即一个Reactor),处理读写和定时事件,激活的事件通过回调方式提供用户处理业务逻辑。在linux下的话,可以把事件当做一个文件描述符,换句话也就是说...

2020-05-06 22:38:09 333

转载 C++语法——bind函数

bind函数的使用详解可以将bind函数看作是一个通用的函数适配器,它接受一个可调用对象,生成一个新的可调用对象来“适应”原对象的参数列表。调用bind的一般形式:auto newCallable = bind(callable,arg_list);`其中,newCallable本身是一个可调用对象,arg_list是一个逗号分隔的参数列表,对应给定的callable的参数。即,当我们调用n...

2020-05-05 23:22:13 161

转载 epoll原理详解及epoll反应堆模型

背景设想一个场景:有100万用户同时与一个进程保持着TCP连接,而每一时刻只有几十个或几百个TCP连接是活跃的(接收TCP包),也就是说在每一时刻进程只需要处理这100万连接中的一小部分连接。那么,如何才能高效的处理这种场景呢?进程是否在每次询问操作系统收集有事件发生的TCP连接时,把这100万个连接告诉操作系统,然后由操作系统找出其中有事件发生的几百个连接呢?实际上,在Linux2.4版本以前...

2020-05-04 21:47:32 135

原创 json概述(序列化与反序列化)

什么是jsonJSON (JavaScript Object Notation, JS 对象标记) 是一种轻量级的数据交换格式。它基于 ECMAScript (w3c制定的js规范)的一个子集,采用完全独立于编程语言的文本格式来存储和表示数据。简洁和清晰的层次结构使得 JSON 成为理想的数据交换语言。 易于人阅读和编写,同时也易于机器解析和生成,并有效地提升网络传输效率。——百度百科数据传输...

2020-05-04 20:31:39 560

原创 算法——树的几种遍历

深度遍历(递归) int depth(TreeNode* pRoot) { if (pRoot==nullptr) return 0; return max(1+depth(pRoot->left),1+depth(pRoot->right)); }

2020-05-02 17:46:32 233

原创 算法——几个经典排序算法

归并排序归并排序是利用"归并"技术来进行排序。归并是指将若干个已排序的子文件合并成一个有序的文件。特点:最差时间复杂度:O(nlogn)平均时间复杂度:O(nlogn)最差空间复杂度:O(n)稳定性:稳定算法步骤:1.申请两个与已经排序序列相同大小的空间,并将两个序列拷贝其中;2.设定最初位置分别为两个已经拷贝排序序列的起始位置,比较两个序列元素的大小,依次选择相对小的元素放到原...

2020-05-02 11:20:36 156

转载 操作系统——管程

一、 管程的概念管程可以看做一个软件模块,它是将共享的变量和对于这些共享变量的操作封装起来,形成一个具有一定接口的功能模块,进程可以调用管程来实现进程级别的并发控制。进程只能互斥得使用管程,即当一个进程使用管程时,另一个进程必须等待。当一个进程使用完管程后,它必须释放管程并唤醒等待管程的某一个进程。在管程入口处的等待队列称为入口等待队列,由于进程会执行唤醒操作,因此可能有...

2020-04-28 12:00:30 1479

原创 信号的同步互斥——五个经典问题

单生产者和单消费者问题描述:有两个进程:一组生产者进程和一组消费者进程共享一个初始为空、固定大小为n的缓存(缓冲区)。生产者的工作是制造一段数据,只有缓冲区没满时,生产者才能把消息放入到缓冲区,否则必须等待,如此反复; 同时,只有缓冲区不空时,消费者才能从中取出消息,一次消费一段数据(即将其从缓存中移出),否则必须等待。由于缓冲区是临界资源,它只允许一个生产者放入消息,或者一个消费者从中取出消...

2020-04-28 11:56:55 1536

转载 操作系统——死锁、饥饿、死循环的区别

区别死锁饥饿死循环概念各进程相互等待对方手里的资源。导致各进程都阻塞,无法向前推进的现象。由于长期得不到想要的资源,某进程无法向前推进的现象。某个进程执行过程中,一直跳不出某个循环的现象。不同处1.一定是循环等待对方手里的资源导致的 2.至少有2个或2个以上进程同时发生 3.进程处于阻塞态4.操作系统分配资源的策略不合理导致5.是管理者(操...

2020-04-27 23:40:04 2080

翻译 操作系统——进程互斥的软硬件实现方法

目录一、进程同步互斥的基本概念1、临界资源2、同步3、互斥二、进程互斥的硬件软件实现方法一、进程同步互斥的基本概念1、临界资源我们把一个时间段只允许一个进程使用的资源称为临界资源。例如许多物理设备(摄像头,打印机)都属于临界资源。此外还有许多变量、数据、内存缓冲区等都属于临界资源。对临界资源的访问,必须互斥地进行,在每个进程,访问临界资源的那段代码称为临界区为了保证临界资源的正确使用,分...

2020-04-27 16:42:50 547

转载 操作系统——进程同步互斥之信号量机制

0、信号量机制信息量其实就是一个变量(一个整数,也可以是更复杂的记录变量),可以用一个信号量表示系统中某种资源的数量。比如:系统中只有一台打印机,就可以设置为1的信号量用户进程可以通过使用操作系统提供的一对原语来对信号量进行操作,从而实现进程互斥,进程同步一对原语:wait(s) 和 signal(s) 简称P、V 操作(来自荷兰语proberen,verhogen)**原语:**是一种...

2020-04-27 16:18:26 1600

转载 操作系统——进程调度的几种算法

目录01. 进程调度算法概述02. 先来先服务调度算法03. 时间片轮转调度法04. 短作业(SJF)优先调度算法05. 最短剩余时间优先06. 高响应比优先调度算法07. 优先级调度算法08 多级反馈队列调度算法01. 进程调度算法概述调度算法是指:根据系统的资源分配策略所规定的资源分配算法02. 先来先服务调度算法​ 先来先服务调度算法是一种最简单的调度算法,也称为先进先出或严格排队方...

2020-04-27 16:08:57 3685

转载 操作系统——三级调度(作业、内存、进程)【转】

文章目录调度调度的基本概念高级调度 (外存 --> 内存)中级调度 (外存 --> 内存)低级调度 (内存 --> CPU)总结调度调度的基本概念调度研究的问题:当有一堆任务要处理,但由于资源有限,这些事情没法同时处理。这就需要确定某种规则来决定处理这些任务的顺序,这就是调度研究的问题。举个有味道的例子:现在有4个人要上厕所(他们几乎同时到达),他们分别需要使用厕所3分...

2020-04-25 15:04:29 12371 8

原创 操作系统——进程与线程

进程进程的概念进程:是动态的,是程序的一次执行过程。区分于程序的概念。程序:是静态的,就是一个存放在磁盘里的可执行文件,就是一系列的指令集合。进程的组成PCB(进程控制块)程序段数据段PCB:是进程存在的唯一标志,操作系统为其创建PCB,当进程结束时,会回收PCB。(进程描述信息、进程控制和管理信息、资源分配清单、处理机相关信息)**程序段:**程序的代码**数据段:**...

2020-04-21 20:10:02 145

原创 操作系统——中断异常、系统调用

操作系统——中断异常、系统调用前言中断和异常中断和异常的作用中断和异常的区别中断和异常的处理系统调用系统调用的作用系统调用的过程前言操作系统概念:负责管理协调硬件、软件等计算机资源的工作,为上层用户、应用程序提供简单易用的服务的系统软件给普通用户服务:GUI图形界面、命令接口(联机命令、脱机命令)给程序员/软件:程序接口(系统调用)操作系统的特征:并发:两个或多个事件在同一时间间隔...

2020-04-21 10:10:52 490

原创 mhd四视图显示 vtk+Qt

VTK+Qt读取mhd文件 可以进行四视图显示,并且拖动平面可以动态显示在窗口cpp文件的源代码:#include “vtkmainwindow.h”#include “ui_vtkmainwindow.h”//VTK#include “vtkSmartPointer.h”#include “vtkXMLPolyDataReader.h”#include “vtkPolyDataM...

2019-08-25 14:19:09 1506 2

空空如也

空空如也

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

TA关注的人

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