![](https://img-blog.csdnimg.cn/2019091813595558.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
C++&linux
C++与linux知识分享,高楼之架。
underflower
这个作者很懒,什么都没留下…
展开
-
nginx源码分析
nginx的源码目录文件结构原创 2022-08-31 19:55:06 · 2243 阅读 · 0 评论 -
linux防文件误删
linux防文件误删原创 2022-06-01 18:23:57 · 991 阅读 · 0 评论 -
p2p打洞之nat分类
最近学习了一些p2p的知识,这里做一些笔记。p2p首先要区分网络类型,不同的网络类型有不同的打洞的方式。1、完全锥形所谓的完全锥形其实表达得很形象,就是内网机器在局域网内打了一个洞,然后通过这个洞与外网通信。内网机器将数据发到网关时,路由器自动替换掉数据包中的源ip和源端口。并且将这个替换记录下来,记录在 一个表格中。对外端口 源ip 源端口 8080 xxxx.xxxx.xxxx.xxxx xxxx 这样,在外网发送数据到外网ip的对外端口时,就能够根据之前转发原创 2022-03-30 23:18:45 · 3203 阅读 · 0 评论 -
GDB调试异常
在vscode中使用gdb调试的时候出现了异常,单步调试出现卡顿,出现变量的地方一直在转圈圈。及时是执行int a=0;这样的语句也要等很久,几分钟到十几分钟,而且cpu使用率很高。 解决方法:卸载gdb,重新安装,暂且不知道是不是和gdb版本有关系。...原创 2021-09-28 15:12:07 · 817 阅读 · 0 评论 -
samba服务器配置
# See smb.conf.example for a more detailed config file or# read the smb.conf manpage.# Run 'testparm' to verify the config is correct after# you modified it.[global] workgroup = WORKGROUP log file = /var/log/samba/log.%m ;hosts...原创 2021-07-27 18:34:30 · 93 阅读 · 0 评论 -
centos7使用管理工具升级GUN
sudo yum install centos-release-sclsudo yum install devtoolset-7scl enable devtoolset-7 bash原创 2021-07-14 10:59:46 · 247 阅读 · 0 评论 -
secureCRT连接报错
在多次尝试密码的时候会出现这样的问题:第一次写了密码,密码不对,需要改用户名直接在这里改即使是密码正确了也会报错:连接错误,不允许修改用户名或者服务名。The server has disconnected with an error. Server message reads:A protocol error occurred. Change of username or service not allowed: (test,ssh-connection) ->.原创 2021-03-11 11:23:09 · 1293 阅读 · 0 评论 -
c++ 定时任务获取休眠时间(每日凌晨)
unsigned int MessageStatistic::GetSleepTime(){ unsigned int ret=60*60*24; time_t t = time(NULL); struct tm * tm= localtime(&t); tm->tm_hour = 0; tm->tm_min = 0; tm->tm_sec = 0; ret+= mktime(tm); time_t timesta.原创 2021-03-05 11:30:53 · 810 阅读 · 0 评论 -
docker技术分享
1.镜像介绍docker可以看成是一个文件系统,他提供了除内核外的完整的运行时的环境。也就是说在这个文件系统里,可以包含部署的应用程序。这样做的好处是提高了工程的迁移性,提高同时也保证了对线上环境更好的控制,而且比起虚拟机技术,docker可以获得更好的性能,但是他的隔离性要稍微差一些。有关概念:镜像,容器,仓库。镜像docker的镜像时分层存储的,在构建镜像时,每一条指令都会使docker多加一层,而且构建时添加的不能真正的删除。因此在构建镜像的时候,需要认真的考虑每一层是什么,不要无脑的add原创 2021-01-03 18:06:49 · 232 阅读 · 0 评论 -
C++编译记录
1.编译rapjson时一直报错:-Werror=implicit-fallthrough=,我一开始把CmakeList.txt中所有的-Werror删除掉,但是在重新cmake后依然还是报错。于是在网上查找,最终发现方法:在所有的 -Werror 后面添加 -Wno-implicit-fallthrough,这表示忽略隐式转换的错误。还有如果有的工程有config文件的话,可以在配置的时候关闭警告变错误:./configure --disable-werror ...原创 2020-12-04 20:59:53 · 355 阅读 · 0 评论 -
golang连接zookeeper
用C++连接zookeeper需要安装很多的库,golang却简单得多。1.下载 go-zookeeper 文件进入工程目录git clonehttps://github.com/samuel/go-zookeeper.git 2.将go-zookeeper添加金gopathpackage mainimport ( "fmt" "go-zookeeper/zk" "time")var ( path = "/zk/path")func get(conn *zk.原创 2020-07-23 11:45:11 · 964 阅读 · 0 评论 -
Clion上搭建基于grpc的service与client实例
1.新建protobuf文件syntax = "proto3";message SearchRequest{ string Request = 1;}message SearchResponse{ string Response = 2;}service SearchService { rpc Search (SearchRequest) returns (SearchResponse);}2.编译protobuf和grpc手脚架文件protoc --cpp_o原创 2020-07-17 20:49:17 · 1384 阅读 · 0 评论 -
柔性数组
想起以前有人讨论的一个问题,柔性数组。于是就记录一下:在c语言中用得比较多吧,尤其在通信中用得多:struct Buffer{ int len; char data[0];};其中的data是一个可变长度的数组,这主要是为了节约空间。可以根据需要发送的报文长度来决定数组的大小。例如要发送的报文长度为4096:char *tmp = (char*)malloc...原创 2019-06-29 23:48:25 · 145 阅读 · 3 评论 -
system v 信号量的使用 2019.8.25
代码000:叮铃铃,摇晃的铃铛。PV操作,生产者,消费者。int semget(key_t key,int nsems,int semflg);//得到关键做名字,须定个数许定权。西姆拿着钥匙,可以打开很多个数门,但是有的门上有几把锁,有多把锁的有的可以打开,有的打不开。int semctl(int semid,int semnum,int cmd,union semun);//控制标...原创 2019-06-15 00:09:57 · 552 阅读 · 6 评论 -
centos系统文件挂载不上
在给centos安装桌面后发现文件系统无法挂载上去,开机的时候会在bios中进行磁盘自检,进入系统后会报错:Only fileSyetem,说文件系统为只读。查看开机挂载的文件系统:/etc/fstab执行以下语句,重新挂载文件系统,之后不再报文件系统只读错误,mount -o remount,rw /再执行mount -a,将fstab中的文件系统重新挂载一遍即可。...原创 2020-01-10 20:00:15 · 2078 阅读 · 0 评论 -
Clion远程调试cmake项目
1.导入cmake项目:2.设置使用shell登录远程机器(不用root也可以):3.设置远程cmake,gdb如果这里ssh无法登录,确保配置正确。如果无故报“cannot establish connection”,进入第二步,点击Test connection,连接成功即可以ssh远程登录。4.设置cmake的启动参数5.添加remote debug...原创 2019-12-15 10:52:03 · 2552 阅读 · 0 评论 -
protocol buffers 基本要素:基于c++
为什么使用protocol buffers? 我们将使用一个非常简单的例子,做一个地址簿的应用。在这个地址簿中,我们可以读写联系人的信息,有名字,ID,还有电话号码。 那么我们如何序列化和反序列化一个这样的数据结构呢?下面列举了几种方式: 首先说的方法就是直接传递结构体的二进制序列,但是这是一种不好的方法,因为发送端和接受端都要相同的存储配置,字节序等。同时,由...翻译 2019-11-24 00:41:21 · 228 阅读 · 0 评论 -
poll&epll 模型
POLL网络编程模型PIPE信号的产生与处理,如何减少time_wait。1.首先是创建socket,设置ip端口。(socket_nonbock,socket_closexec)每个socket都有自己的输入缓冲区和输出缓冲区。2.再是设置端口复用,绑定端口,监听端口。3.定义poll event结构和events数组,将监听的事件的描述符加到poll event中,并且监听po...原创 2019-11-14 22:51:58 · 335 阅读 · 0 评论 -
左值引用与右值引用
引用的本质是一个阉割的指针,它是一个对象的别名,通过操作符&来实现,c++11又提出了一个左值引用与右值引用的概念。这里提一下变量的两个属性:左值和右值,左值是变量的地址,右值是变量存储的内容,变量的本质即存储空间的名称,编译后为对应的地址。左值引用: 一个C++引用声明后必须被初始化,否则会编译不过,初始化之后就相当于一个变量。由于拥有共同地址,而且...原创 2019-10-24 20:18:57 · 270 阅读 · 1 评论 -
C++ this->template 的使用
在基类中,定义了一个模板类,实现了alloc函数,在子类中调用它的时候需要用使用template关键字。#include <iostream>template <class T>struct Base{ template <T N> void alloc() {std::cout << "alloc<" &l...原创 2019-10-23 19:48:31 · 1543 阅读 · 2 评论 -
socket通信进阶一,使用epoll
之前的例子是使用的简单的socket编程,这样可以实现简单的一对一的连接,如果我们的服务端可能有很多的客户端呢?此时该怎么办? 这里我们用使用epoll,为什么是epoll?epoll是在linux2.6中添加的。 它有三个特性:mmap,红黑树,双链表。这三个特性使得它的性能优于select,poll。 mmap将用户空间和内核空间映射到同一块内存中,使得数据传递...原创 2019-09-05 21:41:38 · 373 阅读 · 0 评论 -
socket通信基础(TCP)
TCP通信大致过程如下:在服务端:1.socket()系统调用创建一个新socket。2.bind()系统调用将一个socket 绑定到一个地址上。通常,服务器需要使用这个调用来将其socket绑定到一个众所周知的地址上使得客户端能够定位到该socket 上。3.listen()系统调用允许一个流socket 接受来自其他socket 的接入连接。4.accept()系统调用在一个监听...原创 2019-09-05 21:37:42 · 238 阅读 · 1 评论 -
TCP的黏包与拆包
之前以为这是多么高大上的问题,后来才发现这个问题实在是是简单得不得了,其实在大三的课程设计中就有处理过,只是当时没有学习这个特有的名词而已。 https://www.codetd.com/en/article/6563934 https://blog.csdn.net/huaishu/article/details/50041169以前的处理是读取的报文...原创 2019-08-18 00:28:28 · 127 阅读 · 2 评论 -
解析一个类似xml的字符串
这是一个简单的数据结构问题,本来以为这是中档题,但是好像是高估它了,这个只能算是个简单的问题。问题是这样的,程序会接收到一个字符串,需要实现用这个字符串给一个结构赋值,有点类似xml解析。把过程记录下来:有一个字符串,字符串中包含三种类型的数据信息:数组,结构,普通元素。数组用[]包起来,结构用{}包起来,普通元素以^结尾。真正的信息只在普通元素里面有,数组和结构都是对普通元素的封...原创 2019-08-11 10:47:12 · 343 阅读 · 0 评论 -
共享内存读写【2019.7.18更新】
进程间共享数据:一块共享内存,加载了很多区域的数据,为了快速查找内存数据,可以在头部设置索引空间。这样可以实现快速的跳转。关于进程的读写,则是设立了读锁与写锁。写锁是唯一的,哪个进程如果要写数据,必须要去抢写锁。...原创 2019-07-13 00:18:13 · 1038 阅读 · 4 评论 -
KMP算法
这是一种字符串匹配算法,复杂度为O(M),大致过程如下:例如要在字符串fdfgfgkll 中匹配出子串fgfg,首先要对fgfg分析出它的prefix table,大致过程如下。列出fgfg的子串:ffgfgffgfg找出各列的最大公共前后缀:0 f0 fg1 fgf2 fgfg可以获得frefix table:0,0,1,2,将最后一个去...原创 2019-07-09 23:47:35 · 187 阅读 · 4 评论 -
循环队列的实现
循环队列的实现:首先使用数组实现一个循环的队列:那么出队与入队就变成了移动front和rear。队列空时rear=front入队时,rear后移一位,array[rear]=data:出队时front后移一位:队列满的时候,如果没有意外,那么会是front=rear,这和队列为空的时候条件一样了。有个办法可以解决这个问题:如果r...原创 2019-07-09 00:12:50 · 711 阅读 · 4 评论 -
模板类
模板类关于模板相关的知识在c++ primer 中讲的十分的细致,甚至连命名 作用域等都没有放过。印象深刻的是给一个模板函数设置一个类型返回值,就说了两个小节,但是大体就是说应该这么干:template <class T,class U,class V> T compare(const U&,const V&);与普通函数一样,我要关心的是: 1.函数的声明; 2.函数的定义; 3.函数的使原创 2017-04-04 18:13:21 · 166 阅读 · 0 评论 -
关键字volatile的作用和三个不同的应用场合
volatile的本意是“易变的” 由于访问寄存器的速度要快过RAM,所以编译器一般都会作减少存取外部RAM的优化,但有可能会读脏数据。当要求使用volatile 声明的变量的值的时候,系统总是重新从它所在的内存读取数据,即使它前面的指令刚刚从该处读取过数据。而且读取的数据立刻被保存。精确地说就是,优化器在用到这个变量时必须每次都小心地重新从内存里读取这个变量的值,而不是使用保存在寄存器里的备份。转载 2016-10-10 17:48:37 · 765 阅读 · 0 评论 -
内核数据结构
http://www.cnblogs.com/wang_yb/archive/2013/04/16/3023892.html转载 2016-06-28 19:51:57 · 285 阅读 · 0 评论 -
快速排序
书上快速排序的代码:HoarePartion(A[l…r]) { p <- A[l] i <- l, j <- r+1; repeat repeat i = p; repeat j <- j-1 until A[j] <= p; swap(A,A[j]); until i >= j; swap(A转载 2016-04-04 22:11:12 · 241 阅读 · 0 评论