Darges

3月 142013
 

Your ads will be inserted here by

Easy AdSense.

Please go to the plugin admin page to
Paste your ad code OR
Suppress this ad slot.

strcmp源码
原型:extern int strcmp(const char *s1,const char * s2);
所在头文件:string.h
功能:比较字符串s1和s2。
一般形式:strcmp(字符串1,字符串2)

 int __cdecl strcmp (const char * src, const char * dst)
 {
     int ret = 0 ;
     while( ! (ret = *(unsigned char *)src - *(unsigned char *)dst) && *dst&&*src)
     ++src, ++dst;
     if ( ret < 0 )
         ret = -1 ;
     else if ( ret > 0 )
         ret = 1 ;
     return( ret );
 }
神一般的 strcpy
考虑NULL指针,const修饰,地址覆盖问题
char *mystrcpy2(char* dst, const char *src)
 {
 char *ret = dst;
 int count = strlen(src)+1;
 assert(dst);
 assert(src);
 if( dst<=src || dst>=(src+count) )//地址不重合,从低字节开始复制
 {
 while(count--)
 {
 *dst++ = *src++;
 }
 }
 else //地址重合,从高字节开始复制
 {
 dst = dst + count - 1;
 src = src + count - 1;
 while(count--)
 {
 *dst-- = *src--;
 }
 }
 return dst;
 }
3月 092013
 

Your ads will be inserted here by

Easy AdSense.

Please go to the plugin admin page to
Paste your ad code OR
Suppress this ad slot.

1. tokyo cabinet系统介绍
tokyo cabinet官方主页http://fallabs.com/tokyocabinet/,是一款kv型的数据库,没有数据类型,没有表的概念,key和value都可以是任意长度的字符串。
2. 安装
tokyo cabinet安装比较简单:
1. 下载源文件包:http://fallabs.com/tokyocabinet/tokyocabinet-1.4.47.tar.gz
2. 解压该文件:
tar zxvf tokyocabinet-1.4.48.tar.gz
3. 编译安装
cd tokyocabinet-1.4.48/
./configure ; make ; make install
上面及完成整个tokyo cabinet数据库的安装,tokyo cabinet的使用也非常简单,和通常意义上的数据库操作是类似的:
1. 首先打开数据库,得到和数据库操作的句柄
2. 使用该句柄执行操作
3. 释放该句柄

#include 
#include 
#include 
#include 
#include 
int main(int argc, char **argv){
    TCADB *adb;
    char *key, *value;
    /* create the object 初始化数据库*/
    adb = tcadbnew();
    /* open the database 打开并创建数据库*/
    if(!tcadbopen(adb, "casket.tch")){
        fprintf(stderr, "open error\n");
    }
    /* store records 插入数据*/
    if(!tcadbput2(adb, "foo", "hop") ||
       !tcadbput2(adb, "bar", "step") ||
       !tcadbput2(adb, "baz", "jump")){
        fprintf(stderr, "put error\n");
    }
    /* retrieve records 根据key值获取value*/
    value = tcadbget2(adb, "foo");
    if(value){
        printf("%s\n", value);
        free(value);
    } else {
        fprintf(stderr, "get error\n");
    }
    /* traverse records 遍历所有的数据*/
    tcadbiterinit(adb);
    while((key = tcadbiternext2(adb)) != NULL){
    value = tcadbget2(adb, key);
    if(value){
        printf("%s:%s\n", key, value);
        free(value);
    }
        free(key);
    }
    /* close the database 关闭数据库*/
    if(!tcadbclose(adb)){
        fprintf(stderr, "close error\n");
    }
    /* delete the object 删除数据库*/
        tcadbdel(adb);
    return 0;
}

Tokyo Cabinet的数据结构分为
1.Hash结构
2.B+Tree
3.定长数据库
但无论哪种数据结构,最后都会抽象为以下操作,以及分别对应不同的API

put

Hash: bool tchdbput2(TCHDB *hdb, const char *kstr, const char *vstr);
B+Tree: bool tcbdbput2(TCBDB *bdb, const char *kstr, const char *vstr);
Table: bool tctdbput3(TCTDB *tdb, const char *pkstr, const char *cstr);

Your ads will be inserted here by

Easy AdSense.

Please go to the plugin admin page to
Paste your ad code OR
Suppress this ad slot.

get

Hash: char *tchdbget2(TCHDB *hdb, const char *kstr);
B+Tree: char *tcbdbget2(TCBDB *bdb, const char *kstr);
Table: char *tctdbget3(TCTDB *tdb, const char *pkstr);

这样,就为开发相应的接口,增加了不少复杂度,需要针对不同的数据结构,去调用不同的API,但Abstract Database API有效减少了这个麻烦,看下面的代码

TCADB *adb = tcadbnew();
if(!tcadbopen(adb, dbname)) {
    fprintf(stderr, "open error: %s\n", dbname);
}
tcadbput2(adb, key, value);
if(!tcadbclose(adb)){
    fprintf(stderr, "close error:");
    return 0;
}
tcadbdel(adb);

一个tcadbput2,就可以代替所有的put方法了,adb是通过判断所操作数据库的扩展名,来决定调用哪种数据库的API,扩展名对应如下:
Hash: .tch
B+Tree: .tcb
定长数据库: .tcf
—相关API总结—
初始化数据库:adb = tcadbnew();
打开或创建数据库:tcadbopen(adb, “casket.tch”)
插入key-value值:tcadbput2(adb, “foo”, “hop”)
根据key值获取value:value = tcadbget2(adb, “foo”);
将数据库指针指向第0个数据(个人理解):tcadbiterinit(adb);
获取下一个key值,调用后指向下一位:key = tcadbiternext2(adb)
关闭数据库:tcadbclose(adb)
删除数据库:tcadbdel(adb);

参考:
http://qingfeng.github.com/2009/08/06/TokyoCabinet-Abstract-Database-API/
http://blog.csdn.net/xuqianghit/article/details/6929256

3月 092013
 

1、github上删除自己项目里面不需要的文件

首先进入master文件夹下;
然后将git pull origin master将网上的复制到本地
再git rm 文件。
再git push origin master同步到网络。

2、github在建立好工程后,上传文件

git add 待上传文件
git commit -m 'first_commit'
git remote add origin https://github.com/**************.git
git push origin master

会碰到错误fatal: remote origin already exists

git remote rm origin
git remote add origin https://github.com/**************.git
git push origin master
---------------------------2013.03.09-----------------------------