自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(32)
  • 资源 (5)
  • 收藏
  • 关注

原创 游戏服务器的设计

游戏服务器的设计是一项颇有挑战性的工作,游戏服务器的发展也由以前的单服结构转变为多服机构,甚至出现了bigworld引擎的分布式解决方案,最近了解到Unreal的服务器解决方案atlas也是基于集群的方式。负载均衡是一个很复杂的课题,这里暂不谈bigworld和atlas的这类服务器的设计,更多的是基于功能和场景划分服务器结构。首先说一下思路,服务器划分基于以下原则:1:分离游戏中占用系统

2010-01-08 12:40:00 401

原创 利用strstr和sscanf解析GPS信息

考察C程序员是否合格的一个重要标准就是看他操作字符串的能力,一个合格的C程序员应该可以熟练的对字符串进行拆分、组合、格式转换以及搜索定位,从一堆数据中提取出有效信息。比如说我们要做一个GPS导航的项目,需要读取GPS模块以ASCII码的形式发送过来的数据,然后对这些数据进行处理,提取我们需要的信息。这就涉及到很多操作字符串的问题。下面就以此为例,利用strstr函数和sscanf函数解析GPS

2009-12-26 16:42:00 786

原创 sscanf()的一些使用说明

 这里有些sscanf()的一些使用说明,都是从论坛,Blog里整理出来的。供大家使用。   通过学习和使用个人认为,在字符串格式不是很复杂,但是也并不简单的时候用这个函数比较合适,这个尺度就要靠自己把握了,字符串不是很复杂,但自己写个处理的函数比较麻烦,效率也不高,就用这个函数,如果字符串很复杂,那就用正则表达式吧。不多说了,看看下面这些介绍和列子吧!名称:sscanf() - 从一

2009-11-01 10:48:00 402

原创 判断单链表是否存在环,判断两个链表是否相交问题详解

  有一个单链表,其中可能有一个环,也就是某个节点的next指向的是链表中在它之前的节点,这样在链表的尾部形成一环。问题:1、如何判断一个链表是不是这类链表?2、如果链表为存在环,如果找到环的入口点?解答:一、判断链表是否存在环,办法为:设置两个指针(fast, slow),初始值都指向头,slow每次前进一步,fast每次前进二步,如果链表存在环,则fast必定先进入环,而slow后进入

2009-10-31 23:37:00 346

原创 Unix/Linux服务端与客户端崩溃情况

1 正常建立连接: ·服务器端调用accept,客户端调用connect,客户端发送SYN包; ·服务器收到SYN包,回复ACK,并发送一个SYN包; ·客户端收到SYN包,从connect返回,发送SYN包的ACK。此时从客户端角度看,连接已建立,即进入 ESTABLISHED状态; ·服务器端收到ACK,此时从服务器角度来看,连接建立,进入ESTABLISH状态,然后从accept返 回; 由

2009-10-31 22:06:00 1428

原创 几种排序算法的比较

1.插入排序:每次将一个待排的记录插入到前面的已经排好的队列中的适当位置。①.直接插入排序直接排序法在最好情况下(待排序列已按关键码有序),每趟排序只需作1次比较而不需要移动元素。所以n个元素比较次数为n-1,移动次数0。最差的情况下(逆序),其中第i个元素必须和前面的元素进行比较i次,移动个数i+1,所以总共的比较次数 比较多,就不写出来了总结:是一种稳定的排序方法,时间复杂度O(n^2

2009-10-27 02:21:00 785

原创 HTTP本身是一个无状态的连接协议

HTTP是Hyper Text Transfer Protocol的缩写,顾名思义,这个协议支持着超文本的传输。那么什么是超文本呢?说白了就是使用HTML编写的页面。通常,我们使用客户端浏览器访问服务器的资源,最常见的URL也是以html为后缀的文件。因此,我们可以说超文本是网络上最主要的资源。        既然HTTP协议的目的在于支持超文本的传输,更加广义一些就是支持资源的传输,那么在客户端

2009-10-26 20:43:00 1147

原创 nat 穿透原理

nat 穿透原理其实很早我就已经实现了使用TCP协议穿透NAT了,但是苦于一直没有时间,所以没有写出来,现在终于放假有一点空闲,于是写出来共享之。     一直以来,说起NAT穿透,很多人都会被告知使用UDP打孔这个技术,基本上没有人会告诉你如何使用TCP协议去穿透(甚至有的人会直接告诉你TCP协议是无法实现穿透的)。但是,众所周知的是,UDP是一个无连接的数据报协议,使用它就必须自己维护收发

2009-10-17 01:18:00 435

原创 32位CPU所含有的寄存器

ebp和esp是32位的SP,BP esp是堆栈指针 ebp是基址指针 ESP与SP的关系就象AX与AL,AH的关系.32位CPU所含有的寄存器有:4个数据寄存器(EAX、EBX、ECX和EDX)2个变址和指针寄存器(ESI和EDI) 2个指针寄存器(ESP和EBP)6个段寄存器(ES、CS、SS、DS、FS和GS)1个指令指针寄存器(EIP)

2009-10-17 00:49:00 1091

原创 linux设备驱动加载方式

在类unix操作系统中,驱动加载方式一般分为:动态加载和静态加载,下面分别对其详细论述。一、动态加载动态加载是将驱动模块加载到内核中,而不能放入/lib/modules/下。    在2.4内核中,加载驱动命令为:insmod ,删除模块为:rmmod;    在2.6以上内核中,除了insmod与rmmod外,加载命令还有modprobe;    insmod与modprobe不同之处:   

2009-10-17 00:11:00 3067 1

原创 strcpy()、memcpy()、memmove()、memset()的实现

strcpy(), 字符串拷贝.char *strcpy(char *strDest, const char *strSrc){    assert((strDest!=NULL) && (strSrc !=NULL));    char *address = strDest;        while( (*strDest++ = * strSrc++) != /0)  NULL ;   

2009-10-12 13:06:00 456

原创 MySQL内存使用 - 全局共享

接着之前的一篇“ MySQL 内存使用-线程独享”,再写一篇 MySQL 全局共享内存的使用介绍。 全局共享内则主要是 MySQL Instance(mysqld进程)以及底层存储引擎用来暂存各种全局运算及可共享的暂存信息,如存储查询缓存的 Query Cache,缓存连接线程的 Thread Cache,缓存表文件句柄信息的 Table Cache,缓存二进制日志的 BinLog Buffer,

2009-09-20 16:58:00 355

原创 MySQL内存使用-线程独享

对于任何一个数据库管理系统来说,内存的分配使用绝对可以算的上是其核心之一了,所以很多希望更为深入了解某数据库管理系统的人,都会希望一窥究竟,我也不例外。 从内存的使用方式MySQL 数据库的内存使用主要分为以下两类 * 线程独享内存 * 全局共享内存 今天这篇文章暂时先分析 MySQL 中主要的 “线程独享内存” 的。 在 MySQL 中,线程独享内存主要用于各客户端连接线程存储各种操作的独享数据

2009-09-20 16:51:00 382

原创 linux和unix下常用解压和压缩命令

linux和unix下常用解压和压缩命令  .tar解包: tar xvf FileName.tar打包:tar cvf FileName.tar DirName(注:tar是打包,不是压缩!)---------------------------------------------.gz解压1:gunzip FileNa

2009-09-15 01:12:00 328

原创 ftok () 函数介绍

系统建立IPC通讯(如消息队列、共享内存时)必须指定一个ID值 。通常情况下,该id值通过ftok函数得到 。ftok原型如下:key_t ftok( char * fname, int id )参数说明:                fname就时您指定的文档名                id是子序号。返回值:                在一般的UNIX实现中,是将文档的索

2009-09-10 16:04:00 4520

原创 关于epoll的小应用

epoll用到的所有函数都是在头文件sys/epoll.h中声明的,下面简要说明所用到的数据结构和函数:  所用到的数据结构  typedef union epoll_data {  void *ptr;  int fd;  __uint32_t u32;  __uint64_t u64;  } epoll_data_t;  struct epoll_event {  __uint32_t eve

2009-09-09 17:55:00 569

原创 Determining IP information for eth0... failed; no link present

       red hat 9装在虚拟机vmware上之后,连接网络是出现问题 Determining IP information for eth0... failed; no link present. Check cable?    这个问题,搞了很长时间,一直以为是自己的设置没设对,最后发现是redhat的一个bug,考,郁闷。解决方法:到/etc/sysconf

2009-08-27 12:08:00 2979 1

原创 一个关于临时对象的BUG

一个关于临时对象的BUG  我相信任何一个使用C++超过一定时间的程序员都不会否认这样一个事实:使用C++需要有足够的技巧。它充满了有各种各样的难以识别的陷阱,顷刻就可以让一段看起来毫无破绽的代码崩溃。例如,对C/C++的新手而言,学会如何考虑对象的生存期就是他们必须跨越的一个障碍,这方面最典型的问题,就是对对象指针的使用,特别是在使用一个已经被删除了的对象指针的时候:  MyClass *mc

2009-08-19 13:01:00 423

原创 Unix/Linux字符乱码解决方案

安装系统时如果选择是English时,系统编码是en_US(中文乱码)安装系统时如果选择是中文安装时,系统编码是UTF-8(服务级命令是乱码) 1)用locale查看目前系统的语言编码2)用locale -a查看系统支持的语言编码3)LANG=zh_CN.UTF-84)如果是乱码,则安装系统盘里(系统.ISO/Server/)的rpm -ivh fonts-chines

2009-08-15 20:42:00 4312

原创 字符编码简介:ASCII,Unicode,UTF-8,GB2312

字符编码简介:ASCII,Unicode,UTF-8,GB23121. ASCII码我们知道,在计算机内部,所有的信息最终都表示为一个二进制的字符串。每一个二进制位(bit)有0和1两种状态,因此八个二进制位就可以组合出256种状态,这被称为一个字节(byte)。也就是说,一个字节一共可以用来表示256种不同的状态,每一个状态对应一个符号,就是256个符号,从0000000到1111111

2009-08-15 20:33:00 434

原创 安装GCC编译器

安装GCC编译器,你可以从网上下载也可以用自己光盘里的安装包安装GCC编译器。主要有以下几包:    glibc-headers-2.5-12.i386.rpm    glibc-devel-2.5-12.i386.rpm    cpp-4.1.1-52.el5.i386.rpm   binutils-2.17.50.0.6-2.e15.i386.rpm   libgomp-4

2009-08-12 00:29:00 356

转载 常用的SQL语言

记录一下  asc 按升序排列desc 按降序排列下列语句部分是Mssql语句,不可以在access中使用。SQL分类: DDL—数据定义语言(CREATE,ALTER,DROP,DECLARE) DML—数据操纵语言(SELECT,DELETE,UPDATE,INSERT) DCL—数据控制语言(GRANT,REVOKE,COMMIT,ROLLBACK)首先,简要介绍基础语句:1

2009-08-11 23:20:00 322

原创 memmove函数用法

memmove函数用法说明:dst的缓冲区足够存放src的大小,dst可以与src内存重叠,注意复制源在未复制之前不能修改.void   *   __cdecl   memmove   (   void   *   dst,   const   void   *   src,   size_t   count     ) {                 void   *   ret  

2009-08-07 09:57:00 1378

转载 剪贴板通信实例

剪贴板通信实例本人节选自《21天学通VC++》一书    为了更好地理解以上讲述的函数,下面给出一个实例来详细地介绍如何使用剪贴板来实现进程间的通信。【范例17-3】剪贴板实现进程通信。  新建一个MFC的基于对话框的应用程序。单击【File】|【New】菜单项,打开新建对话框。选择建立【MFC AppWizard[exe]】工程,为工程命名为“进程通信”。在AppWizard的第一步中选

2009-07-31 13:22:00 416

转载 vc++中进程通信之剪贴板常用函数

  vc++中进程通信之剪贴板常用函数本人节选自《21天学通VC++》一书    操作系统中实现同一台机器上的不同进程之间的通信是非常重要的。一般来说,进程间的通信方法有三种:剪贴板、邮槽和管道。由于后两种方式需要一定的操作系统基础,此处就不作介绍。本节将详细介绍采用剪贴板进行进程通信的实现。剪贴板常用函数读者应该对剪贴板是比较熟悉的,当按下【Ctrl+C】键时,选中的内容就会复制到剪贴板

2009-07-31 13:16:00 430

转载 对话框数据交换和验证机制

对话框数据交换和验证机制    在VC中,所有的对话框函数都是使用C++代码实现的,它并没有采用特殊的资源或“奇特”的宏,但却可以很好地实现用户与应用程序之间的交互工作,这里的关键就在于对话框应用程序中广泛采用的对话框数据交换和验证机制。    对话框数据交换(Dialog Data Exchange,DDE)用于初始化对话框中的控件并获取用户的数据输入,而对话框数据验证(Dialog D

2009-07-31 13:09:00 556

原创 Windows版本对应的NTDDI_VERSION

每个Windows版本对应的NTDDI_VERSION,_WIN32_WINNT,WINVER,_WIN32_IE这些宏。The following table describes the preferred macros in use by the Windows header files.Minimum system required                Macros to defi

2009-07-25 11:11:00 3404

原创 COM技术初探(一)

COM技术初探(一)目录 一. COM是一个更好的 C++   1. COM 是什么   2. 从 C++ 到 DLL 再到 COM      2.1 C++      2.2 DLL      2.3 COM二. COM基础   1. COM基本知识      1.1 返回值HRESULT      1.2 初识idl      1.3 IUnkown接口   2. 一个比较

2009-07-24 17:42:00 379

原创 C++的内存分配

C++的内存分配有两种方法(分配和释放未构造的原始内存):1)allocator类,2)new 和delete第一种:allocator类的定制算法:allocatora :定义分配类型为T的分配对象a;a.allocate(n) : 分配T类型的n个空间,不调用类型的构造函数;a.deallocate(p,n): 释放在T*的p指针处的n个对象所具有的内存空间,不用类型析

2009-07-24 09:03:00 481

原创 VS6.0与OFFICE2007冲突解决办法

VS6.0与OFFICE2007冲突解决办法       最开始安装了VC6.0,VS2005没有任何问题,之后安装了VS2008,问题就出来了,每次用VC6.0打开或添加项目时出现【MSDEV.EXE-应用程序错误"0x73d311c7"指令引用的"0x00000004"内存,该内存不能为"read"】,开始没有发现是哪里什么问题,后面因为必须用VC6.0开发,不得不试了好多版本,都不行,于是只

2009-07-22 01:21:00 1253

原创 Boost 安装指南

Boost 安装指南Boost库作为一个优秀的C++类库,通过几年的发展已经得到了广大技术人员的认可。本文将帮助刚刚接触Boost的用户来安装并配置Boost,并通过几个HelloWorld小程序,来验证安装的正确性。并且我也希望能通过这几个小程序使读者能对Boost有一个初步的认识,并尽快加入Boost的用户行列。在写本文的时候,我所使用的环境是Windows XP Home Edition

2009-07-22 00:22:00 435

原创 Windows内存管理机制及C++内存分配实例(一):进程空间

本文背景:在编程中,很多Windows或C++的内存函数不知道有什么区别,更别谈有效使用;根本的原因是,没有清楚的理解操作系统的内存管理机制,本文企图通过简单的总结描述,结合实例来阐明这个机制。本文目的:对Windows内存管理机制了解清楚,有效的利用C++内存函数管理和使用内存。本文内容:本文一共有六节,由于篇幅较多,故按节发表。其他章节请看本人博客的Windows内存管理及

2009-07-20 13:52:00 921

Java+JDK6学习笔记

详细的讲述了JAVASE的基础编程方面的知识,通过它,你可以快速的掌握JAVA的编程

2010-04-05

C函数库电子手册IT

C函数库 本帮助文档的内容完全来自 http://www.cppreference.com .在此,感谢 CppReference 官方提供的资料,给广大 C++ 程序员带来了方便. 本人也是受益人.由于感觉上网查询有一点点不便(或者如果无法上网的时候),于是做成本帮助文档, 希望能给大家提供一些额外的便利. 同时请使用参考者不要将此用于任何商业行为. 由于时间仓促,可能存在不少错误,如果您发现了,十分感谢您提醒我!   联系官方 : [email protected]

2010-02-09

C#编程规范programming

定义这个规范的目的是让项目中所有的文档都看起来像一个人写的,增加可读性,减少项目组中因为换人而带来的损失。(这些规范并不是一定要绝对遵守,但是一定要让程序有良好的可读性)

2009-07-28

Java编程规范programming

定义这个规范的目的是让项目中所有的文档都看起来像一个人写的,增加可读性,减少项目组中因为换人而带来的损失。(这些规范并不是一定要绝对遵守,但是一定要让程序有良好的可读性)

2009-07-28

1987至2008软件设计师试题与答案

1987至2008软件设计师试题与答案 1987至2008软件设计师试题与答案 1987至2008软件设计师试题与答案 1987至2008软件设计师试题与答案

2009-06-02

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

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