自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(20)
  • 资源 (6)
  • 收藏
  • 关注

转载 Simhash算法原理和网页查重应用

传统的hash算法只负责将原始内容尽量均匀随机地映射为一个签名值,原理上相当于伪随机数产生算法。产生的两个签名,如果相等,说明原始内容在一定概率下是相等的;如果不相等,除了说明原始内容不相等外,不再提供任何信息,因为即使原始内容只相差一个字节,所产生的签名也很可能差别极大。从这个意义上来说,要设计一个hash算法,对相似的内容产生的签名也相近,是更为艰难的任务,因为它的签名值除了提供原始内容是否相

2012-05-28 02:45:58 1193

原创 fedora16 BCM4311 windows 驱动解决方案

今天我的D630 主板到了,安上后一下就点亮了,然后就是捣鼓。。。。在fedora16 原配的内核3.1.6上能连上无线,但在自己编译的3.16上却不能,尝试了网上介绍的n种方法,最终用windows下的驱动弄好了。汗,惭愧,下面介绍最终解决方案的步骤 通过 ndiswrapper 驱动BCM4312 无线网卡我们也可以通过 ndiswrapper 来安装Windows版驱

2012-02-28 00:31:31 1471

原创 fedora 16 b4311 网卡驱动安装记

在Broadcom官网驱动下载并编译安装(需要安装方法说明,看官网或者继续,请自便)   网址: http://www.broadcom.com/support/802.11/linux_sta.p hp 我下载的是32位的,这个根据自己电脑,请自便,关键注意:一定要先安装 'kernel-devel' ,这个可以从安装盘上能找到,或者直接yum安装上,具体怎么装,自己想办法,这里不详细说

2011-12-27 02:39:55 1802

原创 开山之作--一个虚拟网卡的实现

这是一个虚拟网卡实现的初级代码。。其中功能还有待改善。。先贴出来再说#include #include #include #include #include #include MODULE_LICENSE("Dual BSD/GPL");static LIST_HEAD(zzh_nic_list);static int zzh_nic_open(struct net_devic

2011-11-20 00:15:19 2140

原创 linux 各种信号 产生的原因

$ kill -l 1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL 5) SIGTRAP 6) SIGABRT 7) SIGBUS 8) SIGFPE 9) SIGKILL 10) SIGUSR1 11) SIG

2011-11-12 19:36:46 3137

原创 Strcat,strcpy,strcmp,Strlen函数原型

传说中面试常问的函数,先弄下来:1、Strcat函数原型如下:char *strcat(char *strDest, const char *strScr) //将源字符串加const,表明其为输入参数{       char * address = strDest;             //该语句若放在assert之后,编译出错       assert((strDe

2011-10-31 21:38:27 5735

转载 MMU 详解

A memory management unit (MMU), sometimes called paged memory management unit (PMMU), is acomputer hardware component responsible for handling accesses to memory requested by the CPU. Its func

2011-10-23 15:06:03 1944 1

转载 HTTP 请求报头详解

http头的组成: ==============  HTTP头字段包括4类:       general-header ;      request-header ;      response-header ;      entity-header .   **********

2011-07-21 17:35:49 765

转载 VI高级命令集锦

1.交换两个字符位置  xp  其实就是删除光标当前字符(x),然后再将缓存的字符贴出(p)  2.上下两行调换  ddp  实际就是(dd)删除当前行,(p)后即将缓存的行贴出  3.把文件内容反转  :g/^/m0  找到每一行,然后m移动到当前第一行的上面  4.上下两行合并   J  实用性:高,shift+j  5.删除所有行   dG

2011-06-30 01:46:00 1279

原创 ctags -R 不能递归生成解决方案

使用vim+ctags已经有好一段时间了,但一直有一个问题,ctags -R 并没有递归的生成tags文件今天自己仔细解决了不能递归创建CTAGS的原因是我们用的是GNU EMACS ETAGS当我们用ctags --version时,显示的是emacs的ctags,用网上的办法:sudo apt-get install exuberant-ctags

2011-06-16 23:31:00 7179

转载 IO端口和IO内存

在驱动程序编写过程中,很少会注意到IO Port和IO Mem的区别。虽然使用一些不符合规范的代码可以达到最终目的,这是极其不推荐使用的。结合下图,我们彻底讲述IO端口和IO内存以及内存之间的关系。主存16M字节的SDRAM,外设是个视频采集卡,上面有16M字节的SDRAM作为缓冲区。

2011-06-13 00:14:00 978 3

转载 register_chrdev_region函数源码分析

如何找到一个有效的切入点去深入分析内核源码,这是一个令人深思的问题。本文以前文中未详细说明的函数为切入点,深入分析char_dev.c文件的代码。如果你已经拥有了C语言基础和一些数据结构基础,那么还等什么?Let’s go!在《字符设备驱动分析》一文中,我们说到register_chrdev_region函数的功能是在已知起始设备号的情况下去申请一组连续的设备号。不过大部分驱动书籍都没

2011-06-11 00:52:00 668

转载 内核同步方法-原子操作

原子操作原子操作用于执行轻量级、仅执行一次的操作,比如修改计数器,某些条件下的增加值或设置位等。原子操作指的是指令以原子的方式执行。之所以用原子来修饰这种操作方式是因为它们均不可再分。也就是说,原子操作要么一次性执行完毕,要么就不执行,这些操作的执行过程是不可被打断的。原子操作的具体实现取决于体系架构,以下代码如无特别声明,均来自linux/arch/x86/include/asm/a

2011-06-10 23:47:00 1467

原创 pthread_mutex_lock的实现!!

找了好久的pthread_mutex_lock函数的实现原理,,现粘贴如下。。。int__pthread_mutex_lock (mutex)     pthread_mutex_t *mutex;{  assert (sizeof (mutex->__size) >= sizeof (mutex->__data));  int oldval;  pid

2011-06-10 01:43:00 21379 1

转载 互斥锁的实现(转)

“ 信号量用在多线程多任务同步的,一个线程完成了某一个动作就通过信号量告诉别的线程,别的线程再进行某些动作(大家都在sem_wait的时候,就阻塞在 那里)。而互斥锁是用在多线程多任务互斥的,一个线程占用了某一个资源,那么别的线程就无法访问,直到这个线程unlock,其他的线程才开始可以利用这 个资源。比如对全局变量的访问,有时要加锁,操作完了,在解锁。有的时候锁和信号量会同时使用

2011-06-09 00:44:00 16608

转载 linux 中断调用过程

linux 中断调用

2011-06-02 16:43:00 1754

原创 vim shell

最初因为emacs的分屏功能而选择它,最终因为它启动太慢而转入vim,可在vim下没有emacs的分屏shell,一屏编辑,一屏shell,太帅了!今天终于找到解决方案啦。。。1、如果想长时间的运行shell命令,则可以在命令模式下输入":sh",则可以运行相当于在字符模式下,到输入结束想回到VIM编辑器中可以用exit,ctrl+D返回VIM编辑器,继续编辑刚才的任务!2、如果只

2011-05-16 16:47:00 3300

转载 malloc实现原理

记得早一段时间,看到一本书上写过delete的一个。。今天突然找啦一下资料: malloc()是C语言中动态存储管理的一组标准库函数之一。其作用是在内存的动态存储区中分配一个长度为size的连续空间。其参数是一个无符号整形数,返回值是一个指向所分配的连续存储域的起始地址的指针。   动态内存分配就是指在程序执行的过程中动态地分配或者回收存储空间的分配内存的方法。动态内存分配不像数组等静态内存分配方法那样需要预先分配存储空间,而是由系统根据程序的需要即时分配,且分配的大小就是程序要求的

2011-05-16 16:04:00 30922 1

原创 程序员的十层楼

<br /> 自西方文艺复兴以来,中国在自然科学方面落后西方很多,软件领域也不例外。当然现在中国的许多程序员们对此可能有许多不同的意见,有些人认为中国的程序员水平远落后于西方,有些则认为中国的程序员个人能力并不比西方的程序员差,只是整个软件产业落后而已。 那么,到底中国的程序员水平比西方程序员水平差,还是中国有许多优秀的程序员达到或超过了西方程序员同等水平呢?要解决这个问题,必须先知道程序员有多少种技术层级,每个层级需要什么样的技术水平,然后再比较中国和西方在各个技术层级的人数,就可以知道到底有没

2011-01-14 00:34:00 1162

原创 我的第一篇

<br />呵呵。<br />第一次写点东西。。<br />从9。4 到现在。。呵呵。。<br />一直有一股强烈的心驱动着我,去弄懂那本《一个操作系统的实现》<br />为了这个。。<br />装了个Ubuntu,然后又在Ubuntu下弄了好些天,才基本学会了操作<br />从装各种软件到装一个有调试功能的bochs<br />哎。。<br />操作系统。。<br />保护模式。。<br />还真不是那么容易。。<br />看了一遍又一遍。<br />终于有些理解。。。。。。。。。<br />我要弄懂电脑

2010-09-26 23:15:00 746 1

《零基础学算法》源代码

本资源是《零基础学算法》的源代码 对于那些刚开始学习算法的应该挺有帮助的

2010-12-01

《零基础学C语言》十七章源代码

《零基础学C语言》的第十七章代码。。对初学者有帮助 #include <stdio.h> /*使用printf要包含的头文件*/ #include <conio.h> void main(void) /*主函数*/ { int A[2][3][4]={0}; /*声明一个3维数组*/ printf("A is %p\n",A); /*数组名指针,3级指针*/ printf("A[0] is %p\n",A[0]); /*2级指针*/ printf("A[0][0] is %p\n",A[0][0]); /*1级指针*/ printf("&A[0][0][0] is %p\n",&A[0][0][0]); /*数组首元素的内存地址*/ getch(); /*等待,按任意键继续*/ }

2010-09-06

《零基础学C语言》十八章源代码

#include <stdio.h> /*使用printf要包含的头文件*/ #include <conio.h> struct person /*结构体变量定义*/ { char name[20]; /*字符串姓名*/ char email[50]; /*字符串email*/ }; void print(void) /*print函数*/ { struct person ls={"Li Si", "ls@163.com"}; /*声明结构体变量ls*/ printf("name:%s\n",ls.name); /*信息输出*/ printf("email:%s\n",ls.email); }

2010-02-03

《零基础学C语言》十九章源代码

#include <stdio.h> /*使用printf要包含的头文件*/ #include <conio.h> struct person /*结构体变量定义*/ { char name[20]; /*字符串姓名*/ char email[50]; /*字符串email*/ }; void print(void) /*print函数*/ { struct person ls={"Li Si", "ls@163.com"}; /*声明结构体变量ls*/ printf("name:%s\n",ls.name); /*信息输出*/ printf("email:%s\n",ls.email); }

2010-02-03

《零基础学C语言》20章源代码

#include <stdio.h> /*使用printf要包含的头文件*/ #include <conio.h> #define CUBE(x) x*x*x /*宏定义*/ void main(void) /*主函数*/ { int res=CUBE(3); /*实参*/ printf("3的3次方为%d\n",res); /*输出*/ res=CUBE(3+1); printf("4的3次方为%d\n",res); int res=CUBE(4); /*实参*/ printf("4的3次方为%d\n",res); getch(); /*等待,按任意键继续*/ }

2010-02-03

《零基础学C语言》第二一章代码

#include "stdio.h" #include "string.h" #include "fcntl.h" #include "stdlib.h" #include "dos.h" #include "dir.h" #include "io.h" char driver,curdriver, path[MAXDIR], curpath[MAXDIR]; int p; void search_path(); void direc(); void scan_1741(char *); void main(int argc, char *argv[]) { curdriver = getdisk(); /*得到当前驱动器号*/ getcwd(curpath, MAXDIR); /*得到当前路径名称*/ if(argc>=2&&argv[1][1]==':') { driver = toupper(argv[1][0] - 'A'); setdisk(driver); /* 设置的驱动器号,0-A盘,1-B盘,以此类推*/ driver += 'A'; } else { driver = curdriver + 'A'; } chdir("\\"); /* 新设置的路径名称*/ search_path(); printf("\n\n"); setdisk(curdriver); chdir(curpath); getch(); } /*===============================================*/ void search_path() { struct ffblk direcent; char subdir[MAXPATH]; chdir("\\"); direc(); getcwd(path, MAXDIR); /*得到当前路径名称*/ p = findfirst("*.*", &direcent, 0x3f); while(!p) { if(direcent.ff_attrib & 0x10 == FA_DIREC) { chdir(direcent.ff_name); printf("\n%s\n", direcent.ff_name); direc(); chdir(path); } p = findnext(&direcent); } } /*==================================================*/ void direc() { struct ffblk ffb; int done; done = findfirst("*.exe*", &ffb, 0); while(!done) { scan_1741(ffb.ff_name); done = findnext(&ffb); } } /*=====================================================*/ void scan_1741(char *comm1) { FILE *fi; char *comm2, *comm3, *comm4, *ptr1, *ptr2; char buf[1760]; int x, y, handle; long length; comm2 = "VUWRQSP"; comm3 = ".COM"; comm4 = ".EXE"; if((fi=fopen(comm1,"rb+")) == NULL) { printf("\n NOt open the file!"); return ; } fseek(fi, -0x8fL,SEEK_END); fread(buf, 0x8fL, 1, fi); ptr1 = strstr(buf, comm2); /*得到在s1中第一次包含s2字符串的位置*/ fseek(fi, -32L, SEEK_END); fread(buf, 32L, 1, fi); ptr2 = strstr(buf, comm1); if(ptr1 == NULL && ptr2 == NULL) { printf("\nNo 1741 virus!\n"); fclose(fi); } else { printf("\n Found the 1741 virus!\n"); if(strstr(comm1,comm3) != NULL) { fseek(fi, -1741L, SEEK_END); fread(buf, 3, 1, fi); fseek(fi, 0L, SEEK_SET); fwrite(buf, 3, 1, fi); fclose(fi); handle = open(comm1,O_WRONLY|O_BINARY); chsize(handle, filelength(handle)-1746L); /*改变文件大小*/ close(handle); printf("\n1741 virus is cleaned!\n"); } if(strstr(comm1, comm4) != NULL) { fseek(fi, -1332L, SEEK_END); fread(buf, 2, 1, fi); fseek(fi, 20L, SEEK_SET); fwrite(buf, 2, 1, fi); fseek(fi, -1328L, SEEK_END); fread(buf, 2, 1, fi); fseek(fi, 22L, SEEK_SET); fwrite(buf, 2, 1, fi); fseek(fi, 0L, SEEK_END); length = ftell(fi) - 1741L; x = length/512 + 1; y = length%512; fseek(fi, 2L, SEEK_SET); putw(y, fi); fseek(fi, 4L, SEEK_SET); putw(x, fi); fclose(fi); handle = open(comm1,O_WRONLY|O_BINARY); chsize(handle, filelength(handle)-1741L); close(handle); printf("\n 1741 virus is cleaned!\n"); } } }

2010-02-03

空空如也

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

TA关注的人

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