自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 万能的makefile模板

############################################################### 简洁通用的Makefile文件(Ver 1.1)## Smart Makefile for general purpose (Ver 1.1)## Author: 汤 永康 Yongkang TANG <tangyk%at%gmail>## License: FreeBSD ## Please use this makefile at YOUR OWN R.

2020-08-16 17:29:47 233

原创 tools

VsCode插件:AstylePC-Linthttps://blog.csdn.net/dongwuming/article/details/49423909SublimeSource trail录屏:EV录屏OBS studio桌面:360安全桌面Maxlauncher查找:EverythingGrepwinWox笔记:Onenote画图:processon.com/表单:G...

2020-08-06 16:35:59 142

原创 libev学习

一. libev简介https://hottaro.com/index.php?mid=OpenSourceLib&document_srl=7957二.安装及运行https://www.cnblogs.com/charlesblc/p/6078802.html三.原理学习1.基于reactor模式: 线程池+事件驱动(基于I/O多路复用 reactor通过I/O多路复用机制, 监听多个事件处理器, 一旦该种事件发生, 调用对应的callbac...

2020-08-06 16:30:36 1241

原创 如何学习开源代码

!!!不要只盯着数据结构和算法steps:1.了解大致功能, 安装并运行example2.修改example并运行3.原理学习:(1)关键特性的实现原理(架构和设计文档等)(2)优缺点对比分析(3)在应用前进行测试4.看代码:(1)抓主干, 理清调用路径,可以通过调试进行, 可以画图, 记笔记等帮助理解记忆(2)挑选感兴趣的枝干阅读, 用了什么库,采用了什么设计模式,为什么这样做可以利用单元测试(3)改进代码5.总结...

2020-08-06 10:54:28 229

原创 C++ coding style

Google C++ stylehttps://zh-google-styleguide.readthedocs.io/en/latest/google-cpp-styleguide/

2020-04-30 22:02:18 147

原创 智能指针的使用

一、unique_ptrunique_ptr的模板参数是类型T和deletor,但deletor可以是默认的,默认实现用的是delete或delete[]初始化:a) auto p = std::make_unique(), C++14;b) std::unique_ptr<D[]> p{new D[3]};c) std::unique_ptr<D[]> p(...

2020-04-09 00:07:13 120

原创 C++primer 第十、十一、十二章

第十章 泛型算法泛型算法:标准库定义的可用于多种容器的通用算法,因为传入的是迭代器,所以不依赖于容器的类型,但依赖于具体的元素类型的操作。谓词lamda表达式:一般的谓词是一元谓词或二元谓词,如果想传递更多的参数,则没有办法。这时,可以用lamda表达式...

2020-02-15 11:33:29 95

原创 leetcode - 两数之和

给定一个整数数组 nums和一个目标值 target,请你在该数组中找出和为目标值的那两个整数,并返回他们的数组下标。你可以假设每种输入只会对应一个答案。但是,你不能重复利用这个数组中同样的元素。示例:给定 nums = [2, 7, 11, 15], target = 9因为 nums[0] + nums[1] = 2 + 7 = 9所以返回 [0, 1]来源:力扣(...

2020-02-10 22:09:29 69

原创 C++ primer 第八、九章

第八章 IO库iostreamio对象没有拷贝或赋值io流的状态:输出缓冲流的刷新:a) 程序正常结束,遇到main函数里的returnb)缓冲区满c)在输出语句后面使用endl,flush,ends文件的输入输出,使用fstreamstring 流: sstream...

2020-02-09 23:30:49 99

原创 C++ primer 第七章

第七章 类概括https://blog.csdn.net/jx232515/article/details/53027008类在编译时,先编译数据成员,然后才编译函数成员定义在类内的函数,隐式为inline的函数const成员函数a) this 指针是个class* const p型的常量指针,其指针的内容不能改变;类的const 对象, 其this指针是const cl...

2020-02-09 23:00:53 126

原创 define和typedef的区别

1.变量和变量别名的顺序相反#define myint inttypedef int yourint;define是预处理指令,只做简单的替换,后面不能有分号; typedef是C语言的关键字,是语句,后面要有分号;3....

2020-02-07 21:21:54 104

原创 C++推荐项目学习

https://www.cnblogs.com/haore147/p/3649183.htmlhttps://www.cnblogs.com/ukouryou/articles/3741352.html

2020-01-13 18:10:43 168

原创 C++primer 第四、五、六章

第四章 表达式1.左值和右值1)C语言:左值可以位于表达式的左侧,而右值不可以2)C++中,常量是左值;当对象用作右值时,用的是对象的内容,当对象用作左值时,用的是对象在内存中的位置。3)目前需要用到左值的地方:2.运算符优先级1)作用域::2)对象的访问.和->、下标访问、函数调用和构造()3)后置++、后置–、类型转换4)单目运算5)算术运算6)移位运算7)...

2020-01-13 17:40:47 139

原创 C++ primer 一、二、三章

第一章 开始1.在main函数中return 0 和 return -1的区别对程序执行来说,没有区别;0 和-1 最终以程序退出状态码返回,代表该程序执行是否有异常。该问题可以延伸到main函数是如何被执行的:fork()->execve()->_start启动例程->为main函数执行准备好argc、argv、envp等->调用main()->回到启动例...

2020-01-06 00:02:04 129

原创 信号

信号基本概念:https://blog.csdn.net/qq_38410730/article/details/81193118

2020-01-01 00:19:42 77

原创 进程

Linux进程的创建与管理https://blog.csdn.net/qq_38410730/article/details/81193118Linux 进程--父进程查询子进程的退出状态https://www.cnblogs.com/gwyy/p/8611398.html进程间通信:https://www.cnblogs.com/zgq0/p/8780893.html匿名...

2019-12-31 00:10:05 79

原创 跳越函数的setjmp和longjmp函数

https://blog.csdn.net/chenyiming_1990/article/details/8683413

2019-12-29 22:06:41 78

原创 线程池-条件变量

main.c#include "jobBase.h"#include "job.h"#include "myThreadPool.h"#include <stdio.h>#include <pthread.h>#include <unistd.h>using namespace std;using namespace ThreadPool;u...

2019-12-29 14:17:35 199

原创 修改虚拟机的IP地址

参考:https://www.cnblogs.com/brankoliu/p/10850059.html

2019-12-29 13:59:00 315

原创 win10调试linux

参考https://blog.csdn.net/mumufan05/article/details/80094637我的步骤:1.下载https://github.com/robotdad/vclinux2.将其拷贝到Linux解压3.为自己的代码写一个makefile,在网上找的通用模板,根据自己的编译选项稍作了修改##################################...

2019-12-28 15:16:25 169

原创 C++学习

1.虚函数表相关:https://coolshell.cn/articles/12165.html?utm_source=qq&utm_medium=social&utm_oi=550398354295799808https://coolshell.cn/articles/12176.html2.设计模式相关https://coolshell.cn/articles...

2019-03-20 17:03:44 76

转载 C语言类型隐式、强制转换

https://blog.csdn.net/qq_33416447/article/details/85529254在C语言是可以进行类型之间的转换且其中存在两种类型转换的方式强制类型转换隐式类型转换1.强制类型转换强制类型转换的语法(Type)var_name;(Type)value;(想转换的目标类型)变量名或具体数值强制类型转换的结果目标的类型能够容纳目标值...

2019-03-04 16:05:40 766

原创 Linux 常用命令

1.lsof:查看进程打开的文件信息选项命名:lsof -u 用户名lsof -c 程序名lsof -p 进程IDlsof -ilsof -i:端口号lsof -i tcplsof -i udp2.netstat命令用于显示与IP、TCP、UDP和ICMP协议相关的统计数据,一般用于检验本机各端口的网络连接情况。netstat是在内核中访问网络及相关信息的...

2019-03-03 12:07:15 87

转载 Navicat for MySQL 连接数据库、管理用户、创建数据库和表

Navicat for MySQL软件简介    Navicat for MySQL是一款强大的 MySQL 数据库管理和开发工具,它为专业开发者提供了一套强大的足够尖端的工具,但对于新用户仍然易于学习。Navicat for MySQL 基于Windows平台,为 MySQL 量身订作,提供类似于 MySQL 的用管理界面工具。此解决方案的出现,将解放 PHP、J2EE 等程序员以及数据库...

2019-01-15 13:52:14 17107

转载 数据库基础

mysql安装教程:https://www.cnblogs.com/caiyunyun/p/7492373.html(一)数据库操作1、创建数据库create database 数据库名;create database runoob;2、选择数据库use 数据库名;use runoob;3、删除数据库drop database 数据库名;drop da...

2019-01-14 18:44:43 91

原创 socket编程

一、字节序1.主机字节序:计算机硬件有两种储存数据的方式:大端字节序(big endian)和小端字节序(little endian)。举例来说,数值0x2211使用两个字节储存:高位字节是0x22,低位字节是0x11。大端字节序:高位字节在前,低位字节在后,这是人类读写数值的方法。 小端字节序:低位字节在前,高位字节在后,即以0x1122形式储存。计算机电路先处理低位字节,效...

2019-01-14 11:43:59 171

原创 高级I/O

阻塞I/O一般的I/O操作为阻塞I/O,比如read和write。阻塞的意思,就是在得不到数据或资源时一直等着,直到拿到了数据或资源。应用的函数如果不能被完成,长时间处于等待结果的状态,我们就称为阻塞I/O。这样会造成CPU空闲。非阻塞I/O非阻塞I / O是指,如果这种I/O操作不能完成,则立即出错返回,表示该操作如果继续执行将会阻塞。在出错返回后,进程或线程可以接着处理下...

2019-01-07 11:54:39 234 1

原创 终端I/O

1.终端I/O的工作方式CPU通过接口控制I/O设备。通常接口有以下一些功能:(1)设置数据的寄存、缓冲逻辑,以适应CPU与外设之间的速度差异,接口通常由一些寄存器或RAM芯片组成,如果芯片足够大还可以实现批量数据的传输;(2)能够进行信息格式的转换,例如串行和并行的转换;(3)能够协调CPU和外设两者在信息的类型和电平的差异,如电平转换驱动器、数/模或模/数转换器等;(4)...

2019-01-06 23:54:12 327

原创 errno、strerror与perror

全局变量errno经常在调用linux 系统api 的时候会出现一些错误,比方说使用open() write() creat()之类的函数有些时候会返回-1,也就是调用失败,这个时候往往需要知道失败的原因。这个时候使用errno这个全局变量就相当有用了。    在程序代码中包含 #include &lt;errno.h&gt;,然后每次程序调用失败的时候,系统会自动用用错误代码填充errno...

2019-01-06 23:24:05 151

转载 文件编码格式

ASCII编码:用来表示英文,它使用1个字节表示,其中第一位规定为0,其他7位存储数据,一共可以表示128个字符。拓展ASCII编码:用于表示更多的欧洲文字,用8个位存储数据,一共可以表示256个字符GBK/GB2312/GB18030:表示汉字。GBK/GB2312表示简体中文,GB18030表示繁体中文。Unicode编码:包含世界上所有的字符,是一个字符集。UTF-8:是Un...

2019-01-06 23:20:53 1920

原创 文件操作-系统调用与标准I/O库

1. 文件描述符与文件指针的关系文件描述符:每个进程的PCB里都有任务描述符表,任务描述符表其实是个数组,里面存放一个指针,指向已打开文件的file结构体,该结构体包含文件当前的位移量、打开模式、inode指针等信息。系统调用的操作对象为文件描述符。当开始运行程序时,也就是系统开始运行时,它一般会有三个已经打开的文件描述符。他们是: 0:标准输入 1:标准输出 ...

2019-01-06 23:18:24 811 3

转载 Linux文件系统

1.文件系统架构 硬盘驱动  常见的硬盘类型有PATA, SATA和AHCI等,在Linux系统中,对不同硬盘所提供的驱动模块一般都存放在内核目录树drivers/ata中,而对于一般通用的硬盘驱动,也许会直接被编译到内核中,而不会以模块的方式出现,可以通过查看/boot/config-xxx.xxx文件来确认 General Block Device Layer  这...

2019-01-04 17:33:28 120

转载 Linux常用的头文件及含义

博文地址:http://blog.csdn.net/wubin1124/archive/2009/12/09/4971359.aspx 首先说明几点:1 Linux内核所在目录为/usr/src/kernels/...2 Linux头文件所在目录为/usr/include/...3 找不见头文件可以用find命令查找 find / -name *.h POSIX标准定义...

2019-01-04 17:23:30 419

转载 linux文件夹作用

博文地址:https://www.cnblogs.com/yoke/p/7217019.html/根目录包含了几乎所的文件目录。相当于中央系统。进入的最简单方法是:cd /。/boot  引导程序,内核等存放的目录这个目录,包括了在引导过程中所必需的文件。在最开始的启动阶段,通过引导程序将内核加载到内存,完成内核的启动(这个时候,虚拟文件系统还不存在,加载的内核虽然是从硬盘读取的,...

2019-01-04 17:21:42 79

原创 操作系统-处理机管理

一、作业、进程、与线程作业:是指用户交给计算机的一个任务,计算机会将它放入作业队列进程:程序在特定数据集上的一次执行,CPU会为它分配4G的虚拟内存空间,进程是CPU分配内存的最小单位;多个进程协作完成一个作业线程:分配CPU时间片的最小单位,多个线程协作完成一个进程二、CPU调度高级调度:作业调度,将作业相关的程序和文件由磁盘调入内存,并为它们创建进程、分配资源中级调度:...

2019-01-02 20:02:31 607

原创 浅谈对数据结构的理解

一、什么是数据结构数据结构研究的是数据对象的存储方式和组织方式。存储方式即存储结构,组织方式即逻辑结构。二、存储结构(一般顺序存储和链式存储比较常用)顺序存储:数组方式,连续存储链式存储:链表方式,分散存储索引存储:索引表key:address方式散列存储:哈希表方式,address=f(key)三、逻辑结构(同一个逻辑结构,有多种存储方式,一般都对应顺序存储和链式存储...

2019-01-02 19:35:43 1722

原创 C语言-多线程与内存池、多线程与队列、多线程与内存池与队列的结合使用

一、多线程与内存池的结合使用:一个线程memorymalloc,另一个线程memoryfree,效率是malloc\free的1.3倍(单线程时是3倍,本来双线程应该是6倍,但因为使用了线程的同步,使线程地并发变为了串行,故效率也应是3倍,又线程切换时会遇到阻塞的情况、再加上切换时的消耗,最后得到1.3)#include &lt;stdio.h&gt;#include &lt;pthr...

2019-01-02 19:16:22 1570

原创 C语言-linux多线程编程

线程共享进程的资源(代码段、数据段、堆、核心段),线程也有自己的独立资源:TCB,线程id,寄存器,栈等;线程分为用户级线程和内核级线程,每个用户级线程都绑定一个内核级线程; 一、多线程的基本函数头文件:pthread.h数据类型:pthread_t(typedef unsigned long int pthread_t;)常用函数:1. 获取线程自身ID。pth...

2019-01-02 18:42:57 2665

原创 C语言——指针和数组地址、链表和数组的区别

1.指针和数组地址的区别:指针是一个变量,存储的是相应数据类型的地址;数组地址是一个地址常量;所以,指针可以进行增量运算,而数组名(指向该数组的地址,即数组首元素的地址)不可以进行增量运算;但在函数传参时,情况有所变化,将一个数组传入函数,函数会将形参的数组名退化成一个指针,此时,在函数内,数组名可以进行增量运算。2.链表和数组的区别:数组的优点:随机访问性强       ...

2018-12-28 14:11:25 921

原创 C语言——栈与队列的实现

栈与队列都是受限的线性表,均可以通过顺序表(数组)和链表两种方式得到实现。只不过栈是FILO,队列是FIFO,即栈和队列在出和入的方式上有所不同。而通过数组和链表实现的区别,即为数组与链表本身的区别:数组的存储空间是连续的,不可动态扩展;链表的存储空间是不连续的,可以动态扩展。下面具体来说。一、栈的实现:栈有栈底和栈顶,栈底是固定的,栈顶指向栈最顶上的第一个数据;数据的入栈和出栈只能在栈顶...

2018-12-28 13:43:29 2922 1

空空如也

空空如也

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

TA关注的人

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