﻿<?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>C++博客-★Snowhill ★</title><link>http://www.cppblog.com/snowhill/</link><description>&lt;font color=#5555aa &gt;&lt;b&gt; 颠沛必于是，造次必于是！&lt;/b&gt;&lt;/font&gt;</description><language>zh-cn</language><lastBuildDate>Sun, 12 Apr 2026 20:00:03 GMT</lastBuildDate><pubDate>Sun, 12 Apr 2026 20:00:03 GMT</pubDate><ttl>60</ttl><item><title>同学们</title><link>http://www.cppblog.com/snowhill/archive/2008/10/04/63251.html</link><dc:creator>snowhill</dc:creator><author>snowhill</author><pubDate>Sat, 04 Oct 2008 12:33:00 GMT</pubDate><guid>http://www.cppblog.com/snowhill/archive/2008/10/04/63251.html</guid><wfw:comment>http://www.cppblog.com/snowhill/comments/63251.html</wfw:comment><comments>http://www.cppblog.com/snowhill/archive/2008/10/04/63251.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/snowhill/comments/commentRss/63251.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/snowhill/services/trackbacks/63251.html</trackback:ping><description><![CDATA[<img style="WIDTH: 664px; HEIGHT: 498px" height=498 src="http://www.cppblog.com/images/cppblog_com/snowhill/class2.jpg" width=664 border=0><br><br><img src="http://www.cppblog.com/images/cppblog_com/snowhill/class3.jpg" border=0><br><img src="http://www.cppblog.com/images/cppblog_com/snowhill/class4.jpg" border=0><br><img src="http://www.cppblog.com/images/cppblog_com/snowhill/class5.jpg" border=0><br><br>同学们啊，几年不见！<br>以上图片均来自互联网如果侵犯了阁下的肖像权，请立即通知本人。俺会在第一时间撤掉<br><br>
<img src ="http://www.cppblog.com/snowhill/aggbug/63251.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/snowhill/" target="_blank">snowhill</a> 2008-10-04 20:33 <a href="http://www.cppblog.com/snowhill/archive/2008/10/04/63251.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>WINXP(32)安装SMSCLIENT出错的解决办法(-)</title><link>http://www.cppblog.com/snowhill/archive/2008/04/21/47711.html</link><dc:creator>snowhill</dc:creator><author>snowhill</author><pubDate>Mon, 21 Apr 2008 03:02:00 GMT</pubDate><guid>http://www.cppblog.com/snowhill/archive/2008/04/21/47711.html</guid><wfw:comment>http://www.cppblog.com/snowhill/comments/47711.html</wfw:comment><comments>http://www.cppblog.com/snowhill/archive/2008/04/21/47711.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/snowhill/comments/commentRss/47711.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/snowhill/services/trackbacks/47711.html</trackback:ping><description><![CDATA[<p>在安装SMSCLIENT过程中出现Error Number: 0x8004100e, Facility: WMI, Description: Invalid namespace.<br>编译smsclient.mof出错的解决办法：<br>一、WMI接口重注册:</p>
<p><span style="COLOR: #333399">@echo off<br>%windir%\system32\wbem\winmgmt /clearadap<br>%windir%\system32\wbem\winmgmt /kill<br>%windir%\system32\wbem\winmgmt /unregserver<br>%windir%\system32\wbem\winmgmt /reserver<br>%windir%\system32\wbem\winmgmt /resyncperf<br>net stop winmgmt <br>rmdir /s /q %windir%\system32\wbem\repository<br>regsvr32 /s %systemroot%\system32\scecli.dll<br>regsvr32 /s %systemroot%\system32\userenv.dll<br>mofcomp %windir%\system32\wbem\cimwin32.mof<br>mofcomp %windir%\system32\wbem\cimwin32.mfl<br>mofcomp %windir%\system32\wbem\rsop.mof<br>mofcomp %windir%\system32\wbem\rsop.mfl<br>pause<br>for /F %%s in ('dir /b /s %windir%\system32\wbem\*.dll') do regsvr32 /s %%s<br>for /F %%s in ('dir /b /s %windir%\system32\wbem\*.mof') do (mofcomp %%s)<br>for /F %%s in ('dir /b /s %windir%\system32\wbem\*.mfl') do (mofcomp %%s)<br>net start winmgmt<br>%windir%\system32\wbem\wmiprvse /regserver<br>shutdown -r -t 00</span></p>
<p>如果还是不行,继续:<br>二、删:<span style="COLOR: #333399">HKLM\SOFTWARE\MICROSOFT\WBEM</span><br>重建:导如下注册表太长了,见附件吧.<br>还不行<br>三、找一个正常的WBEM的文件夹复制过来.<br>net stop winmgmt<br>rd %windir%\system32\wbem<br>xcopy wbem %windir%\system32\wbem<br>这个WBEM的包就不提供了.<br>四、微软官方补丁：WindowsXP-KB933062-x86-CHS( 下载还要验证,做人太不地道了:( )</p>
<p>实际上微软提供了WMI接口诊断工具：WMIDIAG<br>由于说明文档太长，且诊断时间长，没仔细看，过两天把那玩意看完了，再补贴上来。<br>参考:<br>1、<a href="http://203.208.37.104/search?q=cache:iUpUbs_g_GkJ:www.winserverkb.com/Uwe/Forum.aspx/sms-setup/2803/Error-Number-0x8004100e-Facility-WMI-Description-Invalid-namespace+smsclient.mof+0x8004100e+wmi&amp;hl=zh-CN&amp;ct=clnk&amp;cd=6&amp;gl=cn&amp;st_usg=ALhdy2-nvvcFCU1w9OqR3ol68FQF1vJtWw">http://203.208.37.104/search?q=cache:iUpUbs_g_GkJ:www.winserverkb.com/Uwe/Forum.aspx/sms-setup/2803/Error-Number-0x8004100e-Facility-WMI-Description-Invalid-namespace+smsclient.mof+0x8004100e+wmi&amp;hl=zh-CN&amp;ct=clnk&amp;cd=6&amp;gl=cn&amp;st_usg=ALhdy2-nvvcFCU1w9OqR3ol68FQF1vJtWw</a><br>2、<a href="http://www.eggheadcafe.com/forumarchives/smssetup/Sep2005/post23718909.asp">http://www.eggheadcafe.com/forumarchives/smssetup/Sep2005/post23718909.asp</a><br>3、SMS的卸载：<a href="http://support.microsoft.com/default.aspx?scid=kb;en-us;826842">http://support.microsoft.com/default.aspx?scid=kb;en-us;826842</a><br>4、BAT，REG，WMIDIAG文件打包：<a href="http://www.cppblog.com/Files/snowhill/wmi.rar"><strong>下载</strong></a></p>
<img src ="http://www.cppblog.com/snowhill/aggbug/47711.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/snowhill/" target="_blank">snowhill</a> 2008-04-21 11:02 <a href="http://www.cppblog.com/snowhill/archive/2008/04/21/47711.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>硬盘分区表之一（转）</title><link>http://www.cppblog.com/snowhill/archive/2007/11/09/36202.html</link><dc:creator>snowhill</dc:creator><author>snowhill</author><pubDate>Fri, 09 Nov 2007 05:29:00 GMT</pubDate><guid>http://www.cppblog.com/snowhill/archive/2007/11/09/36202.html</guid><wfw:comment>http://www.cppblog.com/snowhill/comments/36202.html</wfw:comment><comments>http://www.cppblog.com/snowhill/archive/2007/11/09/36202.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/snowhill/comments/commentRss/36202.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/snowhill/services/trackbacks/36202.html</trackback:ping><description><![CDATA[&nbsp;
<p align=center><strong><span>深入浅出硬盘分区表</span></strong><span><br><br></span><span>作者：武汉市中国地质大学</span><span> <span><a href="&#109;&#97;&#105;&#108;&#116;&#111;&#58;&#121;&#116;&#95;&#53;&#48;&#48;&#48;&#64;&#115;&#111;&#104;&#117;&#46;&#99;&#111;&#109;"><span><span>印涛</span></span><span>,</span><span><span>秦剑</span></span></a><br><br>&nbsp;&nbsp;&nbsp; </span></span><span>人们在使用电脑时，有时由于异常操作，有时由于病毒侵袭，会导致某个分区消失或硬盘无法启动。究其原因，就是硬盘分区表受损。硬盘分区表可以说是支持硬盘正常工作的骨架</span><span>.</span><span>操作系统正是通过它把硬盘划分为若干个分区</span><span>,</span><span>然后再在每个分区里面创建文件系统</span><span>,</span><span>写入数据文件</span><span>.</span><span>本文主要讲述的是分区表的位置</span><span>,</span><span>结构以及各个分区表是如何链接起来的</span><span>.</span><span>当掌握了这些知识后</span><span>,</span><span>即使分区表受到破坏</span><span>,</span><span>一样也可以根据残存的数据手工修复分区表，从而修复分区。</span><span><br><br></span><strong><span>一</span></strong><strong><span>.</span></strong><strong><span>分区表的位置及识别标志</span></strong><span><br>&nbsp;&nbsp;&nbsp; </span><span>分区表一般位于硬盘某柱面的</span><span>0</span><span>磁头</span><span> 1</span><span>扇区</span><span>.</span><span>而第</span><span>1</span><span>个分区表</span><span>(</span><span>也即主分区表</span><span>)</span><span>总是位于</span><span>&nbsp;<br>(0</span><span>柱面</span><span>,1</span><span>磁头</span><span>,1</span><span>扇区</span><span>),</span><span>剩余的分区表位置可以由主分区表依次推导出来．分区表有</span><span>64</span><span>个字节</span><span>,</span><span>占据其所在扇区的</span><span>[441-509]</span><span>字节</span><span>.</span><span>要判定是不是分区表</span><span>,</span><span>就看其后紧邻的两个字节</span><span>(</span><span>也即</span><span>[510-511])</span><span>是不是</span><span> "55AA",</span><span>若是</span><span>,</span><span>则为分区表．</span><span><br><br></span><strong><span>二</span></strong><strong><span>.</span></strong><strong><span>分区表的结构</span></strong><span><br></span><span>分区表由</span><span>4</span><span>项组成，每项</span><span>16</span><span>个字节</span><span>.</span><span>共</span><span>4&#215;16 = 64</span><span>个字节．每项描述一个分区的基本信息</span><span>.</span><span>每个字节的含义如下</span><span>:<br></span><span>分区表项含义</span></p>
<table cellSpacing=0 cellPadding=0 width="88%" border=1>
    <tbody>
        <tr>
            <td width="50%">
            <p align=center><span>字节</span></p>
            </td>
            <td width="50%">
            <p align=center><span>含义</span></p>
            </td>
        </tr>
        <tr>
            <td width="50%">
            <p align=center><span>0</span></p>
            </td>
            <td width="50%">
            <p align=left><span>Activeflag.</span><span>活动标志</span><span>.</span><span>若为</span><span>0x80H,</span><span>则表示该分区为活动分区</span><span>.</span><span>若为</span><span>0x00H,</span><span>则表示该分区为非活动分区</span><span>.</span></p>
            </td>
        </tr>
        <tr>
            <td width="50%">
            <p align=center><span>1,2,3</span></p>
            </td>
            <td width="50%">
            <p align=left><span>该分区的起始磁头号</span><span>,</span><span>扇区号</span><span>,</span><span>柱面号磁头号</span><span> -- 1</span><span>字节</span><span>, </span><span>扇区号</span><span> -- 2</span><span>字节低</span><span>6</span><span>位</span><span>,</span><span>柱面号</span><span> -- 2</span><span>字节高</span><span>2</span><span>位</span><span> + 3</span><span>字节</span></p>
            </td>
        </tr>
        <tr>
            <td width="50%">
            <p align=center><span>4</span></p>
            </td>
            <td width="50%">
            <p align=left><span>分区文件系统标志：</span><span><br></span><span>分区未用</span><span>: 0x00H. <br></span><span>扩展分区</span><span>: 0x05H, 0x0FH.<br>FAT16</span><span>分区</span><span>: 0x06H.<br>FAT32</span><span>分区</span><span>: 0x0BH, 0x1BH, 0x0CH, 0x1CH.<br>NTFS</span><span>分区</span><span>: 0x07H.</span></p>
            </td>
        </tr>
        <tr>
            <td width="50%">
            <p align=center><span>5,6,7</span></p>
            </td>
            <td width="50%">
            <p align=left><span>该分区的结束磁头号</span><span>,</span><span>扇区号</span><span>,</span><span>柱面号，含义同上</span><span>.</span></p>
            </td>
        </tr>
        <tr>
            <td width="50%">
            <p align=center><span>8,9,10,11</span></p>
            </td>
            <td width="50%">
            <p align=left><span>逻辑起始扇区号。表示分区起点之前已用了的扇区数</span><span>.</span></p>
            </td>
        </tr>
        <tr>
            <td width="50%">
            <p align=center><span>12,13,14,15</span></p>
            </td>
            <td width="50%">
            <p align=left><span>该分区所占用的扇区数</span><span>.</span></p>
            </td>
        </tr>
    </tbody>
</table>
<p align=left><span><br></span><span>分区表项有几个字节比较重要，下面分别阐述之：</span><span> </span></p>
<p align=left><span>1</span><span>、（</span><span>1</span><span>，</span><span>2</span><span>，</span><span>3</span><span>）字节</span></p>
<p align=left><span><span>&nbsp;&nbsp;&nbsp; </span></span><span>磁头号由（</span><span>1</span><span>）字节</span><span>8</span><span>位表示，其范围为（</span><span>0 -- 28 - 1</span><span>），也即（</span><span>0 </span><span>磁头</span><span>-- 254</span><span>磁头）。</span><span><span>&nbsp;&nbsp; </span></span></p>
<p align=left><span>扇区号由（</span><span>2</span><span>）字节低</span><span>6</span><span>位表示，其范围为（</span><span>0 -- 26 - 1</span><span>），由于扇区号从</span><span>1</span><span>开始，所以其范围是（</span><span>1</span><span>扇区</span><span>-- 63</span><span>扇区）。</span><span><span>&nbsp;&nbsp; </span></span></p>
<p align=left><span>柱面号由（</span><span>2</span><span>）字节高</span><span>2</span><span>位</span><span> + </span><span>（</span><span>3</span><span>）字节，共</span><span>10</span><span>位表示，其范围为（</span><span>0 --2 10 - 1</span><span>），也即（</span><span>0 </span><span>柱面</span><span>-- 1023</span><span>柱面）。</span></p>
<p align=left><span>当柱面号超过</span><span>1023</span><span>时，这</span><span>10</span><span>位依然表示成</span><span>1023</span><span>，需要注意。</span><span><span>&nbsp;&nbsp; </span></span></p>
<p align=left><span>（</span><span>5</span><span>，</span><span>6</span><span>，</span><span>7</span><span>）字节含义同上。</span></p>
<p align=left><span>2</span><span>、（</span><span>8, 9, 10, 11</span><span>）字节</span><span>&nbsp;</span></p>
<p align=left><span><span>&nbsp;&nbsp;&nbsp; </span></span><span>如果是主分区表，则这</span><span>4 </span><span>个字节表示该分区起始逻辑扇区号与逻辑</span><span>0</span><span>扇区（</span><span>0</span><span>柱面，</span><span>0</span><span>磁头，</span><span>1</span><span>扇区）之差。如果非主分区表，</span></p>
<p align=left><span><span>&nbsp;&nbsp;&nbsp; </span></span><span>则这</span><span>4 </span><span>个字节要么表示该分区起始逻辑扇区号与扩展分区起始逻辑扇区号之差，要么为</span><span>63</span><span>。详细情况在后面有所阐述。</span><span>&nbsp;</span></p>
<p align=left><span>&nbsp;</span></p>
<p align=left><span>注意：</span><span> </span></p>
<p align=left><span>1</span><span>、扇区上的字节是按左边低位，右边高位的顺序排列的。所以在取值时，需要把字节再反一下，让高位字节在左边，低位字节在右边，</span></p>
<p align=left><span>这一点在读取逻辑起始扇区号和分区大小时需要注意。举个例子</span><span>:</span><span>第一项的逻辑起始扇区为</span><span>(3F 00 00 00)</span><span>，转换为十进制前要先反一下字</span></p>
<p align=left><span>节顺序，为（</span><span>00 00 00 3F</span><span>）然后在转换为十进制，即</span><span>63 .</span><span>同理分区大小为（</span><span>3F 04 7D 00</span><span>），先反为（</span><span>00 7D 04 3F</span><span>）再转换为十进制，</span></p>
<p align=left><span>即</span><span>8193087</span><span>。</span></p>
<p align=left><span>&nbsp;</span></p>
<p align=left><span>2</span><span>、逻辑扇区号与（柱面，磁头，扇区）的相互转换：</span></p>
<p align=left><span>令</span><span>L = </span><span>逻辑扇区号，</span><span>C = </span><span>柱面号，</span><span>H = </span><span>磁头号，</span><span>S = </span><span>扇区号。</span></p>
<p align=left><span>每道扇区数</span><span> =&nbsp;63</span></p>
<p align=left><span>每柱面磁头数</span><span> = 255</span></p>
<p align=left><span>每柱面扇区数</span><span> = </span><span>每道扇区数</span><span>* </span><span>每柱面磁头数</span></p>
<p align=left><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>= 63 &#215; 255</span></p>
<p align=left><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>&nbsp;= 16065</span></p>
<p align=left><span>柱面号下标从</span><span>0</span><span>开始。磁头号</span><span>[0 -- 254]</span><span>，扇区号</span><span>[1 -- 63]</span><span>。</span></p>
<p align=left><span>逻辑扇区号下标也从</span><span>0</span><span>开始。</span></p>
<p align=left><span>(</span><span>柱面，磁头，扇区</span><span>)</span><span>转换成逻辑扇区号的公式为：</span></p>
<p align=left><span>L = C&#215;16065 + H &#215;63 + S - 1 ;</span></p>
<p align=left><span>比如（</span><span>1</span><span>柱面，</span><span>1</span><span>磁头，</span><span>1</span><span>扇区），其逻辑扇区号为：</span></p>
<p align=left><span>L = 1&#215;16065 + 1&#215;63 + 1 - 1</span></p>
<p align=left><span>= 16128</span></p>
<p align=left><span>逻辑扇区号转换成</span><span>(</span><span>柱面，磁头，扇区</span><span>) </span><span>公式为：</span></p>
<p align=left><span>C = L / 16065</span></p>
<p align=left><span>H = (L % 16065) / 63</span></p>
<p align=left><span>S = (L % 16065) % 63 + 1</span></p>
<p align=left><span>比如逻辑扇区号</span><span> 16127</span><span>：</span></p>
<p align=left><span>C = 16127 / 16065 = 1</span></p>
<p align=left><span>H = (16127 % 16065) / 63 = 0</span></p>
<p align=left><span>S = (16127 % 16065) % 63 + 1 = 63</span></p>
<p align=left><span>即（</span><span>1</span><span>柱面，</span><span>0</span><span>磁头，</span><span>63</span><span>扇区）</span></p>
<p align=left><span>&nbsp;</span></p>
<p align=left><span>3</span><span>、分区表上有四项，每一项表示一个分区，所以一个分区表最多只能表示</span><span>4</span><span>个分区。主分</span><span> </span></p>
<p align=left><span>区表上的</span><span>4</span><span>项用来表示主分区和扩展分区的信息。因为扩展分区最多只能有一个，所以硬盘</span><span> </span></p>
<p align=left><span>最多可以有四个主分区或者三个主分区，一个扩展分区。余下的分区表是表示逻辑分区的。</span><span> </span></p>
<p align=left><span>这里有必要阐述一点：逻辑区都是位于扩展分区里面的，并且逻辑分区的个数没有限制。</span></p>
<p align=left><span>&nbsp;</span></p>
<p align=left><span>4</span><span>、分区表所在扇区通常在（</span><span>0</span><span>磁头，</span><span>1</span><span>扇区），而该分区的开始扇区通常位于（</span><span>1</span><span>磁头，</span><span>1</span><span>扇区），中间隔了</span><span>63 </span><span>个隐藏扇区。</span></p>
<p align=left><span>&nbsp;</span></p>
<p align=left><strong><span>三</span></strong><strong><span>.</span></strong><strong><span>分区表链的查找</span></strong><span><br>&nbsp;</span><span>　分区表链实际上相当于一个单向链表结构。第一个分区表，也即主分区表，可以有一项</span><span> </span><span>描述扩展分区。而这一项就相当于指针，指向扩展分区。然后我们根据该指针来到扩展分</span><span> </span><span>区起始柱面的</span><span>0</span><span>头</span><span>1</span><span>扇区，找到第二个分区表。对于该分区表，通常情况下：第一项描述了</span><span> </span><span>扩展分区中第一个分区的信息，第二项描述下一个分区</span><span>,</span><span>而这第二项就相当于指向第二个分</span><span> </span><span>区的指针，第三项，第四项一般均为</span><span>0</span><span>。我们可以根据该指针来到扩展分区中第二个分区起</span><span> </span><span>始柱面的</span><span>0</span><span>头</span><span>1</span><span>扇区，找到第三个分区表。以此类推，只到最后一个分区表。而最后一个分</span><span> </span><span>区表只有第一项有信息</span><span>,</span><span>余下三项均为</span><span>0.</span><span>相当于其指针为空</span><span>.</span><span>所以只要找到了一个分区表就可</span><span> </span><span>以推导找出其后面所有分区表。不过该分区表前面的分区表就不好推导出来了。但令人高兴</span><span> </span><span>的是这个链表的头节点，也即主分区表的位置是固定的位于（</span><span>0</span><span>柱面</span><span>, 0</span><span>磁头</span><span>, 1</span><span>扇区）处，</span><span> </span><span>我们可以很轻易的找到它，然后把剩下的所有分区表一一找到。</span><span> <br></span><span>以笔者的硬盘为例</span><span>:</span><span>一个主分区（</span><span>C</span><span>盘）</span><span>, </span><span>一个扩展分区</span><span>.</span><span>扩展分区中有两个逻辑分区（</span><span>D</span><span>盘</span><span>,E</span><span>盘）其分区表链示意图如下</span><span>:<br><br></span><span>图一</span><span> </span><span>分区表链示意图</span><span> <br><br>(</span><span>一</span><span>).</span><span>读取（</span><span>0</span><span>柱面，</span><span>0</span><span>磁头，</span><span>1</span><span>扇区）处</span><span>C</span><span>盘的主分区表：</span><span> </span></p>
<p align=left><span>&nbsp;[80 01 01 00 0B FE 7F FD 3F 00 00 00 3F 04 7D 00 ]<span>&nbsp;&nbsp; </span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span>&nbsp;&nbsp;</span></span></p>
<p align=left><span>&nbsp;[00 00 41 FE 0F FE FF FF 7E 04 7D 00 1F 2C B4 00 ]</span></p>
<p align=left><span>&nbsp;</span></p>
<p align=left><span>[00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ]</span></p>
<p align=left>&nbsp;</p>
<p align=left><span><span>&nbsp;&nbsp;&nbsp; </span>[00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ]</span></p>
<p align=left><span>第一项：</span></p>
<p align=left><span>（</span><span>80</span><span>）（</span><span>01 01 00</span><span>）（</span><span>0B</span><span>）（</span><span>FE 7F FD </span><span>）（</span><span>3F 00 00 00 </span><span>）（</span><span>3F 04 7D 00</span><span>）</span></p>
<p align=left><span>描述的是</span><span>C</span><span>盘的情况。</span></p>
<p align=left><span>1.</span><span>（</span><span>80</span><span>）：表示</span><span>C</span><span>盘为活动分区。即系统会从</span><span>C</span><span>盘启动。</span></p>
<p align=left><span>2.</span><span>（</span><span>01 01 00</span><span>）：表示</span><span>C</span><span>盘的起始扇区为（</span><span>0</span><span>柱面，</span><span>0</span><span>磁头，</span><span>1</span><span>扇区）。</span></p>
<p align=left><span>3.</span><span>（</span><span>0B</span><span>）：表示</span><span>C</span><span>盘的文件系统为</span><span>FAT32</span><span>。</span></p>
<p align=left><span>4</span><span>．（</span><span>FE 7F FD</span><span>）：</span></p>
<p align=left><span>(FE) 16&nbsp;=&nbsp;(254) 10&nbsp;(7F) 16&nbsp;=&nbsp;(0111 1111) 2&nbsp;(FD) 16&nbsp;=&nbsp;(1111 1101) 2</span></p>
<p align=left><span>磁头号：</span><span>(254) 10</span><span>；</span></p>
<p align=left><span>扇区号：</span><span>(11 1111) 2&nbsp;=&nbsp;(63) 10.</span></p>
<p align=left><span>柱面号：</span><span>(01 1111 1101) 2&nbsp;=&nbsp;(509) 10</span></p>
<p align=left><span>故</span><span>C</span><span>盘结束扇区为（</span><span>509</span><span>柱面，</span><span>254</span><span>磁头，</span><span>63</span><span>扇区）。</span></p>
<p align=left><span>5.</span><span>（</span><span>3F 00 00 00</span><span>）：</span></p>
<p align=left><span>反向，</span><span>(00 00 00 3F) 16&nbsp;=&nbsp;(63) 10,</span><span>为</span><span>C</span><span>盘起始逻辑扇区号与逻辑</span><span>0</span><span>扇区号之差。表示</span><span>C</span><span>盘前面已有</span><span>63</span><span>个扇区，这</span><span>63</span><span>个扇区为系统隐藏扇区。</span></p>
<p align=left><span>6. (3F 04 7D 00)</span><span>：</span></p>
<p align=left><span>反向，</span><span>(00 7D 04 3F) 16&nbsp;=&nbsp;(8193087) 10</span><span>。表明</span><span>C</span><span>盘有</span><span>8193087</span><span>个扇区。即（</span><span>0</span><span>柱面，</span><span>1</span><span>磁头，</span><span>1</span><span>扇区）至（</span><span>509</span><span>柱面，</span><span>254</span><span>磁头，</span><span>63</span><span>扇区）</span></p>
<p align=left><span>共有</span><span>8193087</span><span>个扇区。</span></p>
<p align=left><span>第二项：</span></p>
<p align=left><span>(00</span><span>）（</span><span>00 41 FE</span><span>）（</span><span>0F</span><span>）（</span><span>FE FF FF</span><span>）（</span><span>7E 04 7D 00</span><span>）（</span><span>1F 2C B4 00</span><span>）</span></p>
<p align=left><span>描述的是扩展分区的情况。</span></p>
<p align=left><span>1. (00): </span><span>表示该分区不是活动分区。</span></p>
<p align=left><span>2. (00 41 FE):</span></p>
<p align=left><span>(00) 16&nbsp;=&nbsp;(0) 10</span><span>　</span><span> (41) 16&nbsp;=&nbsp;(0100 0001) 2&nbsp;(FE) 16&nbsp;=&nbsp;(1111 1110) 2</span></p>
<p align=left><span>磁头号：</span><span>(0) 10</span><span>；</span></p>
<p align=left><span>扇区号：</span><span>(00 0001) 2&nbsp;=&nbsp;(1) 10.</span></p>
<p align=left><span>柱面号：</span><span>(01 1111 1110) 2&nbsp;=&nbsp;(510) 10</span></p>
<p align=left><span>所以扩展分区的起始扇区为（</span><span>510</span><span>柱面，</span><span>0</span><span>磁头，</span><span>1</span><span>扇区）。</span></p>
<p align=left><span>3. (0F): </span><span>表示该分区为扩展分区。</span></p>
<p align=left><span>4. (FE FF FF):</span></p>
<p align=left><span>(FE) 16&nbsp;=&nbsp;(254) 10&nbsp;(FF) 16&nbsp;=&nbsp;(1111 1111) 2&nbsp;(FF) 16&nbsp;=&nbsp;(1111 1111) 2;</span></p>
<p align=left><span>磁头号：</span><span>(254) 10</span><span>；</span></p>
<p align=left><span>扇区号：</span><span>(11 1111) 2&nbsp;=&nbsp;(63) 10.</span></p>
<p align=left><span>柱面号：</span><span>(11 1111 1111) 2&nbsp;=&nbsp;(1023) 10</span></p>
<p align=left><span>但这是不准确的，因为当柱面号的真实值超过</span><span>1023</span><span>时，表示柱面号的</span><span>10</span><span>位也依然是</span><span>1023</span><span>。</span></p>
<p align=left>&nbsp;</p>
<p align=left><span>5. (7E 04 7D 00):</span></p>
<p align=left><span>反向，</span><span>(00 7D 04 7E) 16&nbsp;=&nbsp;(8193150) 10. </span><span>表示扩展分区的起始扇区号为</span><span>8193150</span><span>，即</span><span>(510 </span><span>柱面，</span><span>0</span><span>磁头，</span><span>1</span><span>扇区</span><span>)</span><span>。这是真实准确的，</span></p>
<p align=left><span>我一般都用这一项来定位分区起点。</span></p>
<p align=left><span>6. (1F 2C B4 00):</span></p>
<p align=left><span>反向</span><span>, (00 B4 2C 1F) 16&nbsp;=&nbsp;(11807775) 10. </span><span>表示扩展分区共有</span><span>11807775</span><span>个扇区。通过上面得到的起点和分区的大小，</span></p>
<p align=left><span>可以推导出扩展分区的结束位置：</span><span>8193150 + 11807775 = 20000925</span><span>号扇区，即（</span><span>1244 </span><span>柱面，</span><span>254</span><span>磁头，</span><span>63</span><span>扇区）。</span></p>
<p align=left><span>二．查找</span><span>D</span><span>盘分区表</span><span> </span><span>　根据上面的信息，第二个分区表，也即</span><span>D</span><span>盘分区表在（</span><span>510</span><span>柱面，</span><span>0</span><span>磁头，</span><span>1</span><span>扇区）处。读取该扇区，得到分区表如下：</span><span> </span></p>
<p align=left><span>[00 01 41 FE 0B FE FF 7B 3F 00 00 00 BF A3 5D 00 ]</span></p>
<p align=left><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span></p>
<p align=left><span>&nbsp;[00 00 C1 7C 05 FE FF FF FE A3 5D 00 21 88 56 00 ]</span></p>
<p align=left>&nbsp;</p>
<p align=left><span>&nbsp;[00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ]</span></p>
<p align=left>&nbsp;</p>
<p align=left><span>&nbsp;[00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ]</span></p>
<p align=left><span>第一项：</span></p>
<p align=left><span>（</span><span>00</span><span>）（</span><span>01 41 FE</span><span>）（</span><span>0B</span><span>）（</span><span>FE FF 7B</span><span>）（</span><span>3F 00 00 00 </span><span>）（</span><span>BF A3 5D 00</span><span>）</span></p>
<p align=left><span>&nbsp;</span><span>描述的是</span><span>D</span><span>盘的情况。</span></p>
<p align=left><span>1.</span><span>（</span><span>00</span><span>）：表示</span><span>D</span><span>盘不是活动分区。</span></p>
<p align=left><span>2.</span><span>（</span><span>01 41 FE</span><span>）：</span></p>
<p align=left><span>&nbsp;(01) 16&nbsp;=&nbsp;(1) 10&nbsp;(41) 16&nbsp;=&nbsp;(0100 0001) 2&nbsp;(FE) 16&nbsp;=&nbsp;(1111 1110) 2.</span></p>
<p align=left><span>磁头号：</span><span>(1) 10</span><span>；</span></p>
<p align=left><span>扇区号：</span><span>(00 0001) 2&nbsp;=&nbsp;(1) 10.</span></p>
<p align=left><span>柱面号：</span><span>(01 1111 1110) 2&nbsp;=&nbsp;(510) 10;</span></p>
<p align=left><span>故</span><span>D</span><span>盘开始扇区为（</span><span>510</span><span>柱面，</span><span>1</span><span>磁头，</span><span>1</span><span>扇区）。</span></p>
<p align=left><span>3.</span><span>（</span><span>0B</span><span>）：表示</span><span>D</span><span>盘的文件系统为</span><span>FAT32</span><span>。</span></p>
<p align=left><span>4</span><span>．（</span><span>FE FF 7B</span><span>）：</span></p>
<p align=left><span>(FE) 16&nbsp;=&nbsp;(254) 10 </span><span>。</span><span> (FF) 16&nbsp;=&nbsp;(1111 1111) 2&nbsp;(7B) 16&nbsp;=&nbsp;(0111 1011) 2.</span></p>
<p align=left><span>磁头号：</span><span>(254) 10</span><span>；</span></p>
<p align=left><span>扇区号：</span><span>(11 1111) 2&nbsp;=&nbsp;(63) 10.</span></p>
<p align=left><span>柱面号：</span><span>(11 0111 1011) 2&nbsp;=&nbsp;(891) 10</span></p>
<p align=left><span>故</span><span>D</span><span>盘结束扇区为（</span><span>891</span><span>柱面，</span><span>254</span><span>磁头，</span><span>63</span><span>扇区）。</span></p>
<p align=left><span>5.</span><span>（</span><span>3F 00 00 00</span><span>）：</span></p>
<p align=left><span>反向，</span><span>(00 00 00 3F)16&nbsp;=&nbsp;(63)10,</span><span>为</span><span>D</span><span>盘起始逻辑扇区号（</span><span>510</span><span>柱面，</span><span>1</span><span>磁头，</span><span>1</span><span>扇区）与扩展分区起始逻辑扇区号</span></p>
<p align=left><span>（</span><span>510</span><span>柱面，</span><span>0</span><span>磁头，</span><span>1</span><span>扇区）之差。表示</span><span>D</span><span>盘前面已有</span><span>63</span><span>个扇区，这</span><span>63</span><span>个扇区为系统隐藏扇区。</span></p>
<p align=left><span>6. (BF A3 5D 00)</span><span>：</span></p>
<p align=left><span>反向，</span><span>(00 5D A3 BF) 16&nbsp;=&nbsp;(6136767) 10</span><span>。表明</span><span>D</span><span>盘有</span><span>6136767</span><span>个扇区。</span></p>
<p align=left><span>通过上面得到的起点和分区的大小，可以推导出</span><span>D</span><span>盘的结束位置：</span><span>8193150 + 63 + 6136767 = 14329980</span><span>号扇区。</span></p>
<p align=left><span>即（</span><span>891</span><span>柱面，</span><span>254</span><span>磁头，</span><span>63</span><span>扇区）。与上面的正好吻合。</span></p>
<p align=left><span>第二项：</span></p>
<p align=left><span>(00)</span><span>（</span><span>00 C1 7C</span><span>）（</span><span>05</span><span>）（</span><span>FE FF FF</span><span>）（</span><span>FE A3 5D 00</span><span>）（</span><span>21 88 56 00</span><span>）</span></p>
<p align=left><span>描述的是</span><span>E</span><span>盘的情况。</span></p>
<p align=left><span>1. (00)</span><span>：</span><span> </span><span>表示</span><span>E</span><span>盘不是活动分区。</span></p>
<p align=left><span>2. (00 C1 7C)</span><span>：</span></p>
<p align=left><span>(00) 16&nbsp;=&nbsp;(0) 10&nbsp;(C1) 16&nbsp;=&nbsp;(1100 0001) 2&nbsp;(7C) 16&nbsp;=&nbsp;(0111 1100) 2</span></p>
<p align=left><span>磁头号：</span><span>(0) 10</span></p>
<p align=left><span>扇区号：</span><span>(00 0001) 2&nbsp;=&nbsp;(1) 10</span></p>
<p align=left><span>柱面号：</span><span>(11 0111 1100) 2&nbsp;=&nbsp;(892) 10</span></p>
<p align=left><span>所以</span><span>E</span><span>盘的起始扇区为（</span><span>892</span><span>柱面，</span><span>0</span><span>磁头，</span><span>1</span><span>扇区）。</span></p>
<p align=left><span>3. (05): </span><span>表示</span><span>E</span><span>盘的在扩展分区里面。</span></p>
<p align=left><span>4</span><span>．</span><span>(FE FF FF)</span><span>：</span></p>
<p align=left><span>(FE) 16&nbsp;=&nbsp;(254) 10&nbsp;(FF) 16&nbsp;=&nbsp;(1111 1111) 2&nbsp;(FF) 16&nbsp;=&nbsp;(1111 1111) 2</span></p>
<p align=left><span>磁头号：</span><span>(254) 10</span></p>
<p align=left><span>扇区号：</span><span>(11 1111) 2&nbsp;=&nbsp;(63) 10</span></p>
<p align=left><span>柱面号：</span><span>(11 1111 1111) 2&nbsp;=&nbsp;(1023) 10</span></p>
<p align=left><span>但这是不准确的，原因同上。</span></p>
<p align=left>&nbsp;</p>
<p align=left><span>5</span><span>．</span><span>(FE A3 5D 00):</span></p>
<p align=left><span>&nbsp;</span><span>反向，</span><span>(00 5D A3 FE) 16&nbsp;=&nbsp;(6136830) 10. </span><span>这一项非常重要，它定位了</span><span>E</span><span>盘分区表所在扇区。其值为</span><span>E</span><span>盘分区表所在扇区号</span></p>
<p align=left><span>&nbsp;</span><span>与扩展分区起始扇区号之差。所以，</span><span>E</span><span>盘分区表所在扇区号为：</span></p>
<p align=left><span>8193150 + 6136830 = 14329980</span><span>。即（</span><span>892</span><span>柱面，</span><span>0</span><span>磁头，</span><span>1</span><span>扇区）。</span></p>
<p align=left>&nbsp;</p>
<p align=left><span>6</span><span>．</span><span>(21 88 56 00):</span></p>
<p align=left><span>反向，</span><span>(00 56 88 21) 16&nbsp;=&nbsp;(5670945) 10.</span><span>表示</span><span>E</span><span>盘共有</span><span>11807775</span><span>个扇区。通过上面得到的起点和分区的大小，可以推导出</span><span>E</span></p>
<p align=left><span>盘的结束位置：</span><span>14329980 + 5670945 = 20000925</span><span>号扇区，即（</span><span>1244 </span><span>柱面，</span><span>254</span><span>磁头，</span><span>63</span><span>扇区）。</span></p>
<p align=left><span>三．查找</span><span>E</span><span>盘分区表</span><span> </span><span>根据上面的信息，第三个分区表，也即</span><span>E</span><span>盘分区表在（</span><span>892</span><span>柱面，</span><span>0</span><span>磁头，</span><span>1</span><span>扇区）处。读取该扇区，得到分区表如下：</span><span> </span></p>
<p align=left><span>[00 01 C1 7C 0B FE FF FF 3F 00 00 00 E2 87 56 00]</span></p>
<p align=left>&nbsp;</p>
<p align=left><span>[ 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ]</span></p>
<p align=left>&nbsp;</p>
<p align=left><span>[00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ]</span></p>
<p align=left>&nbsp;</p>
<p align=left><span>[00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ]</span></p>
<p align=left>&nbsp;</p>
<p align=left><span>该分区表第二项全为</span><span>0</span><span>，说明没有下一个分区表了。该分区表就是分区表链的最后一个节点。</span></p>
<p align=left><span>第一项：</span></p>
<p align=left><span>（</span><span>00</span><span>）（</span><span>01 C1 7C</span><span>）（</span><span>0B</span><span>）（</span><span>FE FF FF</span><span>）（</span><span>3F 00 00 00 </span><span>）（</span><span>E2 87 56 00</span><span>）</span></p>
<p align=left><span>该项与</span><span>D</span><span>盘分区表的第二项描述的都是</span><span>E</span><span>盘的情况，但它们在某些细节上又有所区别。</span></p>
<p align=left><span>1.</span><span>（</span><span>00</span><span>）：表示</span><span>E</span><span>盘不是活动分区。</span></p>
<p align=left><span>2.</span><span>（</span><span>01 C1 7C</span><span>）：</span></p>
<p align=left><span>&nbsp;(01) 16&nbsp;=&nbsp;(1) 10&nbsp;(C1) 16&nbsp;=&nbsp;(1100 0001) 2&nbsp;(7C) 16&nbsp;=&nbsp;(0111 1100) 2.</span></p>
<p align=left><span>磁头号：</span><span>(1) 10</span></p>
<p align=left><span>扇区号：</span><span>(00 0001) 2&nbsp;=&nbsp;(1) 10</span></p>
<p align=left><span>柱面号：</span><span>(11 0111 1100) 2&nbsp;=&nbsp;(892) 10</span></p>
<p align=left><span>故</span><span>E</span><span>盘起始扇区为（</span><span>892</span><span>柱面，</span><span>1</span><span>磁头，</span><span>1</span><span>扇区）。</span></p>
<p align=left><span>3.</span><span>（</span><span>0B</span><span>）：表示</span><span>E</span><span>盘的文件系统为</span><span>FAT32</span><span>。</span></p>
<p align=left><span>4</span><span>．（</span><span>FE FF FF</span><span>）：</span></p>
<p align=left><span>(FE) 16&nbsp;=&nbsp;(254) 10 </span><span>。</span><span> (FF) 16&nbsp;=&nbsp;(1111 1111) 2&nbsp;(FF) 16&nbsp;=&nbsp;(1111 1111) 2.</span></p>
<p align=left><span>磁头号：</span><span>(254) 10</span><span>；</span></p>
<p align=left><span>扇区号：</span><span>(11 1111) 2&nbsp;=&nbsp;(63) 10.</span></p>
<p align=left><span>柱面号：</span><span>(11 1111 1111) 2&nbsp;=&nbsp;(1023) 10</span></p>
<p align=left><span>但这是不准确的，原因同上。</span></p>
<p align=left><span>5.</span><span>（</span><span>3F 00 00 00</span><span>）：</span></p>
<p align=left><span>反向，</span><span>(00 00 00 3F) 16&nbsp;=&nbsp;(63) 10.</span><span>这一项与</span><span>D</span><span>盘分区表相应项有所不同</span><span>.</span><span>为</span><span>E</span><span>盘起始逻辑</span></p>
<p align=left><span>扇区号（</span><span>892</span><span>柱面，</span><span>1</span><span>磁头，</span><span>1</span><span>扇区）与（</span><span>892</span><span>柱面，</span><span>0</span><span>磁头，</span><span>1</span><span>扇区）之差。表示</span><span>E</span><span>盘前面已有</span><span>63</span><span>个扇区</span><span>, </span><span>这</span><span>63</span><span>个扇区为系统隐藏扇区。</span></p>
<p align=left><span>操作系统无法对这些扇区进行读写</span><span>,</span><span>所以可以把自己的秘密信息写在这里</span><span>.</span></p>
<p align=left><span>6. (E2 87 56 00): </span></p>
<p align=left><span>反向，</span><span>(00 56 87 E2) 16&nbsp;=&nbsp;(5670882) 10</span><span>。表明</span><span>E</span><span>盘有</span><span>5670882</span><span>个扇区。而</span><span>D</span><span>盘分区表相应项为</span><span>5670945. 5670945 - 5670882 = 63.</span></p>
<p align=left><span>正好等于</span><span>63</span><span>个隐藏扇区</span><span>.</span><span>这是因为</span><span>D</span><span>盘分区表描述的是</span><span>(892</span><span>柱面</span><span>,0</span><span>磁头，</span><span>1</span><span>扇区</span><span>) </span><span>到</span><span> (1244 </span><span>柱面，</span><span>254</span><span>磁头，</span><span>63</span><span>扇区</span><span>) </span><span>之间的扇区数。</span></p>
<p align=left><span>而</span><span>E</span><span>盘分区表描述的是</span><span>(892</span><span>柱面</span><span>, 1</span><span>磁头</span><span>,1</span><span>扇区</span><span>) </span><span>到</span><span> (1244 </span><span>柱面，</span><span>254</span><span>磁头，</span><span>63</span><span>扇区</span><span>) </span><span>之间的扇区数。</span></p>
<p><strong><span>四</span></strong><strong><span>.</span></strong><strong><span>结束语</span></strong><span> <br>&nbsp;&nbsp;&nbsp; </span><span>至此</span><span>,</span><span>我们已经打通了整个分区表链</span><span>.</span><span>以后在某个链节点数据受损时</span><span>,</span><span>也可以根据上下节点的信息而手工定位并修复之。</span><span> <br></span><span>修复工具可采用可读写磁盘的</span><span>Winhex. <br><br>上文是两们研的成果，在戴士剑的《数据恢复》一书也有介绍，关于C的算法实现对引导记录的读写在后面自己实践了再贴出来。</span></p>
<img src ="http://www.cppblog.com/snowhill/aggbug/36202.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/snowhill/" target="_blank">snowhill</a> 2007-11-09 13:29 <a href="http://www.cppblog.com/snowhill/archive/2007/11/09/36202.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>常用网站</title><link>http://www.cppblog.com/snowhill/archive/2007/10/07/33695.html</link><dc:creator>snowhill</dc:creator><author>snowhill</author><pubDate>Sun, 07 Oct 2007 08:46:00 GMT</pubDate><guid>http://www.cppblog.com/snowhill/archive/2007/10/07/33695.html</guid><wfw:comment>http://www.cppblog.com/snowhill/comments/33695.html</wfw:comment><comments>http://www.cppblog.com/snowhill/archive/2007/10/07/33695.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/snowhill/comments/commentRss/33695.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/snowhill/services/trackbacks/33695.html</trackback:ping><description><![CDATA[<center><br></center>
<ul>
    <li>软件下载
    <ul>
        <li><a href="http://www.onlinedow.net/" target=new>华军软件园</a>&nbsp;&nbsp;&nbsp;&nbsp; 一个相当不错的下载网站, 你看看的镜像站点的数量就应该想得到他的人气有多旺了, <br>如果你缺什么东东, 就先来这里看看吧!
        <li><a href="http://www.crsky.com/" target=new>霏凡软件1</a>&nbsp;&nbsp;&nbsp;&nbsp;也是一个相当不错的下载站点, 不过这里有"正版"的软件下载!
        <li><a href="http://crkey.126.com/" target=new>霏凡软件2</a>&nbsp;&nbsp;&nbsp;&nbsp;这和上一个是同一站点, 如果上一个站点下载速度不理想, 就用这个吧!
        <li><a href="http://download.it.com.cn/">下载中心</a>&nbsp;&nbsp;&nbsp;&nbsp;速度挺快的一个下载网站,如果你在上面两个站点找不着, 或者是速度不理想就用这个吧! </li>
    </ul>
    <li>其他相关&nbsp;&nbsp;&nbsp;&nbsp;<a href="http://www.5down.com/">武当下载</a> &nbsp;&nbsp;&nbsp;&nbsp;<a href="http://www.fjnt.com/" target=new>福建网盟</a> &nbsp;&nbsp;&nbsp;&nbsp;<a href="http://down.wglm.net/" target=_blank>网管联盟</a> &nbsp;&nbsp;&nbsp;&nbsp;<a href="http://www.linkwan.com/gb/broadmeter/" target=new>世界网络</a> &nbsp;&nbsp;&nbsp;&nbsp; <a href="http://forum.cnool.net/topic_show.jsp?id=1722273&amp;oldpage=1&amp;thesisid=51&amp;flag=topic1">iso</a> <a href="http://www.bios.net.cn/Article/wzpd/BIOSJS/">BIOS之家</a> &nbsp;&nbsp;&nbsp;&nbsp; <a href="http://bbs.365master.com/index.asp" target=_blank>网管员论坛</a>&nbsp;&nbsp;NAME:SNOWHILL PASSWORD:ANCHORITE&nbsp;&nbsp;&nbsp;&nbsp; <a href="http://wglm.net/ArticleView/2006-1-11/Article_View_868.Htm">诊断卡代码</a> &nbsp;&nbsp;&nbsp;&nbsp; <a href="http://www.chinaitlab.com/www/techspecial/AD/">活动目录教程</a>
    <li></li>
</ul>
<ul>
    <li>安全工具
    <ul>
        <li><a href="http://www.xfocus.net/" target=new>安全焦点</a>&nbsp;&nbsp;&nbsp;&nbsp;元老就是元老!
        <li><a href="http://www.pediy.com/" target=new>看雪学院</a>&nbsp;&nbsp;&nbsp;&nbsp;Cracker的必选网站, 里面的学习知料和工具一定会让你在有所获!
        <li>其他相关&nbsp;&nbsp;&nbsp;&nbsp;<a href="http://www.cnhacker.com/bbs/">黑客联盟</a>&nbsp;&nbsp;&nbsp;&nbsp; <a href="http://www.hacker.com.cn/" target=new>黑客防线</a>&nbsp;&nbsp;&nbsp;&nbsp; <a href="http://www.ttian.net/">天天安全网</a>&nbsp;&nbsp;&nbsp;&nbsp; <a href="http://www.heibai.net/">黑白山庄</a>&nbsp;&nbsp;&nbsp;&nbsp; <a href="http://www.3800cc.com/">黑鹰基地</a> </li>
    </ul>
    </li>
</ul>
<ul>
    <li>编程相关
    <ul>
        <li><a onmouseover="window.status='汇编语言';return true" href="http://211.90.241.130:22366/" target=new>罗云彬的个人网站.</a>对汇编语言有兴趣的可以去看看;另外里面还有一些电子书籍和汇编工具;
        <li><a href="http://www.csdn.com.cn/">csdn</a>&nbsp;&nbsp;&nbsp;&nbsp;人气相当旺的一个网站,涉及面极广, 有条件的想学编程的有事没事可以去逛逛.
        <li><a href="http://aogo.yeah.net/">汇编小站</a>汇编工具都被收全了,少工具的朋友可不要错过, 另外里面有一些学习资料和方法.
        <li><a href="http://www.free9.net/webspace/">免费资源</a>
        <li><a href="http://www.windowsgroup.cn/">windows专题站</a> </li>
    </ul>
    </li>
</ul>
<ul>
    <li><a href="http://www.pconline.com.cn/" target=new>太平洋电脑网</a>&nbsp;&nbsp;&nbsp;&nbsp;中国电脑硬件的首推网站, 电脑报价、评测、技巧以及驱动都有，另外在游戏等方面也是专业级网站。
    <li><a href="http://www.mydrivers.com/" target=new>驱动之家</a>&nbsp;&nbsp;&nbsp;&nbsp; 驱动下载的首选站点, 这里的驱动可以说是应有尽有(起码现在对我来说是这样!), 不过有时速度不尽人意. </li>
</ul>
<ul></ul>
    <ul>
        <li>书籍
        <ul>
            <li><a href="http://www.china-pub.com/" target=new>书店1</a>:china-pub
            <li><a href="http://www.cppblog.com/snowhill/admin/www.dearbook.com.cn" target=new>书店2</a>:dearbook </li>
        </ul>
        </li>
    </ul>
    <ul>
        <li><a href="http://war3.replays.net/" target=new>魔兽争霸录像下载</a>
        <li><a href="http://www.cmd5.com/default.aspx">md5破解</a>
        <li><a href="http://lotusice.bokee.com/catalog_2005.html">孤竹</a>&nbsp;&nbsp; </li>
    </ul>
    <hr>
    &nbsp;&nbsp;&nbsp;&nbsp; <img src="http://login.blogcn.com/images/em/2/18.gif" align=absMiddle border=0> 上面这些网站是自己常用的一些网站, 为了方便就写了这个网页, 有些也该更新了, 但人懒, 先这样放着,什么时候自己勤快了, 有口饭吃了再把它更新吧!--------------------------------------------------------BY:Snowhill 2005-07-07<br><strong>两年前写的了.无事,翻了出来,再看看...................</strong> 
<img src ="http://www.cppblog.com/snowhill/aggbug/33695.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/snowhill/" target="_blank">snowhill</a> 2007-10-07 16:46 <a href="http://www.cppblog.com/snowhill/archive/2007/10/07/33695.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>KMP算法</title><link>http://www.cppblog.com/snowhill/archive/2007/01/07/17384.html</link><dc:creator>snowhill</dc:creator><author>snowhill</author><pubDate>Sun, 07 Jan 2007 03:40:00 GMT</pubDate><guid>http://www.cppblog.com/snowhill/archive/2007/01/07/17384.html</guid><wfw:comment>http://www.cppblog.com/snowhill/comments/17384.html</wfw:comment><comments>http://www.cppblog.com/snowhill/archive/2007/01/07/17384.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/snowhill/comments/commentRss/17384.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/snowhill/services/trackbacks/17384.html</trackback:ping><description><![CDATA[
		<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee">
				<span style="COLOR: #008000">/*</span>
				<span style="COLOR: #008000"> data:2007 -1 - 7 by:snowhill<br /> char *s="abcdefhighcbcccfghiabcdefghikl";<br /> char *T="cbcbc"; next[]的值应为:    -1,0,0,1,2<br /> 如果char *T="cbccc";next[]的值应为: -1,0,0,1,1<br /> next[]的求法相当于T自身的一个模式匹配<br /><br /> 在KMP_Find()中 如果J的值大于T的长度则查找成功<br /> </span>
				<span style="COLOR: #008000">*/</span>
				<span style="COLOR: #000000">
						<br />#include </span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">iostream.h</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">
						<br />
				</span>
				<span style="COLOR: #0000ff">int</span>
				<span style="COLOR: #000000"> length(</span>
				<span style="COLOR: #0000ff">char</span>
				<span style="COLOR: #000000"> </span>
				<span style="COLOR: #000000">*</span>
				<span style="COLOR: #000000">s)<br />{<br /> </span>
				<span style="COLOR: #0000ff">int</span>
				<span style="COLOR: #000000"> i</span>
				<span style="COLOR: #000000">=</span>
				<span style="COLOR: #000000">0</span>
				<span style="COLOR: #000000">;<br /> </span>
				<span style="COLOR: #0000ff">while</span>
				<span style="COLOR: #000000">(s[i]</span>
				<span style="COLOR: #000000">!=</span>
				<span style="COLOR: #000000">NULL)<br /> i</span>
				<span style="COLOR: #000000">++</span>
				<span style="COLOR: #000000">;<br /> </span>
				<span style="COLOR: #0000ff">return</span>
				<span style="COLOR: #000000"> i;<br />}<br /><br /></span>
				<span style="COLOR: #0000ff">void</span>
				<span style="COLOR: #000000"> get_next(</span>
				<span style="COLOR: #0000ff">char</span>
				<span style="COLOR: #000000"> </span>
				<span style="COLOR: #000000">*</span>
				<span style="COLOR: #000000">T,</span>
				<span style="COLOR: #0000ff">int</span>
				<span style="COLOR: #000000"> </span>
				<span style="COLOR: #000000">*</span>
				<span style="COLOR: #000000">next)<br />{<br />   </span>
				<span style="COLOR: #0000ff">int</span>
				<span style="COLOR: #000000">  i </span>
				<span style="COLOR: #000000">=</span>
				<span style="COLOR: #000000"> </span>
				<span style="COLOR: #000000">0</span>
				<span style="COLOR: #000000">, j </span>
				<span style="COLOR: #000000">=-</span>
				<span style="COLOR: #000000">1</span>
				<span style="COLOR: #000000">; <br />   next[</span>
				<span style="COLOR: #000000">0</span>
				<span style="COLOR: #000000">] </span>
				<span style="COLOR: #000000">=-</span>
				<span style="COLOR: #000000">1</span>
				<span style="COLOR: #000000">;<br />     </span>
				<span style="COLOR: #0000ff">while</span>
				<span style="COLOR: #000000"> (i</span>
				<span style="COLOR: #000000">&lt;</span>
				<span style="COLOR: #000000">length(T))<br />     {<br />          </span>
				<span style="COLOR: #0000ff">if</span>
				<span style="COLOR: #000000">(j</span>
				<span style="COLOR: #000000">==-</span>
				<span style="COLOR: #000000">1</span>
				<span style="COLOR: #000000">||</span>
				<span style="COLOR: #000000">T[i]</span>
				<span style="COLOR: #000000">==</span>
				<span style="COLOR: #000000">T[j]) <br />            {             <br />              </span>
				<span style="COLOR: #000000">++</span>
				<span style="COLOR: #000000"> i;<br />              </span>
				<span style="COLOR: #000000">++</span>
				<span style="COLOR: #000000"> j; <br />              cout</span>
				<span style="COLOR: #000000">&lt;&lt;</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">i=</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">&lt;&lt;</span>
				<span style="COLOR: #000000">i</span>
				<span style="COLOR: #000000">&lt;&lt;</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">j=</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">&lt;&lt;</span>
				<span style="COLOR: #000000">j</span>
				<span style="COLOR: #000000">&lt;&lt;</span>
				<span style="COLOR: #000000">endl;<br />              next[i]</span>
				<span style="COLOR: #000000">=</span>
				<span style="COLOR: #000000">j;              <br />             }<br />            </span>
				<span style="COLOR: #0000ff">else</span>
				<span style="COLOR: #000000"> j</span>
				<span style="COLOR: #000000">=</span>
				<span style="COLOR: #000000">next[j];<br />          }</span>
				<span style="COLOR: #008000">//</span>
				<span style="COLOR: #008000">end while    </span>
				<span style="COLOR: #008000">
						<br />
				</span>
				<span style="COLOR: #000000">  </span>
				<span style="COLOR: #0000ff">for</span>
				<span style="COLOR: #000000">(</span>
				<span style="COLOR: #0000ff">int</span>
				<span style="COLOR: #000000"> l</span>
				<span style="COLOR: #000000">=</span>
				<span style="COLOR: #000000">0</span>
				<span style="COLOR: #000000">;l</span>
				<span style="COLOR: #000000">&lt;</span>
				<span style="COLOR: #000000">length(T);l</span>
				<span style="COLOR: #000000">++</span>
				<span style="COLOR: #000000">)<br />     cout</span>
				<span style="COLOR: #000000">&lt;&lt;</span>
				<span style="COLOR: #000000">next[l]</span>
				<span style="COLOR: #000000">&lt;&lt;</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">\t</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">;<br />     <br />cout</span>
				<span style="COLOR: #000000">&lt;&lt;</span>
				<span style="COLOR: #000000">endl;<br />}<br /></span>
				<span style="COLOR: #008000">//</span>
				<span style="COLOR: #008000"> KMP算法</span>
				<span style="COLOR: #008000">
						<br />
				</span>
				<span style="COLOR: #0000ff">void</span>
				<span style="COLOR: #000000"> KMP_Find(</span>
				<span style="COLOR: #0000ff">char</span>
				<span style="COLOR: #000000"> </span>
				<span style="COLOR: #000000">*</span>
				<span style="COLOR: #000000">s, </span>
				<span style="COLOR: #0000ff">char</span>
				<span style="COLOR: #000000"> </span>
				<span style="COLOR: #000000">*</span>
				<span style="COLOR: #000000">T)<br />{<br />          </span>
				<span style="COLOR: #0000ff">int</span>
				<span style="COLOR: #000000"> i</span>
				<span style="COLOR: #000000">=</span>
				<span style="COLOR: #000000">0</span>
				<span style="COLOR: #000000">, j</span>
				<span style="COLOR: #000000">=</span>
				<span style="COLOR: #000000">0</span>
				<span style="COLOR: #000000">,k</span>
				<span style="COLOR: #000000">=</span>
				<span style="COLOR: #000000">length(s);<br />          cout</span>
				<span style="COLOR: #000000">&lt;&lt;</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">k=</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">&lt;&lt;</span>
				<span style="COLOR: #000000">k</span>
				<span style="COLOR: #000000">&lt;&lt;</span>
				<span style="COLOR: #000000">endl;<br />          </span>
				<span style="COLOR: #0000ff">int</span>
				<span style="COLOR: #000000"> </span>
				<span style="COLOR: #000000">*</span>
				<span style="COLOR: #000000">next</span>
				<span style="COLOR: #000000">=</span>
				<span style="COLOR: #0000ff">new</span>
				<span style="COLOR: #000000"> </span>
				<span style="COLOR: #0000ff">int</span>
				<span style="COLOR: #000000">[k];<br />          get_next(T,next);<br />          </span>
				<span style="COLOR: #0000ff">while</span>
				<span style="COLOR: #000000"> (i</span>
				<span style="COLOR: #000000">&lt;</span>
				<span style="COLOR: #000000">k)<br />          {<br />              </span>
				<span style="COLOR: #0000ff">if</span>
				<span style="COLOR: #000000"> (j</span>
				<span style="COLOR: #000000">=-</span>
				<span style="COLOR: #000000">1</span>
				<span style="COLOR: #000000">||</span>
				<span style="COLOR: #000000">s[i] </span>
				<span style="COLOR: #000000">==</span>
				<span style="COLOR: #000000"> T[j]){ </span>
				<span style="COLOR: #000000">++</span>
				<span style="COLOR: #000000">i; </span>
				<span style="COLOR: #000000">++</span>
				<span style="COLOR: #000000">j; }<br />              </span>
				<span style="COLOR: #0000ff">else</span>
				<span style="COLOR: #000000"> j </span>
				<span style="COLOR: #000000">=</span>
				<span style="COLOR: #000000"> next[j];<br />          }<br />          </span>
				<span style="COLOR: #0000ff">if</span>
				<span style="COLOR: #000000"> (j</span>
				<span style="COLOR: #000000">&gt;=</span>
				<span style="COLOR: #000000">length(T))  cout</span>
				<span style="COLOR: #000000">&lt;&lt;</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">查找完毕!未找到</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">&lt;&lt;</span>
				<span style="COLOR: #000000">endl;<br />          </span>
				<span style="COLOR: #0000ff">else</span>
				<span style="COLOR: #000000">  cout</span>
				<span style="COLOR: #000000">&lt;&lt;</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">查找成功!</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">;<br />          <br />}<br /></span>
				<span style="COLOR: #008000">/*</span>
				<span style="COLOR: #008000"> 原始查找算法 </span>
				<span style="COLOR: #008000">*/</span>
				<span style="COLOR: #000000">
						<br />
				</span>
				<span style="COLOR: #0000ff">void</span>
				<span style="COLOR: #000000"> find(</span>
				<span style="COLOR: #0000ff">char</span>
				<span style="COLOR: #000000"> </span>
				<span style="COLOR: #000000">*</span>
				<span style="COLOR: #000000">s,</span>
				<span style="COLOR: #0000ff">char</span>
				<span style="COLOR: #000000"> </span>
				<span style="COLOR: #000000">*</span>
				<span style="COLOR: #000000">T)<br />{<br /> </span>
				<span style="COLOR: #0000ff">int</span>
				<span style="COLOR: #000000"> i</span>
				<span style="COLOR: #000000">=</span>
				<span style="COLOR: #000000">0</span>
				<span style="COLOR: #000000">,j</span>
				<span style="COLOR: #000000">=</span>
				<span style="COLOR: #000000">0</span>
				<span style="COLOR: #000000">,k</span>
				<span style="COLOR: #000000">=</span>
				<span style="COLOR: #000000">length(s);<br /> </span>
				<span style="COLOR: #0000ff">if</span>
				<span style="COLOR: #000000">(j</span>
				<span style="COLOR: #000000">&lt;</span>
				<span style="COLOR: #000000">length(T)</span>
				<span style="COLOR: #000000">&amp;&amp;</span>
				<span style="COLOR: #000000">i</span>
				<span style="COLOR: #000000">&lt;</span>
				<span style="COLOR: #000000">k)<br />  {<br />  </span>
				<span style="COLOR: #0000ff">if</span>
				<span style="COLOR: #000000">(s[i]</span>
				<span style="COLOR: #000000">==</span>
				<span style="COLOR: #000000">T[j])<br />   {<br />   j</span>
				<span style="COLOR: #000000">++</span>
				<span style="COLOR: #000000">;<br />   i</span>
				<span style="COLOR: #000000">++</span>
				<span style="COLOR: #000000">;<br />   } <br />  </span>
				<span style="COLOR: #0000ff">else</span>
				<span style="COLOR: #000000"> {i</span>
				<span style="COLOR: #000000">=</span>
				<span style="COLOR: #000000">i</span>
				<span style="COLOR: #000000">-</span>
				<span style="COLOR: #000000">j</span>
				<span style="COLOR: #000000">+</span>
				<span style="COLOR: #000000">1</span>
				<span style="COLOR: #000000">;j</span>
				<span style="COLOR: #000000">=</span>
				<span style="COLOR: #000000">0</span>
				<span style="COLOR: #000000">;} <br />  }<br />  </span>
				<span style="COLOR: #0000ff">if</span>
				<span style="COLOR: #000000">(j</span>
				<span style="COLOR: #000000">=</span>
				<span style="COLOR: #000000">length(T)</span>
				<span style="COLOR: #000000">-</span>
				<span style="COLOR: #000000">1</span>
				<span style="COLOR: #000000">)<br />  cout</span>
				<span style="COLOR: #000000">&lt;&lt;</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">find is sucess!</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">&lt;&lt;</span>
				<span style="COLOR: #000000">endl;<br />  </span>
				<span style="COLOR: #0000ff">else</span>
				<span style="COLOR: #000000"> <br />  cout</span>
				<span style="COLOR: #000000">&lt;&lt;</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">error!</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">&lt;&lt;</span>
				<span style="COLOR: #000000">endl;<br />}<br /> </span>
				<span style="COLOR: #008000">/*</span>
				<span style="COLOR: #008000"> 测试函数 </span>
				<span style="COLOR: #008000">*/</span>
				<span style="COLOR: #000000">
						<br />
				</span>
				<span style="COLOR: #0000ff">void</span>
				<span style="COLOR: #000000"> main()<br />{<br /> </span>
				<span style="COLOR: #0000ff">char</span>
				<span style="COLOR: #000000"> </span>
				<span style="COLOR: #000000">*</span>
				<span style="COLOR: #000000">s</span>
				<span style="COLOR: #000000">=</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">abcdefhighcbcccfghiabcdefghikl</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">;<br /> </span>
				<span style="COLOR: #0000ff">char</span>
				<span style="COLOR: #000000"> </span>
				<span style="COLOR: #000000">*</span>
				<span style="COLOR: #000000">T</span>
				<span style="COLOR: #000000">=</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">cbcbc</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">;<br /> find(s,T);<br /> KMP_Find(s,T);<br />    <br />}<br /></span>
		</div>
<img src ="http://www.cppblog.com/snowhill/aggbug/17384.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/snowhill/" target="_blank">snowhill</a> 2007-01-07 11:40 <a href="http://www.cppblog.com/snowhill/archive/2007/01/07/17384.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>整数溢出问题</title><link>http://www.cppblog.com/snowhill/archive/2006/12/31/17103.html</link><dc:creator>snowhill</dc:creator><author>snowhill</author><pubDate>Sun, 31 Dec 2006 12:24:00 GMT</pubDate><guid>http://www.cppblog.com/snowhill/archive/2006/12/31/17103.html</guid><wfw:comment>http://www.cppblog.com/snowhill/comments/17103.html</wfw:comment><comments>http://www.cppblog.com/snowhill/archive/2006/12/31/17103.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/snowhill/comments/commentRss/17103.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/snowhill/services/trackbacks/17103.html</trackback:ping><description><![CDATA[
		<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee">
				<span style="COLOR: #000000">#include </span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">iostream.h</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">
						<br />
				</span>
				<span style="COLOR: #0000ff">void</span>
				<span style="COLOR: #000000"> main()<br />{<br />    </span>
				<span style="COLOR: #0000ff">int</span>
				<span style="COLOR: #000000"> n</span>
				<span style="COLOR: #000000">=</span>
				<span style="COLOR: #000000">1</span>
				<span style="COLOR: #000000">,sum</span>
				<span style="COLOR: #000000">=</span>
				<span style="COLOR: #000000">0</span>
				<span style="COLOR: #000000">;<br />    cout</span>
				<span style="COLOR: #000000">&lt;&lt;</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">int inquire </span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">&lt;&lt;</span>
				<span style="COLOR: #0000ff">sizeof</span>
				<span style="COLOR: #000000">(</span>
				<span style="COLOR: #0000ff">int</span>
				<span style="COLOR: #000000">)</span>
				<span style="COLOR: #000000">&lt;&lt;</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000"> bytes</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">&lt;&lt;</span>
				<span style="COLOR: #000000">endl;<br /><br /></span>
				<span style="COLOR: #0000ff">while</span>
				<span style="COLOR: #000000">(sum</span>
				<span style="COLOR: #000000">&lt;=</span>
				<span style="COLOR: #000000">4294967295</span>
				<span style="COLOR: #000000">) {sum</span>
				<span style="COLOR: #000000">+=</span>
				<span style="COLOR: #000000">n; n</span>
				<span style="COLOR: #000000">++</span>
				<span style="COLOR: #000000">;}<br /><br />cout</span>
				<span style="COLOR: #000000">&lt;&lt;</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">n=</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">&lt;&lt;</span>
				<span style="COLOR: #000000">n</span>
				<span style="COLOR: #000000">-</span>
				<span style="COLOR: #000000">1</span>
				<span style="COLOR: #000000">;<br /><br />    <br />}</span>
		</div>上面程序是一个无限循环（在VC6.0中)。如果将4294967295改为4294967294则行。<img src ="http://www.cppblog.com/snowhill/aggbug/17103.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/snowhill/" target="_blank">snowhill</a> 2006-12-31 20:24 <a href="http://www.cppblog.com/snowhill/archive/2006/12/31/17103.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>quicksort</title><link>http://www.cppblog.com/snowhill/archive/2006/12/31/17101.html</link><dc:creator>snowhill</dc:creator><author>snowhill</author><pubDate>Sun, 31 Dec 2006 11:55:00 GMT</pubDate><guid>http://www.cppblog.com/snowhill/archive/2006/12/31/17101.html</guid><wfw:comment>http://www.cppblog.com/snowhill/comments/17101.html</wfw:comment><comments>http://www.cppblog.com/snowhill/archive/2006/12/31/17101.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/snowhill/comments/commentRss/17101.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/snowhill/services/trackbacks/17101.html</trackback:ping><description><![CDATA[
		<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee">
				<span style="COLOR: #000000">#include </span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">iostream.h</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">
						<br />
				</span>
				<span style="COLOR: #0000ff">void</span>
				<span style="COLOR: #000000"> quick_sort(</span>
				<span style="COLOR: #0000ff">int</span>
				<span style="COLOR: #000000"> list[],</span>
				<span style="COLOR: #0000ff">int</span>
				<span style="COLOR: #000000"> left,</span>
				<span style="COLOR: #0000ff">int</span>
				<span style="COLOR: #000000"> right)<br />{<br />    </span>
				<span style="COLOR: #0000ff">int</span>
				<span style="COLOR: #000000"> i</span>
				<span style="COLOR: #000000">=</span>
				<span style="COLOR: #000000">left,j</span>
				<span style="COLOR: #000000">=</span>
				<span style="COLOR: #000000">right,temp</span>
				<span style="COLOR: #000000">=</span>
				<span style="COLOR: #000000">list[i];<br />    </span>
				<span style="COLOR: #0000ff">while</span>
				<span style="COLOR: #000000">(i</span>
				<span style="COLOR: #000000">&lt;</span>
				<span style="COLOR: #000000">j)<br />    {<br />    </span>
				<span style="COLOR: #0000ff">while</span>
				<span style="COLOR: #000000">((i</span>
				<span style="COLOR: #000000">&lt;</span>
				<span style="COLOR: #000000">j)</span>
				<span style="COLOR: #000000">&amp;&amp;</span>
				<span style="COLOR: #000000">(list[j]</span>
				<span style="COLOR: #000000">&gt;</span>
				<span style="COLOR: #000000">temp)) j</span>
				<span style="COLOR: #000000">--</span>
				<span style="COLOR: #000000">    ;<br />        list[i]</span>
				<span style="COLOR: #000000">=</span>
				<span style="COLOR: #000000">list[j];<br />    </span>
				<span style="COLOR: #0000ff">while</span>
				<span style="COLOR: #000000">((i</span>
				<span style="COLOR: #000000">&lt;</span>
				<span style="COLOR: #000000">j)</span>
				<span style="COLOR: #000000">&amp;&amp;</span>
				<span style="COLOR: #000000">(list[i]</span>
				<span style="COLOR: #000000">&lt;=</span>
				<span style="COLOR: #000000">temp)) i</span>
				<span style="COLOR: #000000">++</span>
				<span style="COLOR: #000000">;<br />        list[j]</span>
				<span style="COLOR: #000000">=</span>
				<span style="COLOR: #000000">list[i];<br />    }<br />    list[i]</span>
				<span style="COLOR: #000000">=</span>
				<span style="COLOR: #000000">temp;<br />    </span>
				<span style="COLOR: #0000ff">if</span>
				<span style="COLOR: #000000">(left</span>
				<span style="COLOR: #000000">&lt;</span>
				<span style="COLOR: #000000">i</span>
				<span style="COLOR: #000000">-</span>
				<span style="COLOR: #000000">1</span>
				<span style="COLOR: #000000">)quick_sort(list,left,i</span>
				<span style="COLOR: #000000">-</span>
				<span style="COLOR: #000000">1</span>
				<span style="COLOR: #000000">);<br />    </span>
				<span style="COLOR: #0000ff">if</span>
				<span style="COLOR: #000000">(i</span>
				<span style="COLOR: #000000">+</span>
				<span style="COLOR: #000000">1</span>
				<span style="COLOR: #000000">&lt;</span>
				<span style="COLOR: #000000">right)quick_sort(list,i</span>
				<span style="COLOR: #000000">+</span>
				<span style="COLOR: #000000">1</span>
				<span style="COLOR: #000000">,right);<br />}</span>
		</div>
<img src ="http://www.cppblog.com/snowhill/aggbug/17101.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/snowhill/" target="_blank">snowhill</a> 2006-12-31 19:55 <a href="http://www.cppblog.com/snowhill/archive/2006/12/31/17101.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>linux command </title><link>http://www.cppblog.com/snowhill/archive/2006/12/30/17046.html</link><dc:creator>snowhill</dc:creator><author>snowhill</author><pubDate>Sat, 30 Dec 2006 12:18:00 GMT</pubDate><guid>http://www.cppblog.com/snowhill/archive/2006/12/30/17046.html</guid><wfw:comment>http://www.cppblog.com/snowhill/comments/17046.html</wfw:comment><comments>http://www.cppblog.com/snowhill/archive/2006/12/30/17046.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/snowhill/comments/commentRss/17046.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/snowhill/services/trackbacks/17046.html</trackback:ping><description><![CDATA[
		<font color="#0000ff">cat </font>cd <br />chmod chown <br />cp cut <br /><br />名称：cat <br />使用权限：所有使用者 <br />使用方式：cat [-AbeEnstTuv] [--help] [--version] fileName <br />说明：把档案串连接后传到基本输出（萤幕或加 &gt; fileName 到另一个档案） <br />参数： <br />-n 或 --number 由 1 开始对所有输出的行数编号 <br />-b 或 --number-nonblank 和 -n 相似，只不过对于空白行不编号 <br />-s 或 --squeeze-blank 当遇到有连续两行以上的空白行，就代换为一行的空白行 <br />-v 或 --show-nonprinting <br /><br />范例： <br />cat -n textfile1 &gt; textfile2 把 textfile1 的档案内容加上行号后输入 textfile2 这个档案里 <br />cat -b textfile1 textfile2 &gt;&gt; textfile3 把 textfile1 和 textfile2 的档案内容加上行号（空白行不加）之后将内容附加到 textfile3 <br /><br />名称 : cd <br />使用权限 : 所有使用者 <br /><br />使用方式 : cd [dirName] <br /><br />说明 : 变换工作目录至 dirName。 其中 dirName 表示法可为绝对路径或相对路径。若目录名称省略，则变换至使用者的 home directory (也就是刚 login 时所在的目录)。 <br /><br />另外，"~" 也表示为 home directory 的意思，"." 则是表示目前所在的目录，".." 则表示目前目录位置的上一层目录。 <br /><br />范例 : 跳到 /usr/bin/ : <br />cd /usr/bin <br /><br />跳到自己的 home directory : <br />cd ~ <br /><br />跳到目前目录的上上两层 : <br />cd ../.. <br /><br /><br /><br />指令名称 : chmod <br />使用权限 : 所有使用者 <br /><br />使用方式 : chmod [-cfvR] [--help] [--version] mode file... <br /><br />说明 : Linux/Unix 的档案存取权限分为三级 : 档案拥有者、群组、其他。利用 chmod 可以藉以控制档案如何被他人所存取。 <br /><br />把计 : <br /><br />mode : 权限设定字串，格式如下 : [ugoa...][+-=][rwxX]...][,...]，其中u 表示该档案的拥有者，g 表示与该档案的拥有者属于同一个群体(group)者，o 表示其他以外的人，a 表示这三者皆是。 <br />+ 表示增加权限、- 表示取消权限、= 表示唯一设定权限。 <br />r 表示可读取，w 表示可写入，x 表示可执行，X 表示只有当该档案是个子目录或者该档案已经被设定过为可执行。 <br />-c : 若该档案权限确实已经更改，才显示其更改动作 <br />-f : 若该档案权限无法被更改也不要显示错误讯息 <br />-v : 显示权限变更的详细资料 <br />-R : 对目前目录下的所有档案与子目录进行相同的权限变更(即以递回的方式逐个变更) <br />--help : 显示辅助说明 <br />--version : 显示版本 <br /><br />范例 :将档案 file1.txt 设为所有人皆可读取 : <br />chmod ugo+r file1.txt <br /><br />将档案 file1.txt 设为所有人皆可读取 : <br />chmod a+r file1.txt <br /><br />将档案 file1.txt 与 file2.txt 设为该档案拥有者，与其所属同一个群体者可写入，但其他以外的人则不可写入 : <br />chmod ug+w,o-w file1.txt file2.txt <br /><br />将 ex1.py 设定为只有该档案拥有者可以执行 : <br />chmod u+x ex1.py <br /><br />将目前目录下的所有档案与子目录皆设为任何人可读取 : <br />chmod -R a+r * <br /><br />此外chmod也可以用数字来表示权限如 chmod 777 file <br />语法为：chmod abc file <br /><br />其中a,b,c各为一个数字，分别表示User、Group、及Other的权限。 <br /><br />r=4，w=2，x=1 <br />若要rwx属性则4+2+1=7； <br />若要rw-属性则4+2=6； <br />若要r-x属性则4+1=7。 <br /><br />范例： <br />chmod a=rwx file <br /><br />和 <br />chmod 777 file <br /><br />效果相同 <br />chmod ug=rwx,o=x file <br /><br />和 <br />chmod 771 file <br /><br />效果相同 <br /><br /><br /><br /><br /><br />若用chmod 4755 filename可使此程式具有root的权限 <br /><br /><br />指令名称 : chown <br />使用权限 : root <br /><br />使用方式 : chmod [-cfhvR] [--help] [--version] user[:group] file... <br /><br />说明 : Linux/Unix 是多人多工作业系统，所有的档案皆有拥有者。利用 chown 可以将档案的拥有者加以改变。一般来说，这个指令只有是由系统管理者(root)所使用，一般使用者没有权限可以改变别人的档案拥有者，也没有权限可以自己的档案拥有者改设为别人。只有系统管理者(root)才有这样的权限。 <br /><br />把计 : <br /><br />user : 新的档案拥有者的使用者 IDgroup : 新的档案拥有者的使用者群体(group)-c : 若该档案拥有者确实已经更改，才显示其更改动作-f : 若该档案拥有者无法被更改也不要显示错误讯息-h : 只对于连结(link)进行变更，而非该 link 真正指向的档案-v : 显示拥有者变更的详细资料-R : 对目前目录下的所有档案与子目录进行相同的拥有者变更(即以递回的方式逐个变更)--help : 显示辅助说明--version : 显示版本 <br /><br />范例 : <br />将档案 file1.txt 的拥有者设为 users 群体的使用者 jessie : <br />chown jessie:users file1.txt <br /><br />将目前目录下的所有档案与子目录的拥有者皆设为 users 群体的使用者 lamport : <br />chmod -R lamport:users * <br /><br /><br />名称：cp <br />使用权限：所有使用者 <br /><br />使用方式： <br /><br />cp [options] source dest <br />cp [options] source... directory <br /><br />说明：将一个档案拷贝至另一档案，或将数个档案拷贝至另一目录。 <br /><br />把计� <br /><br />-a 尽可能将档案状态、权限等资料都照原状予以复制。 <br />-r 若 source 中含有目录名，则将目录下之档案亦皆依序拷贝至目的地。 <br />-f 若目的地已经有相同档名的档案存在，则在复制前先予以删除再行复制。 <br />范例： <br />将档案 aaa 复制(已存在)，并命名为 bbb : <br />cp aaa bbb <br /><br />将所有的C语言程式拷贝至 Finished 子目录中 : <br />cp *.c Finished <br /><br /><br /><br />名称：cut <br /><br />使用权限：所有使用者 <br /><br />用法：cut -cnum1-num2 filename <br /><br />说明：显示每行从开头算起 num1 到 num2 的文字。 <br /><br />范例： <br /><br />shell&gt;&gt; cat example <br />test2 <br />this is test1 <br />shell&gt;&gt; cut -c0-6 example ## print 开头算起前 6 个字元 <br />test2 <br />this i <br /><br /><br />名称 : find <br />用法 : find <br />使用说明 : <br /><br />将档案系统内符合 expression 的档案列出来。你可以指要档案的名称、类别、时间、大小、权限等不同资讯的组合，只有完全相符的才会被列出来。 <br /><br />find 根据下列规则判断 path 和 expression，在命令列上第一个 - ( ) , ! 之前的部份为 path，之后的是 expression。如果 path 是空字串则使用目前路径，如果 expression 是空字串则使用 -print 为预设 expression� <br /><br />expression 中可使用的选项有二三十个之多，在此只介绍最常用的部份。 <br /><br />-mount, -xdev : 只检查和指定目录在同一个档案系统下的档案，避免列出其它档案系统中的档案 <br />-amin n : 在过去 n 分钟内被读取过 <br />-anewer file : 比档案 file 更晚被读取过的档案 <br />-atime n : 在过去 n 天过读取过的档案 <br />-cmin n : 在过去 n 分钟内被修改过 <br />-cnewer file :比档案 file 更新的档案 <br />-ctime n : 在过去 n 天过修改过的档案 <br />-empty : 空的档案-gid n or -group name : gid 是 n 或是 group 名称是 name <br />-ipath p, -path p : 路径名称符合 p 的档案，ipath 会忽略大小写 <br />-name name, -iname name : 档案名称符合 name 的档案。iname 会忽略大小写 <br />-size n : 档案大小 是 n 单位，b 代表 512 位元组的区块，c 表示字元数，k 表示 kilo bytes，w 是二个位元组。-type c : 档案类型是 c 的档案。 <br />d: 目录 <br />c: 字型装置档案 <br />b: 区块装置档案 <br />p: 具名贮列 <br />f: 一般档案 <br />l: 符号连结 <br />s: socket <br />-pid n : process id 是 n 的档案 <br /><br />你可以使用 ( ) 将运算式分隔，并使用下列运算。 <br />exp1 -and exp2 <br />! expr <br />-not expr <br />exp1 -or exp2 <br />exp1, exp2 <br />范例: <br />将目前目录及其子目录下所有延伸档名是 c 的档案列出来。 <br /># find . -name "*.c" <br /><br /><br />将目前目录其其下子目录中所有一般档案列出 <br /># find . -ftype f <br /><br /><br />将目前目录及其子目录下所有最近 20 分钟内更新过的档案列出 <br /># find . -ctime -20 <br /><br /><br /><br />名称：less <br /><br />使用权限：所有使用者 <br /><br />使用方式： <br /><br />less [Option] filename <br /><br />说明： <br />less 的作用与 more 十分相似，都可以用来浏览文字档案的内容，不同的是 less 允许使用者往回卷动 <br />以浏览已经看过的部份，同时因为 less 并未在一开始就读入整个档案，因此在遇上大型档案的开启时，会比一般的文书编辑器(如 vi)来的快速。 <br /><br /><br />范例： <br /><br /><br />指令名称 : ln <br />使用权限 : 所有使用者 <br /><br />使用方式 : ln [options] source dist，其中 option 的格式为 : <br /><br />[-bdfinsvF] [-S backup-suffix] [-V {numbered,existing,simple}] <br />[--help] [--version] [--] <br />说明 : Linux/Unix 档案系统中，有所谓的连结(link)，我们可以将其视为档案的别名，而连结又可分为两种 : 硬连结(hard link)与软连结(symbolic link)，硬连结的意思是一个档案可以有多个名称，而软连结的方式则是产生一个特殊的档案，该档案的内容是指向另一个档案的位置。硬连结是存在同一个档案系统中，而软连结却可以跨越不同的档案系统。 <br />ln source dist 是产生一个连结(dist)到 source，至于使用硬连结或软链结则由参数决定。 <br /><br />不论是硬连结或软链结都不会将原本的档案复制一份，只会占用非常少量的磁碟空间。 <br /><br /><br />-f : 链结时先将与 dist 同档名的档案删除-d : 允许系统管理者硬链结自己的目录-i : 在删除与 dist 同档名的档案时先进行询问-n : 在进行软连结时，将 dist 视为一般的档案-s : 进行软链结(symbolic link)-v : 在连结之前显示其档名-b : 将在链结时会被覆写或删除的档案进行备份-S SUFFIX : 将备份的档案都加上 SUFFIX 的字尾-V METHOD : 指定备份的方式--help : 显示辅助说明--version : 显示版本 <br />范例 : <br />将档案 yy 产生一个 symbolic link : zz <br />ln -s yy zz <br /><br />将档案 yy 产生一个 hard link : zz <br />ln yy xx <br /><br /><br /><br />名称：locate <br />使用权限：所有使用者 <br />使用方式： locate [-q] [-d ] [--database=] <br />locate [-r ] [--regexp=] <br />locate [-qv] [-o ] [--output=] <br />locate [-e ] [-f ] &lt;[-l ] [-c] <br />&lt;[-U ] [-u]&gt; <br />locate [-Vh] [--version] [--help] <br />说明： <br />locate 让使用者可以很快速的搜寻档案系统内是否有指定的档案。其方法是先建立一个包括系统内所有档案名称及路径的资料库，之后当寻找时就只需查询这个资料库，而不必实际深入档案系统之中了。 <br /><br />在一般的 distribution 之中，资料库的建立都被放在 contab 中自动执行。一般使用者在使用时只要用 <br /><br /># locate your_file_name <br /><br />的型式就可以了。 参数： <br />-u <br />-U <br /><br />建立资料库，-u 会由根目录开始，-U 则可以指定开始的位置。 <br /><br />-e <br /><br />将 <br />排除在寻找的范围之外。 <br /><br />-l <br />如果 是 1．则启动安全模式。在安全模式下，使用者不会看到权限无法看到的档案。这会始速度减慢，因为 locate 必须至实际的档案系统中取得档案的权限资料。 <br /><br />-f <br />将特定的档案系统排除在外，例如我们没有到理要把 proc 档案系统中的档案放在资料库中。 <br /><br />-q <br />安静模式，不会显示任何错误讯息。 <br /><br />-n <br />至多显示 个输出。 <br /><br />-r <br />使用正规运算式 做寻找的条件。 <br /><br />-o <br />指定资料库存的名称。 <br /><br />-d <br /><br />指定资料库的路径 <br /><br />-h <br />显示辅助讯息 <br /><br />-v <br />显示更多的讯息 <br /><br />-V <br />显示程式的版本讯息 范例： <br /><br />locate chdrv : 寻找所有叫 chdrv 的档案 <br />locate -n 100 a.out : 寻找所有叫 a.out 的档案，但最多只显示 100 个 <br />locate -u : 建立资料库 <br /><br /><br />名称 : ls <br />使用权限 : 所有使用者 <br /><br />使用方式 : ls [-alrtAFR] [name...] <br /><br />说明 : 显示指定工作目录下之内容（列出目前工作目录所含之档案及子目录)。 <br /><br /><br />-a 显示所有档案及目录 (ls内定将档案名或目录名称开头为"."的视为隐藏档，不会列出) <br />-l 除档案名称外，亦将档案型态、权限、拥有者、档案大小等资讯详细列出 <br />-r 将档案以相反次序显示(原定依英文字母次序) <br />-t 将档案依建立时间之先后次序列出 <br />-A 同 -a ，但不列出 "." (目前目录) 及 ".." (父目录) <br />-F 在列出的档案名称后加一符号；例如可执行档则加 "*", 目录则加 "/" <br />-R 若目录下有档案，则以下之档案亦皆依序列出 <br /><br />范例： <br />列出目前工作目录下所有名称是 s 开头的档案，愈新的排愈后面 : <br />ls -ltr s* <br /><br />将 /bin 目录以下所有目录及档案详细资料列出 : <br />ls -lR /bin <br /><br />列出目前工作目录下所有档案及目录；目录于名称后加 "/", 可执行档于名称后加 "*" : <br />ls -AF <br /><br />名称：more <br />使用权限：所有使用者 <br />使用方式：more [-dlfpcsu] [-num] [+/pattern] [+linenum] [fileNames..] <br />说明：类似 cat ，不过会以一页一页的显示方便使用者逐页阅读，而最基本的指令就是按空白键（space）就往下一页显示，按 b 键就会往回（back）一页显示，而且还有搜寻字串的功能（与 vi 相似），使用中的说明文件，请按 h 。 <br />参数：-num 一次显示的行数 <br />-d 提示使用者，在画面下方显示 [Press space to continue, q to quit.] ，如果使用者按错键，则会显示 [Press h for instructions.] 而不是 哔 声 <br />-l 取消遇见特殊字元 ^L（送纸字元）时会暂停的功能 <br />-f 计算行数时，以实际上的行数，而非自动换行过后的行数（有些单行字数太长的会被扩展为两行或两行以上） <br />-p 不以卷动的方式显示每一页，而是先清除萤幕后再显示内容 <br />-c 跟 -p 相似，不同的是先显示内容再清除其他旧资料 <br />-s 当遇到有连续两行以上的空白行，就代换为一行的空白行 <br />-u 不显示下引号 （根据环境变数 TERM 指定的 terminal 而有所不同） <br />+/ 在每个档案显示前搜寻该字串（pattern），然后从该字串之后开始显示 <br />+num 从第 num 行开始显示 <br />fileNames 欲显示内容的档案，可为复数个数 <br />范例： <br />more -s testfile 逐页显示 testfile 之档案内容，如有连续两行以上空白行则以一行空白行显示。 <br />more +20 testfile 从第 20 行开始显示 testfile 之档案内容。 <br /><br /><br />名称：mv <br />使用权限：所有使用者 <br /><br />使用方式： <br /><br />mv [options] source dest <br />mv [options] source... directory <br />说明：将一个档案移至另一档案，或将数个档案移至另一目录。 <br />参数：-i 若目的地已有同名档案，则先询问是否覆盖旧档。 <br /><br />范例： <br /><br />将档案 aaa 更名为 bbb : <br />mv aaa bbb <br /><br />将所有的C语言程式移至 Finished 子目录中 : <br />mv -i *.c <br /><br /><br /><br />名称：rm <br />使用权限：所有使用者 <br /><br />使用方式：rm [options] name... <br /><br />说明：删除档案及目录。 <br /><br />把计� <br /><br />-i 删除前逐一询问确认。 <br />-f 即使原档案属性设为唯读，亦直接删除，无需逐一确认。 <br />-r 将目录及以下之档案亦逐一删除。 <br />范例： <br />删除所有C语言程式档；删除前逐一询问确认 : <br />rm -i *.c <br /><br />将 Finished 子目录及子目录中所有档案删除 : <br />rm -r Finished <br /><br /><br /><br />名称：rmdir <br />使用权限：于目前目录有适当权限的所有使用者 <br /><br />使用方式： rmdir [-p] dirName <br /><br />说明： 删除空的目录。 <br /><br />参数： -p 是当子目录被删除后使它也成为空目录的话，则顺便一并删除。 <br /><br />范例： <br /><br />将工作目录下，名为 AAA 的子目录删除 : <br />rmdir AAA <br /><br />在工作目录下的 BBB 目录中，删除名为 Test 的子目录。若 Test 删除后，BBB 目录成为空目录，则 BBB 亦予删除。 <br />rmdir -p BBB/Test <br /><br /><br /><br />名称：split <br />使用权限：所有使用者 <br /><br />使用方式：split [OPTION] [INPUT [PREFIX] <br /><br />说明： <br /><br />将一个档案分割成数个。而从 INPUT 分割输出成固定大小的档案，其档名依序为 PREFIXaa, PREFIXab...；PREFIX 预设值为 `x。若没有 INPUT 档或为 `-，则从标准输入读进资料。 <br /><br />匡兜� <br /><br />-b, --bytes=SIZE <br /><br />SIZE 值为每一输出档案的大小，单位为 byte。 <br />-C, --line-bytes=SIZE <br /><br />每一输出档中，单行的最大 byte 数。 <br />-l, --lines=NUMBER <br /><br />NUMBER 值为每一输出档的列数大小。 <br />-NUMBER <br /><br />与 -l NUMBER 相同。 <br />--verbose <br /><br />于每个输出档被开启前，列印出侦错资讯到标准错误输出。 <br />--help <br /><br />显示辅助资讯然后离开。 <br />--version <br /><br />列出版本资讯然后离开。 <br />SIZE 可加入单位: b 代表 512， k 代表 1K， m 代表 1 Meg。 <br /><br />范例： <br /><br />PostgresSQL 大型资料库备份与回存： <br /><br />因 Postgres 允许表格大过你系统档案的最大容量，所以要将表格 dump 到单一的档案可能会有问题，使用 split进行档案分割。 <br /><br /><br />% pg_dump dbname | split -b 1m - filename.dump. <br /><br /><br /><br />重新载入 <br /><br /><br />% createdb dbname <br />% cat filename.dump.* | pgsql dbname <br /><br /><br /><br />名称：touch <br />使用权限：所有使用者 <br /><br />使用方式： <br />touch [-acfm] <br />[-r reference-file] [--file=reference-file] <br />[-t MMDDhhmm[CC]YY][.ss] <br />[-d time] [--date=time] [--time={atime,access,use,mtime,modify}] <br />[--no-create] [--help] [--version] <br />file1 [file2 ...] <br /><br /><br />说明： <br />touch 指令改变档案的时间记录。 ls -l 可以显示档案的时间记录。 <br /><br /><br />参数： <br />a 改变档案的读取时间记录。 <br />m 改变档案的修改时间记录。 <br />c 假如目的档案不存在，不会建立新的档案。与 --no-create 的效果一样。 <br />f 不使用，是为了与其他 unix 系统的相容性而保留。 <br />r 使用参考档的时间记录，与 --file 的效果一样。 <br />d 设定时间与日期，可以使用各种不同的格式。 <br />t 设定档案的时间记录，格式与 date 指令相同。 <br />--no-create 不会建立新档案。 <br />--help 列出指令格式。 <br />--version 列出版本讯息。 <br /><br /><br />范例： <br /><br /><br />最简单的使用方式，将档案的时候记录改为现在的时间。若档案不存在，系统会建立一个新的档案。 <br /><br />touch file <br />touch file1 file2 <br /><br />将 file 的时间记录改为 5 月 6 日 18 点 3 分，公元两千年。时间的格式可以参考 date 指令，至少需输入 MMDDHHmm ，就是月日时与分。 <br /><br />touch -c -t 05061803 file <br />touch -c -t 050618032000 file <br /><br />将 file 的时间记录改变成与 referencefile 一样。 <br /><br />touch -r referencefile file <br /><br />将 file 的时间记录改成 5 月 6 日 18 点 3 分，公元两千年。时间可以使用 am, pm 或是 24 小时的格式，日期可以使用其他格式如 6 May 2000 。 <br /><br />touch -d "6:03pm" file <br />touch -d "05/06/2000" file <br />touch -d "6:03pm 05/06/2000" file <br />名称 : at <br />使用权限 : 所有使用者 <br /><br />使用方式 : at -V [-q queue] [-f file] [-mldbv] TIME <br /><br />说明 : at 可以让使用者指定在 TIME 这个特定时刻执行某个程式或指令，TIME 的格式是 HH:MM其中的 HH 为小时，MM 为分钟，甚至你也可以指定 am, pm, midnight, noon, teatime(就是下午 4 点锺)等口语词。 <br /><br />如果想要指定超过一天内的时间，则可以用 MMDDYY 或者 MM/DD/YY 的格式，其中 MM 是分钟，DD 是第几日，YY 是指年份。另外，使用者甚至也可以使用像是 now + 时间间隔来弹性指定时间，其中的时间间隔可以是 minutes, hours, days, weeks� <br /><br />另外，使用者也可指定 today 或 tomorrow 来表示今天或明天。当指定了时间并按下 enter 之后，at 会进入交谈模式并要求输入指令或程式，当你输入完后按下 ctrl+D 即可完成所有动作，至于执行的结果将会寄回你的帐号中。 <br /><br />把计 : <br /><br />-V : 印出版本编号 <br />-q : 使用指定的伫列(Queue)来储存，at 的资料是存放在所谓的 queue 中，使用者可以同时使用多个 queue，而 queue 的编号为 a, b, c... z 以及 A, B, ... Z 共 52 个 <br />-m : 即使程式/指令执行完成后没有输出结果, 也要寄封信给使用者 <br />-f file : 读入预先写好的命令档。使用者不一定要使用交谈模式来输入，可以先将所有的指定先写入档案后再一次读入 <br />-l : 列出所有的指定 (使用者也可以直接使用 atq 而不用 at -l) <br />-d : 删除指定 (使用者也可以直接使用 atrm 而不用 at -d) <br />-v : 列出所有已经完成但尚未删除的指定 <br /><br />例子 : <br />三天后的下午 5 点锺执行 /bin/ls : <br />at 5pm + 3 days /bin/ls <br /><br />三个星期后的下午 5 点锺执行 /bin/ls : <br />at 5pm + 2 weeks /bin/ls <br /><br />明天的 17:20 执行 /bin/date : <br />at 17:20 tomorrow /bin/date <br /><br />1999 年的最后一天的最后一分钟印出 the end of world ! <br />at 23:59 12/31/1999 echo the end of world ! <br /><br /><br /><br /><br />名称：cal <br /><br />使用权限：所有使用者 <br /><br />使用方式：cal [-mjy] [month [year] <br /><br />说明： <br /><br />显示日历。若只有一个参数，则代表年份(1-9999)，显示该年的年历。年份必须全部写出：``cal 89 将不会是显示 1989 年的年历。使用两个参数，则表示月份及年份。若没有参数则显示这个月的月历。 <br />1752 年 9 月第 3 日起改用西洋新历，因这时大部份的国家都采用新历，有 10 天被去除，所以该月份的月历有些不同。在此之前为西洋旧历。 <br /><br />匡兜� <br /><br />-m : 以星期一为每周的第一天方式显示。 <br />-j : 以凯撒历显示，即以一月一日起的天数显示。 <br />-y : 显示今年年历。 <br /><br />范例： <br /><br />cal : 显示本月的月历。 <br /><br /><br /><br />[root@mylinux /root]# date <br />Tue Aug 15 08:00:18 CST 2000 <br />[root@mylinux /root]# cal <br />August 2000 <br />Su Mo Tu We Th Fr Sa <br />1 2 3 4 5 <br />6 7 8 9 10 11 12 <br />13 14 15 16 17 18 19 <br />20 21 22 23 24 25 26 <br />27 28 29 30 31 <br /><br />[root@mylinux /root]# <br /><br /><br />cal 2001 : 显示公元 2001 年年历。 <br /><br />[root@mylinux /root]# cal 2001 <br />2001 <br /><br />January February March <br />Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa <br />1 2 3 4 5 6 1 2 3 1 2 3 <br />7 8 9 10 11 12 13 4 5 6 7 8 9 10 4 5 6 7 8 9 10 <br />14 15 16 17 18 19 20 11 12 13 14 15 16 17 11 12 13 14 15 16 17 <br />21 22 23 24 25 26 27 18 19 20 21 22 23 24 18 19 20 21 22 23 24 <br />28 29 30 31 25 26 27 28 25 26 27 28 29 30 31 <br /><br />April May June <br />Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa <br />1 2 3 4 5 6 7 1 2 3 4 5 1 2 <br />8 9 10 11 12 13 14 6 7 8 9 10 11 12 3 4 5 6 7 8 9 <br />15 16 17 18 19 20 21 13 14 15 16 17 18 19 10 11 12 13 14 15 16 <br />22 23 24 25 26 27 28 20 21 22 23 24 25 26 17 18 19 20 21 22 23 <br />29 30 27 28 29 30 31 24 25 26 27 28 29 30 <br /><br />July August September <br />Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa <br />1 2 3 4 5 6 7 1 2 3 4 1 <br />8 9 10 11 12 13 14 5 6 7 8 9 10 11 2 3 4 5 6 7 8 <br />15 16 17 18 19 20 21 12 13 14 15 16 17 18 9 10 11 12 13 14 15 <br />22 23 24 25 26 27 28 19 20 21 22 23 24 25 16 17 18 19 20 21 22 <br />29 30 31 26 27 28 29 30 31 23 24 25 26 27 28 29 <br />30 <br />October November December <br />Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa <br />1 2 3 4 5 6 1 2 3 1 <br />7 8 9 10 11 12 13 4 5 6 7 8 9 10 2 3 4 5 6 7 8 <br />14 15 16 17 18 19 20 11 12 13 14 15 16 17 9 10 11 12 13 14 15 <br />21 22 23 24 25 26 27 18 19 20 21 22 23 24 16 17 18 19 20 21 22 <br />28 29 30 31 25 26 27 28 29 30 23 24 25 26 27 28 29 <br />30 31 <br /><br />[root@mylinux /root]# <br /><br /><br /><br /><br /><br />cal 5 2001 : 显示公元 2001 年 5 月月历。 <br /><br /><br /><br />[root@mylinux /root]# cal 5 2001 <br />May 2001 <br />Su Mo Tu We Th Fr Sa <br />1 2 3 4 5 <br />6 7 8 9 10 11 12 <br />13 14 15 16 17 18 19 <br />20 21 22 23 24 25 26 <br />27 28 29 30 31 <br /><br />[root@mylinux /root]# <br /><br /><br /><br /><br /><br />cal -m : 以星期一为每周的第一天方式，显示本月的月历。 <br /><br /><br /><br />[root@mylinux /root]# cal -m <br />August 2000 <br />Mo Tu We Th Fr Sa Su <br />1 2 3 4 5 6 <br />7 8 9 10 11 12 13 <br />14 15 16 17 18 19 20 <br />21 22 23 24 25 26 27 <br />28 29 30 31 <br /><br />[root@mylinux /root]# <br /><br /><br /><br /><br /><br />cal -jy : 以一月一日起的天数显示今年的年历。 <br /><br /><br /><br />[root@mylinux /root]# cal -jy <br />2000 <br /><br />January February <br />Sun Mon Tue Wed Thu Fri Sat Sun Mon Tue Wed Thu Fri Sat <br />1 32 33 34 35 36 <br />2 3 4 5 6 7 8 37 38 39 40 41 42 43 <br />9 10 11 12 13 14 15 44 45 46 47 48 49 50 <br />16 17 18 19 20 21 22 51 52 53 54 55 56 57 <br />23 24 25 26 27 28 29 58 59 60 <br />30 31 <br />March April <br />Sun Mon Tue Wed Thu Fri Sat Sun Mon Tue Wed Thu Fri Sat <br />61 62 63 64 92 <br />65 66 67 68 69 70 71 93 94 95 96 97 98 99 <br />72 73 74 75 76 77 78 100 101 102 103 104 105 106 <br />79 80 81 82 83 84 85 107 108 109 110 111 112 113 <br />86 87 88 89 90 91 114 115 116 117 118 119 120 <br />121 <br />May June <br />Sun Mon Tue Wed Thu Fri Sat Sun Mon Tue Wed Thu Fri Sat <br />122 123 124 125 126 127 153 154 155 <br />128 129 130 131 132 133 134 156 157 158 159 160 161 162 <br />135 136 137 138 139 140 141 163 164 165 166 167 168 169 <br />142 143 144 145 146 147 148 170 171 172 173 174 175 176 <br />149 150 151 152 177 178 179 180 181 182 <br /><br />July August <br />Sun Mon Tue Wed Thu Fri Sat Sun Mon Tue Wed Thu Fri Sat <br />183 214 215 216 217 218 <br />184 185 186 187 188 189 190 219 220 221 222 223 224 225 <br />191 192 193 194 195 196 197 226 227 228 229 230 231 232 <br />198 199 200 201 202 203 204 233 234 235 236 237 238 239 <br />205 206 207 208 209 210 211 240 241 242 243 244 <br />212 213 <br />September October <br />Sun Mon Tue Wed Thu Fri Sat Sun Mon Tue Wed Thu Fri Sat <br />245 246 275 276 277 278 279 280 281 <br />247 248 249 250 251 252 253 282 283 284 285 286 287 288 <br />254 255 256 257 258 259 260 289 290 291 292 293 294 295 <br />261 262 263 264 265 266 267 296 297 298 299 300 301 302 <br />268 269 270 271 272 273 274 303 304 305 <br /><br />November December <br />Sun Mon Tue Wed Thu Fri Sat Sun Mon Tue Wed Thu Fri Sat <br />306 307 308 309 336 337 <br />310 311 312 313 314 315 316 338 339 340 341 342 343 344 <br />317 318 319 320 321 322 323 345 346 347 348 349 350 351 <br />324 325 326 327 328 329 330 352 353 354 355 356 357 358 <br />331 332 333 334 335 359 360 361 362 363 364 365 <br />366 <br /><br />[root@mylinux /root]# <br /><br /><br /><br /><br />名称 : crontab <br />使用权限 : 所有使用者 <br /><br />使用方式 : <br /><br />crontab [ -u user ] filecrontab [ -u user ] { -l | -r | -e } <br />说明 : <br />crontab 是用来让使用者在固定时间或固定间隔执行程式之用，换句话说，也就是类似使用者的时程表。-u user 是指设定指定 user 的时程表，这个前提是你必须要有其权限(比如说是 root)才能够指定他人的时程表。如果不使用 -u user 的话，就是表示设定自己的时程表。 <br /><br />餐数 : <br /><br />-e : 执行文字编辑器来设定时程表，内定的文字编辑器是 VI，如果你想用别的文字编辑器，则请先设定 VISUAL 环境变数来指定使用那个文字编辑器(比如说 setenv VISUAL joe) <br />-r : 删除目前的时程表 <br />-l : 列出目前的时程表 <br /><br />时程表的格式如下 : <br />f1 f2 f3 f4 f5 program <br /><br />其中 f1 是表示分钟，f2 表示小时，f3 表示一个月份中的第几日，f4 表示月份，f5 表示一个星期中的第几天。program 表示要执行的程式。 <br />当 f1 为 * 时表示每分钟都要执行 program，f2 为 * 时表示每小时都要执行程式，其余类推 <br />当 f1 为 a-b 时表示从第 a 分钟到第 b 分钟这段时间内要执行，f2 为 a-b 时表示从第 a 到第 b 小时都要执行，其余类推 <br />当 f1 为 */n 时表示每 n 分钟个时间间隔执行一次，f2 为 */n 表示每 n 小时个时间间隔执行一次，其余类推 <br />当 f1 为 a, b, c,... 时表示第 a, b, c,... 分钟要执行，f2 为 a, b, c,... 时表示第 a, b, c...个小时要执行，其余类推 <br /><br />使用者也可以将所有的设定先存放在档案 file 中，用 crontab file 的方式来设定时程表。 <br />例子 : <br /><br />每月每天每小时的第 0 分钟执行一次 /bin/ls : <br />0 7 * * * /bin/ls <br /><br />在 12 月内, 每天的早上 6 点到 12 点中，每隔 20 分钟执行一次 /usr/bin/backup : <br />0 6-12/3 * 12 * /usr/bin/backup <br /><br />周一到周五每天下午 5:00 寄一封信给 alex@domain.name : <br />0 17 * * 1-5 mail -s "hi" alex@domain.name &lt; /tmp/maildata <br /><br />每月每天的午夜 0 点 20 分, 2 点 20 分, 4 点 20 分....执行 echo "haha" <br />20 0-23/2 * * * echo "haha" <br /><br />注意 : <br /><br />当程式在你所指定的时间执行后，系统会寄一封信给你，显示该程式执行的内容，若是你不希望收到这样的信，请在每一行空一格之后加上 &gt; /dev/null 2&gt;&amp;1 即可。 <br /><br />名称 : date <br />使用权限 : 所有使用者 <br /><br />使用方式 : <br /><br />date [-u] [-d datestr] [-s datestr] [--utc] [--universal] [--date=datestr] [--set=datestr] [--help] [--version] [+formAT] [MMDDhhmm[CC]YY][.ss] <br /><br />说明 : <br /><br />date 可以用来显示或设定系统的日期与时间，在显示方面，使用者可以设定欲显示的格式，格式设定为一个加号后接数个标记，其中可用的标记列表如下 : <br /><br />时间方面 : <br /><br />% : 印出 % <br />%n : 下一行 <br />%t : 跳格 <br />%H : 小时(00..23) <br />%I : 小时(01..12) <br />%k : 小时(0..23) <br />%l : 小时(1..12) <br />%M : 分钟(00..59) <br />%p : 显示本地 AM 或 PM <br />%r : 直接显示时间 (12 小时制，格式为 hh:mm:ss [AP]M) <br />%s : 从 1970 年 1 月 1 日 00:00:00 UTC 到目前为止的秒数 <br />%S : 秒(00..61) <br />%T : 直接显示时间 (24 小时制) <br />%X : 相当于 %H:%M:%S <br />%Z : 显示时区 <br /><br />日期方面 : <br />%a : 星期几 (Sun..Sat) <br />%A : 星期几 (Sunday..Saturday) <br />%b : 月份 (Jan..Dec) <br />%B : 月份 (January..December) <br />%c : 直接显示日期与时间 <br />%d : 日 (01..31) <br />%D : 直接显示日期 (mm/dd/yy) <br />%h : 同 %b <br />%j : 一年中的第几天 (001..366) <br />%m : 月份 (01..12) <br />%U : 一年中的第几周 (00..53) (以 Sunday 为一周的第一天的情形) <br />%w : 一周中的第几天 (0..6) <br />%W : 一年中的第几周 (00..53) (以 Monday 为一周的第一天的情形) <br />%x : 直接显示日期 (mm/dd/yy) <br />%y : 年份的最后两位数字 (00.99) <br />%Y : 完整年份 (0000..9999) <br /><br />若是不以加号作为开头，则表示要设定时间，而时间格式为 MMDDhhmm[CC]YY][.ss]，其中 MM 为月份，DD 为日，hh 为小时，mm 为分钟，CC 为年份前两位数字，YY 为年份后两位数字，ss 为秒数 <br />把计 : <br /><br />-d datestr : 显示 datestr 中所设定的时间 (非系统时间) <br />--help : 显示辅助讯息 <br />-s datestr : 将系统时间设为 datestr 中所设定的时间 <br />-u : 显示目前的格林威治时间 <br />--version : 显示版本编号 <br /><br />例子 : <br />显示时间后跳行，再显示目前日期 : <br />date +%T%n%D <br /><br />显示月份与日数 : <br />date +%B %d <br /><br />显示日期与设定时间(12:34:56) : <br />date --date 12:34:56 <br /><br />注意 : <br /><br />当你不希望出现无意义的 0 时(比如说 1999/03/07)，则可以在标记中插入 - 符号，比如说 date +%-H:%-M:%-S 会把时分秒中无意义的 0 给去掉，像是原本的 08:09:04 会变为 8:9:4。另外，只有取得权限者(比如说 root)才能设定系统时间。 <br /><br />当你以 root 身分更改了系统时间之后，请记得以 clock -w 来将系统时间写入 CMOS 中，这样下次重新开机时系统时间才会持续抱持最新的正确值。 <br /><br /><br />名称 : sleep <br />使用权限 : 所有使用者 <br /><br />使用方式 : sleep [--help] [--version] number[smhd] <br /><br />说明 : sleep 可以用来将目前动作延迟一段时间 <br /><br />参数说明 : <br /><br />--help : 显示辅助讯息 <br />--version : 显示版本编号 <br />number : 时间长度，后面可接 s、m、h 或 d <br />其中 s 为秒，m 为 分钟，h 为小时，d 为日数 <br /><br />例子 : <br />显示目前时间后延迟 1 分钟，之后再次显示时间 : <br />date;sleep 1m;date <br /><br /><br /><br />名称： time <br />使用权限： 所有使用者 <br /><br />使用方式： time [options] COMMAND [arguments] <br /><br />说明： time 指令的用途，在于量测特定指令执行时所需消耗的时间及系统资源等资讯。例如 CPU 时间、记忆体、输入输出等等。需要特别注意的是，部分资讯在 Linux 上显示不出来。这是因为在 Linux 上部分资源的分配函式与 time 指令所预设的方式并不相同，以致于 time 指令无法取得这些资料。 <br /><br />把计� <br /><br />-o or --output=FILE <br />设定结果输出档。这个选项会将 time 的输出写入 所指定的档案中。如果档案已经存在，系统将覆写其内容。 <br />-a or --append <br />配合 -o 使用，会将结果写到档案的末端，而不会覆盖掉原来的内容。 <br />-f formAT or --format=formAT <br />以 formAT 字串设定显示方式。当这个选项没有被设定的时候，会用系统预设的格式。不过你可以用环境变数 time 来设定这个格式，如此一来就不必每次登入系统都要设定一次。 <br />一般设定上，你可以用 <br />t <br />表示跳栏，或者是用 <br />n <br />表示换行。每一项资料要用 % 做为前导。如果要在字串中使用百分比符号，就用 。（学过 C 语言的人大概会觉得很熟悉） <br />time 指令可以显示的资源有四大项，分别是： <br /><br />Time resources <br />Memory resources <br />IO resources <br />Command info <br /><br />详细的内容如下： <br /><br /><br />Time Resources <br />E 执行指令所花费的时间，格式是：[hour]:minute:second。请注意这个数字并不代表实际的 CPU 时间。 <br />e 执行指令所花费的时间，单位是秒。请注意这个数字并不代表实际的 CPU 时间。 <br />S 指令执行时在核心模式（kernel mode）所花费的时间，单位是秒。 <br />U 指令执行时在使用者模式（user mode）所花费的时间，单位是秒。 <br />P 执行指令时 CPU 的占用比例。其实这个数字就是核心模式加上使用者模式的 CPU 时间除以总时间。 <br /><br /><br />Memory Resources <br />M 执行时所占用的实体记忆体的最大值。单位是 KB <br />t 执行时所占用的实体记忆体的平均值，单位是 KB <br />K 执行程序所占用的记忆体总量（stack+data+text）的平均大小，单位是 KB <br />D 执行程序的自有资料区（unshared data area）的平均大小，单位是 KB <br />p 执行程序的自有堆叠（unshared stack）的平均大小，单位是 KB <br />X 执行程序间共享内容（shared text）的平均值，单位是 KB <br />Z 系统记忆体页的大小，单位是 byte。对同一个系统来说这是个常数 <br /><br /><br />IO Resources <br />F 此程序的主要记忆体页错误发生次数。所谓的主要记忆体页错误是指某一记忆体页已经置换到置换档（swap file)中，而且已经分配给其他程序。此时该页的内容必须从置换档里再读出来。 <br />R 此程序的次要记忆体页错误发生次数。所谓的次要记忆体页错误是指某一记忆体页虽然已经置换到置换档中，但尚未分配给其他程序。此时该页的内容并未被破坏，不必从置换档里读出来 <br />W 此程序被交换到置换档的次数 <br />c 此程序被强迫中断（像是分配到的 CPU 时间耗尽）的次数 <br />w 此程序自愿中断（像是在等待某一个 I/O 执行完毕，像是磁碟读取等等）的次数 <br />I 此程序所输入的档案数 <br />O 此程序所输出的档案数 <br />r 此程序所收到的 Socket Message <br />s 此程序所送出的 Socket Message <br />k 此程序所收到的信号 ( Signal )数量 <br /><br /><br />Command Info <br />C 执行时的参数以及指令名称 <br />x 指令的结束代码 ( Exit Status ) <br /><br /><br /><br /><br />-p or --portability <br />这个选项会自动把显示格式设定成为： <br />real %e <br />user %U <br />sys %S <br />这么做的目的是为了与 POSIX 规格相容。 <br />-v or --verbose <br />这个选项会把所有程式中用到的资源通通列出来，不但如一般英文语句，还有说明。对不想花时间去熟习格式设定或是刚刚开始接触这个指令的人相当有用。 <br /><br />范例： <br />利用下面的指令 <br />time -v ps -aux <br /><br />我们可以获得执行 ps -aux 的结果和所花费的系统资源。如下面所列的资料： <br />USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND <br />root 1 0.0 0.4 1096 472 ? S Apr19 0:04 init <br />root 2 0.0 0.0 0 0 ? SW Apr19 0:00 [kflushd] <br />root 3 0.0 0.0 0 0 ? SW Apr19 0:00 [kpiod] <br />...... <br />root 24269 0.0 1.0 2692 996 pts/3 R 12:16 0:00 ps -aux <br /><br />Command being timed: "ps -aux" <br />User time (seconds): 0.05 <br />System time (seconds): 0.06 <br />Percent of CPU this job got: 68% <br />Elapsed (wall clock) time (h:mm:ss or m:ss): 0:00.16 <br />Average shared text size (kbytes): 0 <br />Average unshared data size (kbytes): 0 <br />Average stack size (kbytes): 0 <br />Average total size (kbytes): 0 <br />Maximum resident set size (kbytes): 0 <br />Average resident set size (kbytes): 0 <br />Major (requiring I/O) page faults: 238 <br />Minor (reclaiming a frame) page faults: 46 <br />Voluntary context switches: 0 <br />Involuntary context switches: 0 <br />Swaps: 0 <br />File system inputs: 0 <br />File system outputs: 0 <br />Socket messages sent: 0 <br />Socket messages received: 0 <br />Signals delivered: 0 <br />Page size (bytes): 4096 <br />Exit status: 0 <br /><br /><br /><br />名称： uptime <br />使用权限： 所有使用者 <br />使用方式： uptime [-V] <br />说明： uptime 提供使用者下面的资讯，不需其他参数： <br /><br />现在的时间 <br />系统开机运转到现在经过的时间 <br />连线的使用者数量 <br />最近一分钟，五分钟和十五分钟的系统负载 <br />参数： -V 显示版本资讯。 <br />范例： uptime <br />其结果为： <br />10:41am up 5 days, 10 min, 1 users, load average: 0.00, 0.00, 1.99 <br /><br />名称：chfn <br /><br />使用权限：所有使用者 <br /><br />用法：shell&gt;&gt; chfn <br /><br />说明：提供使用者更改个人资讯，用于 finger and mail username <br /><br />范例： <br /><br />shell&gt;&gt; chfn <br />Changing finger information for user <br />Password: [del] <br />Name[]:Johnney Huang ### 提供 finger 时的资料 <br />Office[]:NCCU <br />Office Phone[]: [del] <br />Home Phone[]: [del] <br /><br /><br />名称：chsh <br /><br />使用权限：所有使用者 <br /><br />用法：shell&gt;&gt; chsh <br /><br />说明：更改使用者 shell 设定 <br /><br />范例： <br /><br />shell&gt;&gt; chsh <br />Changing fihanging shell for user1 <br />Password: [del] <br />New shell [/bin/tcsh]: ### [是目前使用的 shell] <br />[del] <br /><br />shell&gt;&gt; chsh -l ### 展示 /etc/shells 档案内容 <br />/bin/bash <br />/bin/sh <br />/bin/ash <br />/bin/bsh <br />/bin/tcsh <br />/bin/csh <br /><br /><br /><br />” finger [返回] <br />名称： finger <br />使用权限： 所有使用者 <br /><br />使用方式： finger [options] user[@address] <br /><br />说明：finger 可以让使用者查询一些其他使用者的资料。会列出来的资料有： <br /><br />Login Name <br />User Name <br />Home directory <br />Shell <br />Login status <br />mail status <br />.plan <br />.project <br />.forward <br /><br />其中 .plan ，.project 和 .forward 就是使用者在他的 Home Directory 里的 .plan ， .project 和 .forward 等档案里的资料。如果没有就没有。finger 指令并不限定于在同一伺服器上查询，也可以寻找某一个远端伺服器上的使用者。只要给一个像是 E-mail address 一般的地址即可。 <br />把计� <br /><br />-l <br />多行显示。 <br /><br />-s <br />单行显示。这个选项只显示登入名称，真实姓名，终端机名称，闲置时间，登入时间，办公室号码及电话号码。如果所查询的使用者是远端伺服器的使用者，这个选项无效。 <br /><br />范例：下列指令可以查询本机管理员的资料： <br />finger root <br /><br />其结果如下： <br />Login: root Name: root <br />Directory: /root Shell: /bin/bash <br />Never logged in. <br />No mail. <br />No Plan. <br /><br /><br /><br /><br />名称：last <br /><br />使用权限：所有使用者 <br /><br />使用方式：shell&gt;&gt; last [options] <br /><br />说明：显示系统开机以来获是从每月初登入者的讯息 <br /><br />把计� <br /><br />-R 省略 hostname 的栏位 <br />-num 展示前 num 个 <br />username 展示 username 的登入讯息 <br />tty 限制登入讯息包含终端机代号 <br /><br />范例： <br /><br />shell&gt;&gt; last -R -2 <br />johnney pts/1 Mon Aug 14 20:42 still logged in <br />johnney pts/0 Mon Aug 14 19:59 still logged in <br /><br />wtmp begins Tue Aug 1 09:01:10 2000 ### /var/log/wtmp <br /><br /><br />shell&gt;&gt; last -2 minery <br />minery pts/0 140.119.217.115 Mon Aug 14 18:37 - 18:40 (00:03) <br />minery pts/0 140.119.217.115 Mon Aug 14 17:22 - 17:24 (00:02) <br /><br />wtmp begins Tue Aug 1 09:01:10 2000 <br /><br /><br /><br /><br />名称:login <br /><br />这个命令都不会就不要干算了！呵呵我也不在这里多费笔墨耽误大家美好青春了^_^ <br /><br /><br /><br />名称：passwd <br /><br />使用权限：所有使用者 <br /><br />使用方式：passwd [-k] [-l] [-u [-f] [-d] [-S] [username] <br /><br />说明：用来更改使用者的密码 <br /><br />参数： <br />-k <br /><br />-l <br /><br />-u <br /><br />-f <br /><br />-d 关闭使用者的密码认证功能, 使用者在登入时将可以不用输入密码, 只有具备 root 权限的使用者方可使用. <br /><br />-S 显示指定使用者的密码认证种类, 只有具备 root 权限的使用者方可使用. <br /><br />[username] 指定帐号名称. <br /><br /><br />名称 : who <br />使用权线 : 所有使用者都可使用 <br /><br />使用方式 : who - [husfV] [user] <br /><br />说明 : 显示系统中有那些使用者正在上面，显示的资料包含了使用者 ID，使用的终端机，从那边连上来的，上线时间，呆滞时间，CPU 使用量，动作等等。 <br /><br />把计 : <br /><br />-h : 不要显示标题列 <br />-u : 不要显示使用者的动作/工作 <br />-s : 使用简短的格式来显示 <br />-f : 不要显示使用者的上线位置 <br />-V : 显示程式版本 <br />名称：/etc/aliases <br />使用权限：系统管理者 <br />使用方式： 请用 newaliases 更新资料库 <br />说明： <br />sendmail 会使用一个在 /etc/aliases 中的档案做使用者名称转换的动作。当 sendmail 收到一个要送给 xxx 的信时，它会依据 aliases档的内容送给另一个使用者。这个功能可以创造一个只有在信件系统内才有效的使用者。例如 mailing list 就会用到这个功能，在 mailinglist 中，我们可能会创造一个叫 redlinux@link.ece.uci.edu 的 mailinglist，但实际上并没有一个叫 redlinux 的使用者。实际 aliases 档的内容是将送给这个使用者的信都收给 mailing list 处理程式负责分送的工作。 <br /><br />/etc/aliases 是一个文字模式的档案，sendmail 需要一个二进位格式的 /etc/aliases.db。newaliases 的功能传是将 /etc/aliases 转换成一个 sendmail 所能了解的资料库。范例： <br /># newaliases <br /><br />下面命令会做相同的事， <br /># sendmail -bi <br /><br />相关命令: <br />mail, mailq, newaliases, sendmail <br /><br />” mail [返回] <br />名称：mail <br /><br />使用权限：所有使用者 <br /><br /><br />使用方式：mail [-iInv] [-s subject] [-c cc-addr] [-b bcc-addr] user1 [user 2 ...] <br /><br /><br />说明： <br />mail 不仅只是一个指令， mail 还是一个电子邮件程式，不过利用 mail 来读信的人应该很少吧！对于系统管理者来说 mail 就很有用，因为管理者可以用 mail 写成 script ，定期寄一些备忘录提醒系统的使用者。 <br /><br /><br />参数： <br />i 忽略 tty 的中断讯号。 (interrupt) <br />I 强迫设成互动模式。 (Interactive) <br />v 列印出讯息，例如送信的地点、状态等等。 (verbose) <br />n 不读入 mail.rc 设定档。 <br />s 邮件标题。 <br />c cc 邮件地址。 <br />b bcc 邮件地址。 <br /><br /><br />范例： <br /><br /><br />将信件送给一个或以上的电子邮件地址，由于没有加入其他的选项，使用者必须输入标题与信件的内容等。而 user2 没有主机位置，就会送给邮件伺服器的 user2 使用者。 <br /><br />mail user1@email.address <br />mail user1@email.address user2 <br /><br />将 mail.txt 的内容寄给 user2 同时 cc 给 user1 。如果将这一行指令设成 cronjob 就可以定时将备忘录寄给系统使用者。 <br /><br />mail -s 标题 -c user1 user2 &lt; mail.txt <br /><br />指令：mesg <br />使用权限 : 所有使用者 <br /><br />使用方式 : mesg [y|n] <br /><br />说明 ： 决定是否允许其他人传讯息到自己的终端机介面 <br /><br /><br />把计 � <br /><br />y : 允许讯息传到终端机介面上。 <br />n : 不允许讯息传到终端机介面上 。 <br />如果没有设定，则讯息传递与否则由终端机界面目前状态而定。 <br /><br />例子 : <br />改变目前讯息设定，改成不允许讯息传到终端机介面上 : <br />mesg n <br /><br /><br />与 mesg 相关的指令有： talk，write，wall。 <br /><br /><br />名称：/etc/aliases <br />使用权限：系统管理者 <br />使用方式： newaliases <br />说明： <br />sendmail 会使用一个在 /etc/aliases 中的档案做使用者名称转换的动作。当 sendmail 收到一个要送给 xxx 的信时，它会依据 aliases档的内容送给另一个使用者。这个功能可以创造一个只有在信件系统内才有效的使用者。例如 mailing list 就会用到这个功能，在 mailinglist 中，我们可能会创造一个叫 redlinux@link.ece.uci.edu 的 mailinglist，但实际上并没有一个叫 redlinux 的使用者。实际 aliases 档的内容是将送给这个使用者的信都收给 mailing list 处理程式负责分送的工作。 <br /><br />/etc/aliases 是一个文字模式的档案，sendmail 需要一个二进位格式的 /etc/aliases.db。newaliases 的功能传是将 /etc/aliases 转换成一个 sendmail 所能了解的资料库。 <br /><br />参数：没有任何参数。 范例： <br /># newaliases <br /><br />下面命令会做相同的事， <br /># sendmail -bi <br /><br />相关命令: <br />mail, mailq, newaliases, sendmail <br /><br />名称 : talk <br />使用权限 : 所有使用者 <br /><br />使用方式 : <br /><br />talk person [ttyname] <br />说明 : 与其他使用者对谈 <br /><br />把计 : <br /><br />person : 预备对谈的使用者帐号，如果该使用者在其他机器上，则可输入 person@machine.name <br />ttyname : 如果使用者同时有两个以上的 tty 连线，可以自行选择合适的 tty 传讯息 <br /><br />例子.1 : <br /><br />与现在机器上的使用者Rollaend对谈，此时 Rollaend 只有一个连线 : <br />talk Rollaend <br /><br /><br />接下来就是等Rollaend回应，若Rollaend接受，则Rollaend输入 `talk jzlee`即可开始对谈，结束请按 ctrl+c <br /><br />例子.2 :与linuxfab.cx上的使用者Rollaend对谈，使用pts/2来对谈 : <br />talk Rollaend@linuxfab.cx pts/2 <br /><br /><br />接下来就是等Rollaend回应，若Rollaend接受，则Rollaend输入 `talk jzlee@jzlee.home`即可开始对谈，结束请按 ctrl+c <br /><br />注意 : 若萤幕的字会出现不正常的字元，试着按 ctrl+l 更新萤幕画面。 <br /><br /><br />名称 : wall <br />使用权限 : 所有使用者 <br /><br />使用方式 : <br /><br />wall [ message ] <br />使用说明： <br />wall 会将讯息传给每一个 mesg 设定为 yes 的上线使用者。当使用终端机介面做为标准传入时, 讯息结束时需加上 EOF (通常用 Ctrl+D)� <br /><br />例子 : <br /><br />传讯息"hi" 给每一个使用者 : <br />wall hi <br /><br /><br />名称 : write <br />使用权限 : 所有使用者 <br /><br />使用方式 : <br /><br />write user [ttyname] <br />说明 : 传讯息给其他使用者 <br /><br />把计 : <br /><br />user : 预备传讯息的使用者帐号 <br />ttyname : 如果使用者同时有两个以上的 tty 连线，可以自行选择合适的 tty 传讯息 <br /><br />例子.1 : <br /><br />传讯息给 Rollaend，此时 Rollaend 只有一个连线 : <br />write Rollaend <br /><br /><br />接下来就是将讯息打上去，结束请按 ctrl+c <br /><br />例子.2 :传讯息给 Rollaend，Rollaend 的连线有 pts/2，pts/3 : <br />write Rollaend pts/2 <br /><br /><br />接下来就是将讯息打上去，结束请按 ctrl+c <br /><br />注意 : 若对方设定 mesg n，则此时讯席将无法传给对方 <br /><br />名称：kill <br />使用权限：所有使用者 <br /><br />使用方式： <br /><br />kill [ -s signal | -p ] [ -a ] pid ... <br />kill -l [ signal ] <br />说明：kill 送出一个特定的信号 (signal) 给行程 id 为 pid 的行程根据该信号而做特定的动作, 若没有指定, 预设是送出终止 (TERM) 的信号 <br />把计� <br /><br />-s (signal) : 其中可用的讯号有 HUP (1), KILL (9), TERM (15), 分别代表着重跑, 砍掉, 结束; 详细的信号可以用 kill -l <br />-p : 印出 pid , 并不送出信号 <br />-l (signal) : 列出所有可用的信号名称 <br />范例： <br /><br />将 pid 为 323 的行程砍掉 (kill) : <br />kill -9 323 <br /><br />将 pid 为 456 的行程重跑 (restart) : <br />kill -HUP 456 <br /><br /><br />名称：nice <br />使用权限：所有使用者 <br /><br />使用方式：nice [-n adjustment] [-adjustment] [--adjustment=adjustment] [--help] [--version] [command [arg...]] <br /><br />说明：以更改过的优先序来执行程式, 如果未指定程式, 则会印出目前的排程优先序, 内定的 adjustment 为 10, 范围为 -20 (最高优先序) 到 19 (最低优先序) <br /><br /><br />把计� <br /><br />-n adjustment, -adjustment, --adjustment=adjustment 皆为将该原有优先序的增加 adjustment <br />--help 显示求助讯息 <br />--version 显示版本资讯 <br />范例： <br />将 ls 的优先序加 1 并执行 : <br />nice -n 1 ls <br /><br />将 ls 的优先序加 10 并执行 : <br />nice ls将 ls 的优先序加 10 并执行 <br /><br />注意 : 优先序 (priority) 为作业系统用来决定 CPU 分配的参数，Linux 使用『回合制(round-robin)』的演算法来做 CPU 排程，优先序越高，所可能获得的 CPU时间就越多。 <br /><br />名称：ps <br />使用权限：所有使用者 <br />使用方式：ps [options] [--help] <br />说明：显示瞬间行程 (process) 的动态 <br />参数： <br />ps 的参数非常多, 在此仅列出几个常用的参数并大略介绍含义 <br />-A 列出所有的行程 <br />-w 显示加宽可以显示较多的资讯 <br />-au 显示较详细的资讯 <br />-aux 显示所有包含其他使用者的行程 <br /><br />au(x) 输出格式 : <br /><br />USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND <br />USER: 行程拥有者 <br />PID: pid <br />%CPU: 占用的 CPU 使用率 <br />%MEM: 占用的记忆体使用率 <br />VSZ: 占用的虚拟记忆体大小 <br />RSS: 占用的记忆体大小 <br />TTY: 终端的次要装置号码 (minor device number of tty) <br />STAT: 该行程的状态: <br />D: 不可中断的静止 (通悸□□缜b进行 I/O 动作) <br />R: 正在执行中 <br />S: 静止状态 <br />T: 暂停执行 <br />Z: 不存在但暂时无法消除 <br />W: 没有足够的记忆体分页可分配 <br />&lt;: 高优先序的行程 <br />N: 低优先序的行程 <br />L: 有记忆体分页分配并锁在记忆体内 (即时系统或捱A I/O) <br />START: 行程开始时间 <br />TIME: 执行的时间 <br />COMMAND:所执行的指令 <br /><br />范例： <br /><br />ps <br />PID TTY TIME CMD <br />2791 ttyp0 00:00:00 tcsh <br />3092 ttyp0 00:00:00 ps <br />% ps -A <br />PID TTY TIME CMD <br />1 ? 00:00:03 init <br />2 ? 00:00:00 kflushd <br />3 ? 00:00:00 kpiod <br />4 ? 00:00:00 kswapd <br />5 ? 00:00:00 mdrecoveryd <br />....... <br />% ps -aux <br />USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND <br />root 1 0.0 0.7 1096 472 ? S Sep10 0:03 init [3] <br />root 2 0.0 0.0 0 0 ? SW Sep10 0:00 [kflushd] <br />root 3 0.0 0.0 0 0 ? SW Sep10 0:00 [kpiod] <br />root 4 0.0 0.0 0 0 ? SW Sep10 0:00 [kswapd] <br />........ <br /><br />名称：pstree <br />使用权限：所有使用者 <br />使用方式： <br />pstree [-a] [-c] [-h|-Hpid] [-l] [-n] [-p] [-u] [-G|-U] [pid|user] <br />pstree -V <br />说明：将所有行程以树状图显示, 树状图将会以 pid (如果有指定) 或是以 init 这个基本行程为根 (root) ,如果有指定使用者 id , 则树状图会只显示该使用者所拥有的行程 <br />参数： <br />-a 显示该行程的完整指令及参数, 如果是被记忆体置换出去的行程则会加上括号 <br />-c 如果有重覆的行程名, 则分开列出 (预设值是会在前面加上 * <br />范例： <br /><br />pstree <br /><br />init-+-amd <br />|-apmd <br />|-atd <br />|-httpd---10*[httpd] <br />%pstree -p <br />init(1)-+-amd(447) <br />|-apmd(105) <br />|-atd(339) <br />%pstree -c <br />init-+-amd <br />|-apmd <br />|-atd <br />|-httpd-+-httpd <br />| |-httpd <br />| |-httpd <br />| |-httpd <br />.... <br /><br />名称：renice <br />使用权限：所有使用者 <br /><br />使用方式：renice priority [[-p] pid ...] [[-g] pgrp ...] [[-u] user ...] <br /><br />说明：重新指定一个或多个行程(Process)的优先序(一个或多个将根据所下的参数而定) <br /><br />把计� <br /><br />-p pid 重新指定行程的 id 为 pid 的行程的优先序 <br />-g pgrp 重新指定行程群组(process group)的 id 为 pgrp 的行程 (一个或多个) 的优先序 <br />-u user 重新指定行程拥有者为 user 的行程的优先序 <br />范例： <br />将行程 id 为 987 及 32 的行程与行程拥有者为 daemon 及 root 的优先序号码加 1 : <br />renice +1 987 -u daemon root -p 32 <br /><br />注意 : 每一个行程(Process)都有一个唯一的 (unique) id� <br /><br />名称：top <br />使用权限：所有使用者 <br /><br />使用方式：top [-] [d delay] [q] [c] [S] [s] [i] [n] [b] <br /><br />说明：即时显示 process 的动态 <br /><br />把计� <br /><br />d : 改变显示的更新速度，或是在交谈式指令列( interactive command)按 s <br />q : 没有任何延迟的显示速度，如果使用者是有 superuser 的权限，则 top 将会以最高的优先序执行 <br />c : 切换显示模式，共有两种模式，一是只显示执行档的名称，另一种是显示完整的路径与名称S : 累积模式，会将己完成或消失的子行程 ( dead child process ) 的 CPU time 累积起来 <br />s : 安全模式，将交谈式指令取消, 避免潜在的危机 <br />i : 不显示任何闲置 (idle) 或无用 (zombie) 的行程 <br />n : 更新的次数，完成后将会退出 top <br />b : 批次档模式，搭配 "n" 参数一起使用，可以用来将 top 的结果输出到档案内 <br /><br />范例： <br />显示更新十次后退出 ; <br />top -n 10 <br /><br />使用者将不能利用交谈式指令来对行程下命令 : <br />top -s <br /><br />将更新显示二次的结果输入到名称为 top.log 的档案里 : <br />top -n 2 -b &lt; top.log <br /><br />名称：skill <br /><br />使用权限：所有使用者 <br /><br />使用方式： skill [signal to send] [options] 选择程序的规则 <br /><br />说明： <br /><br />送个讯号给正在执行的程序,预设的讯息为 TERM (中断) , 较常使用的讯息为 HUP , INT , KILL , STOP , CONT ,和 0 <br /><br />讯息有三种写法:分别为 -9 , -SIGKILL , -KILL , 可以使用 -l 或 -L 已列出可使用的讯息。 <br /><br />一般参数： <br /><br />-f 快速模式/尚未完成 <br /><br />-i 互动模式/ 每个动作将要被确认 <br /><br />-v 详细输出/ 列出所选择程序的资讯 <br /><br />-w 智能警告讯息/ 尚未完成 <br /><br />-n 没有动作/ 显示程序代号 <br /><br />参数：选择程序的规则可以是, 终端机代号,使用者名称,程序代号,命令名称。 <br /><br />-t 终端机代号 ( tty 或 pty ) <br /><br />-u 使用者名称 <br /><br />-p 程序代号 ( pid ) <br /><br />-c 命令名称 可使用的讯号: <br /><br />以下列出已知的讯号名称,讯号代号,功能。 <br /><br />名称 (代号) 功能/ 描述 <br /><br />ALRM 14 离开 <br /><br />HUP 1 离开 <br /><br />INT 2 离开 <br /><br />KILL 9 离开/ 强迫关闭 <br /><br />PIPE 13 离开 <br /><br />POLL 离开 <br /><br />PROF 离开 <br /><br />TERM 15 离开 <br /><br />USR1 离开 <br /><br />USR2 离开 <br /><br />VTALRM 离开 <br /><br />STKFLT 离开/ 只适用于i386, m68k, arm 和 ppc 硬体 <br /><br />UNUSED 离开/ 只适用于i386, m68k, arm 和 ppc 硬体 <br /><br />TSTP 停止 /产生与内容相关的行为 <br /><br />TTIN 停止 /产生与内容相关的行为 <br /><br />TTOU 停止 /产生与内容相关的行为 <br /><br />STOP 停止 /强迫关闭 <br /><br />CONT 从新启动 /如果在停止状态则从新启动,否则忽略 <br /><br />PWR 忽略 /在某些系统中会离开 <br /><br />WINCH 忽略 <br /><br />CHLD 忽略 <br /><br />ABRT 6 核心 <br /><br />FPE 8 核心 <br /><br />ILL 4 核心 <br /><br />QUIT 3 核心 <br /><br />SEGV 11 核心 <br /><br />TRAP 5 核心 <br /><br />SYS 核心 /或许尚未实作 <br /><br />EMT 核心 /或许尚未实作 <br /><br />BUS 核心 /核心失败 <br /><br />XCPU 核心 /核心失败 <br /><br />XFSZ 核心 /核心失败 <br /><br />范例： <br /><br />停止所有在 PTY 装置上的程序 <br />skill -KILL -v pts/* <br /><br />停止三个使用者 user1 , user2 , user3 <br />skill -STOP user1 user2 user3 <br /><br />其他相关的命令: kill <br /><br />名称：expr <br /><br />使用权限：所有使用者 <br />### 字串长度 <br /><br />shell&gt;&gt; expr length "this is a test" <br />14 <br /><br />### 数字商数 <br /><br />shell&gt;&gt; expr 14 % 9 <br />5 <br /><br />### 从位置处抓取字串 <br /><br />shell&gt;&gt; expr substr "this is a test" 3 5 <br />is is <br /><br />### 数字串 only the first character <br /><br />shell&gt;&gt; expr index "testforthegame" e <br />2 <br /><br />### 字串真实重现 <br /><br />shell&gt;&gt; expr quote thisisatestformela <br />thisisatestformela <br /><br /><br />名称: tr <br /><br />### 1.比方说要把目录下所有的大写档名换为小写档名? <br /><br />似乎有很多方式，"tr"是其中一种: <br /><br />#!/bin/sh <br /><br />dir="/tmp/testdir"; <br />files=`find $dir -type f`; <br />for i in $files <br />do <br />dir_name=`dirname $i`; <br />ori_filename=`basename $i` <br />new_filename=`echo $ori_filename | tr [:upper:] [:lower:]` &gt; /dev/null; <br />#echo $new_filename; <br />mv $dir_name/$ori_filename $dir_name/$new_filename <br />done <br /><br /><br />### 2.自己试验中...lowercase to uppercase <br /><br />tr abcdef...[del] ABCDE...[del] <br />tr a-z A-Z <br />tr [:lower:] [:upper:] <br /><br />shell&gt;&gt; echo "this is a test" | tr a-z A-Z &gt; www <br />shell&gt;&gt; cat www <br />THIS IS A TEST <br /><br />### 3.去掉不想要的字串 <br /><br />shell&gt;&gt; tr -d this ### 去掉有关 t.e.s.t <br />this <br /><br />man <br />man <br />test <br />e <br /><br />### 4.取代字串 <br /><br />shell&gt;&gt; tr -s "this" "TEST" <br />this <br />TEST <br />th <br />TE <br /><br /><br />指令：clear <br />用途：清除萤幕用。 <br /><br />使用方法：在 console 上输入 clear。 <br /><br /><br />名称: reset, tset <br />使用方法: tset [-IQqrs] [-] [-e ch] [-i ch] [-k ch] [-m mapping] [terminal] <br /><br />使用说明: <br /><br />reset 其实和 tset 是一同个命令，它的用途是设定终端机的状态。一般而言，这个命令会自动的从环境变数、命令列或是其它的组态档决定目前终端机的型态。如果指定型态是 ? 的话，这个程式会要求使用者输入终端机的型别。 <br /><br />由于这个程式会将终端机设回原始的状态，除了在 login 时使用外，当系统终端机因为程式不正常执行而进入一些奇怪的状态时，你也可以用它来重设终端机o 例如不小心把二进位档用 cat 指令进到终端机，常会有终端机不再回应键盘输入，或是回应一些奇怪字元的问题。此时就可以用 reset 将终端机回复至原始状态。选项说明: <br /><br /><br />-p <br />将终端机类别显示在萤幕上，但不做设定的动作。这个命令可以用来取得目前终端机的类别。 <br />-e ch <br />将 erase 字元设成 ch <br />-i ch <br />将中断字元设成 ch <br />-k ch <br />将删除一行的字元设成 ch <br />-I <br />不要做设定的动作，如果没有使用选项 -Q 的话，erase、中断及删除字元的目前值依然会送到萤幕上。 <br />-Q <br />不要显示 erase、中断及删除字元的值到萤幕上。 <br />-r <br />将终端机类别印在萤幕上。 <br />-s <br />将设定 TERM 用的命令用字串的型式送到终端机中，通常在 .login 或 .profile 中用 <br />范例: <br />让使用者输入一个终端机型别并将终端机设到该型别的预设状态。 <br /># reset ? <br /><br />将 erase 字元设定 control-h <br /># reset -e ^B <br /><br />将设定用的字串显示在萤幕上 <br /># reset -s <br />Erase is control-B (^B). <br />Kill is control-U (^U). <br />Interrupt is control-C (^C). <br />TERM=xterm; <br /><br />名称：compress <br /><br />使用权限：所有使用者 <br /><br /><br />使用方式：compress [-dfvcV] [-b maxbits] [file ...] <br /><br /><br />说明： <br />compress 是一个相当古老的 unix 档案压缩指令，压缩后的档案会加上一个 .Z 延伸档名以区别未压缩的档案，压缩后的档案可以以 uncompress 解压。若要将数个档案压成一个压缩档，必须先将档案 tar 起来再压缩。由于 gzip 可以产生更理想的压缩比例，一般人多已改用 gzip 为档案压缩工具。 <br /><br /><br />参数： <br />c 输出结果至标准输出设备（一般指荧幕） <br />f 强迫写入档案，若目的档已经存在，则会被覆盖 (force) <br />v 将程式执行的讯息印在荧幕上 (verbose) <br />b 设定共同字串数的上限，以位元计算，可以设定的值为 9 至 16 bits 。由于值越大，能使用的共同字串就 越多，压缩比例就越大，所以一般使用预设值 16 bits (bits) <br />d 将压缩档解压缩 <br />V 列出版本讯息 <br /><br /><br />范例： <br /><br /><br />将 source.dat 压缩成 source.dat.Z ，若 source.dat.Z 已经存在，内容则会被压缩档覆盖。 <br /><br />compress -f source.dat <br /><br />将 source.dat 压缩成 source.dat.Z ，并列印出压缩比例。 <br />-v 与 -f 可以一起使用 <br /><br />compress -vf source.dat <br /><br />将压缩后的资料输出后再导入 target.dat.Z 可以改变压缩档名。 <br /><br />compress -c source.dat &gt; target.dat.Z <br /><br />-b 的值越大，压缩比例就越大，范围是 9-16 ，预设值是 16 。 <br /><br />compress -b 12 source.dat <br /><br />将 source.dat.Z 解压成 source.dat ，若档案已经存在，使用者按 y 以确定覆盖档案，若使用 -df 程式则会自动覆盖档案。由于系统会自动加入 .Z 为延伸档名，所以 source.dat 会自动当作 source.dat.Z 处理。 <br /><br />compress -d source.dat <br />compress -d source.dat.Z <br /><br /><br />名称： lpd <br /><br />使用权限： 所有使用者 <br /><br />使用方式：lpd [-l] [#port] <br />lpd 是一个常驻的印表机管理程式，它会根据 /etc/printcap 的内容来管理本地或远端的印表机。/etc/printcap 中定义的每一个印表机必须在 /var/lpd 中有一个相对应的目录，目录中以 cf 开头的档案表示一个等待送到适当装置的印表工作。这个档案通常是由 lpr 所产生。 <br /><br />lpr 和 lpd 组成了一个可以离线工作的系统，当你使用 lpr 时，印表机不需要能立即可用，甚至不用存在。lpd 会自动监视印表机的状况，当印表机上线后，便立即将档案送交处理。这个得所有的应用程式不必等待印表机完成前一工作。 <br /><br />参数： <br /><br /><br />-l: 将一些除错讯息显示在标准输出上。 <br />#port: 一般而言，lpd 会使用 getservbyname 取得适当的 TCP/IP port，你可以使用这个参数强迫 lpd 使用指定的 port。 <br /><br />范例： <br />这个程式通常是由 /etc/rc.d 中的程式在系统启始阶段执行。 <br /><br />名称 lpq <br />-- 显示列表机贮列中未完成的工作 用法 <br /><br />lpq [l] [P] [user] <br /><br />说明 <br />lpq 会显示由 lpd 所管理的列表机贮列中未完成的项目。 <br /><br />范例 <br />范例 1. 显示所有在 lp 列表机贮列中的工作 <br /><br /><br /># lpq -PlpRank Owner Job Files Total Size1st root 238 (standard input) 1428646 bytes <br /><br /><br />相关函数 <br />lpr,lpc,lpd <br /><br />名称： lpr <br /><br />使用权限： 所有使用者 <br /><br />使用方式：lpr [ -P printer ] <br />将档案或是由标准输入送进来的资料送到印表机贮列之中，印表机管理程式 lpd 会在稍后将这个档案送给适当的程式或装置处理。lpr 可以用来将料资送给本地或是远端的主机来处理。 <br /><br />参数： <br /><br /><br />-p Printer: 将资料送至指定的印表机 Printer，预设值为 lp。 <br /><br />范例： <br />将 www.c 和 kkk.c 送到印表机 lp。 <br />lpr -Plp www.c kkk.c <br /><br /><br />名称: lprm <br />-- 将一个工作由印表机贮列中移除 用法 <br /><br />/usr/bin/lprm [P] [file...] <br /><br />说明 <br />尚未完成的印表机工作会被放在印表机贮列之中，这个命令可用来将常未送到印表机的工作取消。由于每一个印表机都有一个独立的贮列，你可以用 -P 这个命令设定想要作用的印列机。如果没有设定的话，会使用系统预设的印表机。 <br /><br />这个命令会检查使用者是否有足够的权限删除指定的档案，一般而言，只有档案的拥有者或是系统管理员才有这个权限。 <br /><br />范例 <br />将印表机 hpprinter 中的第 1123 号工作移除 <br /><br /><br />lprm -Phpprinter 1123 <br /><br /><br />将第 1011 号工作由预设印表机中移除 <br /><br /><br />lprm 1011 <br /><br /><br />名称： fdformat <br /><br />使用权限： 所有使用者 <br /><br />使用方式：fdformat [-n] device <br /><br />使用说明 : <br />对指定的软碟机装置进行低阶格式化。使用这个指令对软碟格式化的时候，最好指定像是下面的装置： <br /><br /><br />/dev/fd0d360 磁碟机 A: ，磁片为 360KB 磁碟 <br />/dev/fd0h1440 磁碟机 A: ，磁片为 1.4MB 磁碟 <br />/dev/fd1h1200 磁碟机 B: ，磁片为 1.2MB 磁碟 <br />如果使用像是 /dev/fd0 之类的装置，如果里面的磁碟不是标准容量，格式化可能会失败。在这种情况之下，使用者可以用 setfdprm 指令先行指定必要参数。 <br /><br />参数： <br /><br /><br />-n 关闭确认功能。这个选项会关闭格式化之后的确认步骤。 <br /><br />范例： <br /><br />fdformat -n /dev/fd0h1440 <br /><br />将磁碟机 A 的磁片格式化成 1.4MB 的磁片。并且省略确认的步骤。 <br /><br />名称： mformat <br /><br />使用权限： 所有使用者 <br /><br />使用方式： <br /><br />mformat [-t cylinders] [-h heads] [-s sectors] [-l volume_label] [-F] [-I fsVer-sion] [-S sizecode] [-2 sectors_on_track_0] [-M software_sector_size] [-a] [-X] [-C] [-H hidden_sectors] [-r root_sectors] [-B boot_sector] [-0 rate_on_track_0] [-A rate_on_other_tracks] [-1] [-k] drive: <br /><br />在已经做过低阶格式化的磁片上建立 DOS 档案系统。如果在编译 mtools 的时候把 USE_2M 的参数打开，部分与 2M 格式相关的参数就会发生作用。否则这些参数（像是 S,2,1,M）不会发生作用。 <br /><br />参数： <br /><br />-t 磁柱（synlider）数 <br />-h 磁头（head）数 <br />-s 每一磁轨的磁区数 <br />-l 标签 <br />-F 将磁碟格式化为 FAT32 格式，不过这个参数还在实验中。 <br />-I 设定 FAT32 中的版本号。这当然也还在实验中。 <br />-S 磁区大小代码，计算方式为 sector = 2^(大小代码+7) <br />-c 磁丛（cluster）的磁区数。如果所给定的数字会导致磁丛数超过 FAT 表的限制，mformat 会自动放大磁区数。 <br />-s <br />-M 软体磁区大小。这个数字就是系统回报的磁区大小。通常是和实际的大小相同。 <br />-a 如果加上这个参数，mformat 会产生一组 Atari 系统的序号给这块软碟。 <br />-X 将软碟格式化成 XDF 格式。使用前必须先用 xdfcopy 指令对软碟作低阶格式化的动作。 <br />-C 产生一个可以安装 MS-DOS 档案系统的磁碟影像档（disk image）。当然对一个实体磁碟机下这个参数是没有意义的。 <br />-H 隐藏磁区的数目。这通常适用在格式化硬碟的分割区时，因为通常一个分割区的前面还有分割表。这个参数未经测试，能不用就不用。 <br />-n 磁碟序号 <br />-r 根目录的大小，单位是磁区数。这个参数只对 FAT12 和 FAT16 有效。 <br />-B 使用所指定的档案或是设备的开机磁区做为这片磁片或分割区的开机磁区。当然当中的硬体参数会随之更动。 <br />-k 尽量保持原有的开机磁区。 <br />-0 第 0 轨的资料传输率 <br />-A 第 0 轨以外的资料传输率 <br />-2 使用 2m 格式 <br />-1 不使用 2m 格式 <br /><br />范例： <br />mformat a: <br /><br />这样会用预设值把 a: （就是 /dev/fd0）里的磁碟片格式化。 <br /><br />名称： mkdosfs <br /><br />使用权限： 所有使用者 <br /><br />使用方式： mkdosfs [ -c | -l filename ] <br />[ -f number_of_FATs ] <br />[ -F FAT_size ] <br />[ -i volume_id ] <br />[ -m message_file ] <br />[ -n volume_name ] <br />[ -r root_dir_entry ] <br />[ -s sector_per_cluster ] <br />[ -v ] <br />device <br />[ block_count ] <br /><br />说明： 建立 DOS 档案系统。 device 指你想要建立 DOS 档案系统的装置代号。像是 /dev/hda1 等等。 block_count 则是你希望配置的区块数。如果 block_count 没有指定则系统会自动替你计算符合该装置大小的区块数。 <br /><br />参数： <br /><br /><br />-c 建立档案系统之前先检查是否有坏轨。 <br />-l 从得定的档案中读取坏轨记录。 <br />-f 指定档案配置表（FAT , File Allocation Table)的数量。预设值为 2 。目前 Linux 的 FAT 档案系统不支援超过 2 个 FAT 表。通常这个不需要改。 <br />-F 指定 FAT 表的大小，通常是 12 或是 16 个位元组。12 位元组通常用于磁碟片，16 位元组用于一般硬碟的分割区，也就是所谓的 FAT16 格式。这个值通常系统会自己选定适当的值。在磁碟片上用 FAT16 通常不会发生作用，反之在硬碟上用 FAT12 亦然。 <br />-i 指定 Volume ID。一般是一个 4 个位元组的数字，像是 2e203a47 。如果不给系统会自己产生。 <br />-m 当使用者试图用这片磁片或是分割区开机，而上面没有作业系统时，系统会给使用者一段警告讯息。这个参数就是用来变更这个讯息的。你可以先用档案编辑好，然后用这个参数指定，或是用 <br />-m - <br />这样系统会要求你直接输入这段文字。要特别注意的是，档案里的字串长度不要超过 418 个字，包括展开的跳栏符号（TAB）和换行符号（换行符号在 DOS 底下算两个字元！） <br />-n 指定 Volume Name，就是磁碟标签。如同在 DOS 底下的 format 指令一样，给不给都可以。没有预设值。 <br />-r 指定根目录底下的最大档案数。这里所谓的档案数包括目录。预设值是在软碟上是 112 或是 224 ，在硬碟上是 512。没事不要改这个数字。 <br />-s 每一个磁丛（cluster）的磁区数。必须是 2 的次方数。不过除非你知道你在作什么，这个值不要乱给。 <br />-v 提供额外的讯息 <br /><br />范例： <br />mkdosfs -n Tester /dev/fd0 将 A 槽里的磁碟片格式化为 DOS 格式，并将标签设为 Tester*/ <img src ="http://www.cppblog.com/snowhill/aggbug/17046.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/snowhill/" target="_blank">snowhill</a> 2006-12-30 20:18 <a href="http://www.cppblog.com/snowhill/archive/2006/12/30/17046.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>插入排序</title><link>http://www.cppblog.com/snowhill/archive/2006/12/27/16920.html</link><dc:creator>snowhill</dc:creator><author>snowhill</author><pubDate>Wed, 27 Dec 2006 14:20:00 GMT</pubDate><guid>http://www.cppblog.com/snowhill/archive/2006/12/27/16920.html</guid><wfw:comment>http://www.cppblog.com/snowhill/comments/16920.html</wfw:comment><comments>http://www.cppblog.com/snowhill/archive/2006/12/27/16920.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cppblog.com/snowhill/comments/commentRss/16920.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/snowhill/services/trackbacks/16920.html</trackback:ping><description><![CDATA[
		<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee">
				<span style="COLOR: #008080"> 1</span> <span style="COLOR: #000000">#include </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">iostream.h</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"><br /></span><span style="COLOR: #008080"> 2</span> <span style="COLOR: #000000"><br /></span><span style="COLOR: #008080"> 3</span> <span style="COLOR: #000000"></span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000"> insertsort(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000"> a[],</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000"> m)<br /></span><span style="COLOR: #008080"> 4</span> <span style="COLOR: #000000">{<br /></span><span style="COLOR: #008080"> 5</span> <span style="COLOR: #000000">        </span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000"> temp,j;<br /></span><span style="COLOR: #008080"> 6</span> <span style="COLOR: #000000">        <br /></span><span style="COLOR: #008080"> 7</span> <span style="COLOR: #000000">        </span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">(j</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;j</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">m;j</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">)<br /></span><span style="COLOR: #008080"> 8</span> <span style="COLOR: #000000">        {<br /></span><span style="COLOR: #008080"> 9</span> <span style="COLOR: #000000">            <br /></span><span style="COLOR: #008080">10</span> <span style="COLOR: #000000">            </span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(a[j</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">]</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000">a[j])<br /></span><span style="COLOR: #008080">11</span> <span style="COLOR: #000000">            {<br /></span><span style="COLOR: #008080">12</span> <span style="COLOR: #000000">                temp</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">a[j];<br /></span><span style="COLOR: #008080">13</span> <span style="COLOR: #000000">                    </span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000"> i</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">j</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;a[i]</span><span style="COLOR: #000000">&gt;=</span><span style="COLOR: #000000">temp</span><span style="COLOR: #000000">&amp;&amp;</span><span style="COLOR: #000000">i</span><span style="COLOR: #000000">&gt;=</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;i</span><span style="COLOR: #000000">--</span><span style="COLOR: #000000">)<br /></span><span style="COLOR: #008080">14</span> <span style="COLOR: #000000">                    {<br /></span><span style="COLOR: #008080">15</span> <span style="COLOR: #000000">                    a[i</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">]</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">a[i];<br /></span><span style="COLOR: #008080">16</span> <span style="COLOR: #000000">                    }<br /></span><span style="COLOR: #008080">17</span> <span style="COLOR: #000000">                a[i</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">]</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">temp;<br /></span><span style="COLOR: #008080">18</span> <span style="COLOR: #000000">            }<br /></span><span style="COLOR: #008080">19</span> <span style="COLOR: #000000">        }<br /></span><span style="COLOR: #008080">20</span> <span style="COLOR: #000000">        <br /></span><span style="COLOR: #008080">21</span> <span style="COLOR: #000000">    <br /></span><span style="COLOR: #008080">22</span> <span style="COLOR: #000000">}</span></div>
<img src ="http://www.cppblog.com/snowhill/aggbug/16920.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/snowhill/" target="_blank">snowhill</a> 2006-12-27 22:20 <a href="http://www.cppblog.com/snowhill/archive/2006/12/27/16920.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>广度优先搜索</title><link>http://www.cppblog.com/snowhill/archive/2006/12/17/16539.html</link><dc:creator>snowhill</dc:creator><author>snowhill</author><pubDate>Sun, 17 Dec 2006 03:32:00 GMT</pubDate><guid>http://www.cppblog.com/snowhill/archive/2006/12/17/16539.html</guid><wfw:comment>http://www.cppblog.com/snowhill/comments/16539.html</wfw:comment><comments>http://www.cppblog.com/snowhill/archive/2006/12/17/16539.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/snowhill/comments/commentRss/16539.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/snowhill/services/trackbacks/16539.html</trackback:ping><description><![CDATA[
		<p>广度优先搜索</p>
		<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee">
				<span style="COLOR: #008000">//</span>
				<span style="COLOR: #008000"> date:2006-12-15 by:snowhill</span>
				<span style="COLOR: #008000">
						<br />
				</span>
				<span style="COLOR: #000000">#include </span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">iostream.h</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">
						<br />
				</span>
				<span style="COLOR: #0000ff">#define</span>
				<span style="COLOR: #000000">   elemtype int</span>
				<span style="COLOR: #000000">
						<br />
				</span>
				<span style="COLOR: #0000ff">#define</span>
				<span style="COLOR: #000000">   MAX_VERTEX_NUM   20         </span>
				<span style="COLOR: #008000">//</span>
				<span style="COLOR: #008000">最大顶点数   </span>
				<span style="COLOR: #000000">
						<br />
				</span>
				<span style="COLOR: #0000ff">#define</span>
				<span style="COLOR: #000000">   MAX_EDGE_NUM   40           </span>
				<span style="COLOR: #008000">//</span>
				<span style="COLOR: #008000">最大边数   </span>
				<span style="COLOR: #000000">
						<br />
				</span>
				<span style="COLOR: #0000ff">int</span>
				<span style="COLOR: #000000">   visited[MAX_VERTEX_NUM];       </span>
				<span style="COLOR: #008000">//</span>
				<span style="COLOR: #008000">访问标志数组</span>
				<span style="COLOR: #008000">
						<br />
				</span>
				<span style="COLOR: #0000ff">struct</span>
				<span style="COLOR: #000000"> ArcNode{<br />    </span>
				<span style="COLOR: #0000ff">int</span>
				<span style="COLOR: #000000"> adjvex;<br />    ArcNode </span>
				<span style="COLOR: #000000">*</span>
				<span style="COLOR: #000000">NextArc;<br />};<br /></span>
				<span style="COLOR: #0000ff">struct</span>
				<span style="COLOR: #000000"> VNode{<br />    elemtype data;<br />    ArcNode </span>
				<span style="COLOR: #000000">*</span>
				<span style="COLOR: #000000">firstArc;<br />};<br />typedef VNode AdjList[MAX_VERTEX_NUM]; <br /></span>
				<span style="COLOR: #0000ff">struct</span>
				<span style="COLOR: #000000"> ALGraph<br />{<br />    AdjList vertices;<br />    </span>
				<span style="COLOR: #0000ff">int</span>
				<span style="COLOR: #000000"> vexnum,arcnum;<br />};<br />ALGraph G;<br />    <br /></span>
				<span style="COLOR: #0000ff">void</span>
				<span style="COLOR: #000000"> CreateDG(ALGraph </span>
				<span style="COLOR: #000000">&amp;</span>
				<span style="COLOR: #000000">G)<br />{<br />    </span>
				<span style="COLOR: #0000ff">int</span>
				<span style="COLOR: #000000"> i,j,k;<br />    ArcNode </span>
				<span style="COLOR: #000000">*</span>
				<span style="COLOR: #000000">p;<br />    cout</span>
				<span style="COLOR: #000000">&lt;&lt;</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">创建一个有向图:</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">&lt;&lt;</span>
				<span style="COLOR: #000000">endl;<br />    cout</span>
				<span style="COLOR: #000000">&lt;&lt;</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">请输入顶点数:</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000"> ;    cin</span>
				<span style="COLOR: #000000">&gt;&gt;</span>
				<span style="COLOR: #000000">G.vexnum; cout</span>
				<span style="COLOR: #000000">&lt;&lt;</span>
				<span style="COLOR: #000000">endl;<br />    cout</span>
				<span style="COLOR: #000000">&lt;&lt;</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">请输入边数:</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">;     cin</span>
				<span style="COLOR: #000000">&gt;&gt;</span>
				<span style="COLOR: #000000">G.arcnum; cout</span>
				<span style="COLOR: #000000">&lt;&lt;</span>
				<span style="COLOR: #000000">endl;<br />    <br />    </span>
				<span style="COLOR: #0000ff">for</span>
				<span style="COLOR: #000000">(i</span>
				<span style="COLOR: #000000">=</span>
				<span style="COLOR: #000000">1</span>
				<span style="COLOR: #000000">;i</span>
				<span style="COLOR: #000000">&lt;=</span>
				<span style="COLOR: #000000">G.vexnum;i</span>
				<span style="COLOR: #000000">++</span>
				<span style="COLOR: #000000">)<br />    {<br />     G.vertices[i].data</span>
				<span style="COLOR: #000000">=</span>
				<span style="COLOR: #000000">i;<br />     G.vertices[i].firstArc</span>
				<span style="COLOR: #000000">=</span>
				<span style="COLOR: #000000">NULL;<br />     }<br />    </span>
				<span style="COLOR: #0000ff">for</span>
				<span style="COLOR: #000000">(k</span>
				<span style="COLOR: #000000">=</span>
				<span style="COLOR: #000000">1</span>
				<span style="COLOR: #000000">;k</span>
				<span style="COLOR: #000000">&lt;=</span>
				<span style="COLOR: #000000">G.arcnum;k</span>
				<span style="COLOR: #000000">++</span>
				<span style="COLOR: #000000">)<br />    {<br />    cout</span>
				<span style="COLOR: #000000">&lt;&lt;</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">请输入第</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">&lt;&lt;</span>
				<span style="COLOR: #000000">k</span>
				<span style="COLOR: #000000">&lt;&lt;</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">条边:</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">&lt;&lt;</span>
				<span style="COLOR: #000000">endl;<br />    cin</span>
				<span style="COLOR: #000000">&gt;&gt;</span>
				<span style="COLOR: #000000">i</span>
				<span style="COLOR: #000000">&gt;&gt;</span>
				<span style="COLOR: #000000">j;<br />    p</span>
				<span style="COLOR: #000000">=</span>
				<span style="COLOR: #0000ff">new</span>
				<span style="COLOR: #000000"> ArcNode;<br />    p</span>
				<span style="COLOR: #000000">-&gt;</span>
				<span style="COLOR: #000000">adjvex</span>
				<span style="COLOR: #000000">=</span>
				<span style="COLOR: #000000">j;<br />    p</span>
				<span style="COLOR: #000000">-&gt;</span>
				<span style="COLOR: #000000">NextArc</span>
				<span style="COLOR: #000000">=</span>
				<span style="COLOR: #000000">G.vertices[i].firstArc;<br />    G.vertices[i].firstArc</span>
				<span style="COLOR: #000000">=</span>
				<span style="COLOR: #000000">p;<br />    }<br />}<br /></span>
				<span style="COLOR: #0000ff">void</span>
				<span style="COLOR: #000000"> disp(ALGraph G)<br />{<br />    </span>
				<span style="COLOR: #0000ff">int</span>
				<span style="COLOR: #000000"> i;<br />    ArcNode </span>
				<span style="COLOR: #000000">*</span>
				<span style="COLOR: #000000">p;<br />    cout</span>
				<span style="COLOR: #000000">&lt;&lt;</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">建立的图为:</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">&lt;&lt;</span>
				<span style="COLOR: #000000">endl;<br />    </span>
				<span style="COLOR: #0000ff">for</span>
				<span style="COLOR: #000000">(i</span>
				<span style="COLOR: #000000">=</span>
				<span style="COLOR: #000000">1</span>
				<span style="COLOR: #000000">;i</span>
				<span style="COLOR: #000000">&lt;=</span>
				<span style="COLOR: #000000">G.vexnum;i</span>
				<span style="COLOR: #000000">++</span>
				<span style="COLOR: #000000">)<br />        {<br />        p</span>
				<span style="COLOR: #000000">=</span>
				<span style="COLOR: #000000">G.vertices[i].firstArc;<br />        </span>
				<span style="COLOR: #0000ff">while</span>
				<span style="COLOR: #000000">(p</span>
				<span style="COLOR: #000000">!=</span>
				<span style="COLOR: #000000">NULL)<br />            {<br />            cout</span>
				<span style="COLOR: #000000">&lt;&lt;</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">(</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">&lt;&lt;</span>
				<span style="COLOR: #000000">i</span>
				<span style="COLOR: #000000">&lt;&lt;</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">,</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">&lt;&lt;</span>
				<span style="COLOR: #000000">p</span>
				<span style="COLOR: #000000">-&gt;</span>
				<span style="COLOR: #000000">adjvex</span>
				<span style="COLOR: #000000">&lt;&lt;</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">)</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">; <br />            p</span>
				<span style="COLOR: #000000">=</span>
				<span style="COLOR: #000000">p</span>
				<span style="COLOR: #000000">-&gt;</span>
				<span style="COLOR: #000000">NextArc;<br />            }<br />        cout</span>
				<span style="COLOR: #000000">&lt;&lt;</span>
				<span style="COLOR: #000000">endl;<br />    }<br />    cout</span>
				<span style="COLOR: #000000">&lt;&lt;</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">*******************************</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">&lt;&lt;</span>
				<span style="COLOR: #000000">endl;<br />}<br /></span>
				<span style="COLOR: #0000ff">void</span>
				<span style="COLOR: #000000"> bfs(</span>
				<span style="COLOR: #0000ff">int</span>
				<span style="COLOR: #000000"> v)<br />{<br />  ArcNode </span>
				<span style="COLOR: #000000">*</span>
				<span style="COLOR: #000000">p;<br />  </span>
				<span style="COLOR: #0000ff">int</span>
				<span style="COLOR: #000000"> queue[MAX_VERTEX_NUM];<br />  </span>
				<span style="COLOR: #0000ff">int</span>
				<span style="COLOR: #000000"> front</span>
				<span style="COLOR: #000000">=</span>
				<span style="COLOR: #000000">0</span>
				<span style="COLOR: #000000">,rear</span>
				<span style="COLOR: #000000">=</span>
				<span style="COLOR: #000000">0</span>
				<span style="COLOR: #000000">,w;<br />  </span>
				<span style="COLOR: #0000ff">for</span>
				<span style="COLOR: #000000">(</span>
				<span style="COLOR: #0000ff">int</span>
				<span style="COLOR: #000000"> i</span>
				<span style="COLOR: #000000">=</span>
				<span style="COLOR: #000000">0</span>
				<span style="COLOR: #000000">;i</span>
				<span style="COLOR: #000000">&lt;=</span>
				<span style="COLOR: #000000">MAX_VERTEX_NUM;i</span>
				<span style="COLOR: #000000">++</span>
				<span style="COLOR: #000000">)<br />    visited[i]</span>
				<span style="COLOR: #000000">=</span>
				<span style="COLOR: #000000">0</span>
				<span style="COLOR: #000000">;<br />  cout</span>
				<span style="COLOR: #000000">&lt;&lt;</span>
				<span style="COLOR: #000000">v;<br />  visited[v]</span>
				<span style="COLOR: #000000">=</span>
				<span style="COLOR: #000000">1</span>
				<span style="COLOR: #000000">;<br />  rear</span>
				<span style="COLOR: #000000">=</span>
				<span style="COLOR: #000000">(rear</span>
				<span style="COLOR: #000000">+</span>
				<span style="COLOR: #000000">1</span>
				<span style="COLOR: #000000">)</span>
				<span style="COLOR: #000000">%</span>
				<span style="COLOR: #000000">MAX_VERTEX_NUM;<br />  queue[rear]</span>
				<span style="COLOR: #000000">=</span>
				<span style="COLOR: #000000">v;<br />  </span>
				<span style="COLOR: #0000ff">while</span>
				<span style="COLOR: #000000">(front</span>
				<span style="COLOR: #000000">!=</span>
				<span style="COLOR: #000000">rear)<br />    {<br />        front</span>
				<span style="COLOR: #000000">=</span>
				<span style="COLOR: #000000">(front</span>
				<span style="COLOR: #000000">+</span>
				<span style="COLOR: #000000">1</span>
				<span style="COLOR: #000000">)</span>
				<span style="COLOR: #000000">%</span>
				<span style="COLOR: #000000">MAX_VERTEX_NUM;<br />        w</span>
				<span style="COLOR: #000000">=</span>
				<span style="COLOR: #000000">queue[front];<br />        p</span>
				<span style="COLOR: #000000">=</span>
				<span style="COLOR: #000000">G.vertices[w].firstArc;<br />        </span>
				<span style="COLOR: #0000ff">while</span>
				<span style="COLOR: #000000">(p</span>
				<span style="COLOR: #000000">!=</span>
				<span style="COLOR: #000000">NULL)<br />            {<br />            </span>
				<span style="COLOR: #0000ff">if</span>
				<span style="COLOR: #000000">(visited[p</span>
				<span style="COLOR: #000000">-&gt;</span>
				<span style="COLOR: #000000">adjvex]</span>
				<span style="COLOR: #000000">==</span>
				<span style="COLOR: #000000">0</span>
				<span style="COLOR: #000000">)<br />                {visited[p</span>
				<span style="COLOR: #000000">-&gt;</span>
				<span style="COLOR: #000000">adjvex]</span>
				<span style="COLOR: #000000">=</span>
				<span style="COLOR: #000000">1</span>
				<span style="COLOR: #000000">;<br />                 cout</span>
				<span style="COLOR: #000000">&lt;&lt;</span>
				<span style="COLOR: #000000">p</span>
				<span style="COLOR: #000000">-&gt;</span>
				<span style="COLOR: #000000">adjvex;<br />                 rear</span>
				<span style="COLOR: #000000">=</span>
				<span style="COLOR: #000000">(rear</span>
				<span style="COLOR: #000000">+</span>
				<span style="COLOR: #000000">1</span>
				<span style="COLOR: #000000">)</span>
				<span style="COLOR: #000000">%</span>
				<span style="COLOR: #000000">MAX_VERTEX_NUM;<br />                 queue[rear]</span>
				<span style="COLOR: #000000">=</span>
				<span style="COLOR: #000000">p</span>
				<span style="COLOR: #000000">-&gt;</span>
				<span style="COLOR: #000000">adjvex;<br />                 }<br />            p</span>
				<span style="COLOR: #000000">=</span>
				<span style="COLOR: #000000">p</span>
				<span style="COLOR: #000000">-&gt;</span>
				<span style="COLOR: #000000">NextArc;<br />        }<br />    }<br />}<br />    <br /></span>
				<span style="COLOR: #0000ff">void</span>
				<span style="COLOR: #000000"> main()<br />{<br /> </span>
				<span style="COLOR: #0000ff">int</span>
				<span style="COLOR: #000000"> v;<br /> CreateDG(G);<br /> disp(G);<br /> cout</span>
				<span style="COLOR: #000000">&lt;&lt;</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">请输入广度优先遍历的顶点:</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">;<br /> cin</span>
				<span style="COLOR: #000000">&gt;&gt;</span>
				<span style="COLOR: #000000">v;  cout</span>
				<span style="COLOR: #000000">&lt;&lt;</span>
				<span style="COLOR: #000000">endl;<br /> cout</span>
				<span style="COLOR: #000000">&lt;&lt;</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">广度优先遍历为:</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">&lt;&lt;</span>
				<span style="COLOR: #000000">endl;<br /> bfs(v);  cout</span>
				<span style="COLOR: #000000">&lt;&lt;</span>
				<span style="COLOR: #000000">endl;<br /> }</span>
		</div>
<img src ="http://www.cppblog.com/snowhill/aggbug/16539.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/snowhill/" target="_blank">snowhill</a> 2006-12-17 11:32 <a href="http://www.cppblog.com/snowhill/archive/2006/12/17/16539.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>