自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(704)
  • 资源 (4)
  • 收藏
  • 关注

原创 (C++通讯架构学习笔记):TCP三次握手、telnet,wireshark使用简介

TCP连接的三次握手tcp:可靠的,面向连接的协议 udp:不可靠的,无连接的协议 只有TCP有三次握手【UDP没有】【最大传输单元MTU】MTU(Maximum Transfer Unit):最大传输单元。 MTU:每个数据包包含的数据最多可以有多少个字节,1.5K左右。 你要发送100K,操作系统内部会把你这100K数据拆分成若干个数据包【分片】,每个数据包大概1.5K之内【大概拆解成68个包】,对端进行重组。 我们只需要知道有 拆包,组包。 这68个包各自传送的路径可能不同...

2020-11-24 19:47:45 3

原创 (C++通讯架构学习笔记):TCP和UDP的区别、简单的客户端服务器程序演示

目录TCP和UDP的区别客户端服务器程序综合演示和调用流程图TCP和UDP的区别TCP协议:可靠的面向连接的协议;数据包丢失的话操作系统底层会感知并且帮助你重新发送数据包。 UDP协议:不可靠的,无连接的协议。 优缺点: tcp:可靠协议,必然要耗费更多的系统资源确保数据传输的可靠。 得到好处就是只要不断线,传输给对方的数据,一定正确的,不丢失,不重复,按顺序到达对端。 udp:不可靠协议;发送速度特别快;但无法确保数据可靠性。 各自的用途: tcp:文件传

2020-11-24 17:27:30 5

原创 (C++通讯架构学习笔记):守护进程及信号处理实战

目录守护进程功能的实现信号处理函数的进一步完善守护进程功能的实现配置文件设置(1)拦截掉SIGHUP,那么终端窗口关闭,进程就不会跟着关闭。 (2)守护进程,一运行就在后台,不会占着终端。 创建守护进程ngx_daemon()。 调用ngx_daemon()的时机: worker()子进程创建之前。【ngx_daemon()函数】int ngx_daemon(){ switch (fork()) { case -1:

2020-11-24 16:46:15 4

原创 (C++通讯架构学习笔记):信号,子进程实战,文件IO详谈

目录信号功能实战nginx中创建worker子进程日志输出重要信息谈write()函数思考掉电导致write()的数据丢失破解法信号功能实战signal():注册信号处理程序的函数 实际开发中,不用signal(),而要用sigaction()【signal/ngx_signal.cxx】#include <string.h>#include <stdint.h>#include <stdio.h>#include <st

2020-11-24 14:33:51 17

原创 (C++通讯架构学习笔记):日志打印、优化main函数调用顺序

目录基础设施之日志打印设置时区日志等级划分捋顺main函数中代码执行顺序基础设施之日志打印日志的重要性:供日后运行维护人员去查看、定位和解决问题 ngx_printf.cxx:放和打印格式相关的函数 ngx_log.cxx:放和日志相关的函数【ngx_log_stderr() 】ngx_log_stderr() :三个特殊文件描述符,谈到了标准错误 STDERR_FILENO,代表屏幕 ngx_log_stderr():往屏幕上打印一条错误信息,功能类似于pri..

2020-11-24 00:51:27 110

原创 (C++通讯架构学习笔记):读配置文件、查泄漏、设置标题实战

基础设施之配置文件读取使用配置文件,使我们的服务器程序有了极大的灵活性(比如修改端口号),是我们作为服务器程序开发者,必须要首先搞定的问题。 配置文件:文本文件,里边除了注释行之外不要用中文,只在配置文件中使用字母,数字下划线。 以#号开头的行作为注释行(注释行可以有中文)。 我们这个框架(项目),第一个要解决的问题是读取配置文件中的配置项(读到内存中来)。 【配置文件读取功能实战代码】写代码要多顾及别人感受,让别人更容易读懂和理解,不要刻意去炫技。 该缩进的必须要缩进,该...

2020-11-23 19:06:15 52

原创 (C++通讯架构学习笔记):服务器程序目录规划、makefile编写

信号高级认识范例【示例 】#include <stdio.h>#include <stdlib.h>#include <unistd.h>#include <signal.h>#include <errno.h>//信号处理函数void sig_usr(int signo){ if(signo == SIGUSR1) { printf("收到了SIGUSR1信号,我休息10

2020-11-23 14:15:22 22

原创 (C++通讯架构学习笔记):守护进程详解、nginx守护进程代码模板

目录普通进程运行观察守护进程基本概念守护进程编写规则nginx守护进程代码模板守护进程不会收到的信号普通进程运行观察【引例】#include <stdio.h>#include <stdlib.h> //malloc#include <unistd.h>#include <signal.h>int main(int argc, char *const *argv){ printf("进程开始执行

2020-11-22 23:34:33 14

原创 (C++通讯架构学习笔记):fork函数详解、范例演示

目录fork()函数简单认识僵尸进程的产生、解决,SIGCHLDfork()函数进一步认识完善一下fork()代码fork()失败的可能性fork()函数简单认识创建进程 进程的概念:一个可执行程序,执行起来就是一个进程,再执行起来一次,它就又是一个进程(多个进程可以共享同一个可执行文件)。 文雅说法:进程 定义为程序执行的一个实例。 在一个进程(程序)中,可以用fork()创建一个子进程,当该子进程创建时,它从fork()指令的下一条(或者说从fork().

2020-11-22 21:01:51 15

原创 (C++通讯架构学习笔记):信号编程进阶、sigprocmask范例

信号编程进阶、sigprocmask范例【信号集】一个进程,必须能够记住 这个进程 当前阻塞了哪些信号 我们需要 “信号集 ”的这么一种数据类型(结构),能够把这60多个信号都表示下(都装下)。 0000000000,0000000000,0000000000,00,0000000000,0000000000,0000000000,00 (64个二进制位) linux 是用sigset_t结构类型来表示信号集的typedef struct{ unsigned long sig[2.

2020-11-22 17:47:02 11

原创 (C++通讯架构学习笔记):Unix-Linux体系结构、信号编程初步

目录Unix/Linux操作系统体系结构signal函数范例可重入函数不可重入函数的错用演示Unix/Linux操作系统体系结构类Unix操作系统体系结构分为两个状态 用户态 内核态 操作系统/内核:用来控制计算机硬件资源,提供应用程序运行的环境。 我们写的程序,他要么运行在用户态,要么运行在内核态。 一般来讲运行在用户态。当程序要执行 一些特殊代码的时候,程序就可能切换到内核态,这种切换由操作系统控制,不需要人为介入。 换种角度理解:用户态 --.

2020-11-22 15:32:51 13

原创 (C++通讯架构学习笔记):信号的概念、认识、处理动作

目录信号的基本概念通过kill命令认识一些信号进程的状态常用的信号列举信号处理的相关动作信号的基本概念进程之间的常用通信手段:比如发送信号kill一个worker进程,master拉起一个新的worker进程 ,以及前面的 SIGHUP信号 信号 :通知(事情通知),用来通知某个进程发生了某一个事情。 事情,信号都是突发事件, 信号是异步发生的,信号也被称呼为“软中断”。【信号如何产生】某个进程发送给另外一个进程或者发送给自己(如热升级) 由内核(操作系统)发送

2020-11-22 11:47:08 45

转载 Linux string.c源文件 [转]

Linux string.c注:了解各字符串函数的实现及技巧// SPDX-License-Identifier: GPL-2.0/* * linux/lib/string.c * * Copyright (C) 1991, 1992 Linus Torvalds *//* * stupid library routines.. The optimized versions should generally be found * as inline code in <

2020-11-22 09:43:36 16

转载 指针使用的总结 -- 让你不再害怕指针[转]

本文参考《让你不再害怕指针》目录前言:复杂类型说明细说指针指针的算术运算运算符&和*指针表达式数组和指针的关系指针和结构类型的关系指针和函数的关系指针类型转换指针的安全问题前言:复杂类型说明要了解指针,多多少少会出现一些比较复杂的类型,所以我先介绍一下如何完全理解一个复杂类型,要理解复杂类型其实很简单,一个类型里会出现很多运算符,他们也像普通的表达式一样,有优先级,其优先级和运算优先级一样,所以我总结了一下其原则: 从变量名处起,根据..

2020-11-22 01:05:19 28

原创 (C++通讯架构学习笔记):终端和进程的关系

终端和进程的关系【终端与bash进程】使用ps -ef | grep bash命令查看 bash 进程再开一个终端连接,再次查看发现有两个bash进程pts(虚拟终端),每连接一个虚拟终端到linux操作系统,就会出现 一个bash进程(shell[壳]),黑窗口,用于解释用户输入的命令,bash = shell = 命令行解释器【终端上的开启进程】ps -la可以查看终端上的进程(包括其他终端上开启的进程) 如果终端退出,这个终端上运行的进程nginx也退出了【进程关系

2020-11-21 17:22:15 10

原创 (C++通讯架构学习笔记):nginx源码查看方式简介

nginx源码查看方式简介【使用vscode查看nginx源码】下载并解压源码,用vscode打开源码的src目录打开后:nginx源码入口函数定位(选择区分大小写,全字匹配)【使用Source Insight进行查看】可参考文章:《SourInsight使用说明》【使用Visual Studio进行查看】可参考文章:《使用VS2019管理和阅读开源代码实践》...

2020-11-21 15:01:29 7

原创 (C++通讯架构学习笔记):nginx的整体结构、进程模型

nginx的整体结构、进程模型【master进程和worker进程概览(父子关系)】启动nginx,看到了一个master进程,一个worker进程 ps -ef命令查看信息第一列:UID,进程所属的用户id 第二列:进程ID(PID),用来唯一的标识一个进程。 第三列:父进程ID(PPID)。worker进程是被master进程通过fork()创建出来的,worker进程是master进程的子进程,master是父进程。...

2020-11-21 14:05:15 5

原创 (C++通讯架构学习笔记):nginx简介、选择理由、安装和使用

nginx简介nginx(2002年开发,2004年10才出现第一个版本0.1.0):web服务器,市场份额,排在第二位,Apache(1995)第一位。 web服务器,反向代理,负载均衡,邮件代理,运行时需要的系统资源比较少,所以经常被称呼为轻量级服务器。 nginx是一个俄罗斯人(Igor Sysoev),C语言(不是c++)开发的,并且开源了。 nginx号称并发处理百万级别的TCP连接,非常稳定,热部署(运行的时候能升级),高度模块化设计,自由许可证。 很多人开发自己的模块来...

2020-11-20 20:48:51 22

转载 C语言常用标准库 [转]

[声明] 参考文章链接:C语言常用标准库解读目录C语言常用标准库标准定义()错误信息()输入输出函数()数学函数()字符处理函数()字符串函数()字符串函数存储区操作功能函数()随机数函数动态存储分配函数几个整数函数数值转换执行控制与执行环境交互常用函数bsearch和qsortC语言常用标准库标准头文件包括:<asset.h> <ctype.h> <errno.h> ..

2020-11-19 23:52:17 19

原创 (C++模板编程):typelist实现(类型计算的范例)

typelist实现(类型计算的范例)【基本介绍】《Modern C++ Design》 ---《C++设计新思维》-- Loki实现了typelist(列表头+嵌套列表技术来实现,因为2003年C++不支持可变参模板) typelist:用来操作一大堆类型的C++容器,就象C++标准库中的list容器(能够对各种数值提供各种基本操作),但typelist是针对类型进行操作。 typelist简单的说就是一个类型容器,能够对类型提供一系列的操作(把类型当成数据来操作)。 从实现上,typel

2020-11-19 20:25:12 17

原创 (C++模板编程):混合元编程(下)

目录混合元编程类模板实例化进一步观察【元编程 “计算完整性”概念】inline静态成员变量(C++17中引入)混合元编程类模板实例化进一步观察//泛化版本template <int x_v,int y_v>struct InstantiationObServe{ static const int value = (x_v > y_v) ? InstantiationObServe<x_v - 1, y_v>::value : Inst

2020-11-19 17:14:07 10

原创 (C++模板编程):混合元编程(上)

目录混合元编程常规的计算点积范例混合元编程计算点积C++编译的两个阶段代码的智能化产生与膨胀混合元编程【概念介绍】(a)程序员写出一段元编程代码 (b)编译器根据这段代码编译(生成)出来一段新代码,实现程序真正功能的是这段生成的新代码。 (c)编译器会对这段新代码进行编译,产生出最终的可执行程序。 混合元编程可以看成是运行期C++代码的生成器。常规的计算点积范例a)数组a有三个元素,a[0],a[1],a[2],值分别是1,2,3 b)数组b有三个元

2020-11-19 13:15:51 13

原创 (C++模板编程):术语、元函数

术语、元函数【元编程介绍】元编程:将各种计算从运行期提前至编译器进行以达到提供程序运行时性能提升的目的,是一种增加程序编译时间从而提升程序运行效率的一种编程技术。 会涉及到很多与循环有关的代码,很多操作针对的是类型、常量,此种循环的实现往往会采用递归手段。 典型范例:typelist(类型列表)、tuple(元组)。 Boost库有一个叫做MPL(Meta-Programming Library)库,用于辅助模板元编程。 参考书籍:《C++模板元编程》书籍,对MPL有比较详细的...

2020-11-19 01:20:32 12

原创 (C++模板编程):策略(policy)技术中的算法策略与总结

目录策略(policy)技术中的算法策略常规范例:普通策略类常规范例:策略类模板【总结】萃取(trait)技术与策略(policy)技术的思想策略(policy)技术中的算法策略算法逻辑分离,解耦合常规范例:普通策略类【引例】//funcsum函数模板template <typename T,typename U = SumFixedTraits<T> > auto funcsum(const T* begin, const T*

2020-11-18 20:03:14 30

原创 (C++模板编程):将trait类模板用作模板参数

将trait类模板用作模板参数【引例】//SumFixedTraits类模板template <typename T>struct SumFixedTraits;template<>struct SumFixedTraits<char>{ using sumT = int; static sumT initValue() { return 0; }};template<>struct SumFixedTraits<in

2020-11-18 18:52:00 21

原创 (C++模板编程):使用SFINAE特性的信息萃取(下)

目录使用SFINAE特性的信息萃取用成员函数重载实现is_class用成员函数重载实现is_base_of用类模板特化实现is_default_constructible使用SFINAE特性的信息萃取用成员函数重载实现is_class【std::is_class】是否是一个类类型(不是联合类型)的类模板【功能实现】template <typename T>class IsClass{private: template <typename

2020-11-18 17:12:29 7

原创 (C++模板编程):使用SFINAE特性的信息萃取(上)

目录使用了SFINAE特性的信息萃取用成员函数重载实现is_default_constructible用成员函数重载实现is_convertible使用了SFINAE特性的信息萃取SFINAE:替换失败并不是 一个错误用成员函数重载实现is_default_constructible【std::is_default_constructible】判断一个类的对象是否能够被默认构造class A {};class B{public: B(int tmpval

2020-11-18 15:18:06 16

原创 (C++模板编程):萃取技术中的value traits(值萃取)

目录萃取技术中的value traits(值萃取)一个常规范例判断是否是void类型的一个范例判断两个类型是否相同萃取技术中的value traits(值萃取)固定萃取:给进来一个类型,萃取出一个类型 值萃取核心思想:给进来一个类型,萃取出一个值一个常规范例【引例】//fixed traits类模板的泛化版本template<typename T>struct SumFixedTraits; //不需要实现代码,因为不需要用该版本进行实.

2020-11-18 12:19:44 14

原创 (C++模板编程):萃取技术及fixed traits -- const及引用修饰符的移除 、退化(decay)技术

萃取技术及fixed traits【const修饰符的移除】//泛化版本template <typename T>struct RemoveConst{ using type = T;};//特化版本template <typename T>struct RemoveConst<const T>{ using type = T;};//根据需要增加其他特化版本....template <typename T>using

2020-11-17 20:12:11 13

原创 (C++模板编程):萃取技术及fixed traits -- 引用类型的移除和增加

萃取技术及fixed traits -- 引用类型的移除和增加引用类型的移除【std::remove_reference类模板】template <class T1,class T2>void print_is_same(){ cout << "T1类型为:" << typeid(T1).name() << endl; cout << "T2类型为:" << typeid(T2).name() <<

2020-11-17 17:45:57 12

原创 (C++模板编程):萃取技术及fixed traits -- 通过容器(数组)类型萃取元素类型范例

通过容器(数组)类型萃取元素类型范例【用GetEleType类模板进行常规实现】//泛化版本template <typename T>struct GetEleType;//特化版本template <typename T>struct GetEleType<std::vector<T>>{ using type = T;};template <typename T>struct GetEleType<std

2020-11-17 14:34:43 11

原创 (C++模板编程):萃取技术及fixed traits(固定萃取)-- 迭代器范例

萃取技术及fixed traits(固定萃取)-- 迭代器范例【五类迭代器简介】a)输出型迭代器:struct output_iterator_tag b)输入型迭代器:struct input_iterator_tag c)前向迭代器:struct forward_iterator_tag d)双向迭代器:struct bidirectional_iterator_tag e)随机访问迭代器:struct random_access_iterator_tag 例:vector容器-随机

2020-11-16 23:06:13 23

原创 (C++模板编程):萃取技术及fixed traits(固定萃取)

萃取技术及fixed traits(固定萃取)【基本概念】trait(萃取)技术用于对模板中的各种模板参数进行管理。 type traits:类型萃取 fixed traits(固定萃取):主要用于给进来一种类型,萃取出(得到)另外一种类型。【目标】(a)了解标准库中许多trait技术的实现方法。 (b)灵活运用并组合这些实现方法,写出功能跟强大,更优雅和实用的代码。【引例】//计算数组中元素的和值的函数模板template <typename T>T func

2020-11-16 19:51:58 14

原创 (C++模板编程):std::is_union、std::is_class、std::integral_constant

目录std::is_union、std::is_class、std::integral_constantstd::is_unionstd::is_classstd::integral_constantstd::is_union、std::is_class、std::integral_constantstd::is_unionstd::is_union是类模板。用于判断某个类型是否是一个联合类型。template <typename T>struct is_

2020-11-16 17:18:51 11

原创 (C++模板编程):std::integer_sequence(下)

std::integer_sequence【逆向排列数字生成一个类型Integer_Sequence_Reverse】//向integer_sequence开头插入元素://泛化版本template<typename INTSEQ, unsigned int NewElem> //INTSEQ代表整个的std::integer_sequence< ......>类型struct IntSeq_PushFront; //因为不使用泛化版本,所以泛化版本可以只声明不定义

2020-11-16 15:55:16 4

原创 (C++模板编程):std::integer_sequence(上)

std::integer_sequenceC++14中引入的一个类模板【简化后的源码】template <class T, T... Ints>struct integer_sequence { using value_type = T; static constexpr size_t size() noexcept { return sizeof...(Ints); }};功能:产生整型数字序列,0,1,2,3,4,5 T:int,unsigne.

2020-11-16 10:53:15 9

原创 (C++模板编程):std::remove_all_extents

std::remove_all_extentsstd::remove_all_extents是C++11中引入的类模板。【功能】把一个数组中的数组类型部分移除掉,只保留元素类型。 如:int a[12]; 其中a的类型=int[12]; 即去除[12],只保留元素类型 int【示例】float a[12]; //a的类型int[12];int b[5][8]; //b的类型int[5][8];int c[2][8][9]; //c的类型int[2][8][9];co...

2020-11-15 23:30:44 10

原创 (C++模板编程):std::function的实现

std::function的实现【基本概念】std::function:可调用对象包装器,是C++11新标准引入的类模板。 需要添加头文件:#include <functional> 函数名(函数指针)、具有operator()成员函数的类对象、lambda表达式等等,都属于可调用对象。【引例】void myfunc(int tmpvalue) //普通函数{ std::cout << "myfunc执行了:tmpvalue = " << tmpv

2020-11-15 21:48:38 22

原创 (C++模板编程):std::conditional

std::conditional【标准库中的实现方式】template <bool b, class T, class U> //泛化版本struct conditional { using type = T; //type类型别名};template <class T, class U>struct conditional<false, T, U> { using type = U;};很显然,bool值只要为false就执行特化

2020-11-15 20:14:49 19

原创 (C++模板编程):std::void_t(下)

借助void_t和declval实现is_copy_assignable【引例】class ACPABL{};class BCPABL{public: BCPABL& operator=(const BCPABL& tmpobj) //拷贝赋值运算符 { //... return *this; }};class CCPABL{public: CCPABL& operator=(const CCPABL& tmpobj) = de

2020-11-15 16:54:14 12

texinfo6.7源码|texinfo-6.7.tar.gz

texinfo6.7源码 Texinfo is the official documentation format of the GNU project. It is used by many non-GNU projects as well. Texinfo uses a single source file to produce output in a number of formats, both online and printed (DVI, HTML, Info, PDF, XML, etc.). This means that instead of writing differ

2020-11-03

Linux环境下Git命令自动补全脚本|git-completion.bash

When you git<tab><tab> add cherry diff instaweb rebase show-ref am cherry-pick fast-export log relink st annotate ci fetch los

2020-08-29

Git_TortoiseGit_TortoiseGit中文包

Git是分布式版本控制系统,那么它就没有中央服务器的,每个人的电脑就是一个完整的版本库,这样,工作的时候就不需要联网了,因为版本都是在自己的电脑上。既然每个人的电脑都有一个完整的版本库,那多个人如何协作呢?比如说自己在电脑上改了文件A,其他人也在电脑上改了文件A,这时,你们两之间只需把各自的修改推送给对方,就可以互相看到对方的修改了。

2020-08-04

Makefile笔记.zip

什么是 makefile?或许很多 Windows 的程序员都不知道这个东西,因为那些 Windows 的集成开 发环境(integrated development environment,IDE)都为你做了这个工作,但我觉得要作一个好的 和专业的程序员,makefile 还是要懂。这就好像现在有这么多的 HTML 编辑器,但如果你想成为一个专 业人士,你还是要了解 HTML 的标签的含义。特别在 Unix 下的软件编译,你就不能不自己写 makefile 了,会不会写 makefile,从一个侧面说明了一个人是否具备完成大型工程的能力。

2020-06-19

空空如也

空空如也

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

TA关注的人 TA的粉丝

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