自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 物理机或虚拟机-ubuntu16.04上搭建openstack

注:建议配置过程中要设置的一切密码都设置成1234 !!!由于作者直接从word文档复制粘贴到博客,所以排版不美观,而且正确性未验证。https://github.com/misiyu/blogresource以上链接可以下载到作者的原文档,原文档经多次验证,切实可用。1组网本章给出物理环境下和VMware的的虚拟机环境下的组网方式。1.1  物理环境组网方式如图1.1...

2018-10-18 09:02:23 4113 7

原创 函数调用过程栈变化

1 代码1.1 源代码#include <stdio.h>int add(int a, int b){ return a-b;}int main() { add(2, 1); return 0;}1.2Intel(R) Xeon(R) 处理器下的汇编 .file "a.c" .text .globl add .type add, @functionadd:.LFB0: .

2022-02-13 14:36:13 8171

原创 操作系统-用户态和内核态切换细节分析

1 前言 本文并非介绍当前使用的linux操作系统的用户态和内核态的切换细节,而是介绍ucore这个教学性质的系统,主要是为了说明用户态和内核态本质上到底是什么。2 初始状态 操作系统在加电启动、完成各个部分的初始化之后,处于内核态,假设当前的栈顶指针寄存器的值为x,指向内存的某个位置,如图2.1所示。3 内核态切换到用户态#define T_SWITCH_TOU 120 // user/kernel switch...

2021-10-13 18:01:21 676

原创 回调函数定位(如何根据函数指针获得函数名)

1 吐槽 回调函数一个让人看着就有点神秘色彩的名字,说白了就是函数指针,linux内核中大量使用这种东西,这么做好像说是可以提升代码的可扩展性吧。跟java、go等高级语言里的接口、抽象类等概念有得一拼。 不管什么原因要使用回调函数或者接口之类的东西吧,使用这了些东西之后,这份代码在不运行它的情况下基本上就算是不可读了。这好像也是我们一直看不懂linux内核的代码的原因,想像一下当我们读代码,一直追踪函数调用的时候,最后追踪到调用了一个函数指针,然后我们想这个指针指向谁呢...

2021-09-29 17:35:12 1506

原创 锁的底层实现

无论我们选择用什么方式去实现一个锁,都需要硬件提供支持。在单处理器的计算机系统中实现一个锁,我们只需要在读写锁变量时禁止中断就可以了。禁止了中断,进程就无法切换,自然就实现了对锁操作的原子性。另一个做法就是使用原子操作:test_and_set。 类似于 test_and_set和compare_and_swap这种原子操作,在多处理器的计算机系统中也可以正确地保证对共享内存访问的原子性。 由这两个底层的操作再封装成高级的函数。...

2021-08-07 15:02:55 458

原创 原子操作的实现原理

一、多处理器和单处理器中为什么需要原子操作?图1 多CPU内存结构图 首先为什么要有原子操作?1.1 多处理器中需要原子操作的原因 现在的计算机一般有多个CPU,一个CPU里又有多个核,当多个CPU同时读内存中的某个变量并个性这个变量时,会出现冲突,如两个核同时执行代码 "i++",即两个处理器同时读写同一块内存,出现错误是显然的。1.2 单处理器中需要原子操作的原因 当计算机只有一个CPU且只有一个核时,是不是就不需要原子操作...

2021-08-06 16:42:22 1626 2

原创 git统计某个用户的代码量

git log --author="$(git config --get user.name)" --pretty=tformat: --numstat --after=2021-03-01 | grep .go | gawk '{ add += $1 ; subs += $2 ; loc += $1 - $2 } END { printf "新增行数: %s \n删除行数 : %s \n净增加行数: %s\n",add,subs,loc }' -...

2021-05-07 20:33:50 528

原创 ndnSIM的使用教程

一、安装1、建议使用ubuntu20.04桌面版安装,因为桌面版安装出来还可以看到python生成的拓扑图。2、安装教程请求参考官方网站的安装连接。https://ndnsim.net/current/getting-started.html3、下载源码的目录结构4、判断是否安装成功,进入上图所示的ns-3目录下,运行以下命令$ ./waf --run=ndn-simple --vis出现如下所示的拓扑图:点击图中的 "Simulate (F3)" 可以看到拓扑变绿

2021-03-29 14:47:02 3763 7

原创 linux 以太网包proto字段的分配

linux系统关于proto字段值的分配写在头文件<net/ethernet.h>中:/* Copyright (C) 1997-2016 Free Software Foundation, Inc. This file is part of the GNU C Library. The GNU C Library is free software; you can redistribute it and/or modify it under the t...

2021-03-17 17:55:25 437

原创 terminate called after throwing an instance of ‘std::length_error‘ 出现这个异常的情况

int main(){ char buf[5] ; char *buf1 = NULL; //string s(buf, 9223372036854775808L) ; // 情况一:字符串超长 string s(buf, -1) ; // 情况二:字符串长度小于0 //string s(buf1, 5) ; return 0;}

2021-03-16 15:00:45 3347

原创 ubuntu2004新安装的一些配置

1、设置当前workspace打开的窗口仅在当前workspace可见gsettings set org.gnome.shell.extensions.dash-to-dock isolate-workspaces true

2021-01-26 15:24:58 243

原创 linux c 进程间使用信号量互斥的简单样例

#include <unistd.h>#include <stdlib.h>#include <stdio.h>#include <sys/sem.h>/* * brief : 创建信号量 * param : * sem_id : 信号量键值, 一个唯一的非零整数, 不同的进程可以通过它访问同一个信号量。 * num_sems : 信号量数目, 它几乎总是取值为1. * sem_flags: 它低端的9个比特是该信号量的权限,其作用类.

2021-01-06 16:00:39 398 2

原创 C++可变参数函数实现日志输出

#include <iostream>#include <stdio.h>#include <stdarg.h>#define dbgPrintf(format, ...) printf(format, __VA_ARGS__) using namespace std;class Log{public: Log (){ } void println(const char* format, ...){ va_list argptr; .

2020-12-11 16:24:16 1019

原创 ubuntu 网卡的配置文件IP+网关+DNS+MTU

auto ens2f1iface ens2f1 inet staticaddress 192.168.1.16netmask 255.255.255.0gateway 192.168.1.1dns-nameserver 114.114.114.114mtu 9000重启网络服务使配置生效:$ sudo /etc/init.d/networking restart

2020-12-11 15:37:48 606

原创 运维记录

问题一:df -h 看到磁盘被占满了,但 du -h -d 1 / 命令统计文件大小却未占满磁盘(1)使用命令 lsof -i 查看inode占用情况 ;(2)使用命令 lsof -n | grep delete 查看某些文件被删除,但因为打开它们的进程未关闭,所以这些文件还在战胜磁盘空间。...

2020-12-07 10:21:46 125

原创 局域网端口映射

iptables -t nat -A PREROUTING -p tcp --dst <公网IP> --dport 10011 -j DNAT --to 172.16.255.1:10011iptables -t nat -A POSTROUTING --dst 172.16.255.1 -p tcp --dport 10011 -j SNAT --to-source <公网IP>:10011

2020-09-21 18:05:52 247

原创 C++使用openssl做AES/RSA加解密

#include <iostream>#include <stdio.h>#include <string.h>#include <openssl/aes.h>#include <openssl/rsa.h>#include <openssl/pem.h>#include <stdlib.h>#include "crypto.h"using namespace std;// 公钥加密 // .

2020-08-26 21:52:41 1639 1

原创 缺页中断时操作系统怎么知道磁盘地址?

缺失页的磁盘地址保存在页表项中。页表项,如果页是否存在位为1,则其地址段就是用来保存物理页框号和脏位、修改位等信息。当页是否存在位为0时,表达当前页不在内存中,除了“页存在位”以外的其他位都用来保存页所在的磁盘地址。...

2020-08-10 16:30:34 2751 11

原创 循环链表相交-快慢指针找相交点证明

我们要证明的不是 b = c, 而是两个速度相同的指针分别从O点和P点顺时针出发,它们会在Q点相遇。1、 先行条件是快慢指针在P点相遇,且快指针速度是慢指针的2倍,则相遇时,快指针走过的路径长度是慢指针的2倍 解: 设快慢指针在P点相遇时,慢指针在圆圈中走了m圈, 快指针走了n圈。 则有: 2[c + m(a + b) + a] = c + n(a + b) + a (1) ...

2020-06-18 21:16:59 595 1

原创 内存对齐的目的

1. 内存对齐的目的 内存对齐跟内存物理结构有关。64位计算机的内存一般有64个电容chip,每个chip对应64位的每一位。一次内存IO可以从每个chip上同时读出一位,组成64位字长。 CPU希望每次读内存都能直接读出一个基本数据类型。如果一个8位数据double,从内存0x01开始存,则CPU在读这个数据时要先读0~7再读8~15,读两次。 这样,计算str...

2020-03-13 09:26:46 723

原创 linux 快速格式化、挂载磁盘

1. 查看当前挂载的磁盘,以及磁盘剩余量$ df -h2. 查看所有磁盘(包括已挂载的和未挂载的)$ sudo fdisk -l对比两张图,我们发现有一个 /dev/sdb磁盘,大小为3.6TB没有使用。3. 为 /dev/sdb 创建新分区$ sudo fdisk /dev/sdb出现该界面,依次输入以下字母命令并回车:1. 输入n, 回车;...

2020-03-12 20:29:02 1683

原创 vim和ctags的使用

1. ubuntu(16/18)安装ctagssudo apt install ctags2. 在源代码的最顶层目录生成tags文件,就可以看到当前目录下有一个tags文件ctags -R3. 在 ~/.vimrc 中添加以下配置set tags=xxx4. 编写一个自动加载tags文件的脚本,将脚本命名为 vimloadtags。并赋予可执行权限,再将脚本文件移动...

2020-02-20 20:25:52 140

原创 c++ redis存取二进制串

#include <iostream>#include <hiredis/hiredis.h>using namespace std;int main(){ redisContext *c = redisConnect("127.0.0.1",6379); if(c->err){ redisFree(c); cout<<"connect...

2020-02-18 16:42:54 1323

原创 卡特兰数及各种应用问题的统一理解方式

1. 卡特兰数的基本性质 卡特兰数一般用于计算组合方式的多少,它针对某一类排列组合问题。1.1 通项公式 递推公式: 其中h(0) = h(1) = 1。 上式可以简化成:(简化公式不方便理解,也不方式编程,所以本文只考虑递推公式) 1.2 通项公式的理解 固定某一个,可以将n分成两半,遍...

2020-02-16 12:38:22 1510

原创 .gitignore 忽略父目录,但不忽略某个子目录的写法

*.d*.otagsminoaserverfiles/*!files/share

2020-01-16 11:36:02 2587

原创 C++ 类函数指针

#include <stdio.h>#include <stdlib.h>#include <iostream>using namespace std ;class Man{public: Man(int age) : mage(age) {} int getAge(){ return mage ; }private: /* ...

2020-01-12 11:07:25 98

原创 由正则表达式生成不确定有限自动机再转化成确定有限自动机的全过程

1、正则表达式首先我们给出正则表达式的例子R = (aa*b)|(ac*c)| ε2、生成不确定有限自动机2.1 生成法则1. 对于正则式φ,可画状态机如下图。因为φ表示不匹配任何字符串。2. 对于正则式ε ,画一条路径如下图。ε表示无条件从x状态转移到y状态。3. 对于正则式 a , a是一个字符,可画一条路径,在x状态下输入a可转移到y状态。...

2020-01-10 18:34:06 2431

原创 linux-0.96 网络函数一:sock_socket函数调用过程

该版本的linux只仅支持 AF_UNIX 协议族。我们从一般的AF_UNIX程序自顶向下地看。1. AF_UNIX 通信程序示例代码 服务器:#include <stdio.h>#include <netinet/in.h>#include <sys/socket.h>#include <arpa/inet.h>...

2020-01-06 16:37:47 425

原创 malloc内存泄露测试

测试程序用于查看程序内存占用的命令:ps aux | grep a.out | grep -v grep每列输出的含义:USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND用户 进程ID CPU占用率 内存占用率 已使用的 进程占用的 ...

2019-12-11 14:00:11 568

原创 linux C/C++调用mysql

#include <iostream>#include <mysql/mysql.h>#include <stdio.h>using namespace std;int main(){ MYSQL conn ; int res ; MYSQL_ROW row; MYSQL_RES *result = NULL; MYSQL_...

2019-12-11 10:59:06 147

原创 C/C++如何使用条件编译来调试程序 ?

样例程序如下:需要调试时,在文件开头加上 #define DEBUG不需要调试时,去掉文件开头的 #define DEBUG#include <stdio.h>#include <string.h>#define DEBUG 1int main(){ printf("%.3d\n",9);#ifdef DEBUG printf("Debug :...

2019-11-24 20:03:51 425

原创 C++ static与extern

static 与 extern是用来做标识符作用域限定的。程序1: test.cpp#include <iostream>using namespace std;int MAX = 8 ;void func1(){ cout << "func1 output " << endl ;}其中定义了两个标识符, MAX和func1,由于...

2019-11-23 21:48:31 437

原创 go语言调用c++代码

网络大多在写怎么用go调用c,而没有写怎么调用c++。1、首先,我们创建文件目录2、 main.gopackage mainimport ( "./ndnKeyChain")func main(){ ndnKeyChain.Sign() ;}3、keyTool.cpp通过C调用C++的方式,这里注意keyTool.cpp,一定要以 .cpp或.cxx作后...

2019-11-22 20:21:59 2959

原创 环签名论文分析

论文题目Linkable Spontaneous Anonymous Group Signature for Ad Hoc Groups一、论文主要部分翻译1、密钥生成: (1)给定一个群 G = <g> , 它的阶为质数 q , 假设在G上的离散对数问题是不可解的。 (2) 令 H1是一个哈希函数,它可以将任意二进制串映射到Zq(阶为q的整数群)。...

2019-11-19 21:32:25 554

原创 c++ socket开发之time_wait

当两个socket处于连接的情况下,先用ctrl+c关掉的一方套接字会处于time_wait状态。如果是客户端先关闭,time_wait不会对下次重新启动有影响,因为client会随机分配一个端口。而如果是服务器先关闭,这时服务器的端口就会处于time_wait状态,这时如果重启服务器程序,bind函数会失败。解决方法是在bind之前开启上TCP REUSE选项,一般要将服务器程序写成下面...

2019-11-05 16:39:42 788

原创 ubuntu1604 apache2打开cgi

sudo cp /etc/apache2/mods-available/cgi* /etc/apache2/mods-enabled/sudo service apache2 restart系统默认的cgi-bin目录为 :/usr/lib/cgi-bin/把编译好的c++文件放到以上目录下,假设c++可执行文件的名称为 test在浏览器输入url : 127.0.0.1/cg...

2019-10-31 16:39:59 211

原创 新安装 ubuntu1604 一些配置

1、增加workspace数量dconf write /org/compiz/profiles/unity/plugins/core/hsize 3dconf write /org/compiz/profiles/unity/plugins/core/vsize 32、添加samba用户sudo smbpasswd -a username3、中文输入法:(1...

2019-10-23 10:08:45 201

原创 epoll函数的简单使用

server.c#include <stdio.h>#include <sys/epoll.h>#include <sys/socket.h>#include <netinet/in.h>#include <arpa/inet.h>#include <string.h>#include <unistd....

2019-10-16 21:50:54 201

原创 select函数构建TCP服务器

server.cpp#include <iostream>#include <sys/socket.h>#include <netinet/in.h>#include <arpa/inet.h>#include <unistd.h>#include <string.h>using namespace std...

2019-10-16 15:54:10 135

原创 CCN架构与IP相比,到底优势在哪?

笔者只能总结出4个点,欢迎相关研究者补充。1. 组播性能 首先,CCN最大的优势体现在其对内容分发的良好支持上。 现在我图假设地址为A,B,C,D的4个用户在如下图1的网络拓扑中看同一部电视直播。在IP网络中,假设使用UDP协议传输,其传输的数据包的数量如图1(左)所示。而在CCN网络中,传输的数据包如图1(右)所示。 显然,...

2019-10-15 17:07:16 1410

空空如也

空空如也

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

TA关注的人

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