﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>IT博客-1，2，3。。。 大道以多岐路亡羊，学者以多方丧生。</title><link>http://www.cnitblog.com/schkui/</link><description>政府为什么敢控制物价，不敢控制房价，---- 因为为房，是(多或少)数官员和大商人的一起的利益。。。怕影响自己的政绩...    </description><language>zh-cn</language><lastBuildDate>Sun, 21 Mar 2010 11:05:20 GMT</lastBuildDate><pubDate>Sun, 21 Mar 2010 11:05:20 GMT</pubDate><ttl>60</ttl><item><title>[转]在Linux下产生并调试core文件</title><link>http://www.cnitblog.com/schkui/archive/2008/03/05/40513.html</link><dc:creator>爱易</dc:creator><author>爱易</author><pubDate>Wed, 05 Mar 2008 04:09:00 GMT</pubDate><guid>http://www.cnitblog.com/schkui/archive/2008/03/05/40513.html</guid><wfw:comment>http://www.cnitblog.com/schkui/comments/40513.html</wfw:comment><comments>http://www.cnitblog.com/schkui/archive/2008/03/05/40513.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/schkui/comments/commentRss/40513.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/schkui/services/trackbacks/40513.html</trackback:ping><description><![CDATA[转载自: <a href="http://blog.china-pub.com/more.asp?name=uniware&amp;id=35478" target="_blank">http://blog.china-pub.com/more.asp?name=uniware&amp;id=35478</a>
<p>uname -a<br>Linux dev 2.4.21-9.30AXsmp #1 SMP Wed May 26 23:37:09 EDT 2004 i686 i686 i386 GNU/Linux</p>
<p><br></p>
<p>再看看默认的一些参数，注意core file size是个0，程序出错时不会产生core文件了。</p>
<p>$ ulimit -a<br>core file size (blocks, -c) 0<br>data seg size (kbytes, -d) unlimited<br>file size (blocks, -f) unlimited<br>max locked memory (kbytes, -l) 4<br>max memory size (kbytes, -m) unlimited<br>open files (-n) 2048<br>pipe size (512 bytes, -p) 8<br>stack size (kbytes, -s) 10240<br>cpu time (seconds, -t) unlimited<br>max user processes (-u) 7168<br>virtual memory (kbytes, -v) unlimited</p>
<p>写个简单的程序，看看core文件是不是会被产生。</p>
<p>$ more foo.c</p>
<p>#include <stdio.h></stdio.h></p>
<p>static void sub(void);</p>
<p>int main(void)<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;sub();<br>&nbsp;&nbsp;&nbsp;&nbsp;return 0;<br>}</p>
<p>static void sub(void)<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;int *p = NULL;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;/* derefernce a null pointer, expect core dump. */<br>&nbsp;&nbsp;&nbsp;&nbsp;printf("%d", *p);<br>}</p>
<p>$ gcc -Wall -g foo.c<br>$ ./a.out<br>Segmentation fault</p>
<p>$ ls -l core.*<br>ls: core.*: No such file or directory</p>
<p>没有找到core文件，我们改改ulimit的设置，让它产生。1024是随便取的，要是core文件大于1024个块，就产生不出来了。</p>
<p>$ ulimit -c 1024</p>
<p>$ ulimit -a<br>core file size (blocks, -c) 1024<br>data seg size (kbytes, -d) unlimited<br>file size (blocks, -f) unlimited<br>max locked memory (kbytes, -l) 4<br>max memory size (kbytes, -m) unlimited<br>open files (-n) 2048<br>pipe size (512 bytes, -p) 8<br>stack size (kbytes, -s) 10240<br>cpu time (seconds, -t) unlimited<br>max user processes (-u) 7168<br>virtual memory (kbytes, -v) unlimited</p>
<p>$ ./a.out<br>Segmentation fault (core dumped)<br>$ ls -l core.*<br>-rw------- 1 uniware uniware 53248 Jun 30 17:10 core.9128</p>
<p>注意看上述的输出信息，多了个(core dumped)。确实产生了一个core文件，9128是该进程的PID。我们用GDB来看看这个core。</p>
<p>$ gdb --core=core.9128<br>GNU gdb Asianux (6.0post-0.20040223.17.1AX)<br>Copyright 2004 Free Software Foundation, Inc.<br>GDB is free software, covered by the GNU General Public License, and you are<br>welcome to change it and/or distribute copies of it under certain conditions.<br>Type "show copying" to see the conditions.<br>There is absolutely no warranty for GDB. Type "show warranty" for details.<br>This GDB was configured as "i386-asianux-linux-gnu".<br>Core was generated by `./a.out'.<br>Program terminated with signal 11, Segmentation fault.<br>#0 0x08048373 in ?? ()<br>(gdb) bt<br>#0 0x08048373 in ?? ()<br>#1 0xbfffd8f8 in ?? ()<br>#2 0x0804839e in ?? ()<br>#3 0xb74cc6b3 in ?? ()<br>#4 0x00000000 in ?? ()<br><br>此时用bt看不到backtrace，也就是调用堆栈，原来GDB还不知道符号信息在哪里。我们告诉它一下：</p>
<p>(gdb) file ./a.out<br>Reading symbols from ./a.out...done.<br>Using host libthread_db library "/lib/tls/libthread_db.so.1".<br>(gdb) bt<br>#0 0x08048373 in sub () at foo.c:17<br>#1 0x08048359 in main () at foo.c:8<br><br>此时backtrace出来了。</p>
<p>(gdb) l<br>8&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; sub();<br>9&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return 0;<br>10&nbsp;&nbsp;&nbsp;&nbsp; }<br>11<br>12 &nbsp;&nbsp;&nbsp;&nbsp;static void sub(void)<br>13 &nbsp;&nbsp;&nbsp;&nbsp;{<br>14 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int *p = NULL;<br>15<br>16 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/* derefernce a null pointer, expect core dump. */<br>17 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf("%d", *p);<br>(gdb)</p>
<br> <img src ="http://www.cnitblog.com/schkui/aggbug/40513.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/schkui/" target="_blank">爱易</a> 2008-03-05 12:09 <a href="http://www.cnitblog.com/schkui/archive/2008/03/05/40513.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[转]用gdbserver调试共享库.txt</title><link>http://www.cnitblog.com/schkui/archive/2008/03/05/40509.html</link><dc:creator>爱易</dc:creator><author>爱易</author><pubDate>Wed, 05 Mar 2008 03:34:00 GMT</pubDate><guid>http://www.cnitblog.com/schkui/archive/2008/03/05/40509.html</guid><wfw:comment>http://www.cnitblog.com/schkui/comments/40509.html</wfw:comment><comments>http://www.cnitblog.com/schkui/archive/2008/03/05/40509.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/schkui/comments/commentRss/40509.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/schkui/services/trackbacks/40509.html</trackback:ping><description><![CDATA[在开发嵌入式系统时，调试往往是一大难题。面试过不少嵌入式linux工程师，当问及调试手段时，他们的调试手段一般是两种：首先是在PC上的模拟环境中运行，若有问题，可以很方便的调试。其次，若在板子上运行时才出错，就用printf输出log信息，根据log信息定位错误。有少部分人用gdbserver调试板子上的程序，但问到如何在共享库里设置断点时，都说没有办法。<br><br>&nbsp;&nbsp;&nbsp; 去年，Tinyx的一个内存越界BUG，花了我2天时间。gcc的一个浮点数BUG让我查了3天时间。这类BUG在PC上根本重现不了，在板子上用printf要花费大量的时间才能把错误的范围缩小一点。后来想了想，与其花时间去加printf，还不如把gdbserver调试共享库的问题解决了，可以为以后的调试节省不少时间。<br><br>&nbsp;&nbsp;&nbsp; 在网上找了半天资料，没有什么收获，看来只好自己动手研究。花了一个周末的时间去研究gdbserver的运行方式。办法是找到了，不过仍然有点麻烦，等有时间了，修改一下gdb的代码，把这个过程自动化了。<br><br>&nbsp;&nbsp;&nbsp; 先调试运行gdbserver，对gdbserver有了一些感性认识，然后研究linux-low.c中的代码。原来，设置断点只是在对应的内存中写入断点指令（x86上为0xcc）。<br><br>&nbsp;&nbsp;&nbsp; gdbserver为什么不能在共享库中设置断点呢？设置断点只是写内存，调试时，所有的代码段都是可写的，在exe中可以设置断点，没有理由不让在共享库中设置啊。所以这应该与是否是共享库关系不大。<br><br>&nbsp;&nbsp;&nbsp; 猜测可能是符号与地址对应关系有误，如果你的本意为function1设置断点，结果gdb搞错了，设置一个毫不相干的地方，可能永远都不会执行到那里，这个断点自然没什么效果。<br><br>&nbsp;&nbsp;&nbsp; 如果是这样，有两种方法可以解决：要么手动计算符号的地址，再设置断点，当然这样太累。另外就让gdb自动对应起来。经过反得尝试，用下列方法可以在共享库中设置断点，虽然有点麻烦，还是可行的。<br><br>1. 准备工作，编写下面几个文件：<br><br>test.c:<br>#include <br>int test(int a, int b)<br>{<br>int s = a + b;<br>printf("%d\n", s);<br>return s;<br>}<br><br>main.c:<br>#include <br>extern int test(int a, int b);<br>int main(int argc, char* argv[])<br>{<br>int s = test(10, 20);<br>return s;<br>}<br><br>Makefile:<br>all: so main<br>so:<br>gcc -g test.c -shared -o libtest.so<br>main:<br>gcc -g main.c -L./ -ltest -o test.exe<br>clean:<br>rm -f *.exe *.so<br><br>（为了便于演示，整个过程在PC上测试，后来证实在实验板上能够正常工作）<br><br>2. 编译并设置环境变量<br>make<br>export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:./<br><br>3. 运行gdbserver<br>gdbserver localhost:2000 ./test.exe<br><br>4. 运行gdb客户端<br>gdb<br>symbol-file test.exe<br>target remote localhost:2000<br>b main<br>c<br><br>5. 查看libtest.so的代码在内存中的位置。<br>（从gdbserver的输出或者用ps可以得到test.exe的进程ID，这里假设PID是11547）<br>cat /proc/11547/maps<br>输出：<br><br>00624000-0063e000 r-xp 00000000 03:01 718192 /lib/ld-2.3.5.so<br>0063e000-0063f000 r-xp 00019000 03:01 718192 /lib/ld-2.3.5.so<br>0063f000-00640000 rwxp 0001a000 03:01 718192 /lib/ld-2.3.5.so<br>00642000-00766000 r-xp 00000000 03:01 718193 /lib/libc-2.3.5.so<br>00766000-00768000 r-xp 00124000 03:01 718193 /lib/libc-2.3.5.so<br>00768000-0076a000 rwxp 00126000 03:01 718193 /lib/libc-2.3.5.so<br>0076a000-0076c000 rwxp 0076a000 00:00 0 <br>00bbe000-00bbf000 r-xp 00bbe000 00:00 0 <br>00fcc000-00fcd000 r-xp 00000000 03:01 1238761 /root/test/gdbservertest/libtest.so<br>00fcd000-00fce000 rwxp 00000000 03:01 1238761 /root/test/gdbservertest/libtest.so<br>08048000-08049000 r-xp 00000000 03:01 1238765 /root/test/gdbservertest/test.exe<br>08049000-0804a000 rw-p 00000000 03:01 1238765 /root/test/gdbservertest/test.exe<br>b7f8a000-b7f8b000 rw-p b7f8a000 00:00 0 <br>b7f99000-b7f9a000 rw-p b7f99000 00:00 0 <br>bfd85000-bfd9a000 rw-p bfd85000 00:00 0 [stack]<br><br>由此可以知道：libtest.so的代码在00fcc000-00fcd000之间。<br><br>6. 查看libtest.so的.text段在内存中的偏移位置：<br>objdump -h libtest.so |grep .text<br>输出：<br>9 .text 00000130 00000450 00000450 00000450 2**4<br>即偏移位置为0x00000450<br><br>7. 回到gdb窗口，加载libtest.so的符号表。<br>add-symbol-file libtest.so 0x00fcc450<br>(这里0x00fcc450 = 0x00fcc000 0x00000450)<br><br>8. 在共享库的函数中设置断点。<br>b test<br><br>9. 继续调试，可以发现在共享库中设置的断点，能够正常工作。<br>这个方法仍然有点麻烦，写在这里算抛砖引玉吧，望大家不吝赐教，谢谢。<br><br>http://www.dzkf.cn/html/qianrushixitong/2007/0626/2293.html
<br><img src ="http://www.cnitblog.com/schkui/aggbug/40509.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/schkui/" target="_blank">爱易</a> 2008-03-05 11:34 <a href="http://www.cnitblog.com/schkui/archive/2008/03/05/40509.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Ettercap-交换环境下的嗅探器使用方法  </title><link>http://www.cnitblog.com/schkui/archive/2007/12/05/37358.html</link><dc:creator>爱易</dc:creator><author>爱易</author><pubDate>Wed, 05 Dec 2007 06:44:00 GMT</pubDate><guid>http://www.cnitblog.com/schkui/archive/2007/12/05/37358.html</guid><wfw:comment>http://www.cnitblog.com/schkui/comments/37358.html</wfw:comment><comments>http://www.cnitblog.com/schkui/archive/2007/12/05/37358.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/schkui/comments/commentRss/37358.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/schkui/services/trackbacks/37358.html</trackback:ping><description><![CDATA[一:安装<br><br>你可以在网上很多地方下载到它的最新版本,比如<a href="http://ettercap.sourceforge.net/" target="_blank">http://ettercap.sourceforge.net</a> 下载完后,先解压缩:<br>[root@CIEL root]#tar zxpvf ettercap-0.6.tar.gz<br>[root@CIEL root]#cd ettercap-0.6<br>[root@CIEL ettercap-0.6]#./configure&amp;&amp;make&amp;&amp;make install<br>[root@CIEL ettercap-0.6]#make plug-ins<br>[root@CIEL ettercap-0.6]#make plug-ins_install<br>安装完成后,输入"ettercap --help"就可以看见帮助文档.基本用法是<br>ettercap [option] [host:port] [host:port] [mac] [mac]<br><br>二：功能介绍<br><br>嗅探：它有5种工作模式<br>-a --arpsniff 基于arp的欺骗,分3小种：arpbased,smartcarp和publicarp<br>-s --sniff 属于IPBASED,目标可以是任何主机<br>-m --macsniff 属于MACBASED<br><br>需
要说明的是-s
-m两选项带来的是传统嗅探模式,分别基于IP地址和MAC地址.也就是说它们必需先把网卡置于混杂,然后才可以正常工作。所以在交换环境下,这两项会完
全失效,-a选项是基于ARP欺骗的,是一种中间人攻击模型。实质是利用了ARP协议的漏洞，攻击者分别欺骗了A和B机。让A机把数据传给嗅探者,然后再
由嗅探机器把数据转发给B机,A和B却没有意识到数据包的中转过程，这样我们就可以劫获数据甚至修改数据包.<br><br>下面分别介绍五种用法:<br>1：ettercap -Nza ip1 ip2 mac1 mac2 (arpbased) 劫获IP1与IP2间的数据.缺省状态下<br>只接收TCP数据包<br><br>2：
ettercap -Na ip mac (smartcarp)
劫获此ip与外部所有通讯数据,这种方式比较剧烈,启动时采用的是ARP风暴,很容易被发现.如果别人在用TCPDUMP监听,就会看见攻击者发出的无数
的ARP请求,再傻的管理员都明白什么事情发生了.不过由于修改了指定主机的ARP表中关于被监听主机的MAC地址，还修改了被监听主机中的那些指定主机
的MAC地址,处在完全的中间人工作状态，这时候你可以作的事情多些,比如更改数据包,截取SSH口令.<br><br>3：ettercap
-Nza ip mac (publicarp)
同上,不同点在于发送ARP请求的方式,上面采用的是ARP广播,这里只是对特定主机发送ARP请求.这样,不易引起管理员的怀疑.不过也带来了问题,被
监听者自己也会收到这个以广播方式发送的ARP响应包,于是便会弹出"检测到IP地址于硬件地址冲突"之类的警告.不过不会影响目标主机正常通信,还有一
点就是发往被监听主机的数据包会送给监听者，而监听者发出的数据包却被直接送往真正的目的主机，没有经过监听者的主机.所以我们只能截取不完全的通信内
容.<br><br>4：ettercap -Nzs IP:80 (ipbased sniffing) 基于IP地址的嗅探。这里仅劫获目标机器HTTP消息,你也可以指定其他端口，比如23 。如果没有指定，所有都会被截取<br><br>5：ettercap -zm mac1 mac 2 (macbased) 基于MAC的嗅探.只要输入MAC地址<br><br>需
要说明的是，4，5两种方式只适合于共享网络,在交换网络下一概无效.MAC地址的获取很简单，直接在终端输入&#8220;ettercap
-l"就会列出所有在线主机。或者你先PING一下某个IP，不管有没有回应（没有回应可能是对方开了防火墙），再用ARP命令就可以获取其MAC地址。
如果无法获取，则此IP不存在 ,这也是探测防火墙后的主机是否在线的一个好方法。<br><br>包过滤：由于网络流量实在很大，当你面对大量记录数据
时，你可能会感到手足无措，你想找到自己需要的数据无疑是一项艰巨的工作，这时侯，我们可以通过—F
选项加载自己的过滤规则，这样，很多无用的数据就会被忽略，删节。和注射字符一样，我们进行包过滤时有必要的话也要注意到正确的TCP序列号和确认序列号
等因素。一旦你加载了自己的过滤链，你就可以有目的的得到自己最需要的数据了。一条过滤规则看起来就象汇编程序一样，当然，还是有差距的，用列阵形容可能
更确切些。一条过滤规则大概如下：《协议，源端口，目标端口，承载数据》<br><br>一个空的搜索字符串总可以成立，比如端口如果没有指定，所有的都会被记录下来。只要那些规则匹配，你的过滤链就可以工作了.<br><br>例如有如下数据流<br>packet 1: "var1=123&amp;var2=400"<br>packet 2: "var1=124&amp;var2=420"<br>packet 3: "var1=125&amp;var2=460"<br>packet 4: "var1=126&amp;var2=540"<br>packet 5: "var1=127&amp;var2=700<br>......<br>......<br>我们可以写如下规则<br>Search: "var1=[3*]"<br>Replace: "var1=000"<br>被过滤后的流就会如下<br>packet 1: "var1=000&amp;var2=400"<br>packet 2: "var1=000&amp;var2=420"<br>packet 3: "var1=000&amp;var2=460"<br>packet 4: "var1=000&amp;var2=540"<br>packet 5: "var1=000&amp;var2=700"<br>如果&#8220;var1&#8221;后面没有被指定，默认则&#8220;var1=000&#8221;<br><br>最后是关于ssh的嗅探：<br><br>由于传输数据被加密,我们必需自己掌握密钥,具体实现方法如下:我们先截取服务器的明码密钥,保存在一边.自己再生成另一明码密钥,用来加密本机与客户机通讯数据,收到客户机数据后,自然可以解密,在用服务器明码密钥加密,发送给服务器,如此一来,可以偷天换柱.<br><br>三：工作参数：<br><br>下面列出它的主要选项,虽然它本身有28个,不过限于篇幅,下面只列出一些常用的:<br>-N --simple 非交互方式，很常用的<br>-z --silent 静模式(启动时不是发送ARP风暴)<br>-O --passive 被动模式嗅探<br>-b --broadping 广播PING ,替代了ARPPING<br>-S --spoof &lt;ip1&gt; 用IP1这地址发送ARP请求获取其他机器信息<br>-H --hosts &lt;ip1[ip2][...]&gt; 嗅探的目标主机的IP,可以是很多台<br>-n --netmask &lt;netmask&gt; 扫描由输入子网掩码确定的子网<br>-v --version 检查最新版本<br>-h --help 帮助文档<br><br>组合选项 (一般和N绑定一齐执行)<br>-u --udp 嗅探UDP数据,缺省是TCP<br>-p --plugin &lt;name&gt; 运行指定名字的插件<br>-l --list 列出所有在线主机ip和mac.实质就是发送255个ARP请求,等待回音,如果你的子网掩码是255.255.0.0,就会发送255*255个请求,就是ARP风暴吧!<br>-C --colletc 仅搜集用户名和对应密码 Eg:ettetcap -NCzs IP：port 它规则不是很严格，所以你IP或PORT不填也没有关系<br>-c --check 检察网络里有没其他机器正在嗅探<br>-x
--hexview
用16进制表达数据,这样,如果你想自己创建一个包的话会比较方便.比如建个文件写上"\x01\x02\x00\x00\xFF\xFF\x00\
x02here the pass".注意:ettercap不仅可以嗅探包,也可以创建包的.所以你可以更改穿过你机器的任何一段数据<br>-L --logtofile 记录所有数据到指定位置<br>-k --newcert 创建一个新的CERT文件,用以进行HTTPS攻击<br>-F --filter 从指定文件列加载过滤规则<br>-f --fingerprint &lt;host&gt; 指定主机的OS判别,采用的是nmap的数据库,所以准确性得到保障,不过也有无法辨别的时候.<br>-t --linktype 判断自己处在什么样的网络环境中，交换或是HUB<br><br>实战篇<br>210.197.248.192是确定在线的主机，先判断它操作系统<br>[root@CIEL root]# ettercap -Nf 218.197.248.192<br>ettercap 0.6.0 (c) 2001 ALoR &amp; NaGA<br>Your IP: 218.197.248.226 with MAC: 00:00:E8:7B:CA:4E on Iface: eth0<br>Fingerprinting 218.197.248.192...<br>Operating System:<br>Windows NT 5 Beta2 or Beta3<br>Windows Me or Windows 2000 RC1 through final release<br>MS Windows2000 Professional RC1/W2K Advance Server Beta3<br>Windows Millenium Edition v4.90.3000<br><br>现在小试牛刀，看看对方正在做什么<br>[root@CIEL root]# ettercap -Nza 218.197.248.192 218.197.248.254 MAC1 MAC2<br><br>这
里218.197.248.254是网关。这样，我们就是中间人了，它与外网所有数据都会在我们这里流过。不过被嗅探机器的内网数据交换我们将看不到.下
面是截取到的2段典型的HTTP交互数据，从第一段可以看出客户正在看的网页，脚本，浏览器语言以及客户的操作系统等信息。从第2段可以看出主机的
bannner等等,都是网站的基本资料<br>GET /pcedu/script/title_edu.js HTTP/1.1.<br>Accept: */*.<br>Referer: <a href="http://wwwb.pconline.com.cn/pcedu/soft/doc/nt/10308.htm." target="_blank">http://wwwb.pconline.com.cn/pcedu/soft/doc/nt/10308.htm.</a><br>Accept-Language: zh-cn.<br>Accept-Encoding: gzip, deflate.<br>If-Modified-Since: Mon, 09 Sep 2002 09:18:53 GMT.<br>If-None-Match: "6f67c-2d5-3d7c677d".<br>User-Agent: Mozilla/4.0 (compatible; MSIE 5.0; Windows 98; DigExt).<br>Host: wwwb.pconline.com.cn.<br>Connection: Keep-Alive.<br><br>HTTP/1.1 200 OK.<br>Date: Sat, 01 Mar 2003 08:25:37 GMT.<br>Server: Apache/1.3.20 (Unix) PHP/4.1.2 mod_ssl/2.8.4 OpenSSL/0.9.6a.<br>X-Powered-By: PHP/4.1.2.<br>Keep-Alive: timeout=15, max=100.<br>Connection: Keep-Alive.<br>Transfer-Encoding: chunked.<br>Content-Type: text/html.<br><br>当
然，它还可以记下很多网页内容，全是HTML源代码，你可以抓下来，用HTM后缀保存，再用浏览器打开，好了，你看到的是什么，别人看到的就是什么。不过
它对中文支持不很好，所以别人看见的中文你将无法看到，另一个程序LCRZOEX就很不错，在中文终端里，可以把所有中文网页完整抓下来。<br><br>一般黑客最感兴趣的无非是密码了，比如下面的组合，h是帮助，它会提供帮助信息<br>[root@CIEL root]# ettercap -NCzs<br>ettercap 0.6.0 (c) 2001 ALoR &amp; NaGA<br>Your IP: 218.197.248.226 with MAC: 00:00:E8:7B:CA:4E on Iface: eth0<br>Resolving 1 hostnames...<br>Press 'h' for help...<br>Sniffing (IP based): ANY:0 &lt;--&gt; ANY:0<br>TCP packets only... (default)<br>Collecting passwords...<br>[qQ] - quit<br>[lL] - log all trafic to file(s)<br>space - stop/cont sniffing<br><br>15:52:51 218.197.248.21:1027 &lt;--&gt; 61.114.4.41:23 telnet<br>USER: root<br>PASS: root<br><br>15:54:53 218.197.248.46:1041 &lt;--&gt; 61.135.132.99:80 http<br>USER:dalin<br>PASS:7895865<br><a href="http://www.sohu.com/" target="_blank">http://www.sohu.com/</a><br><br>16:13:14 218.197.248.192:2278 &lt;--&gt; 218.197.249.172:21 ftp<br>USER:
CshjPASS:
123456如果你输入lL,系统在/ROOT下会自动生成&#8220;20030301-Collected-passwords.log",里面会记录下所有能
嗅探到的密码，看来TELNET，HTTP，FTP密码都不能逃过，这些记录简洁明了，在机器上挂一天，不知道可以记录多少了：）
<br><img src ="http://www.cnitblog.com/schkui/aggbug/37358.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/schkui/" target="_blank">爱易</a> 2007-12-05 14:44 <a href="http://www.cnitblog.com/schkui/archive/2007/12/05/37358.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>经典的 Makefile 小例子</title><link>http://www.cnitblog.com/schkui/archive/2007/12/03/37262.html</link><dc:creator>爱易</dc:creator><author>爱易</author><pubDate>Mon, 03 Dec 2007 02:20:00 GMT</pubDate><guid>http://www.cnitblog.com/schkui/archive/2007/12/03/37262.html</guid><wfw:comment>http://www.cnitblog.com/schkui/comments/37262.html</wfw:comment><comments>http://www.cnitblog.com/schkui/archive/2007/12/03/37262.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/schkui/comments/commentRss/37262.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/schkui/services/trackbacks/37262.html</trackback:ping><description><![CDATA[CC=g++<br>#LD=/usr/bin/ld<br>INCLUDES=-I/usr/include/mysql -I/usr/include<br>LIBS=-L/lib -L/usr/lib/mysql -lmysqlclient -lpthread<br><br>CPPFLAGS = -DLINUX -D_DEBUGE -O0 -w -g&nbsp;&nbsp; -I./src<br><br>libsrcs =$(wildcard src/*.cpp)<br>libobjs =$(libsrcs:.cpp=.o)<br><br>des_libsrcs =$(wildcard src/*.c)<br>des_libobjs =$(des_libsrcs:.c=.o)<br><br>server.exe:&nbsp;&nbsp;&nbsp; $(libobjs) gnu-md5.o server.o $(des_libobjs)<br>&nbsp;&nbsp; &nbsp;$(CC) -DDEBUGE&nbsp; -g -o $@ $^ -lpthread $(INCLUDE) $(LIBS) <br><br>%.o: %.cpp<br>&nbsp;&nbsp; &nbsp;$(CC) $(CPPFLAGS) -g -c -o $@ $&lt; <br>%.o: %.c<br>&nbsp;&nbsp; &nbsp;gcc&nbsp; -g -c -o $@ $&lt;<br><br>server.o: server.c server.h<br>&nbsp;&nbsp; &nbsp;$(CC) -c -w -g -DLINUX&nbsp; -o $@ $&lt;&nbsp;&nbsp; $(INCLUDES) <br><br>gnu-md5.o: gnu-md5.c gnu-md5.h<br>&nbsp;&nbsp; &nbsp;$(CC) -c -g&nbsp;&nbsp; -o $@ $&lt;<br><br>clean:<br>&nbsp;&nbsp; &nbsp;rm -f server.exe server.o gnu-md5.o&nbsp; $(libobjs)&nbsp; $(des_libobjs)<br><br>### 远程拷备到服务器&nbsp;
<br>install:<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; scp server.exe
schkui@www.hostname.com:/var/bin_path/
<br><br> <img src ="http://www.cnitblog.com/schkui/aggbug/37262.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/schkui/" target="_blank">爱易</a> 2007-12-03 10:20 <a href="http://www.cnitblog.com/schkui/archive/2007/12/03/37262.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>sem_timedwait() 简单用法</title><link>http://www.cnitblog.com/schkui/archive/2007/12/03/37261.html</link><dc:creator>爱易</dc:creator><author>爱易</author><pubDate>Mon, 03 Dec 2007 02:07:00 GMT</pubDate><guid>http://www.cnitblog.com/schkui/archive/2007/12/03/37261.html</guid><wfw:comment>http://www.cnitblog.com/schkui/comments/37261.html</wfw:comment><comments>http://www.cnitblog.com/schkui/archive/2007/12/03/37261.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/schkui/comments/commentRss/37261.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/schkui/services/trackbacks/37261.html</trackback:ping><description><![CDATA[<pre>///////////////////////////////////////////////////////<br>// int sem_timedwait(sem_t *restrict sem,<br>//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; const struct timespec *restrict abs_timeout);
//	<br>//  <br><br>/////////////////////////////////////////////////////<br>#include &lt;stdio.h&gt;<br>#include &lt;errno.h&gt;<br>#include &lt;unistd.h&gt;<br>#include &lt;semaphore.h&gt;<br>#include &lt;sys/stat.h&gt;<br>#include &lt;fcntl.h&gt;<br>#include &lt;time.h&gt;<br><br>int main() {<br>	sem_t mysemp;<br>	struct timespec ts;<br>	int sts, val;<br><br><br>        if ( sem_init (&amp;mysemp, 0, 0) == -1 ) {<br>                perror("sem_init is err");<br>                return P-1;<br>        }<br><br>	<span style="color: red; font-weight: bold;">ts.tv_sec=time(NULL)+1;   // 重点</span><br>        ts.tv_nsec=0;<br><br>	/* Try to lock Semaphore */<br>	sts = <strong class="chl" id="m2">sem_timedwait</strong>(&amp;mysemp, &amp;ts);<br><br>	....<br>
<pre> 	sem_destroy(&amp;mysemp);<br>}<br></pre>
</pre>
<br><img src ="http://www.cnitblog.com/schkui/aggbug/37261.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/schkui/" target="_blank">爱易</a> 2007-12-03 10:07 <a href="http://www.cnitblog.com/schkui/archive/2007/12/03/37261.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>取消黄金周还没讨论怎么就已成定局</title><link>http://www.cnitblog.com/schkui/archive/2007/11/09/36067.html</link><dc:creator>爱易</dc:creator><author>爱易</author><pubDate>Fri, 09 Nov 2007 14:01:00 GMT</pubDate><guid>http://www.cnitblog.com/schkui/archive/2007/11/09/36067.html</guid><wfw:comment>http://www.cnitblog.com/schkui/comments/36067.html</wfw:comment><comments>http://www.cnitblog.com/schkui/archive/2007/11/09/36067.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/schkui/comments/commentRss/36067.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/schkui/services/trackbacks/36067.html</trackback:ping><description><![CDATA[<span id="digest">如果&#8220;已成定局&#8221;的话，那还要设置&#8220;征集民意&#8221;程序干什么，民意讨论还有什么用。毕竟假日安排的本质是为了人而不是其他，公众的感觉应是首先考虑的。</span>
<div id="endText">
<p style="text-indent: 2em;">取消黄金周还没讨论怎么就已成定局</p>
<p style="text-indent: 2em;"><a  href="http://www.yzdsb.com.cn/" target="_blank"><img  src="http://cimg2.163.com/catchpic/4/4B/4B7A1C61796F56253CAF77E28CE541E5.gif" border="0"></a></p>
<p style="text-indent: 2em;">作者：曹林</p>
<p style="text-indent: 2em;">在舆论压力和体制改革下，许多政府部门已经改变了"民意讨论仅仅只是走过场"的习惯，真正地把吸纳和尊重民意当作开门立法的一个必要和实质的过程。</p>
<p style="text-indent: 2em;">近来公众的心都被&#8220;假日安排&#8221;的新闻占据了，假日议题绝对处于众声喧哗的核心地位。最新的消息是，一位假日改革<nobr id="key3" style="border-bottom: 1px dotted #6600ff; text-decoration: underline; color: #6600ff; background-color: transparent;" onclick="return kwc();" target="_blank" oncontextmenu="return false;" onmouseover="kwE(event,3, this);" onmouseout="kwL(event, this);" onmousemove="kwM(3);">专家</nobr>称，新的放假草案已经出炉，就是取消明年的&#8220;五一&#8221;长假，将清明、端午、中秋增加为法定假日，春节长假前挪一天将除夕包含在内。他斩钉截铁地说：五一长假取消已成定局，想不出什么反对的理由。(11月8日《新闻晨报》)</p>
<p style="text-indent: 2em;">显然，这不是官方的意见，而是专家一己的意见。因为我看到官方在接受媒体<nobr id="key1" style="border-bottom: 1px dotted #6600ff; text-decoration: underline; color: #6600ff; background-color: transparent;" onclick="return kwc();" target="_blank" oncontextmenu="return false;" onmouseover="kwE(event,1, this);" onmouseout="kwL(event, this);" onmousemove="kwM(1);">采访</nobr>时明确地说：休假制度究竟如何改革，要等社会反馈，征集意见后才能最后确定———如果&#8220;已成定局&#8221;的话，那还要设置&#8220;征集民意&#8221;<nobr id="key7" style="border-bottom: 1px dotted #6600ff; text-decoration: underline; color: #6600ff; background-color: transparent;" onclick="return kwc();" target="_blank" oncontextmenu="return false;" onmouseover="kwE(event,7, this);" onmouseout="kwL(event, this);" onmousemove="kwM(7);">程序</nobr>干什么，民意讨论还有什么用。&#8220;想不出什么反对的理由&#8221;更只是专家的独断，浏览一下新闻后的跟帖就知道公众有多少&#8220;反对的理由&#8221;，有人说是<nobr id="key0" style="border-bottom: 1px dotted #6600ff; text-decoration: underline; color: #6600ff; background-color: transparent;" onclick="return kwc();" target="_blank" oncontextmenu="return false;" onmouseover="kwE(event,0, this);" onmouseout="kwL(event, this);" onmousemove="kwM(0);">休闲</nobr>福利的缩水，有人说是只迎合了少数人的习惯，有人说是破坏了公众的习惯———不说那无数条各抒己见的理由，仅仅引起这么激烈的反对，就是一条非常充分的&#8220;反对理由&#8221;。毕竟假日安排的本质是为了人而不是其他，公众的感觉应是首先考虑的。</p>
<p style="text-indent: 2em;">尚未经过民意充分讨论和认同就急下&#8220;已成定局&#8221;的判断，这表现出某些专家的傲慢和自负：仿佛真理在握，仿佛自己作为精英的判断远远高于普通大众的理性，自己的理性能洞察和考虑到所有问题，一切尽在自己掌握之中，自己可以替大众代言帮大众<nobr id="key6" style="border-bottom: 1px dotted #6600ff; text-decoration: underline; color: #6600ff; background-color: transparent;" onclick="return kwc();" target="_blank" oncontextmenu="return false;" onmouseover="kwE(event,6, this);" onmouseout="kwL(event, this);" onmousemove="kwM(6);">决策</nobr>，个人认为合理、找不出反对理由的东西就可以成为&#8220;定局&#8221;了，&#8220;真理&#8221;不需要大众辩论，公众的再讨论是多余的。这些专家不知道，假期的<nobr id="key2" style="border-bottom: 1px dotted #6600ff; text-decoration: underline; color: #6600ff; background-color: transparent;" onclick="return kwc();" target="_blank" oncontextmenu="return false;" onmouseover="kwE(event,2, this);" onmouseout="kwL(event, this);" onmousemove="kwM(2);">设计</nobr>和安排很大程度上不是一个科学和真理问题，而是一种权利和利益问题，它关涉的是公众的休息权和休闲福利，关涉到公民的生活习惯和<nobr id="key5" style="border-bottom: 1px dotted #6600ff; text-decoration: underline; color: #6600ff; background-color: transparent;" onclick="return kwc();" target="_blank" oncontextmenu="return false;" onmouseover="kwE(event,5, this);" onmouseout="kwL(event, this);" onmousemove="kwM(5);">文化</nobr>认同———这一切只能由公众在充分讨论后经过某种程序自己决断，而不能由专家独断。</p>
<p style="text-indent: 2em;">更为关键的是，此次休假改革并非一次&#8220;人人可受益&#8221;的增量改革，而是一次&#8220;对既有休假时间重
新分配&#8221;的存量改革，既并没有增加多少新假期，而是对原有假期进行重新安排，传统节日放假了黄金周就会缩减，除夕放假了春节假期就是前移一天———这种重
新安排，肯定是有人得有人失的，不习惯过传统节日的会感觉自己的黄金周没了，习惯了五一黄金周的人肯定觉得受到了伤害。这种利益重新分配的改革，更需要经
过充分的民意讨论和公共博弈。</p>
<p style="text-indent: 2em;">在舆论压力和体制改革下，许多政府部门已经改变了&#8220;民意讨论仅仅只是走过场&#8221;的习惯，真正地
把吸纳和尊重民意当作开门立法的一个必要和实质的过程。可许多专家的习惯似乎还没有转过来，还是自负地把自己的意见凌驾于公众理性之上，还沉醉于&#8220;精英独
断&#8221;的传统思维中，习惯性地将民意程序当作一种形式———为什么不听听公众怎么想呢，为什么不让公共选择来决定&#8220;定局&#8221;呢？</p>
<p style="text-indent: 2em;">再多说一句。我还以为，这么重要的改革，这么大的变动，应该更早地让公众介入讨论，留给公众更多的讨论空间，不能突然由精英们拿出个方案让公众讨论。既然已经有了较<nobr id="key4" style="border-bottom: 1px dotted #6600ff; text-decoration: underline; color: #6600ff; background-color: transparent;" onclick="return kwc();" target="_blank" oncontextmenu="return false;" onmouseover="kwE(event,4, this);" onmouseout="kwL(event, this);" onmousemove="kwM(4);">系统</nobr>的&#8220;定论&#8221;，公众会觉得即使讨论也不会有多大用处，也不会被采纳导致什么改变，参与讨论的积极性也会随之大大降低。</p>
</div><img src ="http://www.cnitblog.com/schkui/aggbug/36067.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/schkui/" target="_blank">爱易</a> 2007-11-09 22:01 <a href="http://www.cnitblog.com/schkui/archive/2007/11/09/36067.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>好诗</title><link>http://www.cnitblog.com/schkui/archive/2007/09/30/34238.html</link><dc:creator>爱易</dc:creator><author>爱易</author><pubDate>Sun, 30 Sep 2007 03:13:00 GMT</pubDate><guid>http://www.cnitblog.com/schkui/archive/2007/09/30/34238.html</guid><wfw:comment>http://www.cnitblog.com/schkui/comments/34238.html</wfw:comment><comments>http://www.cnitblog.com/schkui/archive/2007/09/30/34238.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/schkui/comments/commentRss/34238.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/schkui/services/trackbacks/34238.html</trackback:ping><description><![CDATA[<p>竟日寻春不见春，芒鞋踏破岭头云。</p>
<p>归来手把梅花嗅，春在枝头已十分。</p>
<br><br><br>
<p>&nbsp;沿流不止问如何？真照无边说似他。</p>
<p>&nbsp;离相离名人不禀，吹毛用了急须磨。</p>
<br><br><br>&nbsp;穷诸玄辩，若一毫置于太虚。<br>&nbsp;竭世枢机，似一滴投于巨壑。<br><br><br><br>&nbsp;须知诸相皆非相，若住无余却有余。<br>&nbsp;言下忘言一时了，梦中说梦两重虚。<br>&nbsp;空花岂得兼求果，阳焰如何更觅鱼。<br>&nbsp;摄动是禅禅是动，不禅不动即如如。<br><br><br><br>君不见<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; 绝学无为闲道人，不除妄想不求真。<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;无明实性即佛性，幻化空身即法身。<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;法身觉了无一物，本源自性天真佛。<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;五阴浮云空去来，三毒水泡虚出没
<br>
<br><br>&nbsp;练得身形似鹤形，千株松下两函经。<br>&nbsp;我来问道无余话，云在青天水在瓶。<br><br>&nbsp;选得幽居惬野情，终年无送亦无迎。<br>&nbsp;有时直上孤峰顶，月下披云啸一声<br><br><br>    <img src ="http://www.cnitblog.com/schkui/aggbug/34238.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/schkui/" target="_blank">爱易</a> 2007-09-30 11:13 <a href="http://www.cnitblog.com/schkui/archive/2007/09/30/34238.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>南怀瑾老师一句经典的话</title><link>http://www.cnitblog.com/schkui/archive/2007/08/03/31205.html</link><dc:creator>爱易</dc:creator><author>爱易</author><pubDate>Fri, 03 Aug 2007 10:23:00 GMT</pubDate><guid>http://www.cnitblog.com/schkui/archive/2007/08/03/31205.html</guid><wfw:comment>http://www.cnitblog.com/schkui/comments/31205.html</wfw:comment><comments>http://www.cnitblog.com/schkui/archive/2007/08/03/31205.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cnitblog.com/schkui/comments/commentRss/31205.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/schkui/services/trackbacks/31205.html</trackback:ping><description><![CDATA[一个人的事业耍成功，天生要具备几个条件：「牛一样的健」，要做领导人，要能够比部下吃得苦，耐得劳，坐在办公室叫人家去做，那是不行的。「狗一样的贱」，只要成功，打恭作揖，陪笑脸，挨骂都没有关系。「猴子一样的精灵」，「狮子一样的勇猛」，「狐狸一样的变化」，「魔鬼一样的迷人」
<br><img src ="http://www.cnitblog.com/schkui/aggbug/31205.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/schkui/" target="_blank">爱易</a> 2007-08-03 18:23 <a href="http://www.cnitblog.com/schkui/archive/2007/08/03/31205.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title> 转， 基于英文单词的快速HASH索引算法。</title><link>http://www.cnitblog.com/schkui/archive/2007/07/02/29322.html</link><dc:creator>爱易</dc:creator><author>爱易</author><pubDate>Mon, 02 Jul 2007 01:32:00 GMT</pubDate><guid>http://www.cnitblog.com/schkui/archive/2007/07/02/29322.html</guid><wfw:comment>http://www.cnitblog.com/schkui/comments/29322.html</wfw:comment><comments>http://www.cnitblog.com/schkui/archive/2007/07/02/29322.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/schkui/comments/commentRss/29322.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/schkui/services/trackbacks/29322.html</trackback:ping><description><![CDATA[<br>
<div class="postText">
<div class="Section1">
<p>因为有项目需要，要做一个类似ispell
的软件，其中会产生大量的对单词的查找操作，于是经过一翻研究，得出以下HASH算法，经过验证比一般的查表的FNV
HASH算法产生的分布曲线基本没什么两样，并且在大部分的不同字典下，本算法要比查表的FNV
HASH算法表现出速度更快，分布更均匀。但是因为是实验结果，所以暂时还没得出有效的数学推论，但是从大量的不同的字典测试数据来看，此算法确实效率不
错。<br><br>由于以前没有涉及过相关的纯算法的设计，所以刚刚开始的时候，打算随便选用一种HASH，比如说用%除大质数，然后借此搭建一个比较强壮的测试环境，然后打算根据测试结果来改进HASH算法的模型。<br><br>最开始，我的HASH函数是这样的：<br>unsigned int hash_func(char *str, int len)<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;register unsigned int sum = 0;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;register char *p = str;<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;while(p - str &lt; len)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sum += *(p++);<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;sum % MAX_PRIME_LESS_THAN_HASH_LEN;<br>}<br>非常简单，但是这是绝对不可取的，通过这个函数，我选取了一个23w词的字典做为测试，当HASH SIZE=1024的时候，得到了以下的图象：<br></p>
<p><img alt="" src="http://tarkey.kmip.net/image001.gif" align="bottom" border="0" hspace="0"><br>看得出震荡幅度相当大，那么如何来改进呢？首先想到可能产生的冲突的是这种情况：abcd和acbd，对于这两种单词来说，如果用上面的HASH函数，就一定会发生碰撞，为什么呢？因为每个字符少了关于它自己的位置信息，于是第一次改进版本的HASH函数就给每个字符加上了它的位置信息，将上面所描述的函数改进为：</p>
<p>unsigned int hash_func(char *str, int len)<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;register unsigned int sum = 0;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;register char *p = str;<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;while(p - str &lt; len)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sum += *(p++) * (p&#8211;str);<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;sum % MAX_PRIME_LESS_THAN_HASH_LEN;<br>} <br>得到以下图象：</p>
<p>&#160;</p>
<p><img alt="" src="http://tarkey.kmip.net/image002.gif" align="bottom" border="0" hspace="0"><br>某种程度上来说，比不带位置信息产生的分布图要好多了，但是仍然非常的不均匀。那么接来分析产生分布不均匀的原因，因为是用的乘法，所以仍然太过于依赖字母产生的结果了。于是改用XOR操作，选用以下函数：</p>
<p>unsigned int hash_func(char *str, int len)<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;register unsigned int sum = 0;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;register char *p = str;<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;while(p - str &lt; len)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sum += (*(p++) * (p&#8211;str)) ^ sum;<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;sum % MAX_PRIME_LESS_THAN_HASH_LEN;<br>} <br>得到以下图象：</p>
<p>&nbsp;<img alt="" src="http://tarkey.kmip.net/image003.gif" align="bottom" border="0" hspace="0"></p>
<p>&#160;</p>
<p>上图虽然震荡幅度比较，不过做出来的regression
line明显比上两张图片平得多了。但是结果仍然非常不好，从800到100的range太大。原因还是因为数据分布得不够均匀，于是思考单独的用加法来
算是不是不太好，根据其他查表类HASH算法的过程，发现其大多都用了高低位来组合成最后的结果，于是我也采用了他们的方法：</p>
<p>unsigned int hash_func(char *str, int len)<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;register unsigned int sum = 0; <br>&nbsp;&nbsp;&nbsp;&nbsp; register unsigned int h = 0;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;register char *p =&nbsp;str;<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;while(p - s &lt; len) <br>&nbsp;&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;register unsigned short a = *(p++);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; sum ^=&nbsp; a * (p - str); <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; h ^= a&nbsp;/ (p - str);<br>&nbsp;&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;((sum &lt;&lt; 16) | h) % MAX_PRIME_LESS_THAN_HASH_LEN;<br>}</p>
<p>得到最终近似完美的图象：</p>
<p>&#160;</p>
<p>&nbsp;<img alt="" src="http://tarkey.kmip.net/image004.gif" align="bottom" border="0" hspace="0"></p>
<p>最后得出结论，不用查表的方法，而通过字符串本身的位置对字符本身进行修正的方法也能得到结果相当满意的HASH函数，之后换了几个大小不同的字典进行测试，得出的图象都大致和上图一致，非常令人满意。对于这个项目，包括如何检查单词错误，和自动修正等等相关的内容，会随着项目的完成一一在整理成文档，希望大家支持。</p>
</div>
<br><br>
<p id="TBPingURL">Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=167909</p>
</div>
<br><br><img src ="http://www.cnitblog.com/schkui/aggbug/29322.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/schkui/" target="_blank">爱易</a> 2007-07-02 09:32 <a href="http://www.cnitblog.com/schkui/archive/2007/07/02/29322.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title> 若干经典的字符串哈希函数</title><link>http://www.cnitblog.com/schkui/archive/2007/07/02/29320.html</link><dc:creator>爱易</dc:creator><author>爱易</author><pubDate>Mon, 02 Jul 2007 01:17:00 GMT</pubDate><guid>http://www.cnitblog.com/schkui/archive/2007/07/02/29320.html</guid><wfw:comment>http://www.cnitblog.com/schkui/comments/29320.html</wfw:comment><comments>http://www.cnitblog.com/schkui/archive/2007/07/02/29320.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/schkui/comments/commentRss/29320.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/schkui/services/trackbacks/29320.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: // &nbsp;RS&nbsp;Hash&nbsp;Function  unsigned&nbsp; int &nbsp;RSHash( char &nbsp; * str)  {&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;unsigned&nbsp; int &nbsp;b&nbsp; = &nbsp; 378551 ;&nbsp;&nbsp...&nbsp;&nbsp;<a href='http://www.cnitblog.com/schkui/archive/2007/07/02/29320.html'>阅读全文</a><img src ="http://www.cnitblog.com/schkui/aggbug/29320.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/schkui/" target="_blank">爱易</a> 2007-07-02 09:17 <a href="http://www.cnitblog.com/schkui/archive/2007/07/02/29320.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title> C语言中用bsearch()实现查找操作</title><link>http://www.cnitblog.com/schkui/archive/2007/06/19/28742.html</link><dc:creator>爱易</dc:creator><author>爱易</author><pubDate>Tue, 19 Jun 2007 03:18:00 GMT</pubDate><guid>http://www.cnitblog.com/schkui/archive/2007/06/19/28742.html</guid><wfw:comment>http://www.cnitblog.com/schkui/comments/28742.html</wfw:comment><comments>http://www.cnitblog.com/schkui/archive/2007/06/19/28742.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/schkui/comments/commentRss/28742.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/schkui/services/trackbacks/28742.html</trackback:ping><description><![CDATA[C语言中可以用bsearch()实现二分查找。同qsort()一样，bsearch()也包含在&lt;stdlib.h&gt;库中，且同样要自定义比较子函数。其原型如下：<br>
<p style="margin: 5px; line-height: 150%;"><code>void *bsearch(const void *key, const void *base, size_t nmem, size_t size, int (*comp)(const void *, const void *));</code></p>
<p style="margin: 5px; line-height: 150%;"><br><code></code></p>
<p>key指向所要查找的元素，base指向进行查找的数组，nmem为查找长度，一般为数组长度，size为每个元素所占的字节数，一般用sizeof(...)表示，comp指向比较子函数，它定义比较的规则。需要注意的是，<font color="#0000ff">数据必须是经过预先排序的，而排序的规则要和comp所指向比较子函数的规则相同。</font>如果查找成功则返回数组中匹配元素的地址，反之则返回空。对于有多于一个的元素匹配成功的情况，bsearch()未定义返回哪一个。</p>
<p>例：</p>
<table style="border-collapse: collapse;" bgcolor="#f1f1f1" border="1" bordercolor="#999999" cellpadding="0" cellspacing="0" width="95%">
    <tbody>
        <tr>
            <td>
            <p style="margin: 5px; line-height: 150%;"><code>#include &lt;stdio.h&gt;<br>#include &lt;stdlib.h&gt;<br><br>#define NUM 8<br><br>int compare(const void *p, const void *q)<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;return (*(int *)p - *(int *)q);<br>}<br><br>int main(int argc, char *argv[])<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;int array[NUM] = {9, 2, 7, 11, 3, 87, 34, 6};<br>&nbsp;&nbsp;&nbsp;&nbsp;int key = 3;<br>&nbsp;&nbsp;&nbsp;&nbsp;int *p;<br><br>&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;qsort(array, NUM, sizeof(int), compare);<br>&nbsp;&nbsp;&nbsp;&nbsp;p = (int *)bsearch(&amp;key, array, NUM, sizeof(int), compare);<br><br>&nbsp;&nbsp;&nbsp;&nbsp;(p == NULL) ? puts("not found") : puts("found");<br><br>&nbsp;&nbsp;&nbsp;&nbsp;return 0;<br>}</code></p>
            </td>
        </tr>
    </tbody>
</table>
<p>结果如下：</p>
<p style="margin: 5px; line-height: 150%;">found</p>
<br>
<br><img src ="http://www.cnitblog.com/schkui/aggbug/28742.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/schkui/" target="_blank">爱易</a> 2007-06-19 11:18 <a href="http://www.cnitblog.com/schkui/archive/2007/06/19/28742.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>用Diff和Patch维护源码</title><link>http://www.cnitblog.com/schkui/archive/2007/06/14/28457.html</link><dc:creator>爱易</dc:creator><author>爱易</author><pubDate>Thu, 14 Jun 2007 09:25:00 GMT</pubDate><guid>http://www.cnitblog.com/schkui/archive/2007/06/14/28457.html</guid><wfw:comment>http://www.cnitblog.com/schkui/comments/28457.html</wfw:comment><comments>http://www.cnitblog.com/schkui/archive/2007/06/14/28457.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/schkui/comments/commentRss/28457.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/schkui/services/trackbacks/28457.html</trackback:ping><description><![CDATA[在linux系统下，维护源码可以使用很多方法，简单的版本维护工作并没有必要使用复杂的CVS等专门的版本维护工具，linux标配中的diff和patch工具就可以完成代码的简单备份和升级工作。<br>&nbsp;&nbsp;&nbsp; diff以"行"为单位比较两个文件（也可以是目录较），并将不同之处以某种格式输出到指定输出上；patch可以读入这种输出，并按照一定指令使源文件（目录）按照目标文件（目录）更新。Linux内核源码就是按照这种方式保持更新的，我们在<a href="http://www.kernel.org/" target="_blank"><font color="#000000">www.kernel.org</font></a> 上可以下载到最新内核的patch文件的bzip2包。本文以介绍<font size="2">diff</font>和patch工具的使用。<br><br>1．<font color="#ff0000"><font color="#000000" size="2">diff</font><br></font><font size="2">diff</font>既
可以用来比较两个文件，也可以用来比较两个目录中每个文件。使用-r（--recursive）参数时还可以在目录中嵌套比较。比较目录时除比较同名文件
外，对不同名的文件当成新文件处理。对于比较C程序文件，diff还提供了专门的参数（-p，--show-c-function）来标识不同之处所在的
函数名。<br><br><font size="2">&nbsp;&nbsp;&nbsp; diff</font>的输出格式有三种：列举方式、命令模式和上下文模式，其中命令模式有分为两种：ed命令格式和RCS（Revision Control System，版本控制系统）命令格式，上下文模式也按格式分为老版和新版两种。<br>&nbsp;&nbsp;&nbsp; 新版格式较之老版要紧凑一些，Linux内核源码的升级就是按照新版上下文格式用diff组织的，比如patch-2.6.16中所用的具体命令为：<br><br><font color="#ff0000" size="-0"><strong> diff</strong> </font> -Nur linux-2.6.15 linux<br><br>参数N表示如果某个文件仅在一个目录中出现，则假定其在另一个目录中为空文件；u表示unified格式，r表示在目录中嵌套使用，linux-2.6.15显然是老核的目录名，而linux则为新核的目录名。<br><br>2．patch<br><br>尽管并没有指定patch和diff的关系，但通常patch都使用<font size="2">diff</font>的结果来完成打补丁的工作，这和patch本身支持多种<font size="2">diff</font>输出文件格式有很大关系。patch通过读入patch文件（可以从标准输入），对目标文件进行修改。通常先用<font size="2">diff</font>命令比较新老版本，patch命令文件则采用<font size="2">diff</font>的输出文件，从而保持原版本与新版本一致。<br><br>patch的标准格式为<br><br>patch [options] [originalfile] [patchfile]<br><br>如
果patchfile为空则从标准输入读取patchfile内容；如果originalfile也为空，则从patchfile中读取需要打补丁的文件
名。因此，如果需要修改的是目录，一般都必须在patchfile中记录目录下的各个文件名。绝大多数情况下，patch都用以下这种简单的方式使用：<br><br>patch -p[num] &lt;patchfile<br><br>patch命令可以忽略文件中的冗余信息，从中取出<font size="2">diff</font>的格式以及所需要patch的文件名，文件名按照<font size="2">diff</font>参数中的"源文件"、"目标文件"以及冗余信息中的"Index："行中所指定的文件的顺序来决定。也就是说，对于如下<font size="2">diff</font>结果文件（Linux内核源码2.6.16升级包，部分）：<br>
<div style="margin: 5px 20px 20px;">
<div class="smallfont" style="margin-bottom: 2px;">引用:</div>
<table border="0" cellpadding="4" cellspacing="0" width="100%">
    <tbody>
        <tr>
            <td class="alt2" style="border: 1px inset ;"><br><font size="2">diff</font><strong>  -Nur linux-2.6.15/Makefile linux/Makefile<br>--- linux-2.6.15/Makefile Thu Nov 22 17:22:58 2006<br>+++ linux/Makefile Sat Nov 24 16:21:53 2006<br>@@ -1,7 +1,7 @@<br>VERSION = 2<br>PATCHLEVEL = 6<br>-SUBLEVEL = 15<br>-EXTRAVERSION =-ubuntu<br>+SUBLEVEL = 16<br>+EXTRAVERSION =<br><br>KERNELRELEASE=$(VERSION).$(PATCHLEVEL).$(SUBLEVEL)$(EXTRAVERSION)<br>&#8230;&#8230;</strong> <br></td>
        </tr>
    </tbody>
</table>
</div>
<br>patch
首先尝试当前目录（或者-d参数指定的目录）下的linux-2.6.15/Makefile文件是否存在，如果不存在则试图对
linux/Makefile文件操作，仅当两者都不存在时（或者设置了POSIXLY_CORRECT环境变量）才会读取Index:的内容（此文件中
没有标识）。<br><br>前面提到的-p参数决定了是否使用读出的源文件名的前缀目录信息，不提供-p参数，则忽略所有目录信息，-p0（或者-p
0）表示使用全部的路径信息，-p1将忽略第一个"/"以前的目录，依此类推。如/usr/src/linux-2.6.15/Makefile这样的文
件名，在提供-p3参数时将使用linux-2.6.15/Makefile作为所要patch的文件。<br><br>对于刚才举的Linux内核源码
2.6.16升级包的例子，假定源码目录位于/usr/src/linux中，则在当前目录为/usr/src时使用"patch -p0
&lt;patch-2.6.16"可以工作，在当前目录为/usr/src/linux时，"patch
-p1&lt;patch-2.4.16"也可以正常工作。<br><br>patch可以直接操作上下文格式以及混合ed格式的<font size="2">diff</font>输出文件，而将ed格式文件通过管道提交给ed程序操作。<br><br>3．配合使用<font size="2">diff</font>和patch升级源码<br><br>在此仅举一个简单的例子来说明如何用<font size="2">diff/</font>patch工具维护源码升级。<br><br>假设program-1.0目录中为旧版，现开发完成的新版位于program-2.0目录中，将两个目录置于同一父目录下，然后在该父目录上执行：<br><br><font color="#ff0000" size="-0"><strong> diff</strong> </font> -Nur program-1.0 program-2.0 &gt;program-2.0.patch<br><br>将生成一个program-2.0.patch的补丁文件，发布该补丁文件（可以先压缩成bzip2格式）。<br><br>假设拿到的是program-2.0.patch.bz2文件，则在program-1.0目录同级执行：<br><br>bzcat program-2.0.patch.bz2 | patch -p0<br><br>如此即完成了从1.0到2.0的升级。<br><br>如果希望恢复到原版本，可以使用-R（--reverse）参数。
<br><img src ="http://www.cnitblog.com/schkui/aggbug/28457.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/schkui/" target="_blank">爱易</a> 2007-06-14 17:25 <a href="http://www.cnitblog.com/schkui/archive/2007/06/14/28457.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>股市楼市你们都赚够了吗?-来看看这篇震撼性的贴子</title><link>http://www.cnitblog.com/schkui/archive/2007/05/30/27823.html</link><dc:creator>爱易</dc:creator><author>爱易</author><pubDate>Wed, 30 May 2007 14:04:00 GMT</pubDate><guid>http://www.cnitblog.com/schkui/archive/2007/05/30/27823.html</guid><wfw:comment>http://www.cnitblog.com/schkui/comments/27823.html</wfw:comment><comments>http://www.cnitblog.com/schkui/archive/2007/05/30/27823.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cnitblog.com/schkui/comments/commentRss/27823.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/schkui/services/trackbacks/27823.html</trackback:ping><description><![CDATA[股市你挣了钱，楼市你挣了钱。请先不要乐，你只是在为自己挖坑。说白了，你就是你的掘墓人。&nbsp;有钱，大家谁不盼望，但，钱是相对的，也是最靠不住的。东南
亚金融危机时，有多少人哭着喊着卖出本币，兑换美元。所以你今天挣了钱，你只不过是在享受摇头丸带来的快感。还是想想如何配合国家，做一些保住胜利果实的
事情吧.美金融战争早已开打，中国处境艰难！&nbsp;现在很多国人都很关心人民币升值这个话题，但又不了解美国迫使人民币升值的真正意图何在，现在鄙人就此浅薄
的发表一下我的个人看法！&nbsp;<br>　　相信大家对80年代的&#8220;日本经济衰退&#8221;和90年代的&#8220;亚洲金融风暴&#8221;及&#8220;香港的香港金融保卫战&#8221;吧！也许有人会说那是国际投机集团&#8220;美国索罗斯财团&#8221;搞的，但是，你就没有想过它背后难道就没有美国政府的支持了吗？下面，我仔细分析一下这些事件的前因后果你就会明白了。<br>
从1980开始的，特别在1990年至1995年，第一名的美国和第二名的日本之间的GDP差距是多少？日本GDP超过美国GDP的一半！这也是目前为
止唯一一次其它国家和美国的经济差距缩小到一半的程度。日本人在欢呼：只要超过美国的GDP，日本就可以恢复&#8220;正常国家&#8221;了！美国人没有吭声。&nbsp;<br>
按理说，日本还是美国的盟国，其经济也是美国扶持起来的，美国也没有分裂日本的必要（要分裂，二战时就分裂了，也不用等到80-90年代）。美国也不可
能对盟国日本使用&#8220;颠覆性煽动&#8221;，眼看着美国是阻挡不了日本经济的发展前景的了！世界各国都在兴奋的期待着日本GDP超过美国GDP的那个&#8220;历史性时
刻&#8221;！日本企业更加疯狂，美国经济的象征——洛克菲勒广场被日本人买下了！美国的精神象征——好莱坞被日本人买了！美国人民的心情一下子掉到了谷底。&#8220;世
界第一&#8221;就快保不住了！美国人民的荣耀感在急剧下滑，民间开始蔓延仇日情绪。<br>　　1980年，日本的GDP就快到美国的一半了。有一件事情在
1985年发生了，1985年美国拉拢其它五国（7国集团）逼迫日本签署了。以&#8220;行政手段&#8221;迫使日元升值。其实的一个中心思想就是日本央行不得&#8220;过度&#8221;干
预外汇市场。日本当时手头有充足的美元外汇储备，如果日本央行干预，日元升不了值。可惜呀，日本是被去了势的太监。美国驻军、政治渗透、连宪法都是美国人
帮它度身定做的，想不签广场协议都不可能。日本最后的结局大家也知道了。1985年9月的广场协议至1988年初.美国要求日元升值。根据协议推高日元，
日元兑美元的汇率从协议前的1美元兑240日元上升到1986年5月时的1美元兑160日元。由于美国里根政府坚持认为日元升值仍不到位，通过口头干预等
形式继续推高日元。这样，到1988年年初，日元兑美元的汇率进一步上升到1美元兑120日元,正好比广场协议之前的汇率上升了一倍。<br>　　美国人
满足了吗？没有。接着看下去，从1993年2月至1995年4月，当时克林顿政府的财政部长贝茨明确表示，为了纠正日美贸易的不均衡，需要有20%左右的
日元升值，当时的日元汇率大致在1美元兑120日元左右，所以，根据美国政府的诱导目标，日元行情很快上升到1美元兑100日元。以后，由于克林顿政府对
以汽车摩擦为核心的日美经济关系采取比较严厉的态度。到了1995年4月，日元的汇率急升至1美元兑79日元，创下历史最高记录。&nbsp;<br>　　日元升值
的后果是什么？洛克菲勒广场重新回到了美国人手中，通用汽车在这个广场的一卖一买中净赚4亿美元！日资在艰难度日中大规模亏本退出美国。美国人民胜利了！
成功的击退了日本的经济进攻！我们可以从事例中看看1995年之后，日本和美国的GDP之比重新拉开了距离，而且越来越大！&nbsp;<br>　　可能有些网友还是没有明白，日元升值怎么啦？跟我们的谈论有什么关系？日元升值，就是美国对日本的一次经济阻击战！成功的把日本20多年的发展财富大转移到了美国去了。&nbsp;<br>下面我给个例子大家就清楚了。&nbsp;<br>
假设我是美国财团，我当然知道1985会发生什么，假设我在1983年吧，我用100亿美元兑换成24000亿日元，进入日本市场，购买日本股票和房地
产，日本经济的蓬勃导致股市和房地产发疯一样的上涨，1985年广场协议签订，日元开始升值，到1988年初，股市和房地产假设我已经赚到了一倍（5年才
翻一倍是最低假设了），那就是48000亿日元。&nbsp;<br>　　这时，日元升值到1:120。我把日本的房地产和股票在一年中抛售完，然后兑换回美元，那
么，就是400亿美元！在5年时间中，我净赚300亿美元！（还是最低假设）。那么日本呢？突然离开的巨额外资就导致了日本经济的崩溃！经济学用词叫&#8220;泡
沫经济破灭&#8221;。这就是日本常说的：&#8220;失去的十年&#8221;。而我连本带利的400亿美元回到美国，你想一想，美国经济能不旺盛吗？！！日本&#8220;失去的十年&#8221;，却正是
美国&#8220;兴旺的十年&#8221;！看看我的上表就知道了。<br>我说的只是美国财团中的一个，其它财团呢？嘿嘿，而且我的假设还只是到1988年，如果是到1995年，日元升值到1:79，你我能想象美国在这场经济战争的胜利中，到底从日本刮走了多少财富？&nbsp;<br>　　美国赚够了，日元现在又重新回到了1:140的位置上，美元的坚挺依然和30年前一样！美元暂时性的贬值，并没有损害到美元的国际地位。这场美日的经济战争，以美国完胜而告终！！&nbsp;<br>
美国人玩上瘾了。1998年，同样的手法在东南亚四小龙四小虎身上又来了一次，这就是亚洲金融风暴！唯一不同的，这次不需要广场协议了。因为亚洲这些小
虎小龙的外汇储备们直接阻击就可以大获全胜！但是，还是没有战胜财大气粗、军事强盛、奉行霸权主义的美国，结局大家也看到了，东南亚货币在先升后跌中，经
济发展的成果被美国抢掠一空！！&nbsp;<br>　　唯一市场硬挺住了索罗斯的进攻而没有经济崩溃的就只有回归后的香港，保住了香港几十年的发展果实。当时索罗
斯发动世界舆论（包括香港舆论），大肆攻击香港政府（中国政府）&#8220;行政干预市场&#8221;，违反市场经济规则、没有民主自由，要是当时中国屈服于世界的舆论压力而
不运用&#8220;宏观调控&#8221;进行入市干预，那将酿成大祸，又不知道要有多少国人向当年的日本那样因破产而跳楼自杀了！&nbsp;<br>　　当时的曾荫权后来说过：&#8220;决定
政府入市干预的前一晚，我坐在床头哭了，不是为我自己，而是怕这个决定如果错误了，害了香港，我怎么向中央政府向市民们交代。&#8221;大家现在知道为什么美国一
再要求他国&#8220;新闻自由&#8221;、&#8220;市场经济&#8221;、&#8220;民主人权&#8221;是建立在自己利益的基础上了吧，知道我国的&#8220;宏观调控&#8221;政策的正确性和优势所在了吧。&nbsp;<br>
美国停手了吗？没有，因为我过综合势力的增长国力的增强威胁到了美国的根本利益和&#8220;世界第一&#8221;的权威，近来&#8220;中国公开支持因儿子丑闻陷入困境的安南，指责
美国故意借题发挥进行人生攻击。&#8221;就是最好的证明。所以美国心里就不痛快了，就要整人了，现在强迫人民币升值就是消弱中国的第一步，各位明白了吗？知道为
什么中央政府突然狂力打压上海和北京的房地产市场？知道为什么中国股市那么惨了吗？央行行长周小川在3月还是4月曾说了一件事情：&#8220;有一个40亿美元的外
资在上海炒房地产，已经退出中国了这样的外资，不要也罢！&#8221;明白了吗？中国股市是一个弱势股市，很容易被美国财团利用。&nbsp;<br><br>中央不可能放松对股市的控制，否则中国经济将会在外资的攻击中崩溃！前段时间，也就是今年的12月初又有一个240亿美元的外资财团撤离中国上海。现在，大家对国家的宏观调控的优势有所理解了吧，知道了国家出台那么多针对房地产的政策是多么的明智和及时了吧！&nbsp;<br>　　现在各位知道为什么中国要实行国家外汇管制、汇率控制、打压房地产、控制股市、知道为什么中国要保持巨额外汇储备，为什么最近央行又出台了新的房地产贷款规定，为什么中国政府一直要求进出口贸易平衡，为什么要扩展东南亚贸易市场和欧盟市场，为什么要加WTO了。&nbsp;<br>
其实中美之间的经济战争，早就已经开场了，而且来来回回过了几百招了。我们大多数网友还懵懵懂懂的只盯着台海，盯着中亚美军又多了一个军事基地。要知道
经济崩溃的灾难远比一场军事战争的后果更严重。军事战争不外乎两种：即&#8220;侵略战争&#8221;和&#8220;卫国战争&#8221;。而军事上的&#8220;侵略战争&#8221;的最终目的就是打垮对方的一切
（军事力量和经济实力）达到占领对方领土，进行资源掠夺和控制奴役和剥削对方的国民。&nbsp;<br>　　这样的事情中国历史上没有少发生，这里我就不例举事例
了。而如今的美国就是以军事上的侵略战争为手段，达到奴役和剥削对方为目的的真实意图（对实力弱小的国家而言），看看如今的&#8220;伊拉克&#8221;就明白了，美国实际
上是侵略占领了伊拉克，控制了伊拉克的石油，以此来满足美国国内巨大的需求量；而对实力强的原苏联（原苏联拥有制对方死地的核力量），美国就只有发动经济
进攻来拖垮他们，苏联的分裂就是最好的例子。&nbsp;<br>　　也许有的人要说，那是冷战时期的军备竞赛和当时苏联国内政策导致了原苏联因经济崩溃而解体的。
但是，你有没有想过，进行军备竞赛是以经济实力为基础的。当时的美国经济实力比苏联强，所以，美国胜利了而苏联解体了。现在轮到我们了，我国现在的经济和
军事实力都没有冷战时期的苏联强大，相同点是我国同样也拥有毁灭美国的核武器，只是数量少了一点而已。那在这一轮中，就要看我国领导人的智慧了，建立合理
的政策来规避风险，保护自己是当务之急（可喜的是，现在我国已经在这样做了）。可是，美国也没有闲着，而且，作为经济进攻的第一步他们已经早早的迈出了，
向美国&#8220;凯雷财团&#8221;这样的世界性投机财团收购中国的&#8220;徐州重工&#8221;这样的事情已经发生了很多了，在这里我就不一一例举了。他们的目的很明确，控制中国的核心
技术，进行世界性的技术垄断。同时乘汇率没有变化之前以美元套取人民币，迫使中国央行大量发行人民币以应付大量的货币兑换需求，为拖垮中国经济打下伏笔。
这还是明的进入，暗地里的就更无法统计了。&nbsp;<br>　　说到这里，也许有很多人不明白大量美元兑换人民币的行为与拖垮中国经济有什么关系。在这里，我解释一下：在正常情况下，在没有大量美国财团恶意涌入中国用大量美元换取人民币之前，我国的经济形式是相对稳定的，我国发行的人民币数量应等于我国人民积累的财富数量。&nbsp;<br>而大量的恶意的国外财团的资金涌入中国，需要兑换大量的人民币，使得国内人民币的流通数量大大超过我国人民所积累的财富数量。而这些人民币全部投入少数领域，表面上是拉动了我国的经济，使国内的消费量变大，实际上也使得资产价格大幅上升。&nbsp;<br>据统计，目前在国际上金融市场上的投资有136万亿美元。其中只要有1%即1.36万亿美元涌入中国进行投机经营，按现在的汇率，我国就要发行10.6万亿元人民币。&nbsp;<br>如
果人民币升值15%，他们再用手头的人民币套取美元，他们将换回1.56万亿美元，而中国外汇储备是0.2万亿美元，也就是说一进一出，这些投资资金多了
2000亿美元，而中国这么多年充当血汗工厂所挣来存在国库中的2000亿美元一分不剩，留给中国的是当初为应付这1.36万亿美元而发行的10.6万亿
的人民币。2006年中国GDP是20万亿，物品是这么多，而钱却多了10.6万亿，那就意味着所有商品都要打折到原来的2/3。恐慌情绪将在社会上蔓
延，炒房者为了变现到时可能会出七折、六折、甚至三折出手手中的房子。大批市民破产，牵涉到银行破产，整个国家经济崩溃，我们手中的财富一文不值了。&nbsp;<br>
到时国人乃至世界将会对中国失去信心，不再储备和使用甚至抛售手中储备的人民币，使中国的外贸活动受挫，最终导致中国国内的通货膨胀，对外导致信誉危机
从而导致金融危机。就向40年代的通货膨胀那样一盒火柴要卖几百块。如果我国政府在这次的人民币汇率这件事上决策错误，那么到时中国近30年来改革开放的
经济成果就可能落入他人之手。&nbsp;最近，国内的经济形式来看，客观的讲，形式是不容乐观的。按理说，人民币升值了，也就是说钱值钱了，应该是以前1块钱的东
西现在只要9毛甚至是8毛就可以买到了；可是现在的国内形式，除了工资没有涨外其余的都涨了。&nbsp;<br>。。。。。。。。。。&nbsp;<br><br>新华网报
道说：自2006年8月份开始，北京市场食用油价格震荡上扬。进入11月份，米价、面价、菜价及副食价格均有不同程度的攀升。报道认为，是受国际大豆市场
价格上扬的影响，导致食用油价格上升。但是，米面跟风而涨，25公斤装的富强粉涨幅达12%以上，500克大米上涨了6分钱。据了解，在上海、广州、深圳
粮油等生活必需品已是涨升一遍，并持续一个多月，其中面粉、食用油的最高涨幅分别已达一成和二成。&nbsp;<br>　　农副产品涨价说明了我国经济在发展和提高。同时，以农副产品的涨价来增加农民的收入，维护社会的稳定，给国家的发展提供了一个良好的国内环境，对国家的发展是有好处的，因为中国农民的数量毕竟占了总人口比例的70%以上嘛。&nbsp;<br>　　但是，中国的这四大城市生活必需品的涨价绝非偶然。持续7个多月的宏观调控并没有稳定房价，相反，导致房价的节节攀升。早有经济学家警告说，地产泡沫将导致通货膨胀，通货膨胀将引发经济危机。然而，这种声音太微弱，现如今的种种迹象表明，通货膨胀正在步步逼近我们。&nbsp;<br>
对比1996年的东京，1997年的香港，北京、上海、广州，深圳这四大房价居高不下的城市，地产泡沫破灭前的迹象已经显现。试图为了一已私利而继续哄
抬房价的地方政府，将迎来经济规律的无情惩罚。因为这一轮的通货膨胀是在毫无防备的情况下发出的，可能还不被官方承认，但它实实在在已经来临了。这种处在
萌芽状态的通货膨胀选择了一个导致经济危机的最好时机——2007年的元旦和春节前。因此，危害性和破坏性更大。如果有一天方便面也开始涨价时，这场经济
危机已无法遏制了。&nbsp;<br>　　柴米油盐、水电油汽的轮番涨价和全面涨价，对中国的富豪阶层的正常生活不构成任何影响，但是千千万万的普通市民将要付出
更多的财富以维持和原来一样的生活水准，也就是说，中国的高房价，间接地是由普通城市居民来买单，日本的国民是花了15年的时间，香港的市民就是花了14
年。那么，中国的城市居民要花多少年呢？&nbsp;<br>应对即将到来的通货膨胀，国家自然有金融的手段。可是，中国的人民币在国际市场受到美元的攻击，一年之
内升值达5%，而且，还有继续升值的空间。中国的贸易顺差将在人民币的升值中逐渐缩小，国际市场的风险已在加剧。而国内市场生活必需品的全面涨价，将直接
影响消费。最后，逼迫央行加大人民币的发行量，中国的通货膨胀就此爆发。这种危机也可能近在眼前。&nbsp;<br>　　人民币目前在国际货币市场的遭遇是中国汇
制改革以来没有过的事，我们目前已经知道美国要干什么？但是，还由不得我们把国际市场的问题解决好，人民币在国内又是这样的尴尬。在不动产涨价的带动下，
生活必需品全面涨价，形成了国际与国内两种迥然不同的市场。从某种意义上来说，这样的市场将走向资本的过度投机。说白了，对内将加剧中国社会的贫富分化，
对外给资本大鳄可乘之机。&nbsp;<br>　　如果更深层次的分析，人民币似乎是遭遇来自不同方面的围攻，试图将中国30来年经济发展的成果逐步蚕食。接下来，
生活必需品的涨幅将进一步加剧，市民的购买力进一步下降，国内市场进一步缩小，中国的产能将进一步过剩，最后，必然导致大量的中小企业破产，经济危机说来
就来。&nbsp;<br>　　真正要化解这场危机，对目前的经济局势来说，进一步加大宏观调控的力度，理顺房地产市场的管理体制，采取有力措施，坚决把房价降下
来，让城市居民在房价下降的过程中感受中国经济的力量，从而增强对未来的信心。也许，这是目前最应该做的一件事，尽管已经做了一些表面工作。&nbsp;<br>
我们要清醒地看到高房价的危害性，尤其是对中国社会的破坏更是史无前例。也许现在还不必过于悲观，一切都应该有转机。谁都知道中国经济发生了重大问题，
就象一辆出现明显故障的高速列车，轰轰隆隆往前飞奔，不知何时将会出轨或者颠覆。有经济学家预言，2008年中国经济将会硬着陆，届时，社会动荡不可避
免。&nbsp;<br>　　那么，出了这么大的问题，而问题的症结究竟何在呢？&nbsp;<br><br>发改委专家马晓河指出：我国正在由某一方面的过剩向全面过剩演
变。由于产能过剩，内需不旺，中国产品被迫出口，又导致了大量的贸易摩擦，过分依赖国际市场的风险越来越大。马晓河举例说：中国人向世界上的每一个人提供
了一双鞋子，可见鞋的产能过剩多少。2006年11月23日，央行副行长苏宁也表示，中国最终消费占GDP比重已从上世纪80年代超过62%下降到
2005的52.1%，居民消费率也从1991年的48.8%下降到2005年的38.2%，均达到历史最低水平。而在中国居民消费率持续下降的同时，世
界平均消费率达78%—79%，比较起来差别之大就如天上和地下。&nbsp;<br>　　上面两位，一位是宏观经济的专家，一位是金融权威，但指出的是一个共同问题，就是因为内需不旺而导致产能过剩，一旦国际市场出现大的风险，中国将有成千上万工业企业面临生存的危险。&nbsp;<br>
让我们再来看看近几年推动中国经济高速发展的动因是什么：如果总揽中国经济全局就可以发现，推动中国经济高速增长的一是投资，二是消费，三是出口，可以
说这是并驾齐驱的&#8220;三驾马车。&#8221;但是，在我国的实践中是&#8220;重投资、重出口、轻消费，&#8221;这是问题的表象。为什么中国人会&#8220;重投资、重出口、轻消费，&#8221;呢？明
知消费是生产力，没有消费就没有生产力，这是一个浅显的经济学常识，但是在宏观经济发展的布局上，连马克思的剩余价值理论都不顾及了？&nbsp;<br>　　再仔
细分析，就会发现很有趣的现象：一是地方政府重投资，前几年表现的是&#8220;开发区&#8221;热，后来是&#8220;基本建设&#8221;热，再后来就是现在的&#8220;房地产&#8221;热；二是大中型企业
重工业产品出口，不管是上市公司还是民营企业，只要形成了生产规模，眼光都瞄准了国际市场，大到汽车，家电，小到鞋子，袜子，打火机，一古脑出口。就&#8220;投
资&#8221;热而言，高房价圈走了老百姓甚至两代人的财富，还有一代人背上了沉重的债务；就&#8220;出口&#8221;热而言，贸易顺差继续加剧，贸易摩擦不断增多，人民币升值压力
越来越大。&nbsp;<br>　　有经济学家分析，人民币自汇率改革以来升值了5%，现在的状况是有可能2007年一年就要升值5%，相当于前10多年的升值总幅
度。那么这个后果是什么呢？许多经济学家讳莫如深，我可以大胆的告诉大家，后果就是人民币大量从不同渠道流出境，国际洗黑钱的势力乘机介入，甚至可以把中
国贪官的钱都洗白了。&nbsp;<br><br>可以说，在2007年之前，只听说外国人到中国来洗钱，这个局面也将因此而改变，中国人终于到外国去洗钱了。再说
得深入一点，就是中国人民创造的财富被别人悄悄地&#8220;盗走&#8221;了。发改委专家马晓河先生的话头上，看看如何解决产能过剩的问题。其实，很简单，产能过剩的解决
之道是刺激消费，而刺激消费的唯一办法就是降低房价。房价不降，中国人对未来的预期必将产生较大的压力而不敢消费，还有一部分成了房奴无钱消费。马晓河先
生说，中国工业品利用率有半数低于50%，所以，为了减少风险，必须扩大内需。而内需如何才能扩大呢？&nbsp;<br>　　中国居民的消费率是38.2%,世界平均消费率是78%—79%&nbsp;<br>　　中国居民平均房价收入比是一比十，世界平均房价收入比是一比五。<br>
两相对照，中国经济问题的症结就暴露出来，是高得离谱的房价将中国居民的财富搜刮一空，还拿什么去消费呢？所以中国人的消费率创下了历史新低。有专家预
测，中国房价每下降一个点，将为市场一年增加100亿以上的消费，而中国房价从2006年前三季度的综合平均价位上，至少有30%以上的下降空间，也就是
说，只要中国房价下降30%，中国市场一年将增加3000亿的消费总额，中国经济的问题也迎刃而解，中国民众也从此能过上好日子。&nbsp;<br>　　相反，我国要是领导人的决策事物方控制不好这个局面，我国的经济将会崩溃。我们都清楚我们现在身处的国际环境有多恶劣，面对当前复杂的国际形势，中国一定要具备打赢两场战争的能力，一是军事战争，二是经济战争。&nbsp;<br>　　用战争手段夺取别国别人的财富在人类历史上是很常见的。即使在21世纪的今天也还能看到。为了保护中国人民的生命财产，以及可能爆发的军事冲突，中国一定要建设强大的陆军，强大的海军，强大的空军和强大的天军（太空部队）。&nbsp;<br>　　在人类进入21世纪的今天，谁占领了太空这个制高点，谁就掌握了未来战争的主动权。任何太空非军事化的想法，只能是白日做梦！&nbsp;<br>　　圣人说得好：落后是要挨打的！中国只有具备了彻底摧毁对手的实力，别人才不敢欺负中国。&nbsp;<br>　　同时，在人类进入21世纪的今天，由于国际交流和贸易的全球化，一场新的战争----经济战争，已经取代军事战争，成为当今世界一部分人夺取另一部分人财产的主要手段&nbsp;。<br>　　1997年东南亚的金融风暴就是经济战争的一个例子。落后的东南亚国家经济受到了重大打击。国际金融炒家以经济手段达到了以往要用战争手段才能达到的目标。&nbsp;<br><br>在
少迟一点的香港金融保卫战中，时任香港政务司司长的曾荫权和财政司司长任志刚，在中国中央政府的支持下，用大量外汇储备干预了香港的股票市场。中国中央政
府派出了两名央行副行长到香港，要求香港的全部中资机构，全力以赴支持香港政府的扶盘行动。经过几个月的较量，香港政府成功击退了国际金融炒家把香港当作
提款机的企图。那次的斗争是非常激烈的，香港恒指变动1点，期货的买卖就会相差2.3亿港币。&nbsp;<br>　　香港金融保卫战虽然过去好多年了，我一直在想，如果没有强大中国做后盾，会不会发生&#8220;八国联军&#8221;攻打香港的可能呢？毕竟香港政府干预香港股票市场违反了当今国际主流社会的&#8220;规矩&#8221;。&nbsp;<br>　　中国航油（新加坡）在国际石油期货市场损失5亿美元和一位中国国资委职员在伦敦同期投资再次被吃表明中国在金融市场方面还有很多东西要学。&nbsp;<br>　　就石油这一项，中国现在每年就要多花几百亿美元。现在是中国需要啥，国际商品市场就涨啥。可以说是&#8220;抢你没商量&#8221;。<br>　　然而，石油等商品的价格对中国经济的危害并不是最严重的。真正可能对中国经济的造成严重危害是人民币汇率体系和不断高涨的房地产市场&nbsp;。<br>　　我总觉得有人要以人民币汇率为突破口，搞垮中国的经济，夺取中国人民的经济成果。从要人民币升值和自由浮动的叫喊声中，我好像闻到了军事战争的火药味。&nbsp;<br>　　现在有一个说得比唱得还好听得说法，让人民币汇率自由浮动，由市场来决定。&nbsp;<br>　　难道市场是有鬼决定的吗？由市场来决定，听起来挺公平的，大家都有权。但仔细分析一下，世界上有哪个市场不是由少数人操中的呢？让人民币汇率由市场来决定，说穿了就是由他们来决定。&nbsp;<br>　　中国政府和人民一定不要忘记1997年东南亚的金融风暴。现在外资的相当一部分是埋下的伏兵。它们就等美国把中国的门撞开（人民币汇价自由浮动），把人民币捧上天，牟取暴利。&nbsp;<br>
总之，中国一定要建设具有一不怕苦，二不怕死精神的强大的陆军，强大的海军，强大的空军和强大的天军（太空部队）以应对可能军事战争。同时中国一定要建
设热爱国家，具有国际视野，精通国际竟争规则的金融&#8220;铁军&#8221;以应对经济战争。只有这样，中国的安全，人民的财富才会得到保护！想过好日子，不破产的中国
人，都来读完这个文章！！！并希望广大网友将文章转给朋友,希望痴迷的国人尽快觉醒吧！！！<br>
<br>
<script>show_item("1231299","sign");</script><img src ="http://www.cnitblog.com/schkui/aggbug/27823.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/schkui/" target="_blank">爱易</a> 2007-05-30 22:04 <a href="http://www.cnitblog.com/schkui/archive/2007/05/30/27823.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>emacs 的简单使用及配置 </title><link>http://www.cnitblog.com/schkui/archive/2007/05/30/27785.html</link><dc:creator>爱易</dc:creator><author>爱易</author><pubDate>Wed, 30 May 2007 07:52:00 GMT</pubDate><guid>http://www.cnitblog.com/schkui/archive/2007/05/30/27785.html</guid><wfw:comment>http://www.cnitblog.com/schkui/comments/27785.html</wfw:comment><comments>http://www.cnitblog.com/schkui/archive/2007/05/30/27785.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/schkui/comments/commentRss/27785.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/schkui/services/trackbacks/27785.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp; 使用tags之前要先对源代码分析建立tags文件，在代码所在目录中运行：etags -R 即可。
<div>
<p>我常用的就这几个命令和快捷键： </p>
<pre class="example">M-x visit-tags-table &lt;RET&gt; FILE &lt;RET&gt;   选择tags文件<br>M-. [TAG] &lt;RET&gt;                         访问标签<br>M-*                                     返回<br>C-u M-.                                 寻找标签的下一个定义<br></pre>
<pre class="example">
<p>cscope用用吧。它其实是一个独立的软件，完全可以脱离vi和emacs使用。但是结合emacs的强大功能，cscope就显得更加方便了。GNU Emacs默认自带cscope的支持。在使用之前，cscope也需要对代码进行索引。在emacs中可以这样做： </p>
<pre class="example">C-c s a             设定初始化的目录，一般是你代码的根目录<br>C-s s I             对目录中的相关文件建立列表并进行索引<br></pre>
<p>建完索引之后，你就可以用cscope在代码里游荡了。常用的一些命令如下： </p>
<pre class="example">C-c s s             序找符号<br>C-c s g             寻找全局的定义<br>C-c s c             看看指定函数被哪些函数所调用<br>C-c s C             看看指定函数调用了哪些函数<br>C-c s e             寻找正则表达式<br>C-c s f             寻找文件<br>C-c s i             看看指定的文件被哪些文件include<br><br><br>简单配置<br><br>;;;; CC-mode..&nbsp; http://cc-mode.sourceforge.net/<br>(require 'cc-mode)<br>(c-set-offset 'inline-open 0)<br>(c-set-offset 'friend '-)<br>(c-set-offset 'substatement-open 0)<br><br><br>;;;;..C/C++......<br><br>(defun my-c-mode-common-hook()<br>&nbsp; (setq tab-width 4 indent-tabs-mode nil)<br>&nbsp; ;;; hungry-delete and auto-newline<br>&nbsp; (c-toggle-auto-hungry-state 1)<br>&nbsp; ;;....<br>&nbsp; (define-key c-mode-base-map [(control \`)] 'hs-toggle-hiding)<br>&nbsp; (define-key c-mode-base-map [(return)] 'newline-and-indent)<br>&nbsp; (define-key c-mode-base-map [(f7)] 'compile)<br>&nbsp; (define-key c-mode-base-map [(meta \`)] 'c-indent-command)<br>;;&nbsp; (define-key c-mode-base-map [(tab)] 'hippie-expand)<br>&nbsp; (define-key c-mode-base-map [(tab)] 'my-indent-or-complete)<br>&nbsp; (define-key c-mode-base-map [(meta ?/)] 'semantic-ia-complete-symbol-menu)<br><br>&nbsp;;;.....<br>&nbsp; (setq c-macro-shrink-window-flag t)<br>&nbsp; (setq c-macro-preprocessor "cpp")<br>&nbsp; (setq c-macro-cppflags " ")<br>&nbsp; (setq c-macro-prompt-flag t)<br>&nbsp; (setq hs-minor-mode t)<br>&nbsp; (setq abbrev-mode t)<br>&nbsp; (global-font-lock-mode t)<br>)<br>(add-hook 'c-mode-common-hook 'my-c-mode-common-hook)<br><br>;;;;..C++......<br>(defun my-c++-mode-hook()<br>&nbsp; (setq tab-width 4 indent-tabs-mode nil)<br>&nbsp; (c-set-style "stroustrup")<br>;;&nbsp; (define-key c++-mode-map [f3] 'replace-regexp)<br>)<br><br>// 函数跳转 <br>(require 'xcscope)<br>(setq cscope-do-not-update-database t)<br><br><br>Emacs常用命令速查 <br><br>
&nbsp; &nbsp;&nbsp;&nbsp;现在我已经能够熟练使用这些命令了,基本上可以算一个初段的Emacser了,哈哈,总结一下,把这些命令打印出来贴在电脑上,不记得了再查查,从今以后尽量做到写代码和文档都用Emacs来完成.<br>
&nbsp;&nbsp;1）与文件操作有关的命令<br>
&nbsp;&nbsp;C-x C-f&nbsp; &nbsp; 查找文件并且在新缓冲区中打开<br>
&nbsp;&nbsp;C-x C-v&nbsp; &nbsp; 读入另一个文件替换掉用C-x C-f打开的文件<br>
&nbsp;&nbsp;C-x i&nbsp; &nbsp; 把文件插入到光标的当前位置<br>
&nbsp;&nbsp;C-x C-s&nbsp; &nbsp; 保存文件<br>
&nbsp;&nbsp;C-x C-w&nbsp; &nbsp; 把缓冲区内容写入一个文件<br>
&nbsp;&nbsp;C-x C-c&nbsp; &nbsp; 退出Emacs<br>
<br>
&nbsp;&nbsp;2）与光标移动操作有关的命令<br>
&nbsp;&nbsp;C-f&nbsp; &nbsp;&nbsp;&nbsp;光标前移一个字符（右）<br>
&nbsp;&nbsp;C-b&nbsp; &nbsp;&nbsp;&nbsp;光标后移一个字符（左）<br>
&nbsp;&nbsp;C-p&nbsp; &nbsp;&nbsp;&nbsp;光标前移一行（上）<br>
&nbsp;&nbsp;C-n&nbsp; &nbsp;&nbsp;&nbsp;光标后移一行（下）<br>
&nbsp;&nbsp;M-f&nbsp; &nbsp;&nbsp;&nbsp;前移一个单词<br>
&nbsp;&nbsp;M-b&nbsp; &nbsp;&nbsp;&nbsp;后移一个单词<br>
&nbsp;&nbsp;C-a&nbsp; &nbsp;&nbsp;&nbsp;移动到行首<br>
&nbsp;&nbsp;C-e&nbsp; &nbsp;&nbsp;&nbsp;移动到行尾<br>
&nbsp;&nbsp;M-e&nbsp; &nbsp;&nbsp;&nbsp;前移一个句子<br>
&nbsp;&nbsp;M-a&nbsp; &nbsp;&nbsp;&nbsp;后移一个句子<br>
&nbsp;&nbsp;M-}&nbsp; &nbsp;&nbsp;&nbsp;前移一个段落<br>
&nbsp;&nbsp;M-{&nbsp; &nbsp;&nbsp;&nbsp;后移一个段落<br>
&nbsp;&nbsp;C-v&nbsp; &nbsp;&nbsp;&nbsp;屏幕上卷一屏<br>
&nbsp;&nbsp;M-v&nbsp; &nbsp;&nbsp;&nbsp;屏幕下卷一屏<br>
&nbsp;&nbsp;C-x ]&nbsp; &nbsp; 前移一页<br>
&nbsp;&nbsp;C-x [&nbsp; &nbsp; 后移一页<br>
&nbsp;&nbsp;M-&lt;&nbsp; &nbsp;&nbsp;&nbsp;前移到文件头<br>
&nbsp;&nbsp;M-&gt;;&nbsp; &nbsp;&nbsp;&nbsp;后移到文件尾<br>
&nbsp;&nbsp;C-l&nbsp; &nbsp;&nbsp;&nbsp;重新绘制屏幕，当前行放在画面中心<br>
&nbsp;&nbsp;M-n 或者 C-u n&nbsp;&nbsp;重复执行n次后续命令<br>
&nbsp;&nbsp;按下M-x后在辅助输入区中输入"goto-line"跳到指定的行，输入"goto-char"跳到指定的字符<br>
<br>
&nbsp;&nbsp;3）与文件删除操作有关的命令<br>
&nbsp;&nbsp;C-d&nbsp; &nbsp;&nbsp;&nbsp;删除光标位置上的字符<br>
&nbsp;&nbsp;DEL&nbsp; &nbsp;&nbsp;&nbsp;删除光标前面的字符<br>
&nbsp;&nbsp;M-d&nbsp; &nbsp;&nbsp;&nbsp;删除光标后面的单词<br>
&nbsp;&nbsp;M-DEL&nbsp; &nbsp; 删除光标前面的单词<br>
&nbsp;&nbsp;C-k&nbsp; &nbsp;&nbsp;&nbsp;从光标位置删除到行尾<br>
&nbsp;&nbsp;M-k&nbsp; &nbsp;&nbsp;&nbsp;删除光标后面的句子<br>
&nbsp;&nbsp;C-x DEL&nbsp; &nbsp; 删除光标前面的句子<br>
&nbsp;&nbsp;C-y&nbsp; &nbsp;&nbsp;&nbsp;恢复被删除的文本或者粘贴最近删除或复制的文本<br>
&nbsp;&nbsp;C-w&nbsp; &nbsp;&nbsp;&nbsp;删除文件块<br>
&nbsp;&nbsp;按下M-x后在辅助输入区中输入"kill-paragraph"删除光标后面的段落，按下"backward-kill-paragraph"删除光标前面的段落<br>
<br>
&nbsp;&nbsp;4）与文本块操作有关的命令<br>
&nbsp;&nbsp;C-@&nbsp; &nbsp;&nbsp;&nbsp;标记文本块的开始（或结束）位置<br>
&nbsp;&nbsp;C-x C-x&nbsp; &nbsp; 互换插入点和文本标记的位置<br>
&nbsp;&nbsp;C-w 或 SHIFT-DEL 删除文本块<br>
&nbsp;&nbsp;M-w&nbsp; &nbsp;&nbsp;&nbsp;复制文本块<br>
&nbsp;&nbsp;M-h&nbsp; &nbsp;&nbsp;&nbsp;标记段落<br>
&nbsp;&nbsp;C-x C-p&nbsp; &nbsp; 标记页面<br>
&nbsp;&nbsp;C-x h&nbsp; &nbsp; 标记整个缓冲区<br>
<br>
&nbsp;&nbsp;5）与位置交换操作有关的命令<br>
&nbsp;&nbsp;C-t&nbsp; &nbsp;&nbsp;&nbsp;交换两个字符的位置<br>
&nbsp;&nbsp;M-t&nbsp; &nbsp;&nbsp;&nbsp;交换两个单词的位置<br>
&nbsp;&nbsp;C-x C-t&nbsp; &nbsp; 交换两个文本行的位置<br>
&nbsp;&nbsp;按下M-x后在辅助输入区中输入"transpose-sentences"交换两个句子的位置，按下"transpose-paragraph"交换两个段落的位置<br>
<br>
&nbsp;&nbsp;6）与改变字母大小写操作有关的命令<br>
&nbsp;&nbsp;M-c&nbsp; &nbsp;&nbsp;&nbsp;单词首字母改为大写<br>
&nbsp;&nbsp;M-u&nbsp; &nbsp;&nbsp;&nbsp;单词的字母全部改为大写<br>
&nbsp;&nbsp;M-l&nbsp; &nbsp;&nbsp;&nbsp;单词的字母全部改为小写<br>
<br>
&nbsp;&nbsp;7）与查找操作相关的命令<br>
&nbsp;&nbsp;C-s&nbsp; &nbsp;&nbsp;&nbsp;向前递增查找<br>
&nbsp;&nbsp;C-r&nbsp; &nbsp;&nbsp;&nbsp;向后递增查找<br>
&nbsp;&nbsp;C-s C-w&nbsp; &nbsp; 开始递增查找，把光标位置的单词做查找字符串<br>
&nbsp;&nbsp;C-s C-y&nbsp; &nbsp; 开始递增查找，把光标位置到行尾之间的文本做查找字符串<br>
&nbsp;&nbsp;C-s return searchstring return&nbsp;&nbsp;向前开始非递增查找操作<br>
&nbsp;&nbsp;C-r return searchstring return&nbsp;&nbsp;向后开始非递增查找操作<br>
&nbsp;&nbsp;C-s return C-w&nbsp;&nbsp;向前开始单词查找（不受换行符、空格、标点符号影响）<br>
&nbsp;&nbsp;C-r return C-w&nbsp;&nbsp;向后开始单词查找（不受换行符、空格、标点符号影响）<br>
<br>
&nbsp;&nbsp;8) 与使用编辑缓冲区和窗口有关的命令<br>
&nbsp;&nbsp;C-x b&nbsp; &nbsp; 如果输入一个新的文件名则新建一个文件并且编辑,否则打开该文件<br>
&nbsp;&nbsp;C-x s&nbsp; &nbsp; 保存全部缓冲区<br>
&nbsp;&nbsp;C-x b&nbsp; &nbsp; 删除缓冲区<br>
&nbsp;&nbsp;M-x rename-buffer 重命名当前缓冲区<br>
&nbsp;&nbsp;C-x C-q&nbsp; &nbsp; 把当前编辑缓冲区设置为只读属性<br>
&nbsp;&nbsp;C-x 0&nbsp; &nbsp; 删除当前所在的窗口<br>
&nbsp;&nbsp;C-x 1&nbsp; &nbsp; 当前缓冲区满屏显示<br>
&nbsp;&nbsp;C-x 2&nbsp; &nbsp; 创建上下排列的窗口<br>
&nbsp;&nbsp;C-x 3&nbsp; &nbsp; 创建左右排列的窗口<br>
&nbsp;&nbsp;C-x o&nbsp; &nbsp; 在窗口之间移动<br>
<br><br></pre>
</pre>
</div>
<br><img src ="http://www.cnitblog.com/schkui/aggbug/27785.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/schkui/" target="_blank">爱易</a> 2007-05-30 15:52 <a href="http://www.cnitblog.com/schkui/archive/2007/05/30/27785.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>c语言和脚本编程 </title><link>http://www.cnitblog.com/schkui/archive/2007/05/29/27749.html</link><dc:creator>爱易</dc:creator><author>爱易</author><pubDate>Tue, 29 May 2007 09:43:00 GMT</pubDate><guid>http://www.cnitblog.com/schkui/archive/2007/05/29/27749.html</guid><wfw:comment>http://www.cnitblog.com/schkui/comments/27749.html</wfw:comment><comments>http://www.cnitblog.com/schkui/archive/2007/05/29/27749.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/schkui/comments/commentRss/27749.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/schkui/services/trackbacks/27749.html</trackback:ping><description><![CDATA[#include &lt;stdio.h&gt;<br>#include &lt;stdlib.h&gt;<br>#include &lt;unistd.h&gt;<br>#include &lt;stdio.h&gt;<br>#include &lt;string.h&gt;<br><br><br>int main()<br>{<br>#define RECV_BUF&nbsp;&nbsp; &nbsp;1024<br>&nbsp;&nbsp; &nbsp;int fd[2] ;<br>&nbsp;&nbsp;&nbsp; char _recv_buf[RECV_BUF&nbsp;&nbsp; &nbsp;] ;&nbsp;&nbsp;&nbsp; <br>
&nbsp;&nbsp;&nbsp; memset(_recv_buf,0, RECV_BUF&nbsp;&nbsp; &nbsp;) ;<br><br>&nbsp;&nbsp; &nbsp;if(pipe(fd))&nbsp;&nbsp; &nbsp;<br>&nbsp;&nbsp; &nbsp;{<br>&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; return -1 ;<br>&nbsp;&nbsp; &nbsp;}<br>&nbsp;&nbsp; <br>&nbsp; 将输出于写管道建立关联, system的屏幕输出到fd[1],&nbsp; ,可以在fd[0] 读取数据&nbsp;  <br>&nbsp;&nbsp; &nbsp;close(1) ;<br>&nbsp;&nbsp;&nbsp; dup2(fd[1] ,1) ;&nbsp;&nbsp; <br>&nbsp;&nbsp; &nbsp;close(fd[1]) ;<br><br><br>&nbsp;&nbsp; &nbsp;//sed -n '/eth0/p' /proc/net/dev | awk '{print $1, $2}' | sed -n 's/eth0://p<br>&nbsp;&nbsp; &nbsp;// mpstat | sed -n '$p'| awk '{print $9}'<br><br><br><br>&nbsp;&nbsp; &nbsp;system("sed -n '1,2p' /proc/meminfo&nbsp; |awk '{print $2} '") ;<br>&nbsp;&nbsp;&nbsp; // 从读管道读入数据&nbsp; <br>&nbsp;&nbsp; &nbsp;read(fd[0], _recv_buf, RECV_BUF);&nbsp;&nbsp;&nbsp; <br><br>&nbsp;&nbsp;&nbsp; // 显示 到屏幕&nbsp; <br>&nbsp; &nbsp; write(2 ,&nbsp; _recv_buf, strlen(_recv_buf)) ;&nbsp; <br>&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp; // 关闭读 管道<br>&nbsp;&nbsp; &nbsp;close(fd[0]) ;&nbsp;&nbsp;&nbsp; <br><br><br>&nbsp;&nbsp; &nbsp;return 0 ;<br>}<br><br>    <img src ="http://www.cnitblog.com/schkui/aggbug/27749.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/schkui/" target="_blank">爱易</a> 2007-05-29 17:43 <a href="http://www.cnitblog.com/schkui/archive/2007/05/29/27749.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>