10 2014 档案

select模型
摘要:在Linux中,我们可以使用select函数实现I/O端口的复用,传递给 select函数的参数会告诉内核: 1) 我们所关心的文件描述符 2) 对每个描述符,我们所关心的状态。(我们是要想从一个文件描述符中读或者写,还是关注一个描述符中是否出现异常) 3) 我们要等待多长时间。(我们可以等待无限长... 阅读全文

posted @ 2014-10-31 21:55 kangbry

redis协议
摘要:网络层客户端通过创建到6379端口的TCP连接来连接到一个Redis服务器。每个Redis命令或者客户端和服务器之间传输的数据都以\r\n (CRLF)结束。请求Redis可以接受由不同参数组成的命令。只要接收到一个命令,这个命令就会被执行,然后一个答复会被返回给客户端。* CR LF$ CR LF... 阅读全文

posted @ 2014-10-31 20:04 kangbry

动态库函数
摘要:linux调用库的方式有三种:1.静态链接库2.动态链接库(隐式)3.动态加载库(显式)其中1,2都是在编程时直接调用,在链接时加参数-l进行链接第三种需要在编程时使用dlopen等函数来获取库里面函数的定义,然后进行调linux readlinkdlopen 加载动态库dlclose 卸载的动态库... 阅读全文

posted @ 2014-10-31 16:17 kangbry

认识redis
摘要:redis是一个key-value存储系统.和Memcached类似,它支持存储的value类型相对更多,包括string(字符串)、list(链表)、set(集合)、zset(sorted set --有序集合)和hash(哈希类型).这些数据类型都支持push/pop、add/remove及取交... 阅读全文

posted @ 2014-10-31 15:49 kangbry

线程取消
摘要:一个线程可以调用pthread_cancel来取消另一个线程。被取消的线程需要被join来释放资源。被取消的线程的返回值为PTHREAD_CANCELED 有关线程的取消,一个线程可以为如下三个状态: 1) 可异步取消:一个线程可以在任何时刻被取消。 2) 可同步取消:取消的请求被放在队列中,直到线... 阅读全文

posted @ 2014-10-30 21:53 kangbry

共享内存和信号量
摘要:1) 获取信号量标识符 int semget(key_t key, int nsems, int flag)2) 操作信号量(初始化,删除等) int semctl(int semid, int semnum, int cmd, /*union semun*/)3) 对信号量进行增减操作,在该操作是... 阅读全文

posted @ 2014-10-29 22:31 kangbry

c++单例
摘要:#include #include using namespace std;class A{public: void printA(){printf("hello A");}};templateclass singleton{private: singleton(); singleton(const... 阅读全文

posted @ 2014-10-28 23:27 kangbry

100步问题
摘要:回溯问题,可以递归解决,不断试探走一步,走两步 void go(int n,int step,int& sum) { n = n - step; if(n > 0) { go(n,1,sum); go(n,2,sum); } else if(n==0) { sum ++; } } int main( 阅读全文

posted @ 2014-10-28 21:46 kangbry

linux共享内存
摘要:1) 创建共享内存int shmget(key_t key ,int size,int shmflg)key标识共享内存的键值:0/IPC_PRIVATE。当key的取值为IPC_PRIVATE,则函数shmget将创建一块新的共享内存;如果key的取值为0,而参数中又设置了IPC_PRIVATE这... 阅读全文

posted @ 2014-10-27 23:41 kangbry

关于SIGPIPE信号
摘要:在linux下写socket的程序的时候,如果尝试send到一个disconnected socket上,就会让底层抛出一个SIGPIPE信号。这个信号的缺省处理方法是退出进程,大多数时候这都不是我们期望的。因此我们需要重载这个信号的处理方法。调用以下代码,即可安全的屏蔽SIGPIPE:signal... 阅读全文

posted @ 2014-10-27 21:58 kangbry

udp编程
摘要:int sendto (int s, const void *buf, int len, unsigned int flags, const struct sockaddr *to, int tolen); int recvfrom(int s, void *buf, int len, unsign... 阅读全文

posted @ 2014-10-26 21:41 kangbry

常用算法
摘要:二分查找int binary_search(int a[],int len,int goal){ int beg = 0; int end = len - 1; while(beg goal) end = middle - 1; else ... 阅读全文

posted @ 2014-10-26 18:02 kangbry

字符串算法
摘要:字符串逆转void reverse(char* str,int beg,int end){ int times = (end- beg +1)/2; while(times > 0) { char tmp = str[end]; str[end--] =... 阅读全文

posted @ 2014-10-26 16:31 kangbry

左值右值
摘要:C/C++语言中可以放在赋值符号左边的变量,左值表示存储在计算机内存的对象,左值相当于地址值。右值:当一个符号或者常量放在操作符右边的时候,计算机就读取他们的“右值”,也就是其代表的真实值,右值相当于数据值 阅读全文

posted @ 2014-10-25 14:51 kangbry

异常处理
摘要:1) 异常的抛出和处理主要使用了以下三个关键字:try, throw, catch 2) 抛出异常即检测是否产生异常,在C++中,其采用throw语句来实现,如果检测到产生异常,则抛出异常。该语句的格式为:throw 表达式;3) 在try语句块的程序段中(包括在其中调用的函数)发现了异常,且抛弃了... 阅读全文

posted @ 2014-10-25 13:52 kangbry

extern inline volatile explicit
摘要:1. extern是一个关键字,它告诉编译器存在着一个变量或者一个函数,如果在当前编译语句的前面中没有找到相应的变量或者函数,也会在当前文件的后面或者其它文件中定义2. 调用extern "C"关键字,声明cpp文件中有关代码,需要按照C的方式来生成1. 在函数声明或定义中函数返回类型前加上关键字i... 阅读全文

posted @ 2014-10-25 13:05 kangbry

const
摘要:const作用 1) 可以定义const常量 const int max = 1002) 对传入的参数进行类型检查,不匹配进行提示 void f(const int i) { .........}3) 可以保护被修饰的东西 void f(const int i) { i=10;//error! }4... 阅读全文

posted @ 2014-10-24 22:29 kangbry

场景管理aoi
摘要:enter事件1. 离开旧场景2. 进入新场景 3 move事件4 on_enter leave事件1 uid --> old_cell 2 leavel_cell on_leave 广播离开事件move事件1 uid --> old_cell 2 pos --> new_cell 3 a. 存在o... 阅读全文

posted @ 2014-10-24 15:22 kangbry

序列化tinybuf
摘要:/* ------------------------------------------------------------------------------- | 数据头标记(1字节) | ID标识字段(不一定有) | ------------------------------------... 阅读全文

posted @ 2014-10-24 09:18 kangbry

模板特化
摘要:templateclass Compare{public: static bool IsEqual(const T& lh, const T& rh) { return lh == rh; }};View Code1) 特化为绝对类型 int i1 = 10;... 阅读全文

posted @ 2014-10-24 09:05 kangbry

C++类型转换
摘要:const_cast 去掉类型的const或volatile属性。 struct SA { int i; }; const SA ra; //ra.i = 10; //直接修改const类型,编译错误 SA &rb = const_castSA&>(ra); rb.i = 10;... 阅读全文

posted @ 2014-10-24 00:11 kangbry

static
摘要:1. 静态全局变量在全局变量前,加上关键字static,该变量就被定义成为一个静态全局变量 1) 该变量在全局数据区分配内存; 2) 未经初始化的静态全局变量会被程序自动初始化为0(自动变量的值是随机的,除非它被显式初始化); 3) 静态全局变量在声明它的整个文件都是可见的,而在文件之外是不可见... 阅读全文

posted @ 2014-10-24 00:08 kangbry

指针
摘要:int * &c = a;//这里c是一个引用,它是指针a的引用int & *d;//这里d是一个指针,它指向引用,但引用不是实体,所以这是错误的int* const p 特点是指针指向的数值可以改变,然而指针所保存的地址却不可以改变const int* p 特点是指针所保存的地址可以改变,然而指针... 阅读全文

posted @ 2014-10-23 17:36 kangbry

友元
摘要:友元是一种定义在类外部的普通函数或类,但他需要在类体内进行说明,为了和该类的成员函数加以区别,在说明时前面加以关键字friend。友元能够访问类中的私有成员。友元的作用在于提高程式的运行效率,但是,他破坏了类的封装性和隐藏性,使得非成员函数能够访问类的私有成员友元函数(可以使类的成员函数): 友元函... 阅读全文

posted @ 2014-10-23 17:27 kangbry

public,private,protected
摘要:类的private和protected成员,在类外是不可以使用的.只有public成员可以在类外直接使用class A{public: int a;protected: int b;private: int c;};int _tmain(int argc, _TCHAR* argv... 阅读全文

posted @ 2014-10-23 16:33 kangbry

c++内存管理
摘要:在C++中,内存分成5个区,他们分别是堆、栈、自由存储区、全局/静态存储区和常量存储区。 栈,在执行函数时,函数内局部变量的存储单元都可以在栈上创建,函数执行结束时这些存储单元自动被释放。栈内存分配运算内置于处理器的指令集中,效率很高,但是分配的内存容量有限。 堆,就是那些由new分配的内存块... 阅读全文

posted @ 2014-10-23 01:14 kangbry

虚函数
摘要:C++中不能被声明为虚函数 普通函数(非成员函数),构造函数,内联成员函数,静态成员函数,友元函数。 1) 虚函数用于基类和派生类,普通函数所以不能 2) 构造函数不能是因为虚函数采用的是虚调用的方法,允许在只知道部分信息的情况的工作机制,特别允许调用只知道接口而不知道对象的准确类型的方法,但是调... 阅读全文

posted @ 2014-10-22 15:17 kangbry

构造函数析构函数
摘要:一个没有实例化的空类,编译器是不会给它生成任何函数的,当实例化一个空类后,编译器会根据需要生成相应的函数1) 默认构造函数 2) 拷贝构造函数 3) 析构函数4) 赋值构造函数5) 取地址运算符函数class empty{public: empty(){}; ~empty(){}; ... 阅读全文

posted @ 2014-10-22 11:37 kangbry

单链表逆置
摘要:typedef int DataType;typedef struct node{ DataType data; struct node* next;}LinkedNode,*LinkList;void ReverseList(LinkedNode* pCur,LinkList& Lis... 阅读全文

posted @ 2014-10-21 23:17 kangbry

内存拷贝实现
摘要:void* _memove(void* dest,const void*src,size_t count){ assert((dest != NULL) && (src != NULL)); assert(count>0); char* psrc = (char*)src; ... 阅读全文

posted @ 2014-10-21 17:19 kangbry

string实现
摘要:class _string{public: _string(const char* str=NULL); _string(const _string& another); ~_string(); _string& operator=(const _string & rhs);... 阅读全文

posted @ 2014-10-21 15:28 kangbry

valgrind内存检测
摘要:valgrind--tool=memcheck ./程序名memcheck工具可以保证我们正确的内存使用。不加其他参数,valgrind会打印出调用call和malloc的一个概括信息valgrind --leak-check=full ./程序名如果alloc和free的数目不同,你需要用选项--... 阅读全文

posted @ 2014-10-20 23:31 kangbry

socket选项
摘要:当调用closesocket关闭套接字时,SO_LINGER将决定系统如何处理残存在套接字发送队列中的数据。处理方式无非两种:丢弃或者将数据继续发送至对端,优雅关闭连接TCP_NODELAY: 表示立即发送数据.SO_RESUSEADDR: 表示是否允许重用Socket 所绑定的本地地址.SO_TI... 阅读全文

posted @ 2014-10-20 22:57 kangbry

iocp,epoll编程
摘要:约定: 等待事件处理完毕后,才重新投递下一个异步操作on_recv事件epoll和iocp一样处理,都只关注可读事件iocp 可以读事件on_recv->修改m_b_posting_recv正在递收数据标记为false->判断是否在收数据m_b_recving(不要同时调多个recv)->将之前缓冲... 阅读全文

posted @ 2014-10-20 22:39 kangbry

条件变量函数
摘要:#include #include #include pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;/*初始化互斥锁*/pthread_cond_t cond = PTHREAD_COND_INITIALIZER;/*初始化条件变量*/void ... 阅读全文

posted @ 2014-10-16 22:45 kangbry

互斥量函数
摘要:一、互斥锁互斥锁,是一种信号量,常用来防止两个进程或线程在同一时刻访问相同的共享资源。需要的头文件:pthread.h互斥锁标识符:pthread_mutex_t(1)互斥锁初始化:函数原型: int pthread_mutex_init (pthread_mutex_t* mutex,const ... 阅读全文

posted @ 2014-10-16 22:44 kangbry

信号量函数
摘要:信号量函数int sem_init(sem_t *sem,int pshared,unsigned int value);sem_init初始化一个信号量,注意pshared表示允许几个进程共享该信号量,一般设0用于进程内的多线程共享,要看是否支持进程共享,value代表信号灯个数int sem_d... 阅读全文

posted @ 2014-10-16 22:12 kangbry

守护进程shell脚本
摘要:#! /bin/bashPROGRAM="main"while true; do sleep 1 PRO_NOW=`ps aux | grep $PROGRAM | grep -v grep| wc -l` if [ $PRO_NOW -lt 1 ]; then ./$PROG... 阅读全文

posted @ 2014-10-12 20:21 kangbry

守护进程shell
摘要:#! /bin/bashPROGRAM="main"while true; do sleep 1 PRO_NOW=`ps aux | grep $PROGRAM | grep -v grep| wc -l` if [ $PRO_NOW -lt 1 ]; then ./$PROG... 阅读全文

posted @ 2014-10-09 16:18 kangbry

makefile模板(生成.so)
摘要:# Make command to use for dependenciesRM=rmMKDIR=mkdirOUTDIR=_objSODIR=./binLIBNAME=pdk_ai.soOUTFILE=$(SODIR)/$(LIBNAME)INC=-I../../../../lib/svrlib/i... 阅读全文

posted @ 2014-10-09 15:34 kangbry

makefile模板
摘要:# Make command to use for dependenciesRM=rmMKDIR=mkdirAPP=gateLIB=-lpthread -lrt -ldlOBJDIR=../_obj/$(APP)EXEDIR=./binINCDIR=-I../../lib/svrlib/includ... 阅读全文

posted @ 2014-10-09 15:32 kangbry

导航