自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

Amazing

锦绣河山非昔比,风流人物看今朝

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

原创 lighttpd cgi不能重启

lighttpd cgi不能重启

2024-06-20 14:49:51 561

原创 基于rootfs构建Docker镜像

基于rootfs构建Docker镜像

2023-03-06 17:20:52 1416

原创 FreeBSD更换国内源

FreeBSD更换国内源

2023-03-01 14:14:49 4027

原创 VMware安装FreeBSD虚拟机

VMware安装FreeBSD虚拟机

2023-02-28 14:47:34 2985 1

原创 非阻塞recvfrom卡住

非阻塞recvfrom卡住

2023-02-22 18:41:06 1282

原创 无符号整数转换为点分十进制IP地址

无符号整数转换为点分十进制IP地址

2023-02-22 10:55:01 477

原创 Linux信号-进程退出状态码

Linux信号-进程退出状态码

2023-02-21 17:10:32 936

原创 Linux script的录屏及回放功能

Linux录屏及回放功能

2023-02-21 16:55:55 397

原创 既风骚又哲理的10句话,不服不行

人生哲理

2022-12-13 09:38:25 268

原创 Linux默认路由表及查询

Linux默认路由表及查询

2022-12-09 11:36:54 4799

原创 Amazon C++ SDK SMS/MMS

Amazon SMS/MMS二次开发

2022-11-16 14:20:39 393

原创 Asterisk Macro带来的性能较低问题

Asterisk作为优秀的开源VOIP软件,其功能核心Dialplan辅助Asterisk核心完成一些复杂的业务功能。但其中一个常见的应用Macro在Dialplan的扩展中展现的相当灵活,方便用户快速扩展适合自己的应用。Macro的灵活性也有它的弊端,即会导致较低的性能。通过阅读app_macro代码发现Macro执行过程是递归调用。如:在上述的dialplan中,macro-1将会递归调用macro-2,macro-3,直到macro-3返回后则此次调用结束,递归结束后需要按原路径回归,这样在回归

2022-06-02 09:42:19 279

原创 socket选项SO_REUSEADDR带来的隐患

背景在实际开发中遇到一次单通的问题,排查后发现同一个端口被绑定了多次,导致在实际RTP流传输过程中端口对应的上层应用对象不正确,使得后续媒体传输都被丢弃。验证问题#include <stdio.h>#include <stdlib.h>#include <string.h>#include <sys/socket.h>#include <netdb.h>#include <arpa/inet.h>#includ

2022-05-26 17:21:25 911 2

原创 记:freeswitch-1.10.7 aarch64交叉编译

1. 下载源码https://files.freeswitch.org/freeswitch-releases/freeswitch-1.10.7.-release.tar.gz2. 编写交叉编译脚本build.sh#!/bin/bashexport ROOTDIR=$(cd `dirname $0`; pwd)export INSTALL_PREFIX=/data/freeswitch2export EXTERNAL_PREFIX=/data/ext-freeswitch2ex

2022-03-29 15:38:24 2620

原创 ARMv8之arm64架构汇编知识

1. 寄存器1.1. 通用寄存器 31 个R0~R30,每一个寄存器能够存取一个64位大小的数。 当使用 x0~x30访问时,是一个 64位的数;当使用 w0~w30访问时,是一个 32 位的数,访问的是寄存器的低32位,如下图所示:1.2. 向量寄存器(也可以叫做浮点寄存器)每一个寄存器的大小是 128 位的。 分别能够用Bn、Hn、Sn、Dn、Qn的方式来访问不一样的位数。如下图:Bn:一个 Byte的大小,即8位 Hn:half word,即16位 S...

2022-03-18 17:45:19 4997

原创 ARMv8架构

1. 背景从1995年,ARMV4(主要对应ARM7 family)开始到现在ARM RISC体系结构到现在已经演化了20多年。从设计一开始ARM就关注到了低功耗 到2011年,所有的ARM-Cotex family都被设计成使用ARMV7架构。1.1. 发展历程ARM7:采用ARMV4架构 ARM9:ARMV4的变体 ARM11:ARMV4的变体 Cotex-A8:为了匹配不同的市场,ARMV7从Cotex-A8开始被划分为三种属性:Application-Profile、RealT

2022-03-18 15:03:16 2098

原创 Linux coredump文件压缩

1. 原理core文件的压缩借助于管道符“|”。 当有coredump文件生产时,系统会将文件流通过管道传输给压缩命令,这样就完成coredump文件的压缩工作。2. 压缩辅助工具手动编译core_helper shell脚本,内容添加为: exec gzip -> /data/corefiles/core-$1-$2-$3-$4.gz 3. 更新coredump生成规则 echo "| /usr/local/sbin/core_helper %e %t %s %p"

2022-03-09 17:43:01 2015 2

转载 程序员的十个等级

背景介绍自西方文艺复兴以来,中国在自然科学方面落后西方很多,软件领域也不例外。当然现在中国的许多程序员们对此可能有许多不同的意见,有些人认为中国的程序员水平远落后于西方,有些则认为中国的程序员个人能力并不比西方的程序员差,只是整个软件产业落后而已。那么,到底中国的程序员水平比西方程序员水平差,还是中国有许多优秀的程序员达到或超过了西方程序员同等水平呢?要解决这个问题,必须先知道程序员有多少种技术层级,每个层级需要什么样的技术水平,然后再比较中国和西...

2022-03-08 09:26:09 2015

原创 getaddrinfo神秘面纱

1. getaddrinfo能做什么名字到地址转换:解析DNS地址 服务到端口转换:将IP地址和端口转换为一个socket地址2. 重要数据结构struct addrinfo { int ai_flags; int ai_family; int ai_socktype; int ai_protocol; socklen_t ai_addr

2022-03-04 11:51:57 2887

原创 res_nsearch查询DNS过慢优化

1. 问题背景一个无效的DNS地址,通过res_nsearch接口解析其IP地址。由于res_nsearch查询过程过慢,影响系统其他业务的使用。2. 解决思路由于res_nsearch接口是在glibc库中实现,阅读源码了解其实际工作原理,以解决查询过慢的问题。3. 重要数据结构贯穿于res_nxxx系列接口函数的重要数据结构如下:struct __res_state { int retrans; /* retransmition time interval */ int ret

2022-03-03 14:24:58 413

原创 DNS解析

1. 背景最近遇到DNS解析慢的问题,梳理了一下DNS消息结构,用C++写了一个DNS解析过程。2. 相关数据结构2.1. DNS消息基类class dns {public: int hostlen(const unsigned char *buffer) { int length = 0; for (; ; ) { if ('\0' == buffer[length]) { len

2022-03-02 19:42:06 1511

原创 DNS消息格式

1. 简介+---------------------+| Header |+---------------------+| Question | the question for the name server+---------------------+| Answer | RRs answering the question+---------------------+| Authority

2022-03-02 16:13:34 2438

原创 通过STDIN_FILENO向后台运行的程序传递数据

1. 背景有一个后台运行的程序,需要向它的标准输入传递数据。2. 原理在Linux系统中,出socket之外的fd均可用read/write来对其进行读写操作。3. 实例#include <stdio.h>#include <signal.h>#include <unistd.h>#include <errno.h>#include <string.h>#include <sys/types.h>#in

2022-02-26 16:57:11 428

原创 alarm中断慢系统调用

1. 背景在阻塞系统调用中,我们经常会遇到一种系统调用返回过慢或永远阻塞的情况。此时我们需要让系统调用能够快速返回,提高系统整体性能。我们可以利用中断机制,使得系统调用被中断而成功返回。2. 原理利用alarm函数为进程注册一个闹钟,当闹钟被系统唤醒时将,系统会将SIGALRM信号回馈给进程。 SIGALRM信号的默认操作是终止进程。为了让进程不终止,需要利用sigaction函数向系统注册信号处理函数(此处为啥不用signal注册信号处理函数)。3. sigaction & sig

2022-02-26 14:34:23 397

原创 呼叫CAPS

背景评估SIP Server每秒建立呼叫数量,即CAPS(Call Attempts Per Sercond)。模型使用SIPP:1s 20路,通话时长20s,并发100路,共呼叫5000路呼叫。则该模型对应的CAPS:5000除以呼叫持续时间(如下图:5000 / (4* 60 +20) ≈19.23) ------------------------------ Scenario Screen -------- [1-9]: Change Screen -- Call-rat...

2022-02-21 15:33:51 1883

原创 Linux硬件中断smp_affinity

1. 背景硬件中断频繁发生(如:网络中断),将会很消耗CPU资源。尤其在当下多核CPU的情况下,如果将中断平均分派到各个核中进行处理,这无疑会增加CPU资源的消耗。如果将其固定在某一个核上进行专有处理,则可以提升总体CPU性能,也能够很好地平衡性能。2. 以网络中断为例2.1. 查看网口信息eth0 Link encap:Ethernet HWaddr 26:0D:14:8B:BC:XX inet addr:172.16.1.129 Bcast:172.1

2022-02-18 17:06:38 1499

原创 Linux top实用技巧

1. top简介top用来显示Linux上进程的运行状态。可以实时地查看系统的运行情况,也可以显示系统进程或线程的汇总信息。2. 输出结果top - 14:18:38 up 4 days, 4:27, 14 users, load average: 3.85, 4.13, 4.02Tasks: 181 total, 1 running, 137 sleeping, 0 stopped, 0 zombie%Cpu(s): 0.2 us, 0.2 sy, 0.0 ni, 99.7

2022-02-14 16:58:26 278

原创 X86应用程序热补丁(一)

事例// mymain.c#include <stdio.h>#include <time.h>#include <unistd.h>void mytest2(){ printf("[%s:%05d] %s enter!\n", __FILE__, __LINE__, __FUNCTION__);}void mytest(){ printf("[%s:%05d] %s enter!\n", __FILE__, __LINE__,

2022-02-12 00:18:43 658

原创 Aarch64应用程序热补丁(二)

示例主程序动态链接库// mytest.c:#include <stdio.h>static void mytest_print(void){ printf("[%s:%d] %s\n", __FILE__, __LINE__, __FUNCTION__);}void mytest2(void){ printf("[%s:%d] %s\n", __FILE__, __LINE__, __FUNCTION__);}void mytest(void)

2022-02-09 11:47:53 718

原创 Aarch64应用程序热补丁(一)

示例外部动态库mytest.c:#include <stdio.h>static void mytest_print(void){ printf("[%s:%d] %s\n", __FILE__, __LINE__, __FUNCTION__);}void mytest2(void){ printf("[%s:%d] %s\n", __FILE__, __LINE__, __FUNCTION__);}void mytest(void){

2022-02-08 12:09:59 1003 6

原创 nm命令分析ELF文件符号

示例#include <stdio.h>static int global = 0;static void mytest_print(void){ printf("[%s:%d] %s\n", __FILE__, __LINE__, __FUNCTION__);}void mytest2(void){ printf("[%s:%d] %s\n", __FILE__, __LINE__, __FUNCTION__);}void mytest(void)

2022-02-07 16:43:05 688

原创 Ubuntu配置多个ssh公钥和私钥

存放新的证书cd .sshmkdir new_key将新的公钥(id_rsa.pub)和私钥(id_rsa)放入new_key目录中配置新公钥和私钥环境vim/etc/ssh/ssh_config1. 将# IdentityFile ~/.ssh/id_rsa出对应的注释去掉,去掉后的结果为: IdentityFile ~/.ssh/id_rsa2. 新增new_key配置如下: IdentityFile ~/.ssh/new_key/id_rsa结果展示.

2022-01-27 10:01:56 4146

原创 使用QEMU在Ubuntu-16.04.5搭建aarch64运行环境

安装依赖库apt-get install qemu qemu-user-static binfmt-support debootstrap下载根文件系统wget http://cdimage.ubuntu.com/ubuntu-base/releases/16.04.5/release/ubuntu-base-16.04.6-base-arm64.tar.gz创建根文件系统镜像&环境初始化fallocate -l 2048M aarch64.imgmkfs.ext4 -F

2022-01-24 11:21:44 1807

原创 Linux进程/proc/num/fd tcp socket[24056]来源

Linux哲学思想是一切皆文件,即对于Linux做的任何操作,都可以在Linux中找到与之对应的文件。进程1421中36 -> socket:[24056]在进程1421中存在fd 37(对应socket:[24056]),24056即为socket连接对应的inode节点,该节点的信息可以在/proc/net/tcp中找打,即上图所示。/proc/net/tcp详解参考链接:https://www.kernel.org/doc/html/latest/networking/proc_ne.

2021-12-27 11:59:27 1946

原创 Asterisk线程池结构及任务处理流程

2021-11-26 12:07:25 258

原创 C库stdout造成的死锁

2021-11-08 19:31:50 800

原创 fork实现popen

log模块#include <stdarg.h>#include <sys/types.h>#include <sys/wait.h>#include <sys/syscall.h>#include <sys/socket.h>#include <thread>static void doLog(const char *file, int line, const char *format, ...){ ch..

2021-07-22 14:43:14 183

原创 源码安装及配置mariadb-10.5.8

源码下载​wgethttps://mirrors.nju.edu.cn/mariadb//mariadb-10.5.8/source/mariadb-10.5.8.tar.gztar zxvfmariadb-10.5.8.tar.gz; cdmariadb-10.5.8; mkdir build;cmake .. -DCMAKE_INSTALL_PREFIX:PATH=/mariadb; make -j40; make install​安装数据库引擎cd /mariad...

2021-01-06 15:40:57 996

原创 Linux安装java开发环境

1. 下载java SDKwgethttps://download.oracle.com/otn-pub/java/jdk/14.0.1+7/664493ef4a6946b186ff29eb326336a2/jdk-14.0.1_linux-x64_bin.tar.gz?AuthParam=1591691214_e7a3c5faa82cdecf083f23befc30cea4或访问页面进行下载:https://www.oracle.com/java/technologies/javase-jd.

2020-06-09 16:33:01 179

原创 交叉编译Python-3.8.3

源码下载​wgethttps://www.python.org/ftp/python/3.8.3/Python-3.8.3.tar.xzxz-dPython-3.8.3.tar.xztar -xvfPython-3.8.3.tar.xzcdPython-3.8.3​如果PC上预先没有python3.8的版本,则需要编译3.8的PC版本执行:mkdir build.pc; cd build.pc;../configure --enable-optimization...

2020-06-04 18:00:45 3990 4

空空如也

空空如也

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

TA关注的人

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