自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

joker0910的专栏

Light Up the sky!

  • 博客(27)
  • 资源 (2)
  • 收藏
  • 关注

转载 poll和epoll-----(转)

<br />源码解析,来自 http://donghao.org/2009/08/linuxiapolliepollaueouaeaeeio.html。<br />       《poll和epoll内核源码剖析》(一)<br />       《poll和epoll内核源码剖析》(二)<br />        《poll和epoll内核源码剖析》(三)<br />epoll精髓 在linux的网络编程中,很长的时间都在使用select来做事件触发。在linux新的内核中,有了一种替换

2010-12-30 18:00:00 538

原创 Linux下,手动加载动态库~~

<br />咳咳,在自己写的函数中加载一个动态库。<br /> <br />----头文件 #include<dlfcn.h><br /> <br />有四位伙计: dlopen(), <br />                   dlsym(),<br />                   dlclose(),<br />                   dlerror().<br />接下来一一登场!<br /> <br />在编译时要加入 -ldl  : 如: gcc test.c -o

2010-12-28 21:20:00 4240

转载 一个web请求的写法

<br />向指定的主机发送一个Web页面的请求。<br />#include <sys/types.h><br />#include <sys/socket.h><br />#include <sys/times.h><br />#include <netinet/in.h><br />#include <netdb.h><br />#include <fcntl.h><br />#include <signal.h><br />#include <unistd.h><br /

2010-12-27 21:19:00 914

原创 比较规整通用的二分查找

<br />int qsearch(void** array, size_t nr, void* data, DataCompareFunc cmp){ int low = 0; int mid = 0; int high = nr-1; int result = 0; return_val_if_fail(array != NULL && cmp != NULL, -1); while(low <= high)

2010-12-27 19:24:00 528

转载 offsetof 例子

<br />/* offsetof example */<br />#include "stdafx.h"<br />#include <stdio.h><br />#include <stddef.h><br />/************************************************************************/<br />/* Macro OBJECT_HEAD_ADDRESS : calculate the struct's address

2010-12-25 16:38:00 552

转载 offsetof

在嵌入式应用中,或许你对offsetof接触不多甚至根本没见过。如果是这样,那么从这一刻起就好好地掌握它,让它成为你的又一杀手锏吧。1. offsetof与EEPROM<br />我们许多人可能都使用过一些非挥发性的存储器,如常见的EEPROM。我们经常使用它们在存储一些系统的配置参数和设备信息。在所有的EEPROM中,通过串口访问的占了大多数。一般来说,对串口的访问都是按字节进行的,这使得我们不可避免会设计出下面的<br />接口去访问EEPROM的信息:/*从EEPROM 偏移量offset处读

2010-12-25 16:26:00 769

转载 通用性更强的双向链表

<br />#ifndef _LIST_H_<br />#define _LIST_H_<br /><br />#ifdef __KERNEL__<br />#include <linux/stddef.h><br />#else<br />#include <stddef.h><br />#endif<br /><br />#ifdef  __cplusplus<br />#define list_inline inline<br />#else<br />   

2010-12-25 15:08:00 589

原创 读书的方法,及基本好书。

<br />1,如果一本书的书名中带有“原理”两个字,一定不要去记忆它其中的细节,你应该以一天至少50页的速度掌握其要领。尽可能多的在计算机上实现一种理论或者算法。<br />2,the it home!!~~<br /> <br />===================================================================================<br />=================================================

2010-12-22 19:55:00 622

转载 setsocketopt。。。。

<br />1.closesocket(一般不会立即关闭而经历TIME_WAIT的过程)后想继续重用该socket:<br />BOOL  bReuseaddr = TRUE;<br />setsockopt(s, SOL_SOCKET, SO_REUSEADDR, (const char*)&bReuseaddr, sizeof(BOOL));<br /><br /><br />2.如果要已经处于连接状态的socket在调用closesocket后强制关闭,不经历TIME_WAIT的过程:<br />BO

2010-12-21 21:42:00 1020

转载 fd_set....

<br /><br />select()机制中提供一fd_set的数据结构,实际上是一long类型的数组,每一个数组元素都能与一打开的文件句柄(不管是socket句柄,还是其他文件或命名管道或设备句柄)建立联系,建立联系的工作由程序员完成,当调用select()时,由内核根据IO状态修改fe_set的内容,由此来通知执行了select()的进程哪一socket或文件可读。<br />    多端口复用函数select在调用前要首先设置监听的端口数目,FD_ZERO是清空端口集,FD_SET是设置

2010-12-19 17:17:00 511

原创 练习

<br /><br /> <br />    1.选择一个项目,像读书一样研读并且做笔记。归纳出好的方面和坏的方面。发表一篇评论。至少找到一个你可以借鉴的技巧或者模式。再找到至少一处缺点,提醒自己在开发软件的时候不要犯这类错误。<br />2. 挑选一个你经常重复做的工作,为它编写一个代码生成器。从简单的部分做起。不要管这个代码生成器的重复使用率,只确保这个代码生成器可以节省你的时间。<br />3.研究模型驱动架构(MDA)。尝试一些可以使用的工具。看看工作中哪里可以使用MDA概念。想想如何用你日常使用的

2010-12-19 11:56:00 370

原创 动态数组,扩充和缩小

<br /> <br />//首先是数据结构,size记录使用的空间,alloc_size记录分配的空间 data为指针的指针,为了灵活性,必须的。<br />struct _DArray<br />{<br />    size_t size;<br />    size_t alloc_size;<br />    void** data;<br />};<br />typedef struct _DArray DArray;<br /> <br />//一些接口的定义。<br

2010-12-17 21:52:00 1188

原创 strtok()

<br />好吧,下次用一定会看准原型的。<br />char * strtok(char *s,char *delim);<br /> <br />注意了,两个都是字符串。<br /> <br />首次调用时,s指向要分解的字符串,之后再次调用要把s设成NULL。<br />strtok在s中查找包含在delim中的字符并用NULL('')来替换,直到找遍整个字符串。  char * p = strtok(s,";");  p = strtok(null,";");  在调用的过程中,字串s被

2010-12-13 21:14:00 413

原创 CString,string,char*之间的转化(内部的?)

<br />CString csOne ;<br />string str;<br />char* chr;<br /> <br />csOne = str.c_str();<br />str = csOne.GetBuffer(0);<br />chr  = str.c_str();

2010-12-13 21:05:00 385

原创 傻瓜版 配置samba

<br />1. 安装<br />$ sudo apt-get install samba<br />$ sudo apt-get install samba-common<br />$ sudo apt-get install samba-common-bin<br />$ sudo apt-get install system-config-samba<br />2. 配置<br />$ sudo system-config-samba<br />3. 启动<br />$ sudo smbd start

2010-12-12 15:32:00 551

原创 网络爬虫资料大全

http://www.gooseeker.com/cn/node/Fuller/2009082806

2010-12-12 14:15:00 1338

原创 str.erase

<br />erase函数的原型如下:<br />(1)string& erase ( size_t pos = 0, size_t n = npos );<br />(2)iterator erase ( iterator position );<br />(3)iterator erase ( iterator first, iterator last );<br />也就是说有三种用法:<br />(1)erase(pos,n); 删除从pos开始的n个字符,比如erase(0,1

2010-12-10 17:42:00 970

原创 判断一个子网掩码的合法性

<br />1,首先,保证str为小端模式。<br />2,其次,验证str转化成的IP为合法IP<br />3,(mask -1 | mask) ==  0xFFFFFFFF ,如果是TRUE就是子网掩码,是FALSE就不是子网掩码。

2010-12-10 17:15:00 8500 1

原创 测试的几个问题

<br />1.每个函数只完成单一的功能。<br />    单一功能的函数容易理解,也容易预测其行为。测试的时候,给定一些输入数据就知道它的输出和影响,易于测试。<br /> <br />2.把函数分为查询和命令两类。<br />    查询函数只查询对象的状态,而不改变对象的状态。命令函数则只修改对象的状态,只返回其操作是否成功的标志,而不返回对象的状态。<br /> <br />3.验证输入数据,确认使用者正确的调用了函数。<br />    assert检查仅用于debug版本。<br />   

2010-12-09 21:34:00 510

原创 代码量需要增加

<br />一直在调试的一个模块,问题很简单,就是有一个指针,没有检查是否指向有效地址就直接使用了,导致一直卡在一个地方。无论单线程还是多线程,无论有多么确保这个指针会指向有效的地址,用之前都要慎重,再慎重!不确定的,一定要做个检查,发出有效信息,以后调试错误,也要首先确定这些地方没有问题,在驱动中,这是致命的。<br /> <br />访问越界,多使用memcpy,strncpy,这些可以控制长度的拷贝!而且长度的选择也要慎重,至少不要越界,还有,对于C风格的字符串,有时后/0会不小心被省略,或者没有复制

2010-12-08 20:01:00 680

原创 常犯的错误,(有时间读读《COM本质论》)

1.结构体成员顺序发生变化引发的错误。struct s{     int l;     char* p;};int main(int argc, char* argv[]){    struct s s1 = {4, "abcd"};   //使用struct s s1 = {.l = 4, .p = "abcd"};更好,不怕顺序发生变化    return 0;}

2010-12-05 20:02:00 606

原创 提高效率!

<br />1.编程时,我们的时间花在哪?<br />    a,需求分析,然后根据需求进行设计。<br />    b,测试……<br />    c,调试.....这个是最后一招,只有在迫不得已的情况下才使用,没有什么比一次性写好,不使用调试器更快的方法了。<br />2.解决方法。<br />    Code Review方法,比如结对编程,一个人编写程序,另一个Review输入每一行代码,前者专注于目前的细节上,后者从高层次考虑如何改进代码质量,两个人的角色会经常互换。<br />    敲完代码最

2010-12-05 19:22:00 526

原创 Don't Repeat YourSelf (DRY)

<br />在写双向链表的打印,求和,找出最大数的时候,很明显,都是需要遍历的,因此,可以使用函数回调的方法,写一个遍历函数,留一个回调参数,呵呵,增强了代码的灵活性啊。<br /> <br />1.不要编写重复的代码。<br />有很多问题:<br />        a.虽然重复的代码很容易写,但是更容易出错。使用相类似的代码,我们更容选择使用“CV”,但是这样很容易犯一些细节上的错误,如果某个地方修改不完整,就容易留下定时炸弹!<br />        b.重复的代码经不起变化。无论是修改BUG,还

2010-12-03 20:12:00 588

原创 extern“C”

<br />见过好多次,这里记录一下<br /> <br />C++允许同名函数存在,所以编译器会对函数名重新编码。C++代码包含C语言的头文件时,重新编码名字与C语言库中的原函数名不一致,结果造成找不到函数的情况。为了让C语言实现的函数在C++中可以调用,需要在头文件中加点东西:<br /> <br /> <br />#ifdef __cplusplus<br />extern "C"{<br />#endif<br />    ...<br />    ...<br />#ifdef __cpluspl

2010-12-03 19:25:00 336

原创 这个兼容windows的Linux很吸引人哦~~毛德操先生弄得~

<br />http://www.longene.org/aboutproject.php

2010-12-03 18:41:00 1069

原创 通用的双向链表

#ifndef __STDLIST_H__#define __STDLIST_H__/** 这个通用双向链表就是一个简单的链,但是通过提供的扩展宏,可以嵌套在许多结构中* 使得相应的结构成为一个链表。* typedef struct tagMSGNODE* {* DECLARELISTNODE();* UNIT uMsg;* WPARAM wParam;* LPARAM lParam;* }MSGNODE, *LPMSGNODE;*** STD

2010-12-03 13:03:00 593

原创 藏好代码的隐私~~

<br />封装:<br />达到这样的目的,首先要能隔离变化,内部数据结构,内部使用的函数和全局变量等等,把这些代码封装起来,不会影响系统的其他部分。<br />其次降低复杂度。接口的最小化,最小化的接口容易被理解和使用,封装了细节,只暴露最小的接口,使得系统简单明了,在一定程度上降低了系统的复杂度。<br /> <br />1.隐藏数据结构,<br />对于内部数据结构,放到.c文件中,不要放到头文件中,然后,提供操作该数据结构的函数,哪怕只是存取数据结构的函数。<br /><br /><br />2.

2010-12-01 19:09:00 385

dot.exe

dot.exe

2013-06-03

double stack

double stack, to analys the strings and automachine.

2013-06-03

空空如也

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

TA关注的人

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