双向链表list.h升序排序 前一篇文章《整理一个双向链表list.h》介绍了自实现的双向链表list.h,在Linux内核中,常见的是维护全局链表(如i2c板级有一个全局链表),基本上都是在尾部插入、模块退出时删除,不会涉及到链表中间插入、删除,——这也让我一度认为该链表的实现只具备这些“少许”功能。当然,如果抛开内核场合,其它场合可能会需要到更多的功能,所以前文中做了介绍。这里就说一下如何将链表做成升序(或降序)排列的。 代码... 2016-10-20 20:45 我的程序代码 暂无评论 喜欢 0 阅读 827 次 阅读全文
整理一个双向链表list.h 一直觉得Linux内核的双向链表是十分巧妙的设计,它的实现方式与数据结构课程上讲的完全不同。内核list实现依赖于GCC的扩展,在其它平台不一定能正常运行。在内核中,一般是结构体中使用链表成员,而不是像数据结构课那样在链表结构体中使用数据域。C++中将lsit作为模板,能应用于各种类型数据上,但Linux内核无法使用,因而使用其它手段实现,方便扩展。事实上,内核大量结构体都使用了list。网上有很多关... 2016-10-19 20:32 我的程序代码 暂无评论 喜欢 0 阅读 733 次 阅读全文
Linux GNU C结构体数组初始化示例 实然心血来潮,想学习一下结构体数组的初始化方面的知识。 以下是GCC实然心血来潮,想学习一下结构体数组的初始化方面的知识。特有的数组初始化的风格: // 数组赋值另一种方式,但只在gcc下编译通过,g++不能 enum { AAA = 0, BBB, CCC, DDD, }; // 只对感兴趣的索引值进行赋值,而不管下标的顺序 static const int regs[] = { [DDD] = 250, [CCC] = 3, [AAA] = 180, }; 这种风格在ker... 2016-10-13 12:55 我的程序代码 评论 3 条 喜欢 0 阅读 27,563 次 阅读全文
Linux C代码实现读取配置文件示例 最近在看hostapd,该程序使用了conf配置文件,本文参考hostapd代码抽取出读取配置文件的示例,由于配置选项和业务密切相关,实际使用中仍需要做修改。 下面是代码示例: /** 读配置文件示例 注:配置文件必须为unix格式,即\n结尾 */ #include <stdio.h> #include <stdlib.h> #include <string.h> #include <ctype.h> #include <stdint.h> // 结构体 struct hostapd_conf... 2016-08-21 17:18 我的程序代码 暂无评论 喜欢 0 阅读 947 次 阅读全文
Linux C代码实现主函数参数选项解析 软件开发中难免会对命令行输入参数做解析、判断。本文给出2个此方面的示例。 1、手动解析版本 思路十分简单,使用argc、argv,逐个字符比较,得到要想的参数名字即进行判断、解析。 #include <stdio.h> #include <stdlib.h> #include <string.h> #include <ctype.h> int debug; void show_version(char* name) { printf("%s by Late Lee, version: 1.0\n", name); } void u... 2016-08-21 16:34 我的程序代码 暂无评论 喜欢 0 阅读 699 次 阅读全文
心血来潮,小试c++11 今天心血来潮,尝试玩一下c++11。话说这个标准都发布好几年了,c++14都出来了,c++17也快生出来了,还是赶紧摸一下c++11。本文使用实际业余工程使用到的代码片段,参考文章《stl::vector排序二例》。 示例1: #include <vector> #include <string> #include <algorithm> #include <stdio.h> class foobar { public: std::string token; std::string item; int numbe... 2016-08-02 22:09 我的程序代码 暂无评论 喜欢 0 阅读 588 次 阅读全文
stl::vector排序二例 stl提供了sort排序,针对vector可以很方便地进行指定的排序。本文给出两个例子,一个是针对结构体(类)某个成员的排序;另一个针对分辨率排序。 一个复杂的结构体(类)存在着大量的成员,使用vector存储,假如要依据某一成员进行排序,则可以重载“<”、“>”、“==”,然后使用sort排序。下面的代码根据foobar类中的token关键字排序: #include <vector> #include <string> #include <algori... 2016-06-21 22:30 我的程序代码 暂无评论 喜欢 0 阅读 613 次 阅读全文
使用STL去除std::vector自定义结构体重复项 最近搞了一个小东西要去除一个vector中重复的项。是这样的:我用组播搜索设备,得到设备IP信息、版本号信息,等,但有时会接收到多个相同IP设备的信息,因此要过滤掉重复的IP。我使用vector存储每台设备信息,包括IP、版本号,因此需要使用结构体。另外,要对这些设备IP进行排序,让其IP顺序排列。 2016-06-09 22:35 我的程序代码 暂无评论 喜欢 0 阅读 925 次 阅读全文
由子网掩码字符串转换成长度前缀的代码示例 最近在进行的ONVIF任务,有一个接口是设置IP的,叫SetNetworkInterfaces,可以设置包括网络速率、双工、自动协商等功能,还可以改IP。但里面有子网掩码字段,只有一个叫PrefixLenght的,直译为前缀长度。具体如下: 2016-01-24 18:43 我的程序代码, 流媒体学习 暂无评论 喜欢 0 阅读 1,280 次 阅读全文
BMP图片读写接口函数 我很早就学习了BMP位图。印象中,那时应该是在研究AVI视频文件格式时顺便研究的,或者是研究YUV转RGB时顺便研究的。但未写文章出来,我一直以为我的学习只有在发表了文章才算是完结,否则不能算是我做过了这个事。在这里补上当初读、写BMP的函数代码。 2015-07-09 23:12 我的程序代码 暂无评论 喜欢 0 阅读 1,027 次 阅读全文
pelco-d协议数据解析示例 前段时间写了有关pelco协议的一些笔记,后来,有个小模块是接收pelco格式的数据,然后解析出是什么命令,于是又写了个简单的解析函数。这个函数没什么技术含量。主要思路: 2014-09-10 22:39 我的程序代码 暂无评论 喜欢 0 阅读 1,597 次 阅读全文
pelco协议及其实现的简单认识 在搞visca的同时顺便也搞了pelco。这里再做个笔记。pelco,中文翻译为“派尔高”,在行文和写代码过程,写pelco比写“派尔高”快很多,所以一般就写pelco。这个协议在云台控制中用得比较多,比较出名的有PTZ,用rs232或rs485来通信。pelco有两种协议,D协议和P协议,两者命令封装不太一样,网上有协议的说明文档,也有实现的代码,我找到一个C#写的,某搜索引擎上找得到的介绍派尔高协议的,基本上都是直接把每个命令的数据一一写成数组来调用,个人认为这样不太方便。 2014-09-10 22:34 我的程序代码 暂无评论 喜欢 0 阅读 5,921 次 阅读全文
visca协议及其实现的简单认识 最近在搞visca协议,在这里写写,算是个记录。 visca是索尼公司搞出来的,用来控制相机的协议,一般通过rs232来通信(看了些资料,也有用rs485的)。 2014-09-10 22:31 我的程序代码 暂无评论 喜欢 0 阅读 2,265 次 阅读全文