Linux C/C++后台开发

Talk is cheap. Show me the code!

排序:
默认
按更新时间
按访问量

用strace查找进程卡死原因

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

2018-01-15 14:59:03

阅读数:1158

评论数:0

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

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

2017-09-22 19:49:45

阅读数:526

评论数:0

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

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

2017-08-11 19:42:41

阅读数:913

评论数:0

struct中的数组和指针

这里可以看出来两点: 1.struct的内存对齐是按照成员最大的那一个来的 2.数组在struct中不占大小 重点说第2个,在linux内核代码中屡见不鲜! 这个用法主要用于变长buffer,test1的大小为4,结构体中的data[0]不占用任何空间,甚至是一个指针的空间都不占,data在...

2017-08-04 20:56:08

阅读数:505

评论数:3

从epoll源码分析它的使用

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

2017-04-06 15:17:40

阅读数:803

评论数:0

线程池的最优大小

计算密集型应用(CPU密集) 顾名思义就是应用需要非常多的CPU计算资源,I/O在很短的时间就可以完成,而 CPU 还有许多运算要处理。 在计算密集型应用中,线程池的大小应该等同于主机中 CPU 的数量。再添加更多线程将会打断请求的处理,因为线程的上下文切换也会延迟响应时间。非阻塞型 IO 应用将...

2017-03-01 17:13:36

阅读数:1332

评论数:0

libevent多线程使用bufferevent的那些事

void do_accept(struct evconnlistener *listener, evutil_socket_t fd, struct sockaddr *sa, int socklen, void *ctx) { //不使用Nagle算法,选择立即发送数据而不是等待产生更多...

2016-11-09 17:42:20

阅读数:2937

评论数:4

C++封装MySQL预处理C API

#ifndef _PRE_STATEMENT_H_ #define _PRE_STATEMENT_H_ #include "mysql.h" #include class pre_statement { public: pre_statement(); ~pre_st...

2016-08-04 14:00:19

阅读数:1441

评论数:2

Linux下高并发socket,单机提供五十万连接

引用《Linux网络编程》 一个完整的Socket描述,五元组,{协议,本地地址,本地端口,远程地址,远程端口} 当我们自己写客户端测试程序来测试我们的服务端程序性能的时候,经常会遇到连接量上不去的问题,大多都是停留在2万左右。如果我们的测试机器有限,要想达到百万连接量的测试,那我们哪里去找50台...

2016-07-14 11:13:52

阅读数:2195

评论数:0

has been changed outside of Source Insight

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

2018-04-26 09:41:01

阅读数:6

评论数:0

MQTT协议通俗讲解

原文链接:https://blog.csdn.net/u011216417/article/details/69666752 参考 Reference 协议文档 Offical Docs v3.1.1 英文原版 中文翻译版 其他资源 网站 MQTT官方主...

2018-04-24 13:06:29

阅读数:19

评论数:0

ntpdate同步时间

先说下ntpdate的用法: usage: ntpdate [option] server 大概就是ntpdate 192.168.0.1这样 最近发现个问题,当强制把本机时间改大了一个月之后,再使用ntpdate向主机同步时间会报错: ntpdate[8115]: Can't a...

2018-04-02 16:36:08

阅读数:13

评论数:0

非阻塞套接字connect

EINPROGRESS The socket is nonblocking and the connection cannot be completed immediately. It is possible to select(2) or poll(2) for completi...

2018-03-22 11:29:32

阅读数:24

评论数:0

linux守护进程

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

2018-03-08 21:05:10

阅读数:599

评论数:0

shell脚本打印日志

#!/bin/bash LOG_FILE=&quot;/var/log/test.log&quot; &amp;gt;&quot;${LOG_FILE}&quot; exec &amp;amp;&amp;gt;&amp;gt;${L...

2018-03-05 16:31:31

阅读数:293

评论数:0

docker run --rm

先引用docker run命令的帮助文档原文: Usage: docker run [OPTIONS] IMAGE [COMMAND] [ARG…] Run a command in a new container –rm Automatically remove the containe...

2018-03-05 14:55:45

阅读数:288

评论数:0

pipework给docker设置mac

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

2018-01-18 20:28:32

阅读数:671

评论数:0

github管理代码

首先要去https://github.com/注册一个账号,然后Create a new repository,记下我们的用户名,邮箱和仓库名字。 然后在linux上安装git服务,执行ssh-keygen -t rsa -C “314899581@qq.com”生成秘钥,执行完成之后在~/...

2018-01-17 18:03:55

阅读数:149

评论数:0

在windows下写linux代码直接编译

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

2018-01-15 17:59:16

阅读数:1005

评论数:2

python的libev库pyev一点心得

http://pythonhosted.org/pyev/examples.html 这是官方文档给的例子,基本需求对照着看了就可以写了,一般用事件模型,无非就是关心一个有连接可以accept,一个有数据可以read的事件,然后就是定时器,这里都有了。 1.例子中的reset函数 事件每次触...

2017-11-18 16:14:55

阅读数:468

评论数:0

python查看模块,对象的函数

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

2017-11-18 15:32:45

阅读数:1205

评论数:0

linux查看.so导出函数

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

2017-11-18 15:19:58

阅读数:912

评论数:0

pymongo连接超时的做法

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

2017-11-15 20:31:53

阅读数:693

评论数:0

源码安装pip

今天本来要使用Twisted,但是公司的编译环境使用的Gentoo,没有yum,apt-get,我每次安装python库都是自己下载源码用python setup.py来编译安装,安装后的库文件在/usr/lib64/python2.7/site-packages目录下,源码安装的在这个目录下库的...

2017-11-03 16:50:44

阅读数:795

评论数:0

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-s...

2017-10-31 19:49:49

阅读数:1114

评论数:0

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的空设备文件,所有往这个文件里面写入的内容都会...

2017-10-27 14:38:17

阅读数:531

评论数:0

source命令的巧用

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

2017-10-27 12:25:06

阅读数:536

评论数:0

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

发送端代码:#!/usr/bin/python # -*- coding: UTF-8 -*-import socket import structraw_socket = socket.socket(socket.PF_PACKET, socket.SOCK_RAW, socket.htons(...

2017-09-25 10:01:20

阅读数:750

评论数:0

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

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

2017-09-22 18:58:29

阅读数:442

评论数:0

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...

2017-08-29 11:51:53

阅读数:506

评论数:0

docker registry私有仓库的一些错误解决办法

Error response from daemon: login attempt to https://test.io:5000/v2/ failed with status: 401 Unauthorized 这种情况是用户名或者密码错误导致Error response from daemo...

2017-08-12 17:13:08

阅读数:1241

评论数:0

linux c使用system调用shell脚本

system的原理其实就是调用fork创建子进程去执行shell命令,然后返回最后一条shell命令的状态值。linux下man system可以看到返回值说明: 1.如果返回值等于-1就是system函数执行失败,准确的说是fork创建子进程失败。 2.shell执行最后一条语句的状态值放在...

2017-08-05 12:48:47

阅读数:1218

评论数:0

在docker内部创建和启动新的docker

架构师开始给我分配这样一个任务的时候我还以为是嵌套在docker里面创建docker,其实不然,毕竟最后形成的架构,是要创建和启动的docker在一个层级被管理。 这里我们可以看到docker启动之后,会有一个dockerd的守护进程,一个containerd管理进程。注意dockerd进程...

2017-08-04 21:21:30

阅读数:622

评论数:0

udp调用sendmsg报错Invalid argument

最近在写一个udp发送的时候冒出来一个错误,errno等于22,错误描述是Invalid argument,百度之后都是一些关于文件操作的错误,最后还是要靠自己。用strace跟进内核调用过程,也是没看出来什么。 可以看到,sendmsg所有参数完全正确,但是最后就是错误。 这个问题的主要点是...

2017-08-04 10:27:15

阅读数:875

评论数:0

Source Insight4.0问题总结

Source Insight4.0.0086下载地址 破解包下载地址 1.代码格式自动对齐问题 Options->File Type Options->Auto Indenting 2.工程新增或者删除文件,函数变量定义跳转找不到 Project->Synchron...

2017-07-14 23:59:20

阅读数:2863

评论数:0

Docker背后的内核知识Linux namespace

Docker引擎的基础是Linux容器技术(Linux Containers,LXC)容器有效地将由单个操作系统管理的资源划分到孤立的组中,以便更好地在孤立的组之间平衡有冲突的资源使用需求。具体体现在6个方面: namespaces Mount CLONE_NEWNS 挂...

2017-06-21 10:37:59

阅读数:278

评论数:0

atoi实现

atoi()函数会扫描参数str字符串,跳过前面的空白字符(例如空格,tab缩进等,可以通过isspace()函数来检测),直到遇上数字或正负符号才开始做转换,后续再遇到非数字或字符串结束时(‘\0’)才结束转换,并将前面部分的转换结果返回。#define INT_MAX 0x7fffffff ...

2017-05-02 11:24:08

阅读数:617

评论数:9

TCP连接的建立与终止

先附上正常连接和正常关闭情况下TCP状态变迁图 两个应用程序同时彼此执行主动打开的情况是可能的,尽管发生的可能性极小。TCP特意设计了可以处理同时打开,对于同时打开它仅建立一条连接而不是两条连接。 两个应用程序同时都执行主动关闭也是可能的,TCP协议也允许这样的同时关闭(simulta...

2017-04-21 16:26:15

阅读数:376

评论数:0

CentOS 7安装MySQL 5.7.18

1. MySQL下载地址,因为我用的CentOS 7,所以 我这里下载的是mysql-5.7.18-1.el7.x86_64.rpm-bundle.tar 2. 解压 3. 安装顺序rpm -ivh mysql-community-common-5.7.18-1.el7.x86_6...

2017-04-19 16:11:00

阅读数:4617

评论数:2

memcmp比较两个struct是否相等

struct MyStruct { char a; int b; }; MyStruct A, B; memcmp(&A, &B, sizeof(MyStruct));A和B是否可以通过memcmp来判断是否相等。我一直以为虽然要内存对齐,但是a后面会补三个’\0’...

2017-03-07 16:04:05

阅读数:1383

评论数:2

不定参数函数牵扯出来的栈的生长方向和大端小端模式

主题:CPU的架构决定了大端小端模式和栈的生长方向。 首先参数从右到左压栈的方式,这是C语言决定的,比如说Pascal就是从左到右压栈,所以Pascal不支持不定参数函数。比如:printf("%s%d%d\n", s, a, b);格式字符串是确定存在的,后面的变量都是不确...

2017-03-06 21:08:32

阅读数:341

评论数:0

linux下strncasecmp的实现

linux下不区分大小写的字符串比较函数原型: int strncasecmp(const char *s1, const char *s2, register size_t n); 返回值:如果相等返回0     如果s1>s2,返回正整数     如果s1<s2,返回负整数...

2017-03-06 16:49:54

阅读数:743

评论数:2

#define MAX(a, b, ……)

用宏定义MAX(a,b)求两个数最大值:#define MAX(a,b) a>b?a:b用宏定义MAX(a,b,c)求三个数最大值:#define MAX(a,b,c) (a>b?(a>c?a:c):(b>c?b:c))用宏定义MAX(a,b,c,d)求四个数最大值:#de...

2017-03-06 15:46:31

阅读数:715

评论数:0

my.cnf参数配置:InnoDB引擎性能优化

在网上看了无数的my.cnf的配置,大多数提到的配置无外乎这几个: 1. innodb_buffer_pool_size 2. innodb_log_file_size 3. innodb_log_buffer_size 4. innodb_flush_log_at_trx_commit ...

2017-03-01 16:10:00

阅读数:269

评论数:0

MySQL prepare statement速度的测试思考

最近一直纠结于MySQL预处理API和普通API的速度问题,网上的一致说法都是主张使用预处理API,因为它的SQL语句会提前预编译,后续只要传送参数到MySQL,减少多次调用时编译需要的时间和多次调用需要再次传输SQL的数据量。但是基于这个原理,其实应用场景就是同一条SQL语句需要多次执行的情况下...

2017-02-22 21:12:58

阅读数:517

评论数:0

MySQL存全角字符和半角字符的区别

很不巧公司内测IM的时候又遇到MYSQL_DATA_TRUNCATED错误,日志记录还是在mysql_stmt_fetch调用的时候出现的。鉴于之前的经验,应该是给定的结果集绑定区域长度不够造成的,反复检查了好多遍没发现问题。我在代码中都是对应的关系,比如char(20),我代码中就会定义char...

2017-01-16 18:12:58

阅读数:1692

评论数:0

count(), group by, order by

最近做IM的时候遇到一个问题,同时用到了这三个关键字。就是查询一个人的离线消息详情,我们服务端返回给客户端显示的这个详情包括了三个内容,第一个要求列出离线这段时间哪些人或者群给你发了消息,第二个这其中的某个人或者群发了多少条离线消息,第三个拿出最新的一条显示出来。很明显,group by分组哪些人...

2017-01-13 20:26:49

阅读数:977

评论数:6

C++还是Java

最近一直在思考这个问题,在Java大行其道的季节,我怎么还能有自信坚信着我们C/C++走Linux后台服务器开发必定是日不落的道路。然后自己找了很多大牛的回答: https://www.zhihu.com/question/30918223 https://www.zhihu.com/ques...

2017-01-04 10:47:34

阅读数:683

评论数:0

MySQL连接池的实现

class connect_pool { public: connect_pool(); ~connect_pool();public: MYSQL *get_connection(); int free_connection(MYSQL *mysql);priva...

2016-12-30 17:07:25

阅读数:213

评论数:0

MYSQL_DATA_TRUNCATED

按照MySQL手册的说法,除非用mysql_options()启用了截短通报功能,mysql_stmt_fetch()才会返回MYSQL_DATA_TRUNCATED这个错误。于是我调用mysql_stmt_fetch()的方法:int ret = mysql_stmt_fetch(m_stmt)...

2016-12-29 21:17:22

阅读数:943

评论数:0

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