随笔分类 - C语言
摘要:
嵌入式项目开发中,会有很多功能模块需要频繁修改参数,Linux下我们可以通过ini格式的文件保存配置信息。 本文通过开源库iniparser,详细讲解如何用C语言实现ini文件的参数解析和配置保存。 本文代码实例获取方式见文末。 一、ini文件 1 什么是 ini文件 INI(Initializat
阅读全文

摘要:
之前写了一篇如何自动生成版本号的文章, 《让你的C程序,自动打印版本信息》 初衷是让自己的程序在运行时自动打印与版本相关的信息, 避免测试时因为版本信息不确定导致的一些功能对应不上去的问题, 当时留了一个坑,写一篇关于如何设计一个相对规范的版本号的文章, 现在把这个坑填上。 镜像版本号格式 proj
阅读全文

摘要:
持续更新中... 很多想从事嵌入式Linux开发的老铁问一口君,有没有快速提升自己编程水平的小例子? 一口君根据自己多年工作经验,整理了一些基于Linux的c语言的非常实用的小例子, 这些例子在嵌入式开发工作中,或多或少都会用到。 看看你们会做多少? 一、基础C语言 1. 排序算法 给指定数组排序,
阅读全文

摘要:在工作中遇到一个问题,就是想获取某个函数执行之后打印的字符串信息。 这个功能应用场景挺多的, 特地整理了一下相关知识点分享给大家。 1. 使用临时文件 1) 使用shell的重定向 将命令输出重定向到一个临时文件,在我们的应用程序中读取这个临时文件,获得外部命令执行结果,代码如下所示: /*****
阅读全文
摘要:持续更新中... 很多想从事嵌入式Linux开发的老铁问一口君,有没有快速提升自己编程水平的小例子? 一口君根据自己多年工作经验,整理了一些基于Linux的c语言的非常实用的小例子, 这些例子在嵌入式开发工作中,或多或少都会用到。 看看你们会做多少? 一、基础C语言 1. 排序算法 给指定数组排序,
阅读全文
摘要:在工作中遇到一个小问题,就是想获取函数system()执行之后打印的字符串信息。 这个功能还是很实用的,能为我们节省很多开发时间, 特地整理了一下相关知识点分享给大家。 1. 使用临时文件 1.1 使用shell的重定向 首先想到的方法就是将命令输出重定向到一个临时文件,在我们的应用程序中读取这个临
阅读全文
摘要:一、软件管理 稍微上点规模的软件开发往往周期都非常长, 中间会产生很多临时版本, 这些临时版本往往会有各种各样的bug, 由于项目参与的人员众多、水平参差不齐, 软件分支众多、功能复杂, 经常会有各种稀奇古怪的事情发生, 经常遇到一个问题就是: 某个测试版本测出了问题, 但是研发却发现服务器中没有对
阅读全文
摘要:接着上一篇文章《由字节对齐引发的一场“血案“ 》 在平常的调试中,printf字体格式与颜色都是默认一致的。 如果可以根据log信息的重要程度,配以不同的颜色与格式,可以很方便的查找到要点。 1、printf字体显示语法说明 printf(“\033[显示方式;字体颜色;背景颜色m 字符串 \033
阅读全文
摘要:最近在搞个网络通信协议, 采用socket udp传输, 运行时,居然报段错误了, 经过debug,发现居然是因为字节对齐问题导致的。 这个问题在实现通信协议,是经常会遇到的问题, 为了方便读者理解, 我把内容做了简化,分享给大家。 1、协议说明 通信协议信令格式如下: typedef struct
阅读全文
摘要:
前面写了一篇关于网络相关的文章:如何获取当前可用网口。 《简简单单教你如何用C语言列举当前所有网口!》 那么如何使用C语言直接操作网口? 比如读写IP地址、读写MAC地址等。 一、原理 主要通过系统用socket()、ioctl()、实现 int socket(int domain, int typ
阅读全文

摘要:一、前言 前面一口君写了一篇关于url的文章: 《一文带你理解URI 和 URL 有什么区别?》 本篇在此基础上,编写一个简单的用于解析url的小例子, 最终目标是解析出URL中所有的数据信息。 二、库函数 用到的几个库函数如下: 1. strncasecmp 头文件 #include<string
阅读全文
摘要:之前更新过从0实现聊天室的4篇文章,很多粉丝朋友还是觉得内容相对简单,本文一口君会在原有代码基础上增加数据库操作功能,后续文章还会增加文件传输功能。 前面文章链接: 《从0实现基于Linux socket聊天室-多线程服务器模型-1》 《从0实现基于Linux socket聊天室-多线程服务器一个很
阅读全文
摘要:0. 前言 之前写过一篇关于MD5摘要算法的文章,很多老铁说能否出一篇关于加密的文章吗? 《C语言实现MD5,竟如此简单!》 一口君的字典里没有"不行"这两个字!必须安排! 关于加密的一些基本概念,大家可以参考下面这一篇文章: 《公钥密码学简介》 本文,一口君带着大家自己实现一个简单但也很实用的加密
阅读全文
摘要:0. 前言 作为一名嵌入式工程师,经常需要通过UART与外设打交道,而对于串行总线来说,往往我们必须要进行帧同步。通常的做法是把信令包含在2个0x7E的中间。 除此之外还有HDLC、PPP等协议也会到有此应用场景。 那么如何从这些数据帧中提取有效数据呢? 本文通过一个简单的实例给大家详细讲述如何从帧
阅读全文
摘要:0. 前言 粉丝留言,想知道如何使用Makefile给多个文件和多级目录建立一个工程,必须安排! 关于Makefile的入门参考文章,可以先看这篇文章: 《Makefile入门教程》 为了让大家有个更加直观的感受,一口君将之前写的一个小项目,本篇在该项目基础上进行修改。 该项目详细设计和代码,见下文
阅读全文
摘要:0.前言 上次发了一个嵌入式的学习路线,很多粉丝问我各个阶段的入门项目,其中第二阶段的《基于socket聊天室》写了4篇循序渐进的文章,而第一阶段的《电话号码本管理》也非常想要。 一口君必须安排。该项目,一口君同样采用循序渐进的步骤,一点点为大家讲解这个小项目是如何从头开始点点写出来的。 1. 项目
阅读全文
摘要:本文的目的是通过随机截取的一段网络数据包,然后根据协议类型来解析出这段内存。 学习本文需要掌握的基础知识: 网络协议 C语言 Linux操作 抓包工具的使用 其中抓包工具的安装和使用见下文: 《一文包你学会网络数据抓包》 视频教学链接如下: 《教你如何抓取网络中的数据包!黑客必备技能》 一、截取一个
阅读全文
摘要:最近一口君在做一个项目,遇到一个问题,ARM上的threadx在与DSP通信采用消息队列的方式传递消息(最终实现原理是中断+共享内存的方式),在实际操作过程中发现threadx总是crash,于是经过排查,是因为传递消息的结构体没有考虑字节对齐的问题。 随手整理一下C语言中字节对齐的问题与大家一起分
阅读全文
摘要:一口君最近工作用到CRC校验,顺便整理本篇文章和大家一起研究。 一、CRC概念 1. 什么是CRC? CRC(Cyclic Redundancy Checksum)是一种纠错技术,代表循环冗余校验和。 数据通信领域中最常用的一种差错校验码,其信息字段和校验字段长度可以任意指定,但要求通信双方定义的C
阅读全文
摘要:学习不止! 问答不止! 一、粉丝问题 二、相关函数说明 1. 函数说明 产生随机数的方法很多,常用的是rand()、srand(),来看一下这2个函数的定义: SYNOPSIS #include <stdlib.h> int rand(void); int rand_r(unsigned int *
阅读全文