• 2005-07-06

    向大家告别 - [我的博客]

    我是Junglesong,创建这个blog一年多了,期间承蒙各位光临指点,在此向大家表示谢意。
    由于速度的原因,我打算在junglesong.yculblog.com开始自己的新blog,这里就留做纪念了。

    欢迎大家访问我的新blog:junglesong.yculblog.com
  • FileRenamer2 V1.00是我原创的一个文件批量更名工具。
    我原来在网上发布过一个FileRenamer V1.00,FileRenamer2 V1.00 在原先FileRenamer V1.00的基础上增加了许多新功能:
    1.支持单目录和多目录两种形式的批量命名方法,单目录是对一个目录中的文件进行批量命名,文件名可以自己设定,多目录是对一个文件夹下的所有子目录中的文件进行批量命名,文件名以文件所在目录的目录名为基准.
    2.恢复功能:它可以在在命名过程中自动生成log文件,此文件是文件批量命名的结果记录,程序可以通过它恢复重命名前的状态,这个功能在出错时特别好用.
    在上一版中原有的功能新版都具备,原版功能如下:
    1.支持对目录的命名.
    2.支持对一个目录下文件的批量命名.
    3.命名文件时可以带上文件大小,创建日期.
    3.命名文件夹时可以带上其文件个数.

    本软件使用方法与上一版类似,一般来说都是先选择"Single Folder"和"Multi Folder"两种状态,然后选择你需要重命名的文件夹,再在左边的文件类型列表框中选中你需要的文件类型,将要命名的结果放到右边的树状目录中,你也可以进行改变,完毕后,点击最下方的"Rename",输入你想输入的信息,再点击"OK"按钮就可以了.

    主界面中的按钮说明如下:
    1.Browse:选择你想重命名的文件夹.
    2."Single Folder"和"Multi Folder":切换命名状态.
    3.左上角"Rename",弹出文件夹命名对话框,对文件夹进行命名.
    4."ALl"复选框",全选所有类别的文件.
    5."About":弹出软件信息对话框.
    6."Exit":退出程序.
    7."Back":进行重命名恢复功能,点击此按钮后会出现一个对话框,先选择log文件所在的目录,再选择log文件,点击"Restore"按钮就可以了.
    3.左下角"Rename",弹出文件命名对话框,对文件进行命名.

    软件界面:http://www.helihuo.net/non-cgi/usr/35/35_2421_2.jpg
    软件下载:http://www.helihuo.net/non-cgi/usr/35/35_2421.rar
  • 频繁的更新,好的作品,以及个性 - 这些因素的配合是非常关键的的。如果你不能定期的更新(不一定是每天,但要有一固定的计划),博客就难于建立影响和访问量
      人们如果发现了作品的价值,他们会原谅你的拼写错误. 但如果你不能保持作品的水平,访问量就会下降.
      不用为谁在阅读而担心, 只写你所感兴趣的题材. 不要去取悦他人, 把精力集中在你认为有意思的东西上
      设定范围. 考虑你所能舒适地分享多少关于你自己的东西, 你不必“全部交待“. 只需要决定你生活的哪些部分你愿意分享, 尝试去找到一个平衡点.
      记住:所有你发布的东西将被Google和其他网站发现并存档.所以在发布以前认真的考虑一下. 曾有人因为在自己网站上写的东西而被解雇. 决不要因为“他们不用互联网“而假定你所写的关于其他人(家庭成员, 朋友或者同事)的内容不会被他们看到.
      自打我的网站开始,我祖母就一直在看,所以我一直把他们当成是我的重要读者的一部分. 这让我把写作集中到我愿意和他们分享的内容上, 而减少了乱七八糟的东西. 我想让网站能为广泛的人群所接受
      我的一个规则是 “不要删除任何一篇日记“. 所以在写任何东西之前 我都要思考一下 , 确信我没有把将来会后悔的东西放上去. 因为这个原因我不建议“酒后开博“. 你不想第二天醒来看到不记得是自己写的东西.
      Fraser (blogjam.com)
      
      你应当象审视一本书一样审视一个博客,我想要在阅读博客时得到愉悦, 所以我在寻找那些让我发笑的好文章.听起来很简单, 我知道,但是有时候却很难找到.
      不要去尝试迎合读者, 不要仅仅因为你“觉得不得不写“而写日记, - 只在你有话要讲的时候再写
      个人网站的魅力在于没有编辑的清规戒律. 如果你星期一醒来觉得和星期二感觉会完全不同, 那么你的日记应当反映它. 最终,你将找到你所喜欢的自己的声音和风格, 如果你写的东西有趣又或逗乐, 那么你会有越来越多的读者. 你不需要去故意给别人留下印象.
      不谈工作, 避免写你只是泛泛了解的人. 否则你会最终得罪某些人.
      博客像一系列给自己的在线随手贴小条, 一个纪录找到有趣的事情或干过的傻事的办法.
      如果明天有人建立一个博客,用来纪录一只极其富于照相细胞的小猫的童年生活, 我绝对相信会有巨大的流量.
      Glenn Reynolds (instapundit.com)
      
      定期发布日记, 找到你所感兴趣的题目, 持续跟踪下去, 认真的写作(我讨厌满是拼写和语法错误的博客).
      礼貌总会得到报答. 对人直呼其名可能听起来有趣, 但会令更多的读者反感
      建立博客, 选择你比大多数人知道得多的题目- 比如你的职业,你当地的事情等等 - 让这些成为你博客的主要部分.
      当你有特别重要的东西,发email给其他博客让他们知道. 他们会给你链接, 你会得到读者的访问.
      你应该有一个数码相机. 照片会使博客生动起来. 如果照片好的话, 会真的胜过一千个字
      Robyn Pollman (tampatantrum.com)
      
      保持你自己的风格 - 不要一直模仿拷贝你周围的人。 你的个性应当自始至终得到展现。 它使你的博客独特和表现“真我“.
      记住,尽管你认为你只为朋友和家庭书写, 你的文字实际上会有来自全球的读者。 你不会知道是谁,在哪里,在什么时候阅读你的日记
      当我和丈夫开始写博客的时候, 我们经常提到我们要去的电影和餐馆。 想象一下我们的震惊吧 - 读者在那些地方出现, 希望碰到我们 - 然后在他们自己的博客里写这件事情! 我们很快的学会了在之后写我们计划做的事情,而不是之前.
      你得把皮肤发展得厚一点. 博客站会经历风波,像论坛一样. 这是博客经历的一部分.就像任何体育活动,几千个观众循规蹈距,一切都很美好, 但是只要有一个人乱来立刻引起大伙的混乱 - 博客站也一样. 博客们不能把这些太个人化的处理 -- 尽管有时候这很难做到,取决于当时的情况.
      Quin Parker (quinparker.com)
      
      有很多人在开始写作的时候还没有想好想要写什么
      人们不喜欢阅读巨大的全是牢骚的日记, 他们早就看多了
      像所有其他网页一样, 频繁的更新,并放入有趣的东西
      去了解你的读者
      Hash (www.iMakeContent.net)
      
      一个好的博客有适应于其内容的风格. 对个人博客好的要素 - 比如 对世界非常主观的看法 - 可能对于用来展示设计的博客, 扩展简历的博客, 或者提供产品信息给顾客的商业博客来讲是错误的
      浏览结构应当简单. 象设计任何网站一样, 最好远离闪动的图标,音乐 或者难于在屏幕上浏览的色彩搭配.
      博客应当按照你所说的来写, 你希望人们再来, 变成固定读者, 所以你要遵守你的承诺. 如果你建立的是一个技术博客, 你的读者可能很惊讶于你开始写为什么你的婚姻 / 球队 / 国家 失败的流水账. 当然, 过程当中你也许会得到新的读者然后决定把博客重新开张
      对个人博客而言,需要一些与众不同的东西. 也许是非常有有用的内容比如 - 分享行内知识, 提供最新的分析,难找的链接. 也许是有不同寻常的,有趣的,有洞察力的观点 .
      博客网站需要个性. 博客网站应当成
  • 下载连接:http://www.helihuo.net/non-cgi/usr/35/35_2414_3.rar
    软件界面:http://www.helihuo.net/non-cgi/usr/35/35_2414_1.jpg

    本软件是Excel文档制作的一个帮助工具,与Excel交道打得多的人都知道,当一个文档中含有过多页面时点击左下方的小标签察看很不方便,所以一般都提供一个提供页面跳转目录页来方便用户浏览,但是制作起来也很花时间精力.我在工作过程中也遇到了同样的问题,于是就写了这样一个小工具来自动生成页面跳转目录页,它能帮你把一个上午甚至一天的活一蹴而就.

    使用时非常简单,选择你需要生成目录的Excel文件,再点击“Make Catalog”按钮就可以了,目录生成后会显示出来,这时就可以保存文件了。如果有些SHeet不需要生成目录,在列表中取消打勾的项目就可以了。

    本软件由VB6编写成,如果没有VB6的动态链接库请自行安装。
  • 本人编写的两个Oracle的帮助小工具,DB_Table_Struct.XLS可以用于创建Oracle
    的表结构,在上一个版本的基础上增加了向用户提示的部分,修正了多表创建时多输
    出文件的BUG;
    CreateDatumXLS.xls是用来在Oracle创建数据的小工具.

    两个工具的用法都比较简单,填空再按快捷健输出就可以,大家可以先试试样例再正
    式使用,有问题请通知我.

    注:此两个工具都可以随意分发使用修改,但具体修改的地方必须声明并非本人书写,
    本人放弃除署名权外的任何权利.

    下载地址:http://www.helihuo.net/non-cgi/usr/35/35_2407.rar

  • 1。File Renamer V1.00
    http://www.skycn.com/soft/20526.html

    2.论坛帖子下载器 v1.70
    下载:
    http://www.helihuo.net/non-cgi/usr/35/35_2366_6.rar

    介绍页面:
    http://www.helihuo.net/helihuo2003/cgi-bin/topic.cgi?forum=35&topic=2366&show=0


  • str…字符串操作函数
    char stpcpy(char *dest,const char *src)
    将字符串src复制到dest
    char strcat(char *dest,const char *src)
    将字符串src添加到dest末尾
    char strchr(const char *s,int c)
    检索并返回字符c在字符串s中第一次出现的位置
    int strcmp(const char *s1,const char *s2)
    比较字符串s1与s2的大小,并返回s1-s2
    char strcpy(char *dest,const char *src)
    将字符串src复制到dest
    size_t strcspn(const char *s1,const char *s2)
    扫描s1,返回在s1中有,在s2中也有的字符个数
    char strdup(const char *s)
    将字符串s复制到最近建立的单元
    int stricmp(const char *s1,const char *s2)
    比较字符串s1和s2,并返回s1-s2
    size_t strlen(const char *s)
    返回字符串s的长度
    char strlwr(char *s)
    将字符串s中的大写字母全部转换成小写字母,并返回转换后的字符串
    char strncat(char *dest,const char *src,size_t maxlen)
    将字符串src中最多maxlen个字符复制到字符串dest中
    int strncmp(const char *s1,const char *s2,size_t maxlen)
    比较字符串s1与s2中的前maxlen个字符
    char strncpy(char *dest,const char *src,size_t maxlen)
    复制src中的前maxlen个字符到dest中
    int strnicmp(const char *s1,const char *s2,size_t maxlen)
    比较字符串s1与s2中的前maxlen个字符
    char strnset(char *s,int ch,size_t n)
    将字符串s的前n个字符置于ch中
    char strpbrk(const char *s1,const char *s2)
    扫描字符串s1,并返回在s1和s2中均有的字符个数
    char strrchr(const char *s,int c)
    扫描最后出现一个给定字符c的一个字符串s
    char strrev(char *s)
    将字符串s中的字符全部颠倒顺序重新排列,并返回排列后的字符串
    char strset(char *s,int ch)
    将一个字符串s中的所有字符置于一个给定的字符ch
    size_t strspn(const char *s1,const char *s2)
    扫描字符串s1,并返回在s1和s2中均有的字符个数
    char strstr(const char *s1,const char *s2)
    扫描字符串s2,并返回第一次出现s1的位置
    char strtok(char *s1,const char *s2)
    检索字符串s1,该字符串s1是由字符串s2中定义的定界符所分隔
    char strupr(char *s)
    将字符串s中的小写字母全部转换成大写字母,并返回转换后的字符串

    存贮分配子程序,所在函数库为dos.h、alloc.h、malloc.h、stdlib.h、process.h
    int allocmem(unsigned size,unsigned *seg)利用DOS分配空闲的内存,
    size为分配内存大小,seg为分配后的内存指针
    int freemem(unsigned seg)释放先前由allocmem分配的内存,seg为指定的内存指针
    int setblock(int seg,int newsize)本函数用来修改所分配的内存长度,
    seg为已分配内存的内存指针,newsize为新的长度

    int brk(void *endds)
    本函数用来改变分配给调用程序的数据段的空间数量,新的空间结束地址为endds
    char *sbrk(int incr)
    本函数用来增加分配给调用程序的数据段的空间数量,增加incr个字节的空间

    unsigned long coreleft() 本函数返回未用的存储区的长度,以字节为单位
    void *calloc(unsigned nelem,unsigned elsize)分配nelem个长度为elsize的内存空间
    并返回所分配内存的指针
    void *malloc(unsigned size)分配size个字节的内存空间,并返回所分配内存的指针
    void free(void *ptr)释放先前所分配的内存,所要释放的内存的指针为ptr
    void *realloc(void *ptr,unsigned newsize)改变已分配内存的大小,ptr为已分配有内
    存区域的指针,newsize为新的长度,返回分配好的内存指针.

    long farcoreleft() 本函数返回远堆中未用的存储区的长度,以字节为单位
    void far *farcalloc(unsigned long units,unsigned long unitsz)
    从远堆分配units个长度为unitsz的内存空间,并返回所分配内存的指针
    void *farmalloc(unsigned long size)分配size个字节的内存空间,
    并返回分配的内存指针
    void farfree(void far *block)释放先前从远堆分配的内存空间,
    所要释放的远堆内存的指针为block
    void far *farrealloc(void far *block,unsigned long newsize)改变已分配的远堆内
    存的大小,block为已分配有内存区域的指针,newzie为新的长度,返回分配好
    的内存指针

    时间日期函数,函数库为time.h、dos.h
    在时间日期函数里,主要用到的结构有以下几个:
    总时间日期贮存结构tm
    ┌──────────────────────┐
    │struct tm │
    │{ │
    │ int tm_sec; /*秒,0-59*/ │
    │ int tm_min; /*分,0-59*/
  • =================================================================

    接口子程序,所在函数库为:dos.h、bios.h
    unsigned sleep(unsigned seconds)暂停seconds微秒(百分之一秒)
    int unlink(char *filename)删除文件filename
    unsigned FP_OFF(void far *farptr)本函数用来取远指针farptr的偏移量
    unsigned FP_SEG(void far *farptr)本函数用来没置远指针farptr的段值
    void far *MK_FP(unsigned seg,unsigned off)根据段seg和偏移量off构造一个far指针
    unsigned getpsp()取程序段前缀的段地址,并返回这个地址
    char *parsfnm(char *cmdline,struct fcb *fcbptr,int option)
    函数分析一个字符串,通常,对一个文件名来说,是由cmdline所指的一个命令行.
    文件名是放入一个FCB中作为一个驱动器,文件名和扩展名.FCB是由fcbptr所指
    定的.option参数是DOS分析系统调用时,AL文本的值.

    int absread(int drive,int nsects,int sectno,void *buffer)本函数功能为读特定的
    磁盘扇区,drive为驱动器号(0=A,1=B等),nsects为要读的扇区数,sectno为开始的逻
    辑扇区号,buffer为保存所读数据的保存空间
    int abswrite(int drive,int nsects,int sectno,void *buffer)本函数功能为写特定的
    磁盘扇区,drive为驱动器号(0=A,1=B等),nsects为要写的扇区数,sectno为开始的逻
    辑扇区号,buffer为保存所写数据的所在空间
    void getdfree(int drive,struct dfree *dfreep)本函数用来取磁盘的自由空间,
    drive为磁盘号(0=当前,1=A等).函数将磁盘特性的由dfreep指向的dfree结构中.
    dfree结构如下:
    ┌───────────────────┐
    │struct dfree │
    │{ │
    │ unsigned df_avail; /*有用簇个数*/ │
    │ unsigned df_total; /*总共簇个数*/ │
    │ unsigned df_bsec; /*每个扇区字节数*/│
    │ unsigned df_sclus; /*每个簇扇区数*/ │
    │} │
    └───────────────────┘
    char far *getdta() 取磁盘转换地址DTA
    void setdta(char far *dta)设置磁盘转换地址DTA
    void getfat(int drive,fatinfo *fatblkp)
    本函数返回指定驱动器drive(0=当前,1=A,2=B等)的文件分配表信息
    并存入结构fatblkp中,结构如下:
    ┌──────────────────┐
    │struct fatinfo │
    │{ │
    │ char fi_sclus; /*每个簇扇区数*/ │
    │ char fi_fatid; /*文件分配表字节数*/│
    │ int fi_nclus; /*簇的数目*/ │
    │ int fi_bysec; /*每个扇区字节数*/ │
    │} │
    └──────────────────┘
    void getfatd(struct fatinfo *fatblkp) 本函数返回当前驱动器的文件分配表信息,
    并存入结构fatblkp中,结构如下:
    ┌──────────────────┐
    │struct fatinfo │
    │{ │
    │ char fi_sclus; /*每个簇扇区数*/ │
    │ char fi_fatid; /*文件分配表字节数*/│
    │ int fi_nclus; /*簇的数目*/ │
    │ int fi_bysec; /*每个扇区字节数*/ │
    │} │
    └──────────────────┘

    int bdos(int dosfun,unsigned dosdx,unsigned dosal)本函数对MSDOS系统进行调用,
    dosdx为寄存器dx的值,dosal为寄存器al的值,dosfun为功能号
    int bdosptr(int dosfun,void *argument,unsiigned dosal)本函数对MSDOS系统进行调用,
    argument为寄存器dx的值,dosal为寄存器al的值,dosfun为功能号
    int int86(int intr_num,union REGS *inregs,union REGS *outregs)
    执行intr_num号中断,用户定义的寄存器值存于结构inregs中,
    执行完后将返回的寄存器值存于结构outregs中.
    int int86x(int intr_num,union REGS *inregs,union REGS *outregs,
    struct SREGS *segregs)执行intr_num号中断,用户定义的寄存器值存于
    结构inregs中和结构segregs中,执行完后将返回的寄存器值存于结构outregs中.
    int intdos(union REGS *inregs,union REGS *outregs)
    本函数执行DOS中断0x21来调用一个指定的DOS函数,用户定义的寄存器值
    存于结构inregs中,执行完后函数将返回的寄存器值存于结构outregs中
    int intdosx(union REGS *inregs,union REGS *outregs,struct SREGS *segregs)
    本函数执行DOS中断0x21来调用一个指定的DOS
  • =======================================================================

    输入输出子程序,函数库为io.h、conio.h、stat.h、dos.h、stdio.h、signal.h
    int kbhit() 本函数返回最近所敲的按键
    int fgetchar() 从控制台(键盘)读一个字符,显示在屏幕上
    int getch() 从控制台(键盘)读一个字符,不显示在屏幕上
    int putch() 向控制台(键盘)写一个字符
    int getchar() 从控制台(键盘)读一个字符,显示在屏幕上
    int putchar() 向控制台(键盘)写一个字符
    int getche() 从控制台(键盘)读一个字符,显示在屏幕上
    int ungetch(int c) 把字符c退回给控制台(键盘)
    char *cgets(char *string) 从控制台(键盘)读入字符串存于string中
    int scanf(char *format[,argument…])从控制台读入一个字符串,分别对各个参数进行
    赋值,使用BIOS进行输出
    int vscanf(char *format,Valist param)从控制台读入一个字符串,分别对各个参数进行
    赋值,使用BIOS进行输出,参数从Valist param中取得
    int cscanf(char *format[,argument…])从控制台读入一个字符串,分别对各个参数进行
    赋值,直接对控制台作操作,比如显示器在显示时字符时即为直接写频方式显示
    int sscanf(char *string,char *format[,argument,…])通过字符串string,分别对各个
    参数进行赋值
    int vsscanf(char *string,char *format,Vlist param)通过字符串string,分别对各个
    参数进行赋值,参数从Vlist param中取得
    int puts(char *string) 发关一个字符串string给控制台(显示器),
    使用BIOS进行输出
    void cputs(char *string) 发送一个字符串string给控制台(显示器),
    直接对控制台作操作,比如显示器即为直接写频方式显示
    int printf(char *format[,argument,…]) 发送格式化字符串输出给控制台(显示器)
    使用BIOS进行输出
    int vprintf(char *format,Valist param) 发送格式化字符串输出给控制台(显示器)
    使用BIOS进行输出,参数从Valist param中取得
    int cprintf(char *format[,argument,…]) 发送格式化字符串输出给控制台(显示器),
    直接对控制台作操作,比如显示器即为直接写频方式显示
    int vcprintf(char *format,Valist param)发送格式化字符串输出给控制台(显示器),
    直接对控制台作操作,比如显示器即为直接写频方式显示,
    参数从Valist param中取得
    int sprintf(char *string,char *format[,argument,…])
    将字符串string的内容重新写为格式化后的字符串
    int vsprintf(char *string,char *format,Valist param)
    将字符串string的内容重新写为格式化后的字符串,参数从Valist param中取得
    int rename(char *oldname,char *newname)将文件oldname的名称改为newname
    int ioctl(int handle,int cmd[,int *argdx,int argcx])
    本函数是用来控制输入/输出设备的,请见下表:
    ┌───┬────────────────────────────┐
    │cmd值 │功能 │
    ├───┼────────────────────────────┤
    │ 0 │取出设备信息 │
    │ 1 │设置设备信息 │
    │ 2 │把argcx字节读入由argdx所指的地址 │
    │ 3 │在argdx所指的地址写argcx字节 │
    │ 4 │除把handle当作设备号(0=当前,1=A,等)之外,均和cmd=2时一样 │
    │ 5 │除把handle当作设备号(0=当前,1=A,等)之外,均和cmd=3时一样 │
    │ 6 │取输入状态 │
    │ 7 │取输出状态 │
    │ 8 │测试可换性;只对于DOS 3.x │
    │ 11 │置分享冲突的重算计数;只对DOS 3.x │
    └───┴────────────────────────────┘
    int (*ssignal(int sig,int(*action)())()执行软件信号(没必要使用)
    int gsignal(int sig) 执行软件信号(没必要使用)

    int _open(char *pathname,int access)为读或写打开一个文件,
    按后按access来确定是读文件还是写文件,access值见下表
    ┌──────┬────────────────────┐
    │access值 │意义 │
    ├──────┼────────────────────┤
    │O_RDONLY │读文件 │
    │O_WRONLY │写文件
  • ==========================================================================

    进程函数,所在函数库为stdlib.h、process.h
    void abort() 此函数通过调用具有出口代码3的_exit写一个终止信息于stderr,
    并异常终止程序。无返回值
    int exec…装入和运行其它程序
    int execl( char *pathname,char *arg0,char *arg1,…,char *argn,NULL)
    int execle( char *pathname,char *arg0,char *arg1,…,
    char *argn,NULL,char *envp[])
    int execlp( char *pathname,char *arg0,char *arg1,…,NULL)
    int execlpe(char *pathname,char *arg0,char *arg1,…,NULL,char *envp[])
    int execv( char *pathname,char *argv[])
    int execve( char *pathname,char *argv[],char *envp[])
    int execvp( char *pathname,char *argv[])
    int execvpe(char *pathname,char *argv[],char *envp[])
    exec函数族装入并运行程序pathname,并将参数
    arg0(arg1,arg2,argv[],envp[])传递给子程序,出错返回-1
    在exec函数族中,后缀l、v、p、e添加到exec后,
    所指定的函数将具有某种操作能力
    有后缀 p时,函数可以利用DOS的PATH变量查找子程序文件。
    l时,函数中被传递的参数个数固定。
    v时,函数中被传递的参数个数不固定。
    e时,函数传递指定参数envp,允许改变子进程的环境,
    无后缀e时,子进程使用当前程序的环境。

    void _exit(int status)终止当前程序,但不清理现场
    void exit(int status) 终止当前程序,关闭所有文件,写缓冲区的输出(等待输出),
    并调用任何寄存器的"出口函数",无返回值

    int spawn…运行子程序
    int spawnl( int mode,char *pathname,char *arg0,char *arg1,…,
    char *argn,NULL)
    int spawnle( int mode,char *pathname,char *arg0,char *arg1,…,
    char *argn,NULL,char *envp[])
    int spawnlp( int mode,char *pathname,char *arg0,char *arg1,…,
    char *argn,NULL)
    int spawnlpe(int mode,char *pathname,char *arg0,char *arg1,…,
    char *argn,NULL,char *envp[])
    int spawnv( int mode,char *pathname,char *argv[])
    int spawnve( int mode,char *pathname,char *argv[],char *envp[])
    int spawnvp( int mode,char *pathname,char *argv[])
    int spawnvpe(int mode,char *pathname,char *argv[],char *envp[])
    spawn函数族在mode模式下运行子程序pathname,并将参数
    arg0(arg1,arg2,argv[],envp[])传递给子程序.出错返回-1
    mode为运行模式
    mode为 P_WAIT 表示在子程序运行完后返回本程序
    P_NOWAIT 表示在子程序运行时同时运行本程序(不可用)
    P_OVERLAY表示在本程序退出后运行子程序
    在spawn函数族中,后缀l、v、p、e添加到spawn后,
    所指定的函数将具有某种操作能力
    有后缀 p时, 函数利用DOS的PATH查找子程序文件
    l时, 函数传递的参数个数固定.
    v时, 函数传递的参数个数不固定.
    e时, 指定参数envp可以传递给子程序,允许改变子程序运行环境.
    当无后缀e时,子程序使用本程序的环境.

    int system(char *command) 将MSDOS命令command传递给DOS执行


    ================================================================

    转换子程序,函数库为math.h、stdlib.h、ctype.h、float.h
    char *ecvt(double value,int ndigit,int *decpt,int *sign)
    将浮点数value转换成字符串并返回该字符串
    char *fcvt(double value,int ndigit,int *decpt,int *sign)
    将浮点数value转换成字符串并返回该字符串
    char *gcvt(double value,int ndigit,char *buf)
    将数value转换成字符串并存于buf中,并返回buf的指针
    char *ultoa(unsigned long value,char *string,int radix)
    将无符号整型数value转换成字符串并返回该字符串,radix为转换时所用基数
    char *ltoa(long value,char *string,int radix)
    将长整型数value转换成字符串并返回该字符串,radix为转换时所用基数
    char *itoa(int value,char *string,int radix)
    将整数value转换成字符串存入string,radix为转换时所用基数
    double atof(char *nptr) 将字符串nptr转换成双精度数,并返回这个数,错误返回0
    int atoi(char *nptr) 将字符串nptr转换成整型数, 并返回这个数,错误返回0
    long atol(char *nptr) 将字符串nptr转换成长整型数,并返回这个数,错误返回0
    double strtod(char *str,char **endptr)将字符串str转换成双精度数,并返回这个数,
    long strtol(char *str,char **endptr,int base)将字符串str转换成长整
  • 分类函数,所在函数库为ctype.h
    int isalpha(int ch) 若ch是字母(’A’-’Z’,’a’-’z’)返回非0值,否则返回0
    int isalnum(int ch) 若ch是字母(’A’-’Z’,’a’-’z’)或数字(’0’-’9’)
    返回非0值,否则返回0
    int isascii(int ch) 若ch是字符(ASCII码中的0-127)返回非0值,否则返回0
    int iscntrl(int ch) 若ch是作废字符(0x7F)或普通控制字符(0x00-0x1F)
    返回非0值,否则返回0
    int isdigit(int ch) 若ch是数字(’0’-’9’)返回非0值,否则返回0
    int isgraph(int ch) 若ch是可打印字符(不含空格)(0x21-0x7E)返回非0值,否则返回0
    int islower(int ch) 若ch是小写字母(’a’-’z’)返回非0值,否则返回0
    int isprint(int ch) 若ch是可打印字符(含空格)(0x20-0x7E)返回非0值,否则返回0
    int ispunct(int ch) 若ch是标点字符(0x00-0x1F)返回非0值,否则返回0
    int isspace(int ch) 若ch是空格(’ ’),水平制表符(’\t’),回车符(’\r’),
    走纸换行(’\f’),垂直制表符(’\v’),换行符(’\n’)
    返回非0值,否则返回0
    int isupper(int ch) 若ch是大写字母(’A’-’Z’)返回非0值,否则返回0
    int isxdigit(int ch) 若ch是16进制数(’0’-’9’,’A’-’F’,’a’-’f’)返回非0值,
    否则返回0
    int tolower(int ch) 若ch是大写字母(’A’-’Z’)返回相应的小写字母(’a’-’z’)
    int toupper(int ch) 若ch是小写字母(’a’-’z’)返回相应的大写字母(’A’-’Z’)

    -----------------------------------------------------------------------------------------------------------------------------

    数学函数,所在函数库为math.h、stdlib.h、string.h、float.h
    int abs(int i) 返回整型参数i的绝对值
    double cabs(struct complex znum) 返回复数znum的绝对值
    double fabs(double x) 返回双精度参数x的绝对值
    long labs(long n) 返回长整型参数n的绝对值
    double exp(double x) 返回指数函数ex的值
    double frexp(double value,int *eptr) 返回value=x*2n中x的值,n存贮在eptr中
    double ldexp(double value,int exp); 返回value*2exp的值
    double log(double x) 返回logex的值
    double log10(double x) 返回log10x的值
    double pow(double x,double y) 返回xy的值
    double pow10(int p) 返回10p的值
    double sqrt(double x) 返回x的开方
    double acos(double x) 返回x的反余弦cos-1(x)值,x为弧度
    double asin(double x) 返回x的反正弦sin-1(x)值,x为弧度
    double atan(double x) 返回x的反正切tan-1(x)值,x为弧度
    double atan2(double y,double x) 返回y/x的反正切tan-1(x)值,y的x为弧度
    double cos(double x) 返回x的余弦cos(x)值,x为弧度
    double sin(double x) 返回x的正弦sin(x)值,x为弧度
    double tan(double x) 返回x的正切tan(x)值,x为弧度
    double cosh(double x) 返回x的双曲余弦cosh(x)值,x为弧度
    double sinh(double x) 返回x的双曲正弦sinh(x)值,x为弧度
    double tanh(double x) 返回x的双曲正切tanh(x)值,x为弧度
    double hypot(double x,double y) 返回直角三角形斜边的长度(z),
    x和y为直角边的长度,z2=x2+y2
    double ceil(double x) 返回不小于x的最小整数
    double floor(double x) 返回不大于x的最大整数
    void srand(unsigned seed) 初始化随机数发生器
    int rand() 产生一个随机数并返回这个数
    double poly(double x,int n,double c[])从参数产生一个多项式
    double modf(double value,double *iptr)将双精度数value分解成尾数和阶
    double fmod(double x,double y) 返回x/y的余数
    double frexp(double value,int *eptr) 将双精度数value分成尾数和阶
    double atof(char *nptr) 将字符串nptr转换成浮点数并返回这个浮点数
    double atoi(char *nptr) 将字符串nptr转换成整数并返回这个整数
    double atol(char *nptr) 将字符串nptr转换成长整数并返回这个整数
    char *ecvt(double value,int ndigit,int *decpt,int *sign)
    将浮点数value转换成字符串并返回该字符串
    char *fcvt(double value,int ndigit,int *decpt,int *sign)
    将浮点数value转换成字符串并返回该字符串
    char *gcvt(double value,int ndigit,char *buf)
    将数value转换成字符串并存于
  • 1.误会:
      
      早年在美国阿拉斯加地方,有一对年轻人结婚,婚后生育,他的太太因难产而死,遗下一孩子。
      
      他忙生活,又忙于看家,因没有人帮忙看孩子,就训练一只狗,那狗聪明听话,能照顾小孩,咬着奶瓶喂奶给孩子喝,抚养孩子。
      
      有一天,主人出门去了,叫它照顾孩子。
      
      他到了别的乡村,因遇大雪,当日不能回来。第二天才赶回家,狗立即闻声出来迎接主人。他把房门开一看,到处是血,抬头一望,床上也是血,孩子不见了,狗在身边,满口也是血,主人发现这种情形,以为狗性发作,把
    孩子吃掉了,大怒之下,拿起刀来向着狗头一劈,把狗杀死了。
      
      之后,忽然听到孩子的声音,又见他从床下爬了出来,于是抱起孩子;虽然身上有血,但并未受伤。
      
      他很奇怪,不知究竟是怎么一回事,再看看狗身,腿上的肉没有了,旁边有一只狼,口里还咬着狗的肉;狗救了小主人,却被主人误杀了,这真是天下最令人惊奇的误会。
      
      注:误会的事,是人往往在不了解、无理智、无耐心、缺少思考、未能多方体谅对方,反省自己,感情极为冲动的情况之下所发生。
      
      误会一开始,即一直只想到对方的千错万错;因此,会使误会越陷越深,弄到不可收拾的地步,人对无知的动物小狗发生误会,尚且会有如此可怕严重的后果,这样人与人之间的误会,则其后果更是难以想象。
      
      2.钉子:
      
      有一个男孩有着很坏的脾气,于是他的父亲就给了他一袋钉子;并且告诉他,每当他发脾气的时候就钉一根钉子在后院的围篱上。
      
      第一天,这个男孩钉下了37根钉子。慢慢地每天钉下的数量减少了。他发现控制自己的脾气要比钉下那些钉子来得容易些。
      
      终于有一天这个男孩再也不会失去耐性乱发脾气,他告诉他的父亲这件事,父亲告诉他,现在开始每当他能控制自己的脾气的时候,就拔出一根钉子。
      
      一天天地过去了,最后男孩告诉他的父亲,他终于把所有钉子都拔出来了。
      
      父亲握着他的手来到后院说:你做得很好,我的好孩子。但是看看那些围篱上的洞,这些围篱将永远不能回复成从前。你生气的时候说的话将像这些钉子一样留下疤痕。如果你拿刀子捅别人一刀,不管你说了多少次对不起,
    那个伤口将永远存在。话语的伤痛就像真实的伤痛一样令人无法承受。
      
      注:人与人之间常常因为一些彼此无法释怀的坚持,而造成永远的伤害。如果我们都能从自己做起,开始宽容地看待他人,相信你(你)一定能收到许多意想不到的结果....帮别人开启一扇窗,也就是让自己看到更完整
    的天空....
      
      3.且慢下手:
      
      大多数的同仁都很兴奋,因为单位里调来一位新主管,据说是个能人,专门被派来整顿业务;可是日一天天过去,新主管却毫无作为,每天彬彬有礼进办公室,便躲在里面难得出门,那些本来紧张得要死的坏份子,现在反而
    更猖獗了。
      
      他那里是个能人嘛!根本是个老好人,比以前的主管更容易唬!
      
      四个月过去,就在真正努力为新主管感到失望时,新主管却发威了--坏份子一律开革,能人则获得晋升。下手之快,断事之准,与四月表现保守的他,简直像是全然换个人。
      
      年终聚餐时,新主管在酒过三巡之后致词:「相信大家对我新到任期间的表现,和后来的大刀阔斧,一定感到不解,现在听我说个故事,各位就明白了:「我有位朋友,买了栋带着大院的房子,他一搬进去,就将那院子全面
    整顿,杂草树一律清除,改种自己新买的花卉,某日原先的屋主往访,进门大吃一惊的问:『那最名贵的牡丹哪里去了?』我这位朋友才发现,他竟然把牡丹当草给铲了。
      
      后来他又买了一栋房子,虽然院子更是杂乱,他却是按兵不动,果然冬天以为是杂树的植物,春天里开了繁花;春天以为是野草的,夏天里成了锦蔟;半年都没有动静的小树,秋天居然红了叶。直到暮秋,它才真正认清哪些
    是无用的植物,而大力铲除,并使所有珍贵的草木得以保存。」说到这儿,主管举起杯来:「让我敬在座的每一位,因为如果这办公室是个花园,你们就都是其间的珍木,珍木不可能一年到头开花结果,只有经过长期的观察才认
    得出啊!
      
      4.宽大:
      
      这是一个来自越战归来的士兵的故事。他从旧金山打电话给他的父母,告诉他们:「爸妈,我回来了,可是我有个不情之请。我想带一个朋友同我一起回家。」「当然好啊!」他们回答「我们会很高兴见到的。」
      
      不过儿子又继续下去「可是有件事我想先告诉你们,他在越战里受了重伤,少了一条胳臂和一只脚,他现在走投无路,我想请他回来和我们一起生活。」
      
      「儿子,我很遗撼,不过或许我们可以帮他找个安身之处。」父亲又接着说「儿子,你不知道自己在说些什么。像他这样残障的人会对我们的生活造成很大的负担。我们还有自己的生活要过,不能就让他这样破坏了。我建议
    你先回家然后忘了他,他会找到自己的一片天空的。」就在此时儿子挂上了电话,他的父母再也没有他的消息了。
      
      几天后,这对父母接到了来自旧金山警局的电话,告诉他们亲爱的儿子已经坠楼身亡了。警方相信这只是单纯的自杀案件。于是他们
  • 问题一,
    如果你家附近有一家餐厅,东西又贵又难吃,桌上还爬着蟑螂,你会因为它很近
    很方便,就一而再、再而三地光临吗?
    回答:你一定会说,这是什么烂问题,谁那么笨,花钱买罪受?

    可同样的情况换个场合,自己或许就做类似的蠢事。
    不少男女都曾经抱怨过他们的情人或配偶品性不端,三心二意,不负责任。明知在一起没
    什么好的结果,怨恨已经比爱还多,但却“不知道为什么”还是要和他搅和下去,分不了
    手。说穿了,只是为了不甘,为了习惯,这不也和光临餐厅一样?

    ——做人,为什么要过于执著?!

    问题二,
    如果你不小心丢掉100块钱,只知道它好像丢在某个你走过的地方,你会花200块
    钱的车费去把那100块找回来吗?
    回答:一个超级愚蠢的问题。

    可是,相似的事情却在人生中不断发生。做错了一件事,明知自己有问题,却*也不肯认
    错,反而花加倍的时间来找藉口,让别人对自己的印象大打折扣。被人骂了一句话,却花
    了无数时间难过,道理相同。为一件事情发火,不惜损人不利已,不惜血本,不惜时间,
    只为报复,不也一样无聊?
    失去一个人的感情,明知一切已无法挽回,却还是那么伤心,而且一伤心就是好几年,还
    要借酒浇愁,形销骨立。其实这样一点用也没有,只是损失更多。

    ——做人,干吗为难自己?!

    问题三,
    你会因为打开报纸发现每天都有车祸,就不敢出门吗?
    回答:这是个什么烂问题?当然不会,那叫因噎废食。

    然而,有不少人却曾说:现在的离婚率那么高,让我都不敢谈恋爱了。说得还挺理所当然
    。也有不少女人看到有关的诸多报道,就对自己的另一半忧心忡忡,这不也是类似的反应
    ?所谓乐观,就是得相信:虽然道路多艰险,我还是那个会平安过马路的人,只要我小心
    一点,不必害怕过马路。

    ——做人,先要相信自己。

    问题四,
    你相信每个人随便都可以成功立业吗?
    回答:当然不会相信。

    但据观察,有人总是在听完成功人士绞尽脑汁的建议,比如说,多读书,多练习之后,问
    了另一个问题?那不是很难?
    我们都想在3分钟内学好英文,在5分钟内解决所有难题,难道成功是那么容易的吗?改变
    当然是难的。成功只因不怕困难,所以才能出类拔萃。
    有一次坐在出租车上,听见司机看到自己前后都是高档车,兀自感叹:“唉,为什么别人
    那么有钱,我的钱这么难赚?”
    我心血来潮,问他:“你认为世上有什么钱是好赚的?”他答不出来,过了半晌才说:好
    像都是别人的钱比较好赚。
    其实任何一个成功者都是艰辛取得。我们实在不该抱怨命运。

    ——做人,依靠自己!

    问题五,
    你认为完全没有打过篮球的人,可以当很好的篮球教练吗?
    回答:当然不可能,外行不可能领导内行。

    可是,有许多人,对某个行业完全不了解,只听到那个行业好**,就马上开起业来了。
    我看过对穿着没有任何口味、或根本不在乎穿着的人,梦想却是开间服装店;不知道电脑
    怎么开机的人,却想在网上**,结果道听途说,却不反省自己是否专业能力不足,只抱
    怨时不我与。

    ——做人,量力而行。

    问题六,
    相似但不相同的问题:你是否认为,篮球教练不上篮球场,闭着眼睛也可以主导
    一场完美的胜利?
    回答:有病啊,当然是不可能的。

    可是却有不少朋友,自己没有时间打理,却拼命投资去开咖啡馆,开餐厅,开自己根本不
    懂的公司,火烧屁股一样急着把辛苦积攒的积蓄花掉,去当一个稀里糊涂的投资人。亏的
    总是比赚的多,却觉得自己是因为运气不好,而不是想法出了问题。

    ——做人,记得反省自己。

    问题七,
    你宁可永远后悔,也不愿意试一试自己能否转败为胜?
    解答:恐怕没有人会说:“对,我就是这样的孬种”吧。

    然而,我们却常常在不该打退堂鼓时拼命打退堂鼓,为了恐惧失败而不敢尝试成功。
    以关颖珊赢得2000年世界花样滑冰冠军时的精彩表现为例:她一心想赢得第一名,然而在
    最后一场比赛前,她的总积分只排名第三位,在最后的自选曲项目上,她选择了突破,而
    不是少出错。在4分钟的长曲中,结合了最高难度的三周跳,并且还大胆地连跳了两次。她
    也可能会败得很难看,但是她毕竟成功了。
    她说:“因为我不想等到失败,才后悔自己还有潜力没发挥。”
    一个中国伟人曾说;胜利的希望和有利情况的恢复,往往产生于再坚持一下的努力之中。

    ——做人,何妨放手一搏。

    问题八,
    你的时间无限,长生不老,所以最想做的事,应该无限延期?
    回答:不,傻瓜才会这样认为。

    然而我们却常说,等我老了,要去环游世界;等我退休,就要去做想做的事情;等孩子长
    大了,我就可以……
    我们都以为自己有无限的时间与精力。其实我们可以一步一步实现理想,不必在等待中徒
    耗生命。如果现在就能一步一步努力接近,我们就不会活了半生,却出现自己最不想看到
    的结局。

    ——做人,要活在当下。

    本文出處﹕http://community.csdn.net/Expert/topic/3089/3089923.xml?temp=.6819879
  • 被我们丢失的历史

    作者: 侯虹斌

    1900年2月10日,梁启超写下了激扬一代中国人的巨作《少年中国说》,“少年强则
    国强,少年富则国富。”而今天,梁启超曾寄望的少年具有的希望、进取、日新、破格、好
    行乐、盛气、豪壮、造世界、“常思将来”、“常觉一切事无不可为”的气质都在这一代身
    上依稀地看见。可是,代价是他们身上的中国传统日趋稀薄,他们身上的特质与个体不复存
    在,中国味淡不可闻。到哪里才能找回我们丢失的传统?怎么样才能写出一篇《新少年中国
    》,而不仅仅是《少年全球化》?

    【忠孝仁义信礼智勇】
    何为忠孝仁义?何为信礼智勇?现在只有在台北的大街看路牌才能见到它们了。“君
    君臣臣父父子子”之道要维护的那个轶序不再回来,也切断了我们与“忠孝仁义”的关联。
    “信礼智勇”好歹还是一个各社会通用的生存哲学和基本要求,但我们嫁接了西方的价值理
    念,在儒家的词语外壳下,内涵不再。
    古人曾把道德修养视为人生的终极追求,不过,在全球化的今天,个人奋斗、快乐、
    自由通通比道德来得重要;现在的孩子还有很多别的事要忙。

    【四书五经】
    从前,作为书生15岁之前便要把四书五经烂熟于心,几乎都是群“拜经教”,他们对
    经典的了解,足以让今天的古代文学博士生绝望。1912年1月19日,当国民**第一任教育
    总长下令“小学堂读经一律废止”的时候,这是一个解放思想的壮举;作为后果,近一个世
    纪后,已经没有多少人回答得出来什么是四书五经了。孩子对以《大学》、《中庸》、《论
    语》、《孟子》;《易经》、《尚书》、《诗经》、《礼记》、《左传》为代表的古代中国
    的支柱思想体系,一头雾水。现在,舒乙在北京创办了一家现代私塾馆,专门教授四书五经


    【任侠之气】
    何为任侠?是“道之所在,虽千万人吾往矣;义之所当,千金散尽不后悔;情之所钟
    ,世俗礼法如粪土;兴之所在,与君痛饮三百杯”;是“十步杀一人,千里不留行。事了拂
    衣去,深藏身与名。三杯吐然诺,五岳倒为轻。纵死侠骨香,不惭世上英。”是荆轲、是聂
    政、是专诸、是李白、是一饭之恩的漂母、是救过伍子胥的渔女。不过,今天他们都在风中
    消散。再不见独行万里为曾允朋友一诺的男人,再也没有了“拼将一生休,尽君今日欢”的
    女子。高晓松在他《青春无悔》的文案里这样幽幽地写道。
    从小就被教导明哲保身,不要相信别人,何来的狂狷豪迈之气?何来风流洒脱的风骨
    ?从来没有过年少轻狂,青春就是不完整的青春,读再多的金庸古龙也不管用。

    【匹夫有责】
    对家庭负责、对族人负责、对国家和民族负责、为看不见摸不着的社会风气负责……
    这是古人肩上的N座大山。而今天,我们既没有为别人奉献的义务,也没有权利向别人索取
    ,只能为自己负责。《大学》开篇就说“古之欲明明德于天下者”在今天成为镜花水月,顾
    炎武的“国家兴亡,匹夫有责”在和平时期更像是一句空谈。于是,我们坚持不长大,看日
    本漫画,听Twins,玩PUPA或Hello
    Kitty,穿满身口袋的阔脚裤,口号是“我喜欢,有什么不可以”……咄咄逼人的自
    由泛滥,让责任感处处失守。而年方10岁的那一拨孩子,耳濡目染的是这一代人放任自流、
    无限延长的青春期,他们怎么会知道责任感是何物呢?

    【诗词曲赋】
    如果上世纪90年代的孩子们是从周杰伦的《东风破》里才开始接触到古典诗词之美,
    是不是有点迟了?《全唐诗》有42863首,《全宋词》有19990首,李白有诗900余首,陆游
    有诗6000多首,这还只是中国诗词曲赋的一点零头。然而,我们直到中学毕业所背的还不过
    是“小荷才露尖尖角”、“二月春风似剪刀”这样的小情调,如何让我们爱慕上我们的浩瀚
    诗海呢?
    不是说古典诗词应被广泛应用,但它从我们的视野里大跨度地撤退、消失,就是这个
    社会审美能力的丧失。一个从小就被“涉江采芙蓉”、“袅情丝吹来闲庭院”、“醉里挑灯
    看剑”这样的情韵滋养着的孩子,他们长大以后,心灵或许不至于那么麻木、冷漠。

    【琴棋书画】
    现在,年轻有为的形象是年少多金,高学历、高收入、高消费,懂得如何赚钱还要懂
    得如何花钱,再也不是纳兰容若那种精通琴棋书画的浊世佳公子了。成人的价值取向在下一
    代人身上复制,甚至强化。学琴(指的是钢琴而非古筝)一定要考级,下棋除非是想成为常昊
    那样的国手,书画是少年宫的常备项目,为的是升学时加分……那种初始的风雅在父母们的
    鸡毛掸子和考级的压力下,已经被扭曲,再也保持不了它们唯美的形状了。

    【孔融让梨】
    “孔融为什么让梨?”“是因为大的梨是坏的。”那个古执而陈腐的孔融如果听到现
    在的孩子这样回答,肯定气得在棺材里跳起来。是的,传统的道德范式正在流失。90年代的
    孩子被教导:不劳动者不得食。他们几乎从懂事开始就置身于竞争当中,天生就是达尔文主
    义者。三年级的孩子每周要上40节课,每天要练3小时的琴,六年级的孩子每天做功课到深
    夜12点,初二的孩子课外还要参加数学竞赛、英语演讲比赛、学生会竞
  • 理直气壮地无耻——我读《狼图腾》(中国青年报)
    黄章晋



    很多中国文人最爱的智力创造是这样一种东西,先编个故事,然后根据故事讲述一番很大的道理。如果你不明白,随便找本《读者》,我马上可以找出十篇来。通常,这十篇里有八篇讲的故事一望而知就是不可靠的,或是作者生编,或是作者智力不逮当了回谣言二传手。接下来的奇观是,这十篇里还有八篇,道理根本就说不到点子上。



      如果你还不明白,建议你看看炒得正热的《狼图腾》。当然我绝不建议你去买,如果不是为完成这篇文章的任务,我才不会去翻它。我有理由相信《狼图腾》会卖出很多,在理直气壮地媚俗、慷慨激昂地无耻时代,这是理所当然的事情。



      看到《狼图腾》封皮,我就猜得出作者打算说什么,它的确没给我什么意外——只是我没想到作者会终于按捺不住讲道理的冲动,在小说结尾干脆把主人公陈阵当成自己直接的传声筒,一句废话没有,整页整页大谈其“狼性民族”与“羊性民族”的历史观。在他看,农耕民族是羊性的,游牧民族是狼性的,只有游牧民族的狼性才是推动历史前进的原动力。



      我笑了。



      就像“罂粟”二字如果入了通俗读物的标题,书中一定会出现一大片罂粟花,并且它将会成为主要场景,罂粟花的妖艳诡谲、不可抗拒的神秘诱人,将会成为主旋律反复出现,然后该是某个罂粟花般的人以及某个被诱惑的人登场。当然,书中的罂粟花必定是让熟悉它的人目瞪口呆的。



      除了刘亮程这等少数异类,你一定不要相信,中国今天的作家能向你可靠地描写家畜以外的动物,不管他声称如何熟悉该动物——事实上大部分人一变成中国作家就连家畜都无法准确描述了——当然,这里我需要肯定《狼图腾》的作者在狼的某些细节描述上有难得的认真仔细,比如姜戎发现狼粪并不能燃出“狼烟”来。所以,在你捧起《狼图腾》时早该有心理准备,这本书中的狼,不过是作者心中的“图腾”,是试图向你兜售道理的工具,甚至书中的部分人物,比如蒙族老大爷毕利格,和那些不可思议的狼一样,统统是作者用来载“狼道”的工具。就如《读者》里那些试图向你深沉地兜售人生大道理的小故事一样,十有八九是在胡编滥造。



      古话讲:始于作伪,终于无耻。我没义务去一一反驳纠正作者历史常识的错误和荒谬的逻辑,不过,倒有必要提醒,你崇拜游牧民族对中原文明的破坏可以,但不要随意替俄罗斯人去总结,说他们能追赶西方,乃是因被蒙古人占领强暴而得了高贵的蒙古血统的缘故,这愚昧的话最好不要让普希金听了,否则他会气得从坟墓里跳出来。



      我很能理解姜戎对他祭出的“狼图腾”的崇拜心理。在BBS上,太多年轻人用语言暴力的方式对历史进行慷慨激昂的梦呓和意淫,悄然完成了自身强大和豪迈一把的欣快审美体验。然而,个人审美体验是一回事,历史本身又是另一回事。古代游牧民族身上热烈奔放原始血性的东西,只在后来者眼睛里才有了审美的价值,至于成吉思汗时代的蒙古人本身,他们一切行动只是出于当时的生存本能而非审美意志。野蛮就是野蛮,落后就是落后,用今人为满足自己审美愿望的眼光去重新美化那段野蛮屠杀的历史,我想,说其是全无心肝,当不为过。



      我没看出中国古代穷光蛋书生通过意淫狐狸来表达对爱情的向往,与姜戎通过《狼图腾》来表达一种对强悍、刚强性格的向往有何不同。不过,在《狼图腾》的结尾,我欣喜地看到,姜戎在为汉民族不可救药的文化心理开药方时,从古游牧民族的强悍为农耕民族输血开始,终于有了绕到现代自由民主观念的可喜努力,然而,从狼性格扯到现代公民社会的公民品格似乎远了点,建议作者在下一本书中着力赞美猫与自由主义的联系,最后弄一本《猫图腾》出来,作为《狼图腾》的姊妹篇,一起改造华夏民族糟糕的民族性格。



      《狼图腾》得到了慷慨激昂的好评,比如“史诗般小说”。不过,“旷世奇书”这样的说法从安舜波先生嘴里说出来,使我多少为这本史诗感到担忧,想到他拉了一帮“著名学者”强力推荐的那本《911生死婚礼——我的情爱自传》——这是本轰轰烈烈几个月就在闹剧、骗局的指责声中收场的史诗,《狼图腾》这样的史诗会否像前者一样?毕竟历史不会收藏太多细节,哪怕是笑柄——很不幸,我注意到为《狼图腾》唱赞歌的所谓学者与《911生死婚礼——我的情爱自传》是同一拨儿人。



      有位朋友说:“为什么中国社会有这么多学者却又这么没文化?是因为我们太厚道,而厚道之于无耻,实在是狼与狈的关系。”
  • 第六集:与子同仇

      引子

      秦始皇的兵马俑有一个令人迷惑不解的现象:大量的士兵头上戴着这种小圆帽。考古人员证实,这是一种麻布做的头巾。军官模样的戴着牛皮做的板状帽子。更多的士兵则把长发盘在头上,挽成一个个发髻。无论是士兵还是军官,秦军一律不戴头盔。

      他们不仅不戴头盔, 身上穿的铠甲也很简洁,甲片减少到了最低限度。主力步兵的甲衣只是护住前胸和后背。而站在最前边的弩兵部队身上一个甲片也没有。

      从俑坑里能看得出来,秦俑都是简装,他着的铠甲防护的面积并不大,都属于轻型的,和我们所了解的当时的魏国的重装部队正好形成一种明显的反差。

      秦国应该有能力为军队配备足够的铠甲。历史记录显示,自商鞅变法后,秦国是当时诸侯国中最富有的。《史记》上说:秦,带甲百万。意思是有百万身披盔甲的军队,但眼前这支复制的秦军却让人大感意外。隐藏在这一奇怪现象背后的历史真相到底是什么呢?

    第六集:与子同仇

      两千多年前,秦国一位兢兢业业的县法律秘书“喜”为人们探索这个谜提供了一个线索。喜曾经三次从军,他用竹简记录了秦军攻打刑丘时发生在部队中的两起案件。

      在攻打邢丘的战斗中,士兵甲斩首了敌人一个首级。士兵乙企图杀死士兵甲,据首级为己有,却被第三个士兵发现,图谋不轨的士兵乙当场被捉拿归案。

      另外几枚竹简上说:两个士兵为了挣抢一个首级也动了手。秦军在战场上为对手的一个首级竟要自相残杀!是什么驱使他们对敌人的首级如此渴望呢?

      秦统一中国前135年,改革家商鞅为秦国制订了一套任何别的国家都无法忍受的严苛法律。从此后,整个秦国都严格地按照这套法律运转,它影响了六代秦人,直到秦始皇。

      商鞅规定:秦国的士兵只要斩获敌人一个首级,就可以获得爵位一级、田宅一处和仆人数个。斩杀的首级越多,获得的爵位就越高。

      你只要打仗打得好就可以授爵,一授爵就有一定的土地,有一定的房子,那么说你整个生活跟打仗挂钩了。

      这就是商鞅著名的军功授爵制度。2000多年后,“喜”抄写的竹简又让人们得以看到这一制度的大量细节。

      如果一个士兵在战场上斩获两个敌人首级,他做囚犯的父母就可以立即成为自由人。如果他的妻子是奴隶,也可以转为平民。

      对于重视家族传承的中国人来说,军功爵是可以传子的。如果父亲战死疆场,他的功劳可以记在儿子头上。一人获得军功,全家都可以受益。

      这是早期秦人贵族使用的餐具,两、三千年前,那是一个按出身和血统的贵贱分配权力和财富的时代。像秦人的军功授爵这样给平民甚至奴隶向上攀升的机会,明目张胆地鼓励国人追逐功利的国家法律,在当时,似乎只有秦人能够接受。

      与贵族餐具相比,普通秦人的生活用品显得简单寒酸,可以看出加官晋爵对于一个士兵意味着什么。喜的竹简上说:在军中,爵位高低不同,每顿吃的饭菜甚至都不一样。三级爵有精米一斗、酱半升,菜羹一盘。两级爵位的只能吃粗米,没有爵位的普通士兵能填饱肚子就不错了。

      在这样的利益驱使下,士兵们挣抢敌人首级就是可以理解的了。可以想象,在秦军将士的眼中,敌人的头颅就是换取地位和财富的等价货币。

      两千年前的秦国,想必是一个军装闪闪发亮的国度,对于千千万万的秦人来说,上战场不仅是为国家战斗,而且是通向财富和荣誉,摆脱贫困卑微地位的惟一出路。

      在中国历史上,秦人的文化和秉性是独一无二的,这很可能跟秦人的历史有关。秦人出身于大西北的草莽之间,与游牧民族混居。在当时文明高度发达的中原国家眼里,他们是落后野蛮的民族,虽然秦人努力学习中原文明,但他们从未真正接受过中原文明优雅精致、中庸谦让的伦理道德。在秦人看来,尚武、为利益而竞争是天经地义的。

      韩非子是战国时期的大思想家,他记录了自己初次接触秦人的感受。秦人听说要打仗,就顿足赤膊、急不可待,根本就无所谓生死……

      当时一个著名的说客这样描述战场上的秦军:他们光头赤膊,奋勇向前,六国的军队和秦军相比,就像鸡蛋碰石头……他们左手提着人头,右胳膊下夹着俘虏,追杀自己的对手……

      在说客绘声绘色的叙述当中,可怕的秦军令人不寒而罹。

      在商鞅的著作中,军功授爵制度对一支特殊部队规定了丰厚的奖赏,商鞅称其为“陷队之士”。

      在兵马俑坑,有一队士兵很特别。他们手持白刃格斗的刺杀类兵器;却完全不穿铠甲。在整个地下军团中,他们的形象显得十分特殊。这队士兵究竟是干什么的呢?研究人员一直不清楚。一个可能的推测是:战斗中有一些极其危险的任务,基本上是有去无回,重赏之下,这些完全不考虑生死的人站了出来。这些士兵很可能就是敢 死队式的陷队之士。

      “喜”的竹简上还有这样的记载:秦军在战前和战后,都要大量饮酒。大碗的酒使血流加快、使神经亢奋。作 战命令已经下达,战争即将开始。要么战死疆场、要么加官晋爵。在这种时刻,酒使所有的士兵只有一种冲动: 奋勇杀敌、建功立业。

      研究人员观察到了一个奇怪的
  • 第五集:举国之战

      引子

      这曾经是古代世界一支最为强悍的军队。慢慢地靠近这些雕塑,一种似曾相识的感觉迎面而来。它们不再是陪葬品,而是一个个活生生的人,它们的神态暗示着每一个陶土面具的背后都曾拥有一个鲜活的灵魂和一段自己的人生。然而,史书中是不会记载这些普通士兵的,漫长的岁月抹掉了关于他们的所有记忆……

    第五集:举国之战

      1975年,在湖北省云梦县一段铁路的边上,发现了一个装满竹简的古代墓葬。

      我们开了棺之后,除了他的尸骨以外全部都是简,头枕的也是简,头两边也是简,身上是简,手里还按着简,脚底下还是简。

      由于棺材一直浸泡在地下水中,温度恒定,这些竹简因此才没有腐烂 ,墓主人的尸骨也保存得相当完好。竹简中绝大多数是秦国的法律条文,但有一小部分很像一部自传,它粗略地记载了一个人的生平。这个人的名字叫“喜”。

      历史学家李学勤先生对这个小人物的传记充满了兴趣。他认为,喜所在的湖北云梦,当时已经并入了不断扩张的秦国疆界。

      他是个秦人。可能是从秦那边过来的,可是他应该说是当地长大的,因为这个时候秦到这个地区已经有一段时间了。

      今天的普通中国人几乎可以阅读这些2000多年前的秦简,因为我们继承的就是秦的文字。

      竹简上写到:秦昭王45年,“喜”在12月早晨鸡叫的时候出生。算起来,“喜”比伟大的秦始皇整整大两岁。喜出生的那一年,秦军正在攻打韩国的大野王。

      两年以后,喜的另一个家庭成员“敢”出生的时候,秦军正在长平和赵国决战。那是当时世界上最为惨烈的一场战役。战争,在秦国普通人的生活里,竟然成了岁月的注脚。

      在秦始皇登上王位的那一年,“喜”向**申报了自己的年龄。当时叫“傅籍”。

      由于战争情况,他到17岁就傅籍了,所谓傅籍就是登记作为一个壮丁。

      喜的自传解决了一个长期捆饶历史学家的问题:秦人什么时候开始服兵役?“喜”向**登记年龄的那一年 是17岁。在秦国,17岁看来是男子成年的标志。申报年龄以后,国家就可以随时征召喜这样的成年男子上战场。

      竹简上记载:“喜”分别在秦始皇3年、4年和13年的时候,从军打仗。我们不知道“喜”在军队中究竟干什么,也不清楚他每次在军队里服役多长时间。但喜从20岁到30岁的十年间,曾经三次参加战斗 。从这儿可以看出来,在秦国,一个人一生服几次兵役似乎没有严格的规定。从17岁到60岁,只要国家需要,所有的成年男子随时都要 奔赴战场。

      喜参加的三次战争很可能都是小规模的。在秦军发动全面统一战争的前一年,“喜”在自传中写道:自占年,老百姓向国家普遍登记年龄。专家惊奇地发现:司马迁的《史记》在那一年有同样的记载:初令男子书年, 秦国命令所有的成年男子登记年龄。看来,小人物和大历史学家对这次人口普查都十分关注。事实上,进行人口普查是秦始皇的命令,是为大规模的统一战争做准备。

      十年统一战争时,秦国调动了大约100万的士兵, 当时秦国的人口大约是500多万,5个秦人当中就有一个士兵,这个比例一直让历史学家困惑不解。或许,“喜”的经历可以解释这个问题。

    秦军弩兵作战队形

      从“喜”的经历来看,秦国实行的是普遍的征兵制,当战争爆发的时候,每一个秦人都必须无条件地服从国家的安排。可以推测,绝大多数秦国男子都有和喜相似的经历。

      为了发动规模空前的统一战争,秦始皇大概征调了全国至少一半以上的成年男子。只有这样,秦人才能组建 起一支100万的庞大军队。

      从竹简上的记载来看,喜并没有参加十年统一战争,而是在地方上作了县长的法律秘书。喜大概是在这个位置上终其一生的,他的自传在秦始皇30年的时候戛然而止。

      我们从简上来看,到秦始皇30年的时候,大概他就死了,那时候他是46岁,还很年轻。

      医学专家对墓葬中的骨骼鉴定证实,这是一个45岁左右的男性,墓中的这具遗骨就是喜。作为一名兢兢业业的地方法官,喜抄写了大量的法律文书;同时,喜书写了自己的传记。正是有了喜的自传,我们才得以走进2000多年前一个秦国士兵的生活。就是像喜这样的普通士兵,组成了秦国的百万大军。

      在西方,伟大的亚历山大有5万人的军队;罗马军团最为强盛的时候也不过几十万人。在农业文明的时代,军队规模被限制的一个重要原因就是无法生产足够的粮食。在那个遥远的年代,只有秦国负担得起百万大军连年作战。

      在秦始皇统一中国前135年,一个叫商鞅的人来到了咸阳,他希望在秦国实现自己的政治理想。

      商鞅的治国之道完全打动了当时的秦王,《史记》记载,两人挑灯夜谈三天三夜。从此,商鞅开始执掌秦国的大权,而秦国便有了一个延续135年的国策:耕战。

      商鞅告诉秦人,生活中只有两件事:耕田和打仗。只有强大的农业才能支持不断扩大的战争。《史记》上说,耕战策略最终成就了秦国一统天下的抱负。

      但是,这一国策具体是怎样执行的,它如何影响500多万普通的秦人?言简意赅的历史文献并没有提供答案。

      1975年
  • 第四集:关山飞渡

      引子
      在中国几千年的文明史上,为什么许多最伟大的军事工程都出现在秦始皇的时代?而且,集中在秦统一中国前后短短的十几年当中?或许,只有追随秦始皇那支无敌军队的足迹,才能找到答案。

    第四集:关山飞渡

      公元前219年,在遥远的南方,今天广西的桂林一带,一支秦国军队正在这里驻扎。

      在指挥部的营帐里,秦军统帅屠睢给远在咸阳的秦始皇写信:皇帝陛下,战事进展顺利,岭南之地不日即可归附,天下即将一统……

      两年前,中原六国相继灭亡,黄河和长江一带已经并入秦国的版图。但是,南方珠江流域的大片土地仍然飘摇在外。秦始皇一声令下,50万秦军起程南下,大军没有遇到抵抗就迅速推进到桂林。

      然而,战争的进展开始超出屠睢的意料。顽强的土著人神出鬼没,他们白天躲藏,晚上出来偷袭秦军。加上丛林中瘴气弥漫,毒虫遍地, 远征的秦军将士疲惫不堪,经常在昏睡中被突然出现的对手杀死。战争久拖不决。

      最为可怕的事情终于发生了,军中粮食即将枯竭,饥饿不仅在蚕食秦军的战斗意志,也在摧毁帝国征服南方的野心。

      从北方的粮仓到南方前线,秦军的后勤保障主要依靠陆路运输,然而,丛林茂密、山高水远,未开发的南方令秦军的后勤保障变成一场噩梦。

      在越人的一次偷袭中,最高统帅屠睢也被杀死,整个秦军陷入恐慌当中。

      史记记载,秦始皇焦虑万分,他亲自赶往南方,一直到了湘江一带。秦始皇明白:要结束南方的战争,就必须解决军粮运输问题。

      在今天广西的兴安县,有一条看起来十分普通的河流。2000年以来,生活在这里的人在河上行船、用河水灌溉。但是,有多少人知道:这条叫做灵渠的人工运河,是北方船队由长江进入岭南的惟一通道。

      在那场旷日持久的丛林战之前,长江和珠江之间没有河流相通,50万秦军的粮草只能依靠陆路运输,军粮根本就无法保障。当秦始皇心急如焚时,一个叫史禄的人提出了一个大胆的建议。

      在湘江和漓江之间修一条运河,打通南北两大水系。船队从巴蜀一带的粮仓出发,进入长江的支流湘江,再通过这条运河到达珠江的支流漓江,后勤物资就完全可以用水路送到战争前线。

      这是一个惊人的创意。当时长江和黄河已经沟通,这意味着,从帝国的都城咸阳上船,就可以直达广州。但 是,秦人面临着巨大的工程难题。

      湘江和漓江之间直线距离仅4.8公里,但两江高低相差几百米,运河开通,渠水将狂奔而下,根本无法行船。

      今天,已经没有人知道灵渠最初的设想如何产生,也没有人清楚秦人如何用两年左右的时间就完成了这一工程。然而,它确实是一个奇迹.2000多年前,这条33公里长的运河开通了人类历史上最大的内河运输网。

      灵渠建成后,粮食运输畅通无阻。第二年,秦军就平定了土著人的反抗,帝国的疆域一直拓展到了南海之边。

      平定了南方之后,匈奴人就成了秦军最后一个对手。北方草原上的这个游牧民族对中原文明一直是一个巨大的威胁,当秦军在南方奋战的时候,匈奴人越过了阴山脚下的黄河, 直接威胁秦帝国的都城咸阳。

      公元前215年,大将军蒙恬挥师北上,秉承秦始皇的旨意,去解决匈奴问题。但是,30万强悍的秦军并没有立即与匈奴骑兵决战,而是停在了年久失修的长城边上。

      春秋战国时期,为了抵御匈奴人的侵犯,北方的秦、赵、燕三国都陆续在边界上修筑过长城。在今天甘肃省的临洮县,这段古长城就是在秦始皇之前100多年的秦昭王所修。 从秦长城向东北,经过一大片未设防的黄土沟壑后,就是已经灭亡的赵国曾经经营了几百年的长城。这条长城时断时续,早已破败不堪。达北部边疆以后,三十万秦军的任务就是维修、改造破旧的长城。

      秦军和匈奴人周旋了几百年,蒙恬家族几代人都是秦国的战将,他应该非常了解与匈奴作战的艰难。

      匈奴是游牧部落,他们居无定所,往来如风。不知什么时候,会突然聚集成一支凶狠的军队,转瞬间,又变成散落天边的牧民。匈奴人是游击战的高手,如果秦军仓促出击,匈奴骑兵会避开锋芒,绕到别处大肆抢掠,甚至凶猛攻击秦军的后方。而秦军劳师远征,寻求决战而不得,旷日持久将无法忍受。

      在这种情况下,蒙恬选择了长城战略。秦军修建的长城,并不只是一堵墙而已。长城不仅用于防御,蒙恬改造过的长城是一个可以进攻的体系。

      长城的首要作用是预警。这些最高处的烽火台就是了望哨,为了提前预警,有些烽火台甚至远远突出于长城之外。

      在长城沿线,秦军修建了许多由坚固城墙围起的小城,这里是戍边军民的居所,也是长城工事上的战斗支撑点。

      在离开长城有一定距离的后方,秦军又修筑了屯军要塞,这些要塞既能够容纳众多的军队,又可以囤积大量后勤物资。在出击匈奴时,就成了大部队的前进基地,也是长城防线的战略纵深。有了这套体系,部队就避免了无依无靠的野战。

      一年多以后,蒙恬大军基本上完成了长城的维修和改造,与匈奴骑兵开战的时机到了。

      以长城为依托,装备先进的秦军只用了一年,就打败
  • 第三集:死生之地

      长平在今天山西省的高平县,战争就发生在这个山谷。即将投入战斗的秦军,一直是古代史学家几笔带过的模糊形象。而今天,军事专家已经可以根据秦兵马俑去推测那支令人生畏的军队如何作战了。

      长平之战,秦军主力在面对象波涛一样翻滚而来的赵军时,怎样发起攻击?他们的战斗队形是什么样的?这些一动不动的陶土战士,能告诉我们些什么呢?

      在兵马俑主力部队的最前边,站着三排战士,可以设想,在长平谷地的秦军军阵中,他们最先与赵军接战。考古发现,他们曾经装备的武器一律是远射用的弩。这些弩兵分为三排,直面成千上万汹涌而来的赵军。

      弓弩的射击有一条规律,因为临敌不过三发,敌人往前冲了,这一支箭装上去以后射出去,你再装一次,敌人还往前冲,三次箭射出去以后,敌人就冲到面前来了。时空关系就是这样,所以古代射击的时候一定要轮番射击。

      这是人们第一次亲眼看到秦军弩兵的作战队形。专家认为,他们站成三排是有道理的。可以推测,当第一排射击的时候,后两排拉弦搭箭,三排弩兵因此可以轮番射击。在战场上,密集的杀伤力最为致命。

      在兵马俑博物馆,这是第二个被发现的俑坑,它至今仍然覆盖着厚厚的黄土。但是,电脑技术可以帮助考古人员模拟地下的壮观景象。

      黄土下站立着一支独立的弩兵部队。前排的士兵正在射击,后排的蹲着准备,一起一伏,配合默契。这显然是秦弩兵作战的一个瞬间。在秦军之后将近2000年,欧洲人还用类似的方法组织火枪手,秦军很有可能开创了这种经典的连续射击方式。

      在长平谷地,赵军首先遭遇的就是秦弩兵。万弩齐发,赵军每前进一步都要付出很大的代价。然而,这只是秦军的第一道攻击波。

      从1974年发现兵马俑以来,考古工作就一直没有停止。在这只矛头附近,考古人员发现了一条6.3 米长的矛柄遗痕,加上矛头,完整的长矛接近7米。这种长度的刺杀兵器,端平都十分吃力,秦军是怎样用来作战的呢?

      如果用来单兵作战,7米的长矛根本无法自由格斗。但是,在古代希腊,亚历山大的军队就以7米2的长矛而闻名,由长矛组成的方阵曾经使他们战无不胜。专家推测,秦步兵中应当有类似的长矛方阵,长矛的威力在于集体的力量。

      不论发生什么情况,这些士兵都要挺着长矛向前走,前排倒下,后排立即补上,保持方阵不变。可以想象:为了将几千人、几万人变成一个铜墙铁壁的方阵,士兵们必须要进行严格的训练。

      从武器和作战方式来看,长矛手是杀伤力最大的步兵兵种。枪头如林,方阵如山、巨大的冲击力不可阻挡。

      在兵马俑坑,考古人员还发现了另外两种长柄刺杀兵器。戟的长度在 2 米 80 左右,它实际上是在戈的前边加装了矛头,可以钩砍,也可以直刺,与长矛手不同,持 戟的士兵可以做单兵格斗,对于他们来说:掌握自由搏击的技巧和发挥个人才华是最关键的。

      考古人员发现的第三种长柄兵器叫铍。它很像插在长杆上的短剑,长度界于戟和长矛之间,在3米5左右,持 铍的士兵很可能也是靠某种队形去冲击对手。

      从不同的杀伤距离来看,长矛、铍和戟长短之间既有专业分工,又可以互相保护。

      但是,这些兵器之间究竟如何配合使用,今天已经很难了解。兵马俑坑曾被人盗毁,士兵手中的兵器大都遗失了,仅存的一些也散落在黄土中,原始的位置已经很难判断。

    秦国的兵工厂是当时世界上最庞大的兵器制造业。工人从地下挖掘铜矿石。

      在兵马俑坑,军事专家还是发现了一种配合作战的范例。在轻装的弩兵中,这个身穿铠甲的士兵十分特殊,他手中是长矛一类的刺杀兵器。在射击部队中编制这样的长矛手,是为了保护射击手免遭冲到跟前的敌人伤害。从这些细节来看,秦步兵在专业化和协同作战方面,很可能已经相当成熟。

      根据兵马俑的布局来推测:两千多年前的长平战场,赵军首先面对的是秦弩兵,紧接着就是秦步兵的冲击。他们是秦军真正的主力部队。

      司马迁在《史记》中记载:两军初次交锋,赵军损失惨重。深知秦军厉害的赵军统帅廉颇,立即改变策略,全线撤退,凭借有利地形,构筑壁垒固守。秦军久攻不下,又远离国土,战局反而开始对秦军不利。

      《史记》中写到:秦人用反间计使赵王上当,以年轻的赵括代替了老帅廉颇。赵括到达前线后,立即改变部署,向秦军主动进攻。而秦王也秘密换上战国时最为杰出的军事天才白起为秦军总指挥。

      当赵军大举进攻的时候,白起认为战胜对手的机会已经来临。经过周密的思考和讨论,一个大胆的计划诞生了。秦军主力开始在长平东南的有利地势上构筑壁垒,与赵军作战的部队依照白起的命令佯装败退。

      赵括果然中计,率领赵军主力离开大本营,进入了秦军的口袋阵。

      在夜幕的掩盖下,两支背负使命的秦军悄悄地离开了营垒。一支25000人去断赵括的后路。另外一支5000骑兵直奔赵军大本营。这是一个相当冒险的决定,两支部队要么全军覆没,要么彻底改变相持局面。

      今天,这条将整个长平谷地一分为二的河流仍在流淌,当年包抄赵军的秦军,就
  • 第二集:血色青铜

      引子

      两千多年前,秦人的军队将中华文明推进到一个史无前例的转折点上。然而,在史学家司马迁的笔下,这支军队秦军摧城拔地、杀人如麻。秦军,这支令人生畏的军队,果真是依靠残暴和野蛮统一了中国吗?

      1974年,在秦始皇兵马俑坑中发现了大量的兵器,对这些兵器的研究让人们逐渐看到了秦军鲜为人知的一面 ,司马迁未曾记录的那一面。

      在河南省的西平县,考古学家们发现了大量古人炼铁的遗迹。两千多年前,这一带是韩国的冶铁中心,铁器的生产在当时已经有一定规模。

      在河北易县出土的这把燕国铁剑,锋刃部分已经达到了今天高炭钢的硬度!春秋战国的几百年间, 青铜正在慢慢退出历史,铁,正在开启一个新的时代。

      令人费解的是,处于同一时期的秦人,似乎没有跟上时代。兵马俑坑中出土的四万件兵器,几乎全由青铜铸成。难道用武力统一了中国的秦军是一支装备落后的军队吗?

      司马迁在《史记》中记录了一次著名的谋杀事件。在秦统一中国前一年,强悍的秦军正准备消灭燕国的时候,一个叫荆轲的使者带着燕国的地图来到秦国。这是一场精心策划的阴谋,献图投降是假,刺杀秦始皇是荆轲真正的目的。

      史记上这样描述: 刺客荆轲手持匕首,绕柱奔逃的秦始皇企图拔剑还击,三次拔剑而剑竟然不出。

      司马迁解释说,秦始皇的配剑太长了,所以不能及时拔出来。

      青铜剑一般都是短剑,它无法做长的原因是因为青铜材料容易折断。春秋战国时期,最负盛名的越王勾践剑,全长不过55.6厘米。青铜剑普遍宽而短,60厘米似乎是青铜剑的极限。这种长度的配剑随手就可以抽出,秦始皇怎么可能因为剑太长而拔不出来呢?对于司马迁的这个解释,历史学家一直很困惑。

      1974年,在兵马俑坑的黄土中,考古人员发现了一把完全不同的青铜剑。令专家吃惊的是,这把剑的长度竟然超过了91厘米,秦人能够制造如此之长的青铜剑!

      可以推测,当年秦始皇佩带的很可能就是这种加长的青铜剑。在刺客紧逼的奔跑当中,要拔出将近一米的长剑,确实不容易。 司马迁记载:在一个宫廷医生的提醒下,秦始皇握主晃动不已的剑鞘,最终才拔出了配剑。

      专家很迷惑:秦人将剑加长的目的究竟是什么呢?

      19世纪英国古兵器学者理查伯顿认为,在短兵器格斗中,刺要比砍更有优势,因为它更逼近对手。古罗马军团在血战中总结出一条规律:以相同的力量,刺比砍更致命,刺死砍伤。

      比对手的剑长出大约30厘米的秦剑,在格斗中显然更容易刺到对方,这很可能是秦剑加长的主要原因。但是,这毕竟是青铜剑,秦人用什么方法让长剑不易折断呢?

      在青铜时代,铸剑的关键是在冶炼时,向铜里加入多少锡。锡少了,剑太软;锡多了,剑硬,但容易折断。

      对秦剑做的化学定量分析显示:它的铜锡配比让青铜剑的硬度和韧性结合得恰到好处。但秦剑更让人着迷的地方,是它的外形。袁仲一教授仔细地研究了秦剑奇特的形状变化。

      这种设计使秦剑的受力部分得到加强,而又保持一定的弹性,同时剑身又不会过于沉重。或许,秦剑加长暗示着秦军对格斗技巧的认识有了某种重大的突破。

      秦剑是青铜剑铸造工艺的顶峰,它的长度、硬度和韧性达到了几乎完美的结合,攻击性能也因此大大增加。司马迁记载:秦始皇只一击就使刺客荆轲倒地不起,燕国也随后灭亡。

      两千多年前,在消灭了中原六国之后,北方的游牧民族匈奴人就成了秦军主要的对手。在秦军进行统一战争的时候,匈奴骑兵乘机南下,侵占了黄河以南大面积的土地。在帝国地都城咸阳,如何对付剽悍的匈奴骑兵就摆 到了秦始皇面前。

      当匈奴骑手高速冲锋的时候,传统的步兵很难抵挡。从历史记录来看,一种叫弩的远射兵器很可能在秦军击溃匈奴的战斗中发挥了主导作用。

      在兵马俑坑,由于时间太过久远,弩的木制部分已经朽烂,但完整的遗迹仍然可以复原当初的秦弩。据此复原的秦弩,有着惊人的力量。

      与弓不同,秦弩必须用脚蹬、借助全身的力量才能上弦。专家估计,这种秦弩的射程应该能够达到300米,有效杀伤距离在150米之内,秦弩的杀伤力远远高于当时任何一种弓。在弩腐烂后留下的痕迹中,考古人员发现了青铜制作的小机械。这些小小的青铜构件就是弩用来发射的扳机。它的设计得非常精巧。令人不解的是,秦人为什么不把它做得更简单一些呢?

      假设一种最简单的方案,制造成本可以大大降低。但是,射手完全靠手指的力量把勒得很紧的弓弦推出勾牙, 就要用很大的力气,在击发瞬间,弩肯定会抖动。今天的射击训练,击发瞬间连呼吸调整不好都有可能影响射击的准确性。

      秦军的弩机通过一套灵巧的机械传递,让勾牙在放箭瞬间突然下沉,扣动扳机变得异常轻巧。这恰恰是弩对弓的优势之一,拉弓要用很大的力气,时间越长,越难控制瞄准的稳定。

      弩机上的望山,在上弦时可以自动地把扳机重新调整到击发的位置。但它还有另一个不可思议的功能!

      可以推想,在与匈奴骑兵厮杀的战场上,秦军弩兵射击的情形。当
  • 2004-06-12