自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

Linux C/C++后台开发

Talk is cheap. Show me the code!

  • 博客(71)
  • 收藏
  • 关注

原创 用strace查找进程卡死原因

最近遇到进程卡死的情况,但是自己调试的过程中并不一定能复现,都是需要运行一段时间某些条件下才会触发,对于这种运行着不能破坏现场的情况,我们可以使用gdb -p和strace -p来跟踪。 首先我们用ps auxf查看我们的进程执行到了哪一步: 可以看到执行到了docker exec -i 178.20.1.229_0115034556 ls然后就卡死了 然后我们进一步通过strace查看...

2018-01-15 14:59:03 19922 7

原创 epoll的ET和LT模式下,accept,recv,send写法

epoll有两种事件模型: Level Triggered (LT) 水平触发 socket接收缓冲区不为空,有数据可读,读事件一直触发 socket发送缓冲区不满,可以继续写入数据,写事件一直触发 Edge Triggered (ET) 边缘触发 socket的接收缓冲区状态变化时触发读事件,即空的接收缓冲区刚接收到数据时触发读事件 socket的发送缓冲区状态变化时触发写事件,即满的

2017-09-22 19:49:45 3242 1

原创 docker registry带ssl认证的私有仓库搭建

1.首先docker pull registry默认下载最新版的镜像,我这边是2.6.2版本 2.这边考虑私有仓库部署的服务器可能没有网络,可以使用docker save -o registry.tar registry:2.6.2保存一个镜像,然后把registry.tar打包到部署包里面,下次使用docker load -i registry.tar加载到本地镜像 3.保证ssl已安装,且/

2017-08-11 19:42:41 3543

原创 从epoll源码分析它的使用

首先来看看epoll_create的真身SYSCALL_DEFINE1(epoll_create, int, size){ if (size <= 0) return -EINVAL; //也就是说参数size根本用不上 return sys_epoll_create1(0);}再来看看epoll_create1的真身SYSCALL_DEFINE1(epoll_c

2017-04-06 15:17:40 1179 1

原创 libevent多线程使用bufferevent的那些事

void do_accept(struct evconnlistener *listener, evutil_socket_t fd, struct sockaddr *sa, int socklen, void *ctx){ //不使用Nagle算法,选择立即发送数据而不是等待产生更多的数据然后再一次发送 int optval = 1; setsockopt(fd, SO

2016-11-09 17:42:20 7088 11

原创 MySQL C API预处理函数call存储过程

drop procedure if exists SelectAll;delimiter $create procedure SelectAll(in TableName char(64))begin set @sql = 'select * from ?'; prepare stmt from @sql; set @p = TableName; execute

2016-10-09 14:34:11 1941

原创 centos7升级git2.28.0

1.下载地址https://github.com/git/git/releaseshttps://mirrors.edge.kernel.org/pub/software/scm/git/2.不建议用wget下载,可能会存在包有问题无法解压的情况,直接去下载页面下载好以后,传到centos上。wget https://github.com/git/git/releases/tag/v2.28.0/git-2.28.0.tar.gzwget https://www.kernel.org..

2020-08-03 16:00:09 435

原创 centos7升级gcc10.1.0,gdb9.2

https://www.gnu.org/prep/ftp.html先找一个亚洲的镜像站点选一个站点,打开gcc或者gdb目录,选择自己想要安装的版本,我这里选择的gcc-10.1.0和gdb-9.2http://mirrors.nju.edu.cn/gnu/gcc/gcc-10.1.0/https://mirrors.ustc.edu.cn/gnu/gdb/解压gcc-10.1.0.tar.gz后进入目录,执行./contrib/download_prerequisites下载gcc

2020-07-08 16:24:35 892

原创 URL安全的Base64算法

base64是取3个字节(24位)的数据强行组成4个字节(32位)的数据做为一个分组,24位分成4个字节的话,每个字节分到6位,然后前面补两位0,然后这个字节的值位索引去base64表找值。1. 因为前面补两个0,那么只有6位来算索引,最长就是2^6=64,所以base64表只有64个。2.因为每4个字节一个分组,所以base64后的长度肯定是4的倍数。3.因为不是所有的字符串都能...

2019-09-02 20:40:27 271

原创 VS Code Remote Development

在Windows下编辑Linux代码,并且有Linux下的系统接口,第三方dep库的语法解析,代码提示,自动补全,跳转,用起来真香。困扰了Linux后台开发人员多年的难题终极解决方案!要求VS Code版本在1.35.1以上。1.安装远程开发插件,在Extensions中输入Remote Development安装Remote Development后会自动安装关联的几个插件2....

2019-08-20 16:16:34 3911

原创 epoll的ET和LT模式触发场景

epoll有两种事件模型:Level Triggered (LT) 水平触发socket接收缓冲区不为空,有数据可读,读事件一直触发socket发送缓冲区不满,可以继续写入数据,写事件一直触发Edge Triggered (ET) 边缘触发socket的接收缓冲区状态变化时触发读事件socket的发送缓冲区状态变化时触发写事件总结:水平触发:只要可读,就一直触发读事件,只要可写,就...

2019-04-12 14:15:25 1551 5

原创 makefile常用编译选项

我们习惯创建一个环境变量文件Inc.mk来定义常用的变量CC = gccCXX = g++ -std=c++11AR ?= arARFLAGS = -scurvRANLIB ?= ranlibCFLAGS ?=CXXFLAGS ?=INCLUDE ?=LDFLAGS ?=CFLAGS += -Wall -g -fPIC -pipe -Wl,-z -Wl,defs -...

2019-03-27 20:36:37 3243

原创 curl源码编译安装

https://curl.haxx.se/download.html首先去curl官网下载对应版本,这里有个坑需要注意。如果下载的源码版本太高,编译是成功的,但是curl可执行文件访问https的时候还是会报各种奇怪的错误。所以我这里的做法是,先yuminstallcurl,然后curl -V看我的系统yum支持的curl最新版本。我这里是7.29.0这里点击OldRelease...

2019-03-27 16:02:28 8020

原创 宏定义的巧用

1. #用来标记参数是字符串#defineSTRING(X) #Xconst char *str = STRING(test);cout << str << endl;这里str的内容就是"test"2. ##用来连接参数#define AND(X) X##Xint num = AND(8);cout << num <<...

2019-03-27 11:50:10 206

原创 source insight解决对namespace不友好的办法

我们在头文件中使用using namespace xxx;如果这个头文件用的目录结构路径,直接在source insight里面点击无法找到的头文件,这样对于命名空间实际上source insight是没有解析到的,那么代码里面直接引用命名空间中的接口都是不提示的。我们可以这么做方便编码:Options-&gt;Preferences选择Special Language Optio...

2018-11-19 21:19:27 2238 1

原创 curl常用功能

最简单的get访问(-X GET可选):curl www.test.com使用用户名和密码:curl -u name:passwd http://www.test.com查看详细访问过程:curl -v www.test.compost访问(因为-d就指定了post,可以省略-X POST):curl -d "user=kevinchuang&amp;passw...

2018-11-03 20:05:41 360

原创 map2str和str2map

举个例子:http://www.test.cn:8080/max/123.html?name=kevinchuang&amp;pwd=123456#first通常http链接部分都是固定,我们需要关心的是从“?”到“#”部分的数据部分。比如现在我们要构造一个GET请求:string url = "http://www.test.cn:8080/max/123.html";url +=...

2018-11-03 18:55:06 405

原创 udp接收缓冲设置多大

先说一下保护消息边界,就是指传输协议把数据当作一条独立的消息在网上传输,接收端只能接收独立的消息。这个机制决定了udp的特性: 1. udp可以多线程对同一个fd进行发包操作,如果是tcp多线程发送,会让流乱序,接收端完全无法解析出来 2. udp接收端每次只能拿到一个包,tcp需要借助自定义包头来拆分出一个一个的包假如现在发送端发送了长度为100,200,300的3个包,接收端需要调用3...

2018-09-09 23:08:49 5363

原创 避免不必要的内存拷贝和清0

对于网络编程中,一般都喜欢使用memset清0和memcpy拷贝操作,举个例子:char buffer[1024];memset(buffer, 0, 1024);memcpy(buffer, proxy_hdr, IPC_HEADER_SZ);memcpy(buffer, trans_hdr, TRANMIT_HEADER_SZ);memcpy(buffer, buf, len);...

2018-09-09 21:50:57 1165

原创 把函数返回值转为异常处理机制

我们这里要使用的是#include &lt;stdexcept&gt;,可以参考官方文档 先举一个例子,比如调用recv的函数返回值处理:int ret = recv(fd...);if (ret &gt; 0){}if (ret == 0){}if (ret == -1){ //EAGAIN/EWOULDBLOCK提示你的应用程序现在没有数据可读请稍后再试 if (...

2018-09-04 13:00:17 425

原创 has been changed outside of Source Insight

在使用Source Insight写代码时,遇到它频繁弹窗提示代码在外部被更改 我们可以通过Options-&gt;Preferences-&gt;Files 就不会再提示了。 注意:这个解决方法,你要保证确实没有外部在修改你正在编辑的文件,频繁弹窗提示很烦。否则你这样设置了,外部有修改的,都不会让你确认就加载进来了。...

2018-04-26 09:41:01 1330

转载 MQTT协议通俗讲解

原文链接:https://blog.csdn.net/u011216417/article/details/69666752参考 Reference协议文档 Offical Docsv3.1.1英文原版中文翻译版其他资源网站MQTT官方主页Eclipse Paho 项目主页测试工具MQTT Spy(基于JDK)...

2018-04-24 13:06:29 1512

原创 ntpdate同步时间

先说下ntpdate的用法: usage: ntpdate [option] server大概就是ntpdate 192.168.0.1这样 最近发现个问题,当强制把本机时间改大了一个月之后,再使用ntpdate向主机同步时间会报错:ntpdate[8115]: Can't adjust the time of day: Invalid argument这个时候只需要增加-...

2018-04-02 16:36:08 567

原创 非阻塞套接字connect

EINPROGRESS The socket is nonblocking and the connection cannot be completed immediately. It is possible to select(2) or poll(2) for completion by selecting the socket for writing. After...

2018-03-22 11:29:32 1216

原创 linux守护进程

1.守护进程最重要的特性是后台运行。 2.守护进程必须与其运行前的环境隔离开来。这些环境包括未关闭的文件描述符,控制终端,会话和进程组,工作目录以及文件创建掩模等。这些环境通常是守护进程从执行它的父进程(特别是shell)中继承下来的。 总之,除开这些特殊性以外,守护进程与普通进程基本上没有什么区别。 因此,编写守护进程实际上是把一个普通进程按照上述的守护进程的特性改造成为守护进程(一个特殊...

2018-03-08 21:05:10 1260

原创 shell脚本打印日志

#!/bin/bashLOG_FILE="/var/log/test.log"&gt;"${LOG_FILE}"exec &amp;&gt;&gt;${LOG_FILE}set -x第一行是定义日志绝对路径 第二行是先清空日志文件内容 第三行是把当前脚本的标准输出,标准错误输出都重定向到文件LOG_FILE中 第四行是打印每一行shell命令执行 exec是用被执行的命令行替...

2018-03-05 16:31:31 11494

原创 docker run --rm

先引用docker run命令的帮助文档原文: Usage: docker run [OPTIONS] IMAGE [COMMAND] [ARG…] Run a command in a new container –rm Automatically remove the container when it exits 意思就是退出容器的时候容器就被删除了 现在有这样一个场景,我们想查...

2018-03-05 14:55:45 3004

原创 pipework给docker设置mac

继我上一篇文章pipework给docker设置ip,现在需求增加了还要设置mac,pipework也提供了这个功能。我们可以看看pipework的语法: Syntax: pipework hostinterface [-i containerinterface] [-l localinterfacename] [-a addressfamily] guest ipaddr/subnet[@d

2018-01-18 20:28:32 1809

原创 在windows下写linux代码直接编译

大多数人都习惯于在windows下用source insight编辑代码,然后用xftp拷贝到linux下进行编译,如果有小的改动,就直接在linux下用vim进行编辑修改。至于为什么是vim,工作这么多年,还没有一家公司的服务器是带界面的,可以安装使用ide的。 稍微进阶一点的办法,就是实现linux和windows文件夹共享,我们在windows上直接对着共享文件夹内的代码进行编辑,然后就在

2018-01-15 17:59:16 16625 6

原创 python的libev库pyev一点心得

http://pythonhosted.org/pyev/examples.html 这是官方文档给的例子,基本需求对照着看了就可以写了,一般用事件模型,无非就是关心一个有连接可以accept,一个有数据可以read的事件,然后就是定时器,这里都有了。 1.例子中的reset函数 事件每次触发结束了,都要调用reset函数,reset函数的作用是重新注册一次事件,为什么要这么做了?以前用惯了l

2017-11-18 16:14:55 1889

原创 python查看模块,对象的函数

这段时间在用libev的python版本事件模型,总共只有一个py.so文件,没有.py文件查看源码查看接口,最开始用shell命令直接查看.so的接口不尽人意。然后发现python提供了查询的接口在代码中可以直接打印出来看。 第一个:dir() 例如 print dir(pyev) 第二个:__dict__ 例如 print pyev.__dict__.items() loop

2017-11-18 15:32:45 4145

原创 linux查看.so导出函数

方法一 nm -D *.so 方法二 objdump -tT *.so

2017-11-18 15:19:58 4630

原创 pymongo连接超时的做法

通常我们连接mongo数据库会这样做: client = pymongo.MongoClient(host, port) 但是会发现一个问题,如果mongo连接不上,会在这里阻塞很久。解决办法可以看官方文档http://api.mongodb.com/python/current/api/pymongo/mongo_client.html#pymongo.mongo_client.MongoCl

2017-11-15 20:31:53 4006

原创 源码安装pip

今天本来要使用Twisted,但是公司的编译环境使用的Gentoo,没有yum,apt-get,我每次安装python库都是自己下载源码用python setup.py来编译安装,安装后的库文件在/usr/lib64/python2.7/site-packages目录下,源码安装的在这个目录下库的文件夹名字会带上后缀.egg。最后拷贝库文件到我的运行环境对应目录下面,例如拷贝到了目录/home/t...

2017-11-03 16:50:44 2452

原创 docker -v :rw :ro

先引用官方文档原话:If neither ‘rw’ or ‘ro’ is specified then the volume is mounted in read-write mode.(https://docs.docker.com/engine/reference/run/#volume-shared-filesystems) 官方文档说不指定的时候默认是rw模式。 用docker in

2017-10-31 19:49:49 13819

原创 2>/dev/null和>/dev/null 2>&1和2>&1 >/dev/null

标准输入0    从键盘获得输入 /proc/self/fd/0 标准输出1    输出到屏幕(即控制台) /proc/self/fd/1 错误输出2    输出到屏幕(即控制台) /proc/self/fd/2 /dev/null代表linux的空设备文件,所有往这个文件里面写入的内容都会丢失,俗称“黑洞” 1. 2>/dev/null意思就是把错误输出到“黑洞” 2. > /dev/n

2017-10-27 14:38:17 923

原创 source命令的巧用

首先,通常用于重新执行刚修改的初始化文件,使之立即生效,而不必注销并重新登录。例如,当我们修改了/etc/profile文件,并想让它立刻生效,而不用重新登录,就可以使用source命令,如source /etc/profile。 其次,source filepath或者. filepath,sh filepath或者./filepath区别: 1. sh filepath会重新建立一个子she

2017-10-27 12:25:06 1178

原创 python使用原始套接字发送二层包(链路层帧)

发送端代码:#!/usr/bin/python# -*- coding: UTF-8 -*-import socketimport structraw_socket = socket.socket(socket.PF_PACKET, socket.SOCK_RAW, socket.htons(0x1234))raw_socket.bind((&quot;eth0&quot;, 0))packet = struc

2017-09-25 10:01:20 4798 1

原创 python使用epoll实现的服务端例子

#!/usr/bin/python# -*- coding: UTF-8 -*-import socketimport selectsend_data = "hello world!"send_len = len(send_data)recv_len = 1024tcp_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

2017-09-22 18:58:29 1009

原创 pipework给docker设置ip

pipework下载地址 解压之后,有一个pipework文件,其实就是shell脚本。 1.创建启动一个容器 docker run -it -d –name test_pipework –net=none centos bash 2.给docker设置ip sh -x /usr/bin/pipework br0 test_pipework 192.168.0.12/24@192.168.

2017-08-29 11:51:53 1510

空空如也

空空如也

空空如也

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

TA关注的人 TA的粉丝

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