自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(59)
  • 资源 (2)
  • 收藏
  • 关注

原创 TDS协议 加密密码算法

看freetds的源码:unsigned char *tds7_crypt_pass(const unsigned char *clear_pass, int len, unsigned char *crypt_pass){ int i; for (i = 0; i   crypt_pass[i] = ((clear_pass[i] > 4)) ^ 0xA5; return crypt_pass;}这一点,wireshark早已经解析出来了。只是,当时不知道用哪种算法实现。

2011-05-19 11:10:00 3058 1

原创 尽量用strncpy

<br />在做字符串拷贝的时候,尤其在不明确源字符串长度的情况,最好使用strncpy来做,以确保不溢出。<br />如遇到的例子: <br />  uint8_t *strPlace = buf + sizeof(mysql_hdr) + 9 + 23;<br />//strcpy(mssql->loginInfo.UserName, strPlace);<br />  strncpy(mssql->loginInfo.UserName, strPlace,255);

2011-04-14 16:37:00 736

原创 shell脚本读写文本文件

<br />通过读写临时文件来完成内核与界面的交互是目前接触的比较常用手段。而写操作的格式如何呢。<br />写个小小的例子,如写某个日志文件,想要在后面加上时间:<br />mdate=`date +%R-%d-%m-%Y`<br />LogFile=/tmp/HDstatusLog.log<br />echo $disk is good!           $mdate #> $LogFile<br />写到文件的格式就会变成这样:/dev/sdc is good! 17:23-12-02-2011<

2011-02-12 16:57:00 10663

原创 tar打包命令

<br /> tar打包命令,目标生成压缩文件名和源文件夹<br />顺序容易弄反了。。<br />cd /mnt/hgfs/share<br /> tar zcvf smart.tar.gz smartmontools-5.38(目标生成的压缩包是放前面)

2011-01-19 09:13:00 835

原创 绑定变量 存储过程

绑定变量是为了减少解析的,比如你有个语句这样select aaa,bbb from ccc where ddd=eee;如果经常通过改变eee这个谓词赋值来查询,像如下select aaa,bbb from ccc where ddd=fff;select aaa,bbb from ccc where ddd=ggg;select aaa,bbb from ccc where ddd=hhh;每条语句都要被数据库解析一次,这样比较浪费资源,如果把eee换成“:1”这样的绑定变量形式,

2011-01-18 15:48:00 2129

原创 哈佛结构与冯.诺依曼结构的区别

<br />过去知道计算机的体系结构分为哈佛结构与冯.诺依曼结构,但并没有去总结他们有什么区别。今天来看看它们有什么区别。<br />       冯.诺依曼结构,又称为普林斯顿结构。是一种经典的体系结构,有CPU,总线,外部存储器组成。这种体系结构采用程序代码存储器与数据存储器合并在同一存储器里,但程序代码存储器地址与数据存储器地址分别指向不同的物理地址。程序指令宽度与数据宽度一样。数据总线和地址总线共用。<br />       但是随着CPU设计的发 展,pipeline的增加,指令和数据的互斥读取很

2011-01-12 16:02:00 987

原创 SQL注入式攻击

       所谓SQL注入式攻击,就是攻击者把SQL命令插入到Web表单的输入域或页面请求的查询字符串,欺骗服务器执行恶意的SQL命令。在某些表单中,用户输入的内容直接用来构造(或者影响)动态SQL命令,或作为存储过程的输入参数,这类表单特别容易受到SQL注入式攻击。常见的SQL注入式攻击过程类如:⑴ 某个ASP.NET Web应用有一个登录页面,这个登录页面控制着用户是否有权访问应用,它要求用户输入一个名称和密码。   ⑵ 登录页面中输入的内容将直接用来构造动态的SQL命令,或者直接用作

2011-01-11 14:58:00 442

原创 典型sql语句

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

2010-12-30 14:55:00 447

原创 防火墙

网络地址转换(NAT)是一种将一个IP地址域映射到另一个IP地址域技术,从而为终端主机提供透明路由。NAT包括静态网络地址转换、动态网络地址转换、网络地址及端口转换、动态网络地址及端口转换、端口映射等。NAT常用于私有地址域与公用地址域的转换以解决IP地址匮乏问题。在防火墙上实现NAT后,可以隐藏受保护网络的内部拓扑结构

2010-12-27 22:58:00 410

原创 字符编码转换 各种函数 UTF格式转换、

<br />/*<br /> * codeconv.c<br /> *<br /> * Heidun IDS developer team<br /> *  Created on: Jun 11, 2009<br /> *      Author: Xiaodong Zhong<br /> */<br />#include <stdio.h><br />#include <stdlib.h><br />#include <string.h><br />#include <errno.h><br />#inc

2010-12-24 09:22:00 1292

原创 反码、补码

(1)正数的补码<br />  与原码相同。 <br />  【例1】+9的补码是00001001。(备注:这个+9的补码说的是用8位的2进制来表示补码的,补码表示方式很多,还有16位2进制补码表示形式,以及32位2进制补码表示形式等。同一个数字在不同的补码表示形式里头,是不同的。比方说下面所要提到的-15的补码,在8位2进制里头是11110001,然而在16位2进制补码表示的情况下,就成了1111111111110001。在这篇补码概述里头涉及的补码转换默认了把一个数转换成8位2进制的补码形式,每一种补码

2010-12-21 14:01:00 786 1

原创 小程序写得都不顺,手有些生了

突然想到一个大小写字母转换的问题,于是动手写了一下。反复调试修改了好几次才写好,真是对自己不满!这种几乎只有在笔试的时候会做到的题,居然。。。笔试的时候可是没有调试工具的!如果没依赖调试工具,估计就过不了了!!代码如下:#include #include #include char *Convert(char *strIn){ //int i=0; char *strOut=(char*)malloc(strlen(strIn)+1);//记得分配空间!记得strlen跟sizeof区别,考虑'/0' me

2010-12-16 17:11:00 641

原创 Eclipse遇到的一些问题,和对应的解决办法

<br />1、“binary not found”<br />    需要build(编译)工程,注意build preference中的“自动生成makefile文件”注释掉(一般都自己写  Makefile文件)。build后就会出现binary等文档。注意eclipse中build、run、debug都需要revise configure<br /> 关于eclipse的build:<br />(1)在eclipse的project菜单下有build   automatically。选中这个的话。每

2010-12-15 15:07:00 2855

原创 string转换成int类型 和int转string

strlib.h里面有个atoi配置文件里面有 一个IP、端口号  sqlaudit:oracleip any,oracleports 1521,mssqlip any,mssqlports 1433 139 445那么可以,读取出来,然后把这个1521通过atoi转换成整形。

2010-12-13 14:55:00 2103

原创 读配置文件的实现

#define SAS3_CONFIGFILE "/mnt/heidun/config/SAS3_Database.conf"GetStrKeyValue(mysqlusername,"LUserName","RemoteMysql",SAS3_CONFIGFILE);//读配置文件BOOL GetStrKeyValue(LPCTSTR strValue,LPCTSTR strKey,LPCTSTR strSection,LPCTSTR strFileName){ FILE *fp; char buf[ST

2010-12-09 11:45:00 464

原创 经典SQL语句

下列语句部分是MsSql语句,不可以在access中使用。SQL分类: DDL—数据定义语言(CREATE,ALTER,DROP,DECLARE) DML—数据操纵语言(SELECT,DELETE,UPDATE,INSERT) DCL—数据控制语言(GRANT,REVOKE,COMMIT,ROLLBACK)首先,简要介绍基础语句:1、说明:创建数据库CREATE DATABASE database-name 2、说明:删除数据库drop database dbname3、说明:备份sql server---

2010-12-09 11:04:00 1306

原创 FindSubstr()的使用

它返回的是定位到子串的开始位置。char *FindSubstr(char *buf, int b_len, char *pat, int p_len){    char *b_idx;        /* index ptr into the data buffer */    char *p_idx;        /* index ptr into the pattern buffer */    char *b_end;        /* ptr to the end of the data bu

2010-12-01 15:16:00 1268

原创 变量命名规则------匈牙利命名规则

<br />匈牙利命名法是微软推广的一种关于变量、函数、对象、前缀、宏定义等各种类型的符号的命名规范。匈牙利命名法的主要思想是:在变量和函数名中加入前缀以增进人们对程序的理解。它是由微软内部的一个匈牙利人发起使用的,结果它在微软内部逐渐流行起来,并且推广给了全世界的Windows开发人员。下面将介绍匈牙利命名法,后面的例子里也会尽量遵守它和上面的代码风格。还是那句话,并不是要求所有的读者都要去遵守,但是希望读者作为一个现代的软件开发人员都去遵守它。<br /> <br /> <br />a       Ar

2010-11-26 10:06:00 777

原创 典型的局部变量位置错误

前两天添加写这么一段代码:

2010-11-18 11:03:00 472

原创 怎么用mdadm管理软件RAID [转]

<br />安装程式实现软件RAID代替硬件RAID的方法,今天再进一步谈谈手动创建软RAID和日常维护的方法。<br />mdadm使用的也是md驱动,由于其拥有多种模式,而且单一工具,不依赖所有设置文件,是替代raidtools的好工具。目前几乎所有发行版本使用的都是该工具。<br />一、安装和编译<br />源码下载:<br />http://www.cse.unsw.edu.au/~neilb/source/mdadm/<br />编译:<br />tar xzvf ./mdadm-1.6.0.t

2010-11-08 11:41:00 620

原创 用apache架设网页服务器还是主流

<br />看来用apache架设网页服务器还是主流,sina、sohu、youku都是用这个。谷歌,用自己的gws,csdn用微软的iis,感觉非主流。<br />见下面的文章:<br />Apache, nginx (发音 engine x), lighttpd ( 发音 lighty) 是主流的web server, 大型网站都在用哪些web 服务器? yaozer做了个简单的调查, 可以发现: Apache 目前还是占据主导地位, 但是nginx有异军突起之势,大型网站新上线的网站开始渐渐使用ngi

2010-11-04 17:26:00 917

原创 linux smartctl 磁盘健康监测

<br />什么是S.M.A.R.T.<br />SMART是一种磁盘自我分析检测技术,早在90年代末就基本得到了普及<br />每一块硬盘(包括IDE、SCSI)在运行的时候,都会将自身的若干参数记录下来<br />这些参数包括型号、容量、温度、密度、扇区、寻道时间、传输、误码率等<br />硬盘运行了几千小时后,很多内在的物理参数都会发生变化<br />某一参数超过报警阈值,则说明硬盘接近损坏<br />此时硬盘依然在工作,如果用户不理睬这个报警继续使用<br />那么硬盘将变得非常不可靠,随时可能故障

2010-11-04 16:38:00 2800

原创 linux加载Windows机器上的共享文件夹

加载Windows机器上的共享文件夹要先切换到 root 用户,然后如下去挂接 碰到中文目录,显示?号,加上iocharset=utf8参数就可以了,挂接的方法如下:记录在此,以备后用。 直接用mount命令 mount -t smbfs -o iocharset=utf8,username=Windows共享用户名,password=密码 -l //IP地址/共享文件夹名 Linux中的挂接点 或者通过smbmount来挂接 安装 apt-get install smbfs 挂接命令: smbmount

2010-10-29 11:34:00 1013

原创 dos命令

<br />用了一段时间linux的命令行,再看看dos的,感觉上手很快!嘻嘻。。。<br /> <br />DOS命令大全<br />一)MD——建立子目录  <br />1.功能:创建新的子目录 <br />2.类型:内部命令 <br />3.格式:MD[盘符:][路径名]〈子目录名〉 <br />4.使用说明: <br />(1)“盘符”:指定要建立子目录的磁盘驱动器字母,若省略,则为当前驱动器; <br />(2)“路径名”:要建立的子目录的上级目录名,若缺省则建在当前目录下。 <br />例:(1

2010-10-28 09:17:00 410

原创 自己写的第一个shell脚本 HD_init.sh

#!/bin/sh targetdisk1= targetdisk2= dopartition= isnewdisk= newdisks= disknum= disks=`fdisk -l 2>/dev/null |grep Disk |cut -d : -f1 |cut -d ' ' -f2 2>/dev/null |grep /` for disk in $disks ; do label=`e2label ${disk}1 2>/dev/null` if [ "$label" = "/root" ];

2010-10-27 15:24:00 590

原创 shell字符串操作

1,字符串剪裁file=/dir1/dir2/dir3/my.file.txt我们可以用 ${ } 分别替换获得不同的值:${file#*/}:拿掉第一条 / 及其左边的字串:dir1/dir2/dir3/my.file.txt${file##*/}:拿掉最后一条 / 及其左边的字串:my.file.txt${file#*.}:拿掉第一个 . 及其左边的字串:file.txt${file##*.}:拿掉最后一个 . 及其左边的字串:txt${file%/*}:拿掉最后条 / 及其右边的字串:/dir1/di

2010-10-25 15:59:00 451

原创 .h文件,

<br />用eclipse环境里,在工程里面添加文件,最后,是做个.c和.h文件,并且把一些结构体、声明等放在.h文件里面。<br />今天本想不加.h文件直接用extern 声明,但是总过不了,不知道怎么回事。后来,只加.h,把函数声明放.h文件里面还是过不了,知道,放进去结构体声明才过。

2010-09-16 11:25:00 455

原创 指针与数组的关系

指针与数组是C语言中很重要的两个概念,它们之间有着密切的关系,利用这种关系,可以增强处理数组的灵活性,加快运行速度,本文着重讨论指针与数组之间的联系及在编程中的应用。<br />  1.指针与数组的关系<br />  当一个指针变量被初始化成数组名时,就说该指针变量指向了数组。如:<br />  char str[20], *ptr;<br />  ptr=str;<br />  ptr被置为数组str的第一个元素的地址,因为数组名就是该数组的首地址,也是数组第一个元素的地址。此时可以认为指针ptr就是数组

2010-09-14 12:25:00 1762

原创 malloc()和free()

<br />一、malloc()和free()的基本概念以及基本用法:<br />1、函数原型及说明:<br />void *malloc(long NumBytes):该函数分配了NumBytes个字节,并返回了指向这块内存的指针。如果分配失败,则返回一个空指针(NULL)。<br />关于分配失败的原因,应该有多种,比如说空间不足就是一种。<br />void free(void *FirstByte): 该函数是将之前用malloc分配的空间还给程序或者是操作系统,也就是释放了这块内存,让它重新得到自

2010-09-13 16:45:00 491

原创 内存泄漏和内存溢出

一般我们常说的内存泄漏是指堆内存的泄漏。堆内存是指程序从堆中分配的,大小任意的(内存块的大小可以在程序运行期决定),使用完后必须显示释放的内存。应用程序一般使用malloc,realloc,new等函数从堆中分配到一块内存,使用完后,程序必须负责相应的调用free或delete释放该内存块,否则,这块内存就不能被再次使用,我们就说这块内存泄漏了。 内存溢出:比如数组越界、指针移动越界

2010-09-13 14:54:00 362

原创 free的使用

想用释放一段内存 char *buf(10000个字节)能简单的free(buf)吗?显然不能!!! 这个一开始我犯这样的错了。内存中可能有很多的空字符('/0').free会释放传入参数的类型大小,sizeof,当然如果是字符串,会计算字符串的长度,以'/0'结束。那么如何释放呢?for(i=0;i{      free(buf[i]);}如果不是用buf[i],而是用buf呢??会不会有问题呢?该内存中间有空字符存在时,会free一段一段的,那么后面的计算会……

2010-09-13 14:52:00 789

原创 【转】c语言动态与静态分配内存空间的区别

所谓动态内存分配就是指在程序执行的过程中动态地分配或者回收存储空间的分配内存的方法。动态内存分配不象数组等静态内存分配方法那样需要预先分配存储空间,而是由系统根据程序的需要即时分配,且分配的大小就是程序要求的大小。<br />例如我们定义一个float型数组:float score[100];<br />但是,在使用数组的时候,总有一个问题困扰着我们:数组应该有多大?在很多的情况下,你并不能确定要使用多大的数组,比如上例,你可能并不知道我们要定义的这个数组到底有多大,那么你就要把数组定义得足够大。这样,你的

2010-08-11 09:41:00 852

原创 switch 里面不同分支的不同初始化

写了段程序如下:原来是,没加这对大括号的,报错。后面差资料得:把变量声明放到一对{}中是可以的,因为那样变量的作用域就那对大括号中,但直接放在switch的大括号内,却置于某个case之后是不可以的,因为那样意味这有某个变量,其作用域直接在swtich的大括号内,它的作用域本身并没有被跳过(swtich语句并没有被跳过),但它在其作用域内却未必被定义,这显然是荒唐的。

2010-06-02 11:30:00 919

原创 字节对齐 结构体的sizeof

现代计算机中内存空间都是按照byte划分的,从理论上讲似乎对任何类型的变量的访问可以从任何地址开始,但实际情况是在访问特定类型变量的时候经常在特 定的内存地址访问,这就需要各种类型数据按照一定的规则在空间上排列,而不是顺序的一个接一个的排放,这就是对齐。   对齐的作用和原因:各个硬件平台对存储空间的处理上有很大的不同。一些平台对某些特定类型的数据只能从某些特定地址开始存取。比如有些架构的CPU在访问 一个没有进行对齐的变量的时候会发生错误,那么在这种架构下编程必须保证字节对齐.其他平台可能没有这种情况,但

2010-06-01 15:29:00 522

原创 fopen怎么使用相对路径

第一行为 UNIX 系统使用;第二行是 Windows 系列系统的用法;第三、四行则为 URL 的使用范例。$fp = fopen("/home/rasmus/file.txt", "r");$fp = fopen("c://mydata//info.txt", "r");$fp = fopen("http://www.php.net/", "r");$fp = fopen("ftp://user

2010-05-28 11:27:00 10907 1

原创 C语言的枚举类型

C语言的枚举类型:如果一个变量你需要几种可能存在的值,那么就可以被定义成为枚举类型。之所以叫枚举就是说将变量或者叫对象可能存在的情况也可以说是可能的值一一例举出来。  枚举的说明与结构和联合相似, 其形式为:           enum 枚举名{                标识符[=整型常数],                标识符[=整型常数],                ...

2010-05-26 10:12:00 3191

原创 为什么判断结构体相等要这么复杂呢?

疑惑:为什么可以用 = 赋值,却不可以用 == 判断相等? 而且结构体里面可能还有指针,你该如何判断两个指针是否相同,是根据指针所指向的内容来判断还是仅仅根据指针的值来判断。也是需要程序员自己来定义的。

2010-05-26 09:38:00 2252 1

原创 c语言 文件操作

void main(){ FILE *fp; fp=fopen("aaa.txt","w"); if (!fp)//判断文件是否打开成功 {  printf("open file error!/n");  return ; } fwrite("abcdefg",1,sizeof("abcdefg"),fp);//写入 fclose(fp);//关闭打开文件}  #include   FILE *f

2010-05-25 17:02:00 374

原创 大小端模式

 偶:注意:大小端的高低位数据是按地址来计算的。如0x1001,10是高位字节,01是低位字节。char *s="abcd",a是高位字节……偶:记忆:小端是内存低地址放低位数据。大端反之。所谓的大端模式,是指数据的低位(就是权值较小的后面那几位)保存在内存的高地址中,而数据的高位,保存在内存的低地址中,这样的存储模式有点儿类似于把数据当作字符串顺序处理:地址由小向大增加,而数据从高位

2010-05-24 10:15:00 499

原创 Exit()函数

在C语言的main函数中我们通常使用return (0);这样的方式返回一个值。   但这是限定在非void情况下的,也就是void main()这样的形式。   exit()通常是用在子程序中用来终结程序用的,使用后程序自动结束,跳出操作系统。   exit(0) 表示程序正常退出, exit(1)/exit(-1)表示程序异常退出。   exit() 结束当前进程/当前程序/,

2010-05-20 16:45:00 452

易学C++潘嘉杰PDF

易学C++教程,潘嘉杰 附带各章节原码,练习答案

2010-03-04

uCOS-II中文电子书 chm

如果可能的话,最好是能够去卖一本原书,因为看书比看电脑屏幕方便多了,还可以很好的收藏。书上的图片也比这上面的清晰多了,而且这本电子书是第一版(下面的第一本),这里面的源代码的版是uC/OS-II 2.0,而现在最新的是uC/OS-II 2.52,而它所对应的书是第二版,就是下面的中间这一本,讲得比第一版更详细和更好,很容易看懂

2009-10-30

空空如也

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

TA关注的人

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