Tools:VC6.0和SourceInsight下的pclint配置 一、lint简介 lint是最著名的C语言工具之一,是由贝尔实验室SteveJohnson于1979在PCC(PortableC Compiler)基础上开发的静态代码分析,一般由UNIX系统提供。与大多数C语言编译器相比,lint可以对程序进行更加广泛的错误分析,是一种更加严密的编译工具。最初,lint这个工具用来扫描C源文件并对源程序中不可移植的代码提出警告。但是现在大多数lint实用程序
C:二维数组常用操作 /*说明:程序实现二维数组中插入列、插入行、交换两个指定位置的元素,并输出指定位置元素的变化轨迹*/#include "stdafx.h"#include #include /*二维数组最大行数和列数*/#define MAX_ROW_NUM (9)#define MAX_COL_NUM (9)/*二维数组中各元素位置信息*/typedef struct _PathN
C:TLV消息编码及常用操作 /*1、TLV简介:在通信系统中,两个设备之前必然存在消息交互,消息的格式也存在各种编码类型,本文仅描述TLV编码的消息格式。Type-length-value(TLV)格式中T、L的长度固定,通常为1-8个4个字节,V的长度不固定,由L的值表示,V的内容也可以嵌套子TLV格式。举例:假设消息按大端模式存放,T占4个字节,L占2个字节,下面的消息: unsigned char pMsg
笔记:Vmware安装提示The MSI failed 之前的ubuntu由于直接关机导致文件损坏,将虚拟机卸载重装安装,报The MSI failed,安装失败,通过命令行方式安装成功,记录之。 方法如下: 1、cmd命令进行安装文件所在目录; 2、执行VMware-workstation-full-9.0.1-894247.exe /z "action"="install" 3、按提示点Next即可。
AMPS:定时器模块源码解读 Timer模块的实现比较复杂,需要结合前面的文章《AMPS:定时器管理》才能有所理解,下面看看AMPS中的定时器实现,有些细节方面我也没有想清楚。 AMPS_Timer.h#ifndef __HEADER_AMPS_TIMER_H__#define __HEADER_AMPS_TIMER_H__#ifdef __cplusplus extern "C" {#endif#
AMPS:Cache模块源码解读 这里讲的Cache并不是通常说的计算机存储系统中的高速缓存,而是软件层面的缓存,它的做用主要是为了提高数据处理的效率。在AMPS中,Cache的结构如下:/*Cache结构*/struct _AMPSCache{ void* pvHASHTable; /*Hash表,用于查找*/ void* pvHeap; /*堆,用于增删改*/ int nCacheSize;
AMPS:内存管理模块源码解读(二) 上节看了AMPS中通过数组+单链表实现的内存池,本节看看另一个实现方式。此方法思路如下:其内存池结构为一个存放已分配内存信息的双链表,一个表示内存池大小的变量,一个指向当前内存链表结点的指针链表,如下:/*内存池结构*/struct _newMMContext{ t_AMPSDList* memBuffList; /*结点链表*/ int nSizeOfBuff;
AMPS:内存管理模块源码解读(一) 在AMPS中,使用内存池来管理内存,具体机制见之前的文章《AMPS:内存管理(二)》,在代码中,使用了两种实现方式,第一种是数组+单链表。今天先看看这个方式下的内存池实现。AMPS_MemoryMgt.h#ifndef __HEADER_AMPS_MEMORY_MGMT_H__#define __HEADER_AMPS_MEMORY_MGMT_H__#include "AMPS_
AMPS:Oracle数据库操作模块源码解读 本节看看AMPS中对Oracle数据库进行操作的方法,使用的是Oracle的C访问接口OCI,关于OCI各函数的中文说明可参考这篇文章http://www.cnblogs.com/joeblackzqq/archive/2011/04/24/2026461.html 下面看看AMPS中Oracle操作各函数实现: AMPS_Oracle.h#ifndef __HEADER_AMPS_D
AMPS:MySQL数据库操作模块源码解读 本节看看在AMPS中对MySQL数据库的访问操作,它使用MySQL提供的C API接口进行访问,具体各API的使用可参考http://dev.mysql.com/doc/refman/5.6/en/c-api-function-overview.html。 下面看看AMPS中的实现: AMPS_MySQL.h#ifndef __HEADER_AMPS_MYSQL_ENGINE_H#
AMPS:数据库访问模块源码解读 AMPS做为一个中间件,也提供了访问数据库的接口,目前支持MySQL和Oracle(对我所喜爱PostgreSQL却默认不支持,看来我的爱好属于非主流哈~),下面要看的是DBEngine库,它只做一件事情,就是封装了不同数据库操作的差异,提供一个数据库统一访问接口。下节再看针对不同数据库的具体操作。AMPS_DBEngine.h#ifndef __HEADER_AMPS_DB_ENGI
AMPS:日志模块源码解读 看看AMPS中的日志模块,有两种写日志的方法,一是直接使用封装好的API函数写,另一种是通过应用层注册的日志回调函数,利用事件管理机制来写。 AMPS_Log.h#ifndef __HEADER_AMPS_LOG_H__#define __HEADER_AMPS_LOG_H__#include #include "AMPS_SystemAPI.h"#include "AMP
AMPS:AES模块源码解读 AES(Advanced Encryption Standard,高级加密标准)是一个对称密钥加密算法,密钥长度则可以是128,192或256比特。 算法思路(详细信息请见维基百科): AES加密过程是在一个4×4的字节矩阵上运作,这个矩阵又称为“体(state)”,其初值就是一个明文区块(矩阵中一个元素大小就是明文区块中的一个Byte)。(Rijndael加密法因支持更大的区块
AMPS:MD5模块源码解读 MD5是用于确保信息传输完整一致性的一个哈希算法。 其算法思想如下(摘自维基百科): MD5是输入不定长度信息,输出固定长度128-bits的算法。经过程序流程,生成四个32位数据,最后联合起来成为一个128-bits散列。基本方式为,求余、取余、调整长度、与链接变量进行循环运算。得出结果。 是 XOR, AND, OR , NOT 的符号。
AMPS:字符串操作源码解读 字符串处理在软件中非常普遍,AMPS使用C语言编写,所有没有像 标准C++提供的string一样的类型,所以对字符串的处理就是对char *这样的指针处理,为了处理方便,AMPS定义了自己的String类型,如下:typedef struct _AMPSString t_AMPSString;struct _AMPSString{ unsigned char* puchData;
AMPS:哈希表源码解读 Hash表也是一种常用的数据结构,AMPS中的Hash表并不是给使用者提供一个散列函数,而是仅提供一个创建和维护Hash表这样一个结构的一组函数,针对不同的应用或者数据,由用户自己定义其要使用的散列函数,AMPS中,Hash表组成结构是如下的拉链式结构。下面看看AMPS中对Hash操作的代码:AMPS_Hash.h#ifndef __HEADER_AMPS_HASH_H#
AMPS:堆源码解读 堆是一种比较复杂的数据结构,也就是通常所说的完全二叉树,分为最大堆和最小堆,定义如下:最大堆:根结点的键值是所有堆结点键值中最大者的堆。 最小堆:根结点的键值是所有堆结点键值中最小者的堆。 而最大-最小堆集结了最大堆和最小堆的优点,这也是其名字的由来。 最大-最小堆是最大层和最小层交替出现的二叉
AMPS:队列源码解读 队列概念很简单,就是排队,先进先出,通常有链表形式和数组形式(即链接类型和顺序类型),它也是软件构建的一个基本数据结构,看看AMPS中的队列实现。 AMPS_Queue.h#ifndef __HEADER_AMPS_QUEUE_H#define __HEADER_AMPS_QUEUE_H#ifdef __cplusplusextern "C" {#endif#includ
AMPS:双向链表源码解读 本节在上节单向链表的基础上看看AMPS中对双向链表的实现,与单向链表相同,双向链表在软件中的使用也相对比较广泛,在后面要讲到的Hash表、定时器、内存管理等模块中都会见到以双向链表作为基本数据结构。其实,双向链表在实现上使用了很多单向链表的操作,仅在插入、删除结点时需要多操作几步,所以理解了单向链表,这块就比较好理解了。 同样,AMPS提供了以下API对双向链表进行操作: AMPS