自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

原创 arm架构函数帧栈分析

微信公众号:二进制人生 专注于嵌入式linux开发。问题或建议,请发邮件至hjhvictory@163.com。 更新:2020/04/26。 图:二进制人生公众号 本文研究的是arm架构的函数帧栈,阅读者需要有arm汇编基础,不过本文涉及的汇编指令不是很多。 理论上来说,ARM的15个通用寄...

2020-05-06 22:38:23 137 0

原创 通用动态数组C实现

微信公众号:二进制人生 专注于嵌入式linux开发。问题或建议,请发邮件至hjhvictory@163.com。 更新日期:2020/1/9,转载请注明出处。 图:二进制人生公众号 内容目录 前言数据结构和接口实现创建销毁初始化去初始化获取元素插入元素测试代码 前言 本文动态数组的设...

2020-05-06 22:29:01 41 0

原创 malloc提供的回调注册机制--定位内存泄漏

微信公众号:二进制人生 专注于嵌入式linux开发。问题或建议,请发邮件至hjhvictory@163.com。 更新日期:2020/04/13,内容整理自网络,转载请注明出处。 图:二进制人生公众号 通过在malloc、free之前或者之后打印调试信息或者其他统计操作,可以帮助定位内存泄...

2020-05-06 22:25:47 35 0

原创 linux C线程池实现

微信公众号:二进制人生 专注于嵌入式linux开发。问题或建议,请发邮件至hjhvictory@163.com。 更新日期:2020/1/19,转载请注明出处。 快过年了,应该会停更一段时间,提前祝我的各位读者们新年快乐,2020年会有更好的发展! 最近在收集轮子或者造轮子,意在写一个嵌入式l...

2020-05-06 22:10:46 44 0

原创 mtrace

2020-04-19 16:09:32 83 0

原创 free_page

2020-03-11 10:39:16 46 0

原创 linux C项目练习

更多文章请关注微信公众号:二进制人生 线程池C实现 https://mp.weixin.qq.com/s?__biz=Mzg2MjE4NTg0Mw==&mid=2247483986&idx=1&sn=5abf112fe595f53b3701a2de239b1c19&am...

2020-01-20 15:51:01 76 0

原创 一个简单易用的开源http请求库C实现--ghttp

微信公众号:二进制人生 专注于嵌入式linux开发。问题或建议,请发邮件至hjhvictory@163.com。 更新日期:2020/1/15,转载请注明出处。 愿你有所收获… 图 二进制人生公众号 内容目录 前言用libghttp实现http get请求用libghttp实现http ...

2020-01-14 16:38:29 120 0

原创 循环队列C实现

微信公众号:二进制人生 专注于嵌入式linux开发。问题或建议,请发邮件至hjhvictory@163.com。 更新:2019/12/26 ###内容目录 文章目录 ###什么是队列 队列是一种操作受限的线性表,其限制条件为允许在表的一端进行插入,而在表的另一端进行删除。插入的一端叫做队尾,删...

2019-12-26 13:43:13 58 0

原创 异步处理框架C实现

微信公众号:二进制人生 专注于嵌入式linux开发。问题或建议,请发邮件至hjhvictory@163.com。 更新:2019/12/13 内容目录(支持跳转) 引子数据 结构和接口实现 反思 引子 今天跟大家分享一个我在实际工作中运用得最多的框架:异步执行队列。 在开发中,我们...

2019-12-13 17:24:48 191 0

原创 位图C实现

欢迎关注公众号:二进制人生。 Bitmap翻译成中文就是位图。所谓bitmap,就是用每一位来表示一个事物的某种状态,由于只有一位,所以这个状态值只能是0或者1,很多个同类事物的状态就构成了一个状态位图。这个二值状态常用来表示存在或不存在,使用了或者没使用。 举一个通俗的例子,开会签到...

2019-12-11 16:23:54 49 0

原创 获取命令执行结果--封装一个标准的POPEN

微信公众号:二进制人生 专注于嵌入式linux开发。问题或建议,请发邮件至hjhvictory@163.com。 更新日期:2019/12/12 内容目录(支持跳转) 函数原型基本原理简单实例项目级封装 函数原型 #include<stdio.h> FILE*popen(...

2019-12-02 09:14:03 111 0

原创 linux网络编程实战--web服务器源码解读

推出一个视频解读boa源码。欢迎关注公众号:二进制人生 boa是一个非常小巧的Web服务器,其可执行代码只有大约60KB左右。作为一种单任务Web服务器,Boa只能依次完成用户的请求,而不会fork出新的进程来处理并发连接请求。但Boa支持CGI,能够为CGI程序fork出一个进程来执行...

2019-11-11 15:19:37 64 0

原创 嵌入式架构师成长之路系列之架构设计

详见微信公众号,二进制人生。 目录: 嵌入式环境下软件设计的特点 设计目标 设计思路 多进程解耦 嵌入式环境下软件设计的特点 要谈嵌入式的软件架构,首先必须了解嵌入式软件设计的特点。下面的这一段摘自http://www.uml.org.cn/embeded/201906123.asp,...

2019-10-21 16:50:59 767 1

原创 嵌入式软件架构师之路(1)浅谈面向对象思想在C的应用

原文链接: https://mp.weixin.qq.com/s?__biz=Mzg2MjE4NTg0Mw==&mid=2247483784&idx=1&sn=d7c0d62b0565e9b63786af2209eba866&chksm=ce0af194f97d7...

2019-10-19 13:00:42 138 0

原创 每日一篇--获取设备ip地址

方法有许多,仅给出最容易看的一种 #include &lt;stdio.h&gt; #include &lt;arpa/inet.h&gt; #include &lt;netdb.h&gt; #include &lt;sys/types....

2018-08-15 15:32:05 484 0

原创 每日一篇--获取文件夹下指定后缀的所有文件名

#include &lt;stdlib.h&gt; #include &lt;stdio.h&gt; #include &lt;dirent.h&gt; #define SUFFIX ".txt" #define FILE...

2018-08-13 12:36:53 317 0

原创 通讯系统评价指标

•一、有效性指标 –1、数据传输速率 •比特率:通讯系统单位时间内传输数据的二进制位数。(bit/s) •波特率:通讯系统单位时间内传输信号波形的变化次数。(baud) –2、频率利用率:单位频带内的传输速度。单位为:(bit/s.hz) –3、协议效率:所传输的数据包中的有效数据位数占...

2018-08-04 14:45:20 932 0

转载 二叉树(理论篇)

   一、什么是树?         在前几篇的博文中主要讲述的是链式存储这种数据结构,它们的用途非常广泛,但是在实际的应用中,还存在着另一种非常重要的数据结构,它就是树。树的结构示意图如下所示:         上图就是一种数据结构----树,之所以在每个框中都留出空白,主要原因是这种结...

2018-08-04 14:32:18 184 0

转载 Linux编程之select

select系统调用的的用途是:在一段指定的时间内,监听用户感兴趣的文件描述符上可读、可写和异常等事件。 select 机制的优势 为什么会出现select模型? 先看一下下面的这句代码: int iResult = recv(s, buffer,1024); 这是用来接收数据的,在默...

2018-08-04 14:30:38 361 0

转载 一个简单的Linux下的socket程序

和C语言教程一样,我们从一个简单的“Hello World!”程序切入 socket 编程。本节演示了 Linux 下的代码,server.cpp 是服务器端代码,client.cpp 是客户端代码,要实现的功能是:客户端从服务器读取一个字符串并打印出来。服务器端代码 server.cpp: ...

2018-08-04 14:29:05 261 0

转载 linux简介

严格的来讲,Linux 不算是一个操作系统,只是一个 Linux 系统中的内核,即计算机软件与硬件通讯之间的平台;Linux的全称是GNU/Linux,这才算是一个真正意义上的Linux系统。GNU是Richard Stallman组织的一个项目,世界各地的程序员可以变形GNU程序,同时遵循GPL...

2018-08-04 14:04:57 911 0

转载 TCP的粘包问题以及数据的无边界性

  上节我们讲到了socket缓冲区和数据的传递过程,可以看到数据的接收和发送是无关的,read()/recv() 函数不管数据发送了多少次,都会尽可能多的接收数据。也就是说,read()/recv() 和 write()/send() 的执行次数可能不同。 例如,write()/send()...

2018-08-04 14:04:13 232 0

转载 栈的实现

 一、栈         栈是一种按照先进后出的数据存储结构(LIFO),它检索元素的顺序与存储元素的顺序是相反的。所谓的先进后出是指数据元素的存储与删除操作,这意味着最后一个存储的元素将会第一个被删除。举个例子,现在要把"5,4,3,2,1"存入到“栈”中,从栈的底部到顶部...

2018-08-04 14:01:14 863 0

原创 nfs挂载报错:mount.nfs mount system call failed

有可能是版本不匹配,解决方法很简单,加参数 vers=3 mount -t nfs -o vers=3,nolock,rw remote_ip:remote_dir local_dir 欢迎关注公众号

2018-07-12 09:42:21 4927 1

转载 程序退出前的遗言----linux下利用backtrace追踪函数调用堆栈以及定位段错误

一般察看函数运行时堆栈的方法是使用GDB(bt命令)之类的外部调试器,但是,有些时候为了分析程序的BUG,(主要针对长时间运行程序的分析),在程序出错时打印出函数的调用堆栈是非常有用的。在glibc头文件"execinfo.h"中声明了三个函数用于获取当前线程的函数调用堆栈。i...

2018-07-05 09:28:51 515 0

转载 高级嵌入式软件工程师必备技能---Linux下core文件调试方法

在程序不寻常退出时,内核会在当前工作目录下生成一个core文件(是一个内存映像,同时加上调试信息)。使用gdb来查看core文件,可以指示出导致程序出错的代码所在文件和行数。1.core文件的生成开关和大小限制  1)使用ulimit -c命令可查看core文件的生成开关。若结果为0,则表示关闭了...

2018-07-04 19:43:31 260 0

转载 linux下tty, ttyn, pts, pty, ttySn, console理解

/dev/tty控制终端,即当前用户正在使用的终端,是一个映射,指向当前所使用的终端(例如/dev/tty1,/dev/pts/0)。往/dev/tty下写数据总是写到当前终端。/dev/ttyn虚拟终端,例如ubuntu不启动图形界面时,那么就会默认连接到/dev/tty1这个虚拟终端。/dev...

2018-07-04 17:10:06 229 0

转载 每日一篇--linux重定向串口打印到telnet(方便远程调式)

在嵌入式开发中,我们都是使用串口进行调试定位问题。然而在成品调试或者远程调试时,没有串口,只能telnet进去,少了很多应用进程的打印,这样就不利于我们发现问题。需要一种方法把串口所有输出重定向到telnet。   这就涉及到一些终端概念,可以参考博文linux下tty, ttyn, pts...

2018-07-04 17:00:55 1799 2

转载 tcp套接字中的TIME_WAIT状态

TIMEWAIT状态本身和应用层的客户端或者服务器是没有关系的。仅仅是主动关闭的一方,在使用FIN|ACK|FIN|ACK四分组正常关闭TCP连接的时候会出现这个TIMEWAIT。服务器在处理客户端请求的时候,如果你的程序设计为服务器主动关闭,那么你才有可能需要关注这个TIMEWAIT状态过多的问...

2018-07-03 10:41:29 255 0

原创 每日一篇--为嵌入式系统开发一套内存管理机制

公司的项目都没有自己的内存管理机制,要使用内存时就malloc,不用时就free,感觉有效率问题,而且有内存泄漏的隐患,因此我决定设计一套给嵌入式linux设备使用的内存管理机制(很大部分参考了某开源web服务器中的设计)。   设计思想综述 用Alloc结构体表示一个内存块,内存块的大小有...

2018-05-23 18:51:44 466 0

转载 转发写的很好的一篇文章--ARM介绍

ARM的总部在剑桥,同时在伦敦和纽约上市。市盈率接近50.这在芯片行业是个很夸张的数字,要知道Intel才十几的市盈率。原因有两个,第一名气大,移动界芯片的武林盟主,绝对的市场占有率。第二销售额低,净利也不高,2015年授权费和版税加一起才12亿美金,销售额连国内展讯都赶不上。ARM内部,真正盈利...

2018-05-07 11:29:22 473 0

转载 进程间传递文件描述符--sendmsg,recvmsg,struct msghdr,struct iovec

UNIX域套接字可以在同一台主机上各进程之间传递文件描述符。下面先来看两个函数:[cpp] view plain copy#include &lt;sys/types.h&gt;   #include &lt;sys/socket.h&gt;     ssize_t...

2018-04-20 15:55:02 642 0

原创 简单网络管理协议SNMP(史上最全)

博客不更新,欢迎关注我的公众号:二进制人生 简单网络管理协议(SNMP)是TCP/IP协议簇的一个应用层协议。在1988年被制定,并被Internet体系结构委员会(IAB)采纳作为一个短期的网络管理解决方案;由于SNMP的简单性,在Internet时代得到了蓬勃的发展,1992年发布了...

2018-04-20 11:38:26 44977 4

转载 利用套接字实现本地通信

使用套接字除了可以实现网络间不同主机间的通信外,还可以实现同一主机的不同进程间的通信,且建立的通信是双向的通信。socket进程通信与网络通信使用的是统一套接口,只是地址结构与某些参数不同。其主要流程如下:代码实现如下:客户端:[cpp] view plain copy//client  #inc...

2018-04-02 13:13:30 1122 0

原创 利用套接字进行本地通信

sockaddr_un 进程间通信的一种方式是使用UNIX套接字,人们在使用这种方式时往往用的不是网络套接字,而是一种称为本地套接字的方式。这样做可以避免为黑客留下后门。创建使用套接字函数socket创建,不过传递的参数与网络套接字不同。域参数应该是PF_LOCAL或者PF_UNIX,而不能用PF...

2018-04-02 13:05:37 686 0

转载 每日一篇--Linux下检测网卡与网线连接状态,使用ioctl向socket发送SIOCETHTOOL命令字

#include  &lt;stdio.h&gt; #include  &lt;stdlib.h&gt; #include  &lt;string.h&gt; #include  &lt;fcntl.h&gt; #include  ...

2018-04-02 09:26:58 643 0

原创 libevent基础文件event-internal.h(struct event_base结构体)

该文件主要是定义了结构体strcut event_base,该结构体里面有许多成员是结构体,也在本文件定义,比如struct eventop,struct event_signal_map ,struct common_timeout_list,struct event_changelist,先介...

2018-02-05 22:36:07 325 0

原创 libevent基础文件changelist-internal.h(struct event_change结构体)

changelist-internal.h定义了一个结构体struct event_change结构体。 我们在调用backend's dispatch 函数之前可能会对一个event做修改,比如改它的事件类型,或者添加新的事件类型,甚至是添加或者删除event,libevent用st...

2018-02-05 20:34:57 410 0

原创 libevent基础文件event_struct.h(struct event 结构体)

先明白几点,libevent用struct event结构体表示一个事件,事件可以是IO事件,信号时间,定时器超时事件。一个event由一个event_base管理。 一个event_base有三条队列,一条用于链接它管理所有的event 一条用于链接所有激活的event 一条用于链接触发的IOe...

2018-02-05 18:45:41 486 0

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