自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

转载 Linux C语言实现协程功能

协程,作为go语言的亮点,可以实现用户在用户层面根据业务实际情况来实现进程切换。但是由于C语言才是运行速度最快的语言,并且在很多时候,比如mips架构等,均只支持C语言,因此C语言实现协程功能对于开发人员来说是完全必要的功能。下面小沃就来教教大家在C语言环境下如何实现协程功能。这里主要用到了3个函数:getcontext,makecontext,swapcontext,这三个函数的功能分别是:getcontext:初始化上下文makecontext:创建协程与其要调用的函数swapcontext:切换到协程

2022-06-01 19:11:25 1159

转载 虚拟机网络配置(NAT、桥接、Hostonly)详解

很多人安装虚拟机的时候,经常遇到不能上网的问题,而vmware有三种网络模式,对初学者来说也比较眼花聊乱,今天我就来基于虚拟机3种网络模式,帮大家普及下虚拟机的网络配置知识virtualbox中有四种网络连接方式:nat bridged adapter internal host-only adaptervmware中有三种,其实它跟vmware的网络连接方式都是一样的概念,只是比vmware多了internal方式在介绍四种工作模式之前,先说下虚拟网卡,虚拟机安装好之后,会...

2022-05-29 19:48:07 3230

转载 __builtin_expect函数解析

1.引言在很多源码如Linux内核、Glib等,我们都能看到likely()和unlikely()这两个宏,通常定义如下:#define likely(x) __builtin_expect(!!(x), 1)#define unlikely(x) __builtin_expect(!!(x), 0)可以看出这2个宏都是使用函数 __builtin_expect()实现的, __builtin_expect()函数是GCC的一个内建函数(build-in function).官...

2022-05-27 18:28:36 780

转载 如何在 Linux 中扩展 XFS 根分区

导读 在某些情况下,/ 分区在Linux中磁盘空间不足。即使压缩和删除旧的日志文件也无济于事,因此在这种情况下,我们别无选择,只能扩展 / 文件系统。在本文中,我们将演示如何在 Linux 系统中扩展不是LVM逻辑卷中的xfs根分区。 首先我们必须向系统磁盘扩展额外的空间,然后使用growpart和xfs_growfs命令扩展根分区(或文件系统)。本文使用的VMwareWorkstation,并且安装的操作系统是Centos8,磁盘空间为20GB。/ 根分区大小为17GB。检查 /...

2022-05-25 13:42:46 602

原创 Ubuntu下libpng库编译使用

1.下载地址:https://sourceforge.net/projects/libpng/files/这里下载版本:libpng-1.6.37编译方法:cd libpng-1.6.37/mkdir bintargetchmod 777 bintarget/./configure --prefix=`pwd`/bintargetmake(生成的库文件在.libs目录下,../.libs/libpng16.a)make install2.此时虽然编译出png库文件,但还无法使用,.

2022-04-24 14:47:35 1451

转载 linux makefile 一些用法

Makefilear 用法  创建静态库。a文件。用C/C++开发程序时经常用到,但我很少单独在命令行中使用ar命令,一般写在makefile中,有时也会在shell脚 本中用到。关于Linux下的库文件、静态库、动态库以及怎样创建和使用等相关知识,参见本文后面的相关资料【3】《关于Linux静态库和动态库的分析》。  常用参数  格式:ar rcs libxxx.a xx1.o xx2.o  参数r:在库中插入模块(替换)。当插入的模块名已经在库中存在,则替换同名的模块。如果若干模块中有一..

2022-04-19 14:36:54 1245

转载 基于开源库jsoncpp的json字符串解析

json(JavaScript Object Notation)是一种轻量级高效数据交换格式。相比于XML,其更加简洁,解析更加方便。在实习期间,我负责的程序模块,多次使用到json进行数据传输。由于之前只对json稍稍了解,而且不熟悉项目组使用的开源json解析库,故在编码过程中效率很低,而且还出现过bug。虽然,最后项目组的事情比较顺利的完成了,但感觉自己对json的编解码熟悉仍然不够,故翻阅了相关文档,写下这篇技术博客。与君共勉。1.什么是json JSON(JavaScript Ob...

2022-04-07 20:59:10 1353

转载 jpeg图片格式详解

jpeg图片格式详解1. JPEG文件简介JPEG的全称是JointPhotographicExpertsGroup(联合图像专家小组),它是一种常用的图像存储格式, jpg/jpeg是24位的图像文件格式,也是一种高效率的压缩格式,文件格式是JPEG(联合图像专家组)标准的产物,该标准由ISO与CCI TT(国际电报电话咨询委员会)共同制定,是面向连续色调静止图像的一种压缩标准。其最初目的是使用64Kbps的通信线路传输720×576 分辨率压缩后的图像。通过损失极少的分辨率,可以将图像所需存储量减少

2022-04-02 15:47:18 21595

转载 #include “*.c“文件的妙用

今天我在看代码的时候突然看到在一个.c文件中包含了#include "*.c"代码,这个让我很诧异,然后google了一下,才发现是这么回事情,下面我写了一个测试代码,我相信你看完本篇文章就应该理解#include "*.c"文件的用法了。测试代码如下:main.c文件:print.c文件如下:这个两个代码必须放在同一目录下,但是测试时编译出错误了,大家别急,下面是我更新了的main.c文件。main.c文件:对比上面的两个main.c文件!测试编译并成功打印

2022-03-30 11:03:10 477

转载 webrtc视频jitterbuffer原理机制(描述版)

前言如果网络是理想的,即无丢包,无抖动,低延时,那么接收到一帧完整数据就直接播放,效果也一定会非常好。但是实际的网络总是复杂的,尤其无线网络。如果还是这样直接播放,网络稍微变差,视频就会卡顿,出现马赛克等。所以,在接收端对接收的数据做一个缓冲是很有必要的。缓冲一定是以延时作为代价的,延时越大,对抖动的过滤效果越好。一个优秀的视频jitterbuffer,不仅要能够对丢包、乱序、延时到达等异常情况做处理,而且还要能够让视频平稳的播放,尽可能的避免出现明显的加速播放和缓慢播放。主流的实时音视频框架基本

2022-03-22 16:08:29 1818

转载 jitter buffer QoS的解决方案

QoS出现的背景:而当网络发生拥塞的时候,所有的数据流都有可能被丢弃;为满足用户对不同应用不同服务质量的要求,就需要网络能根据用户的要求分配和调度资源,对不同的数据流提供不同的服务质量:1、对实时性强且重要的数据报文优先处理;2、对于实时性不强的普通数据报文,提供较低的处理优先级,网络拥塞时甚至丢弃。为了满足上述需求,QoS出现了,定义如下:QoS(Quality of Service)指一个网络能够利用各种基础技术,为指定的网络通讯提供更好的服务能力, 是网络的一种安全机制, 是用

2022-03-22 15:03:21 181

转载 音频传输之Jitter Buffer设计与实现

在语音通信中Jitter Buffer(下面简称JB)是接收侧一个非常重要的模块,它是决定音质的重要因素之一。一方面它会把收到的乱序的语音包排好序放在buffer里正确的位置上,另一方面它把接收到的语音包放在buffer中缓冲一些时间使播放的更平滑从而获得更好的语音质量。下图是JB在接收侧软件框图中的位置。 从上图可以看出,从网络上收到的语音包会放在JB里(这个操作叫做PUT),在需要的时候便从JB里取出来(这...

2022-03-22 14:11:20 604

转载 h264解码之自定义信息(SEI)

参考博客:https://www.jianshu.com/p/4d9120dfcd69NAL header起始码(暗红底色)"0x00000001"分割出来的比特流即是NAL unit,起始码紧跟的第一个字节(墨绿底色)是NAL header。上图“NAL header”一共出现了四个数值:"0x06",此时NRI为"00B",NAL unit type为SEI类型。“0x67”,此时NRI为“11B”,NAL unit type为SPS类型。“0x68”,此时NRI为“11B”...

2022-03-17 15:12:05 980

转载 ioremap 与 mmap

内存映射 对于提供了MMU(存储管理器,辅助操作系统进行内存管理,提供虚实地址转换等硬件支持)的处理器而言,Linux提供了复杂的存储管理系统,使得进程所能访问的内存达到4GB。  进程的4GB内存空间被人为的分为两个部分--用户空间与内核空间。用户空间地址分布从0到3GB(PAGE_OFFSET,在0x86中它等于0xC0000000),3GB到4GB为内核空间,如下图:  内核空间中,从3G到vmalloc_start这段地址是物理内存映射区域(该区域中包含了内核镜像、物理页框表mem_ma..

2022-03-17 10:41:34 203

转载 性能分析工具gprof介绍

Ver:1.0目录1. GPROF介绍 42. 使用步骤 43. 使用举例 43.1 测试环境 43.2 测试代码 43.3 数据分析 53.3.1 flat profile模式 63.3.2 call graph模式 74. 链接库中的函数 75. 使用局限 86. 分析示例 12%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%1. gprof介绍gprof是GNU profile工具,可以运行于linux、AIX、Sun等操作系统进行C、C+

2022-03-16 18:22:18 6204

转载 TCP/IP协议字段理解

TCP协议源/目的端口号:表示数据从哪个进程来,到哪个进程去序号:TCP将每个字节的数据都进行了编号称为序列号,接收端收到数据之后要发送确认序号给发送端。序号用于对字节流进行编址,例如序号是301,表示第一个字节的编号为301,携带的数据长度是100,下一个报文的编号就是401确认序号:期望收到的下一个报文段的序号,B收到A发来的一个报文段,序号是301,携带的数据长度是300,那么B发送给A的确认序号就是6014位头部长度:表示TCP头部有多少个4字节,所以TCP头部最大长度为15.

2022-03-14 18:07:22 4402

转载 socket开发:一台服务器同一端口同时在多个网卡上开启listen的误区理解

误区一:一个端口是否在服务器上只能开一次?socket开发中经常会发现,当前端口已被占用,貌似感觉一个端口在一台服务器上只能被打开一次,实际是端口和IP地址相关,一台电脑上如果配置多个IP,则每个IP都可以配置相同的端口。如本机两个网卡IP分别为192.168.100.73和10.32.91.197,可以分别在这个两个网卡上开800端口进行监听。误区二:为什么不指定监听在哪个ip上也能实现访问服务?在建立socket的时候,大多数情况是不需要指定本地服务器IP,而是使用INADDR_ANY,这样建立监

2022-03-10 20:59:41 1626

转载 ISP和IQ调试

什么是ISPisp:image signal process, 图像信号处理,这是技术image signal processor, 图像信号处理器,这是设备本质:通过数字运算来修补前端采集的不理想数据,尽可能提升图像质量。ISP处理器:核心是数字运算能力,在HI3516EV200中是内置DSP。ISP主要坐下面的工作:AEC(自动曝光控制)、AGC(自动增益控制)、AWB(自动白平衡)、AF(自动对焦)色彩校正、Lens Shading、Gamma 校正、祛除坏点、Auto Black L

2022-03-08 17:43:14 1226

转载 PS-TS-PES-ES流结构分析

目录概念普及:TS层(ts header+adaption+PAT/PMT)ts headeradaptionPAT/PMTpes层es层概念普及:PS:是MPEG2的一种分装格式,目前可用于GB28181等协议中,PS格式包括:PS header,PS system header,PS system map,PES层,ES层,具体可以参考PS封包到rtp中,适用于没有误差产生的媒体存储,如DVD等存储介质;TS:是ISOIEC 13818-1的标准,主要用于数字高清电视

2022-03-07 17:55:50 1360

转载 【流媒体服务】推流拉流体验(二):【1】使用VLC轻松体验本地视频推流、拉流、播放功能

文章目录前言一、VLC是什么?二、VLC推流1、选择串流2、选择本地资源视频串流3、串流目标设置4、转码选项5、开始推流三、VLC拉流1、开启第二个VLC程序2、打开网络串流界面3、输入流媒体地址4、拉流效果展示四、总结前言本章主要讲解如何通过VLC开源免费工具对本地视频实现推流、拉流、播放演示。一、VLC是什么?VLC 是一款自由、开源的跨平台多媒体播放器及框架,可播放大多数多媒体文件,以及 DVD、音频 CD、VCD 及各类流媒体协议。VLC下载地址:www.

2022-03-07 16:17:53 4158 2

转载 关于如何使用pthread_cond_timedwait()超时接口

之前大家讨论说pthread_cond_timedwait()接口不能用,如果需要超时返回功能的话必须写一个定时器来实现.但是该操作太昂贵了,其实可以直接使用该接口来实现超时等待功能的,下面描述我对该接口的了解及用法,仅供参考.1.POSIX提供了多种时钟类型,其中包括以下两种:CLOCK_REALTIME:Systemwiderealtimeclock.系统范围内的实时时钟,是个软件时钟,可以通过命令等方式修改该系统时间.CLOCK_MONOTONIC:Representsmon...

2022-03-01 10:28:23 1630

转载 (Flash分区,MTD层级,Bootloader、LinuxKernel、FileSystem)

目录1.flash 分区2.MTD 层级3.Bootlader 、Linux Kernel、 RootFile4.详解Bootloader5.bootloader、kernel、文件系统相关问题6.Arm 从bootloader 、kernel到rootfs的启动流程1.flash 分区2.MTD 层级 参考资料:Linux MTD 介绍3.Bootlader 、Linux Kernel、 RootFile三者启动顺序:Boo...

2022-02-25 13:52:56 1482

转载 flash 分区配置

uboot 与系统内核中 MTD分区的关系:分区只是内核的概念,就是说A~B地址放内核,C~D地址放文件系统,等等。1:在内核MTD中可以定义分区A~B,C~D。。。。。。并与以绝对的地址赋上值。bootloader中只要能将内核下载到A~B区的A地址开始处就可以,C~D区的C起始地址下载文件系统。。。这些起始地址在MTD的分区信息中能找到。bootloader对分区的概念不重要,只要它能把内核烧到A位置,把文件系统烧到C位置。所以,在bootloader对Flash进行操作时,哪块区域放什

2022-02-25 13:27:15 1022

转载 音视频入门-17-GIF文件格式详解

* 音视频入门文章目录 *GIF 文件格式解析图像互换格式主要分为两个版本,即图像互换格式 87a 和图像互换格式 89a。图像互换格式 87a:是在 1987 年制定的版本。图像互换格式 89a:是在 1989 年制定的版本。在这个版本中,为图像互换格式文档扩充了图形控制区块、备注、说明、应用程序接口等四个区块,并提供了对透明色和多帧动画的支持。现在我们一般所说的 GIF 动画都是指 89a 的格式。GIF 包含的数据块:文件头(Header)逻辑屏幕标识符(Logic.

2022-02-22 14:59:48 2210

转载 CMake教程及使用案例

转载:https://www.hahack.com/codes/cmake为什么需要CMake如果你一直在windows平台上开发,使用最多的可能就是VS的开发环境,它已经集成了全套的开发环境包括构建编译等。你或许听过好几种 Make 工具,例如GNU Make,QT 的qmake,微软的MS nmake,BSD Make(pmake),Makepp,等等。这些 Make 工具遵循着不同的规范和标准,所执行的Makefile格式也千差万别。这样就带来了一个严峻的问题:如果软件想跨平台,...

2022-02-22 14:50:33 1498

转载 Ubuntu Linux下SDL2安装

摘要:1.使用apt-get安装开发包sudoapt-getinstalllibsdl2-dev2.编辑源文件,hello.c#include<SDL2/SDL.h>intmain(){SDL_Window*window=0;SDL_Renderer*render=0;SDL_Init(SDL_INIT_EVERYTHING);window=SDL_CreateWindow("hello",SDL_WINDOWPOS_CENTERED,SDL_WIN 1.使用apt-get 安装开发包

2022-02-16 13:36:05 3694

转载 嵌入式系统中看门狗的使用总结

两年前总结的东西,一时没时间整理,放了很久居然差点忘了,现在重见天日了。但是还不是很完整,先放上来,以后有时间就完善她。~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 最近需要在板子上加上一块WatchDog,以确保在系统出错时自动重启,所以看了一些在嵌入式系统中使用看门狗的资料,现在总结如下:一、看门狗原理 在产品化的嵌入式系统中,为了使系统在异常情况下能自动复位,一般都需要引入看门狗。 看门狗其实就是一个可以在一定时间内被复位的计数器。当看门狗启动后...

2022-02-14 12:00:05 1954

转载 linux 内核笔记之watchdog

watchdog简而言之,watchdog是为了保证系统正常运行,或者从死循环,死锁等一场状态退出的一种机制。看门狗分硬件看门狗和软件看门狗。硬件看门狗是利用一个定时器电路,其定时输出连接到电路的复位端,程序在一定时间范围内对定时器清零(俗称“喂狗”),因此程序正常工作时,定时器总不能溢出,也就不能产生复位信号。如果程序出现故障,不在定时周期内复位看门狗,就使得看门狗定时器溢出产生复位信号并重启系统。软件看门狗原理上一样,只是将硬件电路上的定时器用处理器的内部定时器代替,这样可以简化硬件电路设计,但在

2022-02-14 11:58:37 1717

转载 objdump & nm & addr2line&readelf

GCC把C语言源文件('.c')编译成汇编语言文件('.s'),汇编器把汇编语言文件翻译成目标文件('.o'),最后由链接器链接所有的目标文件和有关的库生成可执行文件('a.out')。如打开'-g'选项,GCC编译'.c'文件时,把附加的调试信息插进'.s'文件,这些调试信息经汇编器和链接器稍加转换一直传到可执行文件中。这些调试信息包括行号、变量的类型和作用域、函数名字、函数参数和函数的作用域等源文件的特性。在 某些目标文件中,调试信息用'.stab'打头的一类汇编指导命令表示,这些指导命令穿插在汇编

2022-01-24 11:20:16 760

转载 链接参数export dynamic和-rdynamic的使用

存在程序main通过dlopen使用libA中的符号:main.c:1 #include <stdio.h>2 #include <dlfcn.h>34 typedef void (*func)(void);567 void test_main()8 {9 return;10 }111213 int main()14 {15 void *handle = dlopen("./libA.so", RTLD_...

2022-01-17 20:24:17 651

转载 cmake CMakeLists.txt 命令 add_compile_options、add_definitions、target_compile_definitions、build_command

add_compile_options()增加源文件的编译选项。add_compile_options(<option> ...)为当前路径和下层路径的目标增加编译器命令行选项,选项在此命令被调用后添加。查看文档中关于路径和目标的 COMPILE_OPTIONS 属性。这个命令可以被用来添加任何的选项,但是存在替代命令(target_compile_definitions() 和 add_definitions())增加预处理定义或(target_include_directo

2022-01-14 16:42:07 1166

转载 cmake快速入门

简介 cmake是kitware公司以及一些开源开发者在开发几个工具套件(VTK)的过程中所产生的衍生品。后来经过发展,最终形成体系,在2001年成为一个独立的开放源代码项目。其官方网站是www.cmake.org,可以通过访问官方网站来获得更多关于cmake的信息,而且目前官方的英文文档比以前有了很大的改进,可以作为实践中的参考手册。一、为何要使用项目构建工具? 为何要使用cmake和autotools之类的项目构建工具? 我想,这恐怕是刚刚接触软件项目的人最应该问的问...

2022-01-14 16:30:52 122

转载 linux 内核链表操作头文件list.h

#ifndef _LINUX_LIST_H#define _LINUX_LIST_H#define inline __inline#define LIST_POISON1 (void *) 0x00100100#define LIST_POISON2 (void *) 0x00200200#define prefetch(x) x#define offsetof(TYPE, MEMBER) ((int) &((TYPE *)0)->MEMBER)#define con...

2022-01-05 19:55:21 612

转载 linux top命令查看内存及多核CPU的使用讲述

查看多核CPU命令mpstat-PALL和sar-PALL说明:sar-PALL>aaa.txt重定向输出内容到文件aaa.txttop命令经常用来监控linux的系统状况,比如cpu、内存的使用,程序员基本都知道这个命令,但比较奇怪的是能用好它的人却很少,例如top监控视图中内存数值的含义就有不少的曲解。本文通过一个运行中的WEB服务器的top监控截图,讲述top视图中的各种数据的含义,还包括视图中各进程(任务)的字段的排序。top进...

2021-12-25 17:56:44 4033 1

转载 Linux进程或线程绑定到CPU

为了让程序拥有更好的性能,有时候需要将进程或线程绑定到特定的CPU,这样可以减少调度的开销和保护关键进程或线程。进程绑定到CPULinux提供一个接口,可以将进程绑定到特定的CPU:#include<sched.h>intsched_setaffinity(pid_tpid,size_tcpusetsize,constcpu_set_t*mask);intsched_getaffinity(pid_tpid,size_tcpusetsize,cpu_...

2021-12-25 17:07:16 1196

转载 进程替换 --- exec

在 Linux 中,exec 指的是一组函数,一共有 6 个。其中只有 execve() 是真正意义上的系统调用,其它都是在此基础上经过包装的库函数。当进程调用一种 exec 函数时,该进程完全由新程序替换,而新程序则从其 main 函数开始执行。因为调用 exec 并不创建新进程,所以前后的进程 ID (当然还有父进程号、进程组号、当前工作目录……)并未改变。exec 只是用另一个新程序替换了当前进程的正文、数据、堆和栈段(进程替换)。区别/* 完整的路径加文件名,* 使用列表传参的方式 */.

2021-12-25 11:42:53 272

转载 Linux系统编程————exec进程替换

exec函数族:进程替换函数1、何为进程替换:1、让父子进程执行不相干的操作;也就是说,在一个运行的程序a中,调用另外的应用程序b。2、换核不换壳;exec族函数,能够替换进程地址空间中的代码段.text段(对应的堆、栈中的数据都会改变),重新填充新的代码。2、函数原型:execl系列是变参函数int execl(const char* path,const char* arg,...);int execlp(const char* file,const char* arg,...)

2021-12-25 11:33:31 204

转载 Linux下修改进程名称

http://www.cnblogs.com/LittleHann/p/4991600.htmcatalog1. 应用场景2. 通过Linux prctl修改进程名3. 通过修改进程argv[0]修改进程名4. 通过bash exec命令修改一个进程的cmdline信息1. 应用场景1. 标识父子进程名称,防止被误杀2. 构造假的进程名及参数,引导非法进入人员到蜜罐系统,取证3. 恶意程序、木马会通过"檫除"自己的进程名,使ps的时候显示的是一个无名字的进程,同..

2021-12-25 11:22:40 3208

转载 Linux C程序修改进程名称

Linux C程序修改进程名称1、前言2、命令行参数(argc, argv)以及环境变量(environ)介绍2.1、C程序典型的存储空间布局2.2、argc, argv介绍2.3、environ介绍2.4、编写程序验证修改进程名是否可以成功2.5、查看进程名变长之后影响了那部分内存的数据2.6、结论3、Redis修改进程名的做法4、总结1、前言Linux C程序运行时,进程的名称通常就是argv[0],而通过修改内存中argv[0]存储的内容就可以修改进程名了。下面对此作详细介绍。

2021-12-25 11:04:08 1132

转载 malloc钩子和内存泄漏工具mtrace、Valgrind

一:malloc钩子函数static void* (* old_malloc_hook) (size_t,const void *);static void (* old_free_hook)(void *,const void *);static void my_init_hook(void);static void* my_malloc_hook(size_t,const void*);static void my_free_hook(void*,const void *);static

2021-12-21 10:57:20 445

空空如也

空空如也

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

TA关注的人

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