摘要:
函数简介:函数名称: strrchr函数原型:char *strrchr(char *str, char c);所属库: string.h函数功能:查找一个字符c在另一个字符串str中末次出现的位置(也就是从str的右侧开始查找字符c首次出现的位置),并返回从字符串中的这个位置起,一直到字符串结束的所有字符。如果未能找到指定字符,那么函数将返回NULL。相关函数:strchr示例(获取给定路径中文件名):char *GetFileName(char * filePath){ char * name = NULL; name = strrchr(filePath,'/'); i. 阅读全文
摘要:
针对常用的调试手段之一——打印调试,设计此打印调试模块,可实现精确定位,Release版很容易去除。 1 /** 2 \file utilDebug.h 3 \brief 调试工具 4 \details 代码中嵌入该测试模块,可针对打印调试实现精确定位 5 */ 6 #ifndef _UTIL_DEBUG_2013_01_08_H_ 7 #define _UTIL_DEBUG_2013_01_08_H_ 8 9 #if defined(__cplusplus)10 extern "C" 11 {12 #endif13 14 #ifndef UTIL_DEBU... 阅读全文
摘要:
最近参考Linux实现的通用双向链表时,因typeof并不是标准c规定的关键字,除GCC编译器外其他编译器未必支持typeof关键字,所以在使用上并不能想Linux所实现的链表哪样灵活,它要求将连接器即链表结构作为用户自定义结构体的第一个元素使用,话不多说,直接上代码,内嵌详细注释。IList.h 1 #ifndef _I_LIST_H_2012_11_23_ 2 #define _I_LIST_H_2012_11_23_ 3 4 #ifdef __cplusplus 5 extern "C" { 6 #endif 7 8 /** \brief 双向链表连接器 9 ... 阅读全文
摘要:
介绍 我们在衡量一个函数运行时间,或者判断一个算法的时间效率,或者在程序中我们需要一个定时器,定时执 行一个特定的操作,比如在多媒体中,比如在游戏中等,都会用到时间函数。还比如我们通过记录函数或者算法开始和截至的时间,然后利用两者之差得出函数或者 算法的运行时间。编译器和操作系统为我们提供了很多时间函数,这些时间函数的精度也是各不相同的,所以,如果我们想得到准确的结果,必须使用合适的时间函 数。现在我就介绍windows下的几种常用时间函数。1:Sleep函数使用:sleep(1000),在Windows和Linux下1000代表的含义并不相同,Windows下的表示1000毫秒,也就是1秒钟 阅读全文
摘要:
临界区,内核事件,互斥量,信号量,都能完成线程的同步,在这里把他们各自的函数调用,结构定义,以及适用情况做一个总结。临界区:适用范围:它只能同步一个进程中的线程,不能跨进程同步。一般用它来做单个进程内的代码快同步,效率比较高。相关结构:CRITICAL_SECTION _critical相关方法:/*初始化,最先调用的函数。没什么好说的,一般windows编程都有类似初始化的方法*/InitializeCriticalSection(&_critical)/*释放资源,确定不使用_critical时调用,一般在程序退出的时候调用。如果以后还要用_critical,则要重新调用Initi 阅读全文
摘要:
Cache的原理、设计及实现前言 虽然CPU主频的提升会带动系统性能的改善,但系统性能的提高不仅仅取决于CPU,还与系统架构、指令结构、信息在各个部件之间的传送速度及存储部件的存取速度等因素有关,特别是与CPU/内存之间的存取速度有关。 若CPU工作速度较高,但内存存取速度相对较低,则造成CPU等待,降低处理速度,浪费CPU的能力。 如500MHz的PⅢ,一次指令执行时间为2ns,与其相配的内存(SDRAM)存取时间为10ns,比前者慢5倍,CPU和PC的性能怎么发挥出来? 如何减少CPU与内存之间的速度差异?有4种办法: 一种是在基本总线周期中插入等待,但这样会浪费CPU的能力。 ... 阅读全文
摘要:
英文原文:The Principles of Good Programming 1. 避免重复原则(DRY - Don’t repeat yourself) 编程的最基本原则是避免重复。在程序代码中总会有很多结构体,如循环、函数、类等等。一旦你重复某个语句或概念,就会很容易形成一个抽象体。 2. 抽象原则(Abstraction Principle) 与DRY原则相关。要记住,程序代码中每一个重要的功能,只能出现在源代码的一个位置。 3. 简单原则(Keep It Simple and Stupid) 简单是软件设计的目标,简单的代码占用时间少,漏洞少,并且易于修改。 4. 避免... 阅读全文
摘要:
1. even每个字节传送整个过程中bit为1的个数是偶数个(校验位调整个数)2. odd每个字节穿送整个过程中bit为1的个数是奇数个(校验位调整个数)3. noparity没有校验位4. space校验位总为05. mark校验位总为1 阅读全文
摘要:
校验和计算参考RFC文献1. 前言校验和计算是NAT功能和内容修改功能的基本功,这些操作进行后都需要修改数据头中的校验和。2. 16位校验和计算2.1 基本原理IP/ICMP/IGMP/TCP/UDP等协议的校验和算法都是相同的,采用的都是将数据流视为16位整数流进行重复叠加计算。为了计算检验和,首先把检验和字段置为0。然后,对有效数据范围内中每个16位进行二进制反码求和,结果存在检验和字段中,如果数据长度为奇数则补一字节0。当收到数据后,同样对有效数据范围中每个16位数进行二进制反码的求和。由于接收方在计算过程中包含了发送方存在首部中的检验和,因此,如果首部在传输过程中没有发生任何差错,那么 阅读全文
摘要:
1.closesocket(一般不会立即关闭而经历TIME_WAIT的过程)后想继续重用该socket:BOOL bReuseaddr=TRUE;setsockopt(s,SOL_SOCKET ,SO_REUSEADDR,(const char*)&bReuseaddr,sizeof(BOOL));2.如果要已经处于连接状态的soket在调用closesocket后强制关闭,不经历TIME_WAIT的过程:BOOL bDontLinger = FALSE;setsockopt(s,SOL_SOCKET,SO_DONTLINGER,(const char*)&bDontLinge 阅读全文