﻿<?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++博客-flytosky2008gao</title><link>http://www.cppblog.com/flytosky2008gao/</link><description /><language>zh-cn</language><lastBuildDate>Fri, 03 Apr 2026 22:28:21 GMT</lastBuildDate><pubDate>Fri, 03 Apr 2026 22:28:21 GMT</pubDate><ttl>60</ttl><item><title>shell扩展编程</title><link>http://www.cppblog.com/flytosky2008gao/archive/2010/04/30/114058.html</link><dc:creator>ggh</dc:creator><author>ggh</author><pubDate>Fri, 30 Apr 2010 06:12:00 GMT</pubDate><guid>http://www.cppblog.com/flytosky2008gao/archive/2010/04/30/114058.html</guid><wfw:comment>http://www.cppblog.com/flytosky2008gao/comments/114058.html</wfw:comment><comments>http://www.cppblog.com/flytosky2008gao/archive/2010/04/30/114058.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/flytosky2008gao/comments/commentRss/114058.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/flytosky2008gao/services/trackbacks/114058.html</trackback:ping><description><![CDATA[<font face=Verdana size=2><a href="http://blog.163.com/yesaidu@126/blog/static/51819307200861742138193/">http://blog.163.com/yesaidu@126/blog/static/51819307200861742138193/</a></font>
<img src ="http://www.cppblog.com/flytosky2008gao/aggbug/114058.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/flytosky2008gao/" target="_blank">ggh</a> 2010-04-30 14:12 <a href="http://www.cppblog.com/flytosky2008gao/archive/2010/04/30/114058.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>zthread</title><link>http://www.cppblog.com/flytosky2008gao/archive/2010/01/13/105548.html</link><dc:creator>ggh</dc:creator><author>ggh</author><pubDate>Wed, 13 Jan 2010 03:11:00 GMT</pubDate><guid>http://www.cppblog.com/flytosky2008gao/archive/2010/01/13/105548.html</guid><wfw:comment>http://www.cppblog.com/flytosky2008gao/comments/105548.html</wfw:comment><comments>http://www.cppblog.com/flytosky2008gao/archive/2010/01/13/105548.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/flytosky2008gao/comments/commentRss/105548.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/flytosky2008gao/services/trackbacks/105548.html</trackback:ping><description><![CDATA[http://<strong style="COLOR: black; BACKGROUND-COLOR: #ffff66">zthread</strong>.sourceforge.net
<img src ="http://www.cppblog.com/flytosky2008gao/aggbug/105548.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/flytosky2008gao/" target="_blank">ggh</a> 2010-01-13 11:11 <a href="http://www.cppblog.com/flytosky2008gao/archive/2010/01/13/105548.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>命令行安装打印机</title><link>http://www.cppblog.com/flytosky2008gao/archive/2009/09/16/96447.html</link><dc:creator>ggh</dc:creator><author>ggh</author><pubDate>Wed, 16 Sep 2009 10:18:00 GMT</pubDate><guid>http://www.cppblog.com/flytosky2008gao/archive/2009/09/16/96447.html</guid><wfw:comment>http://www.cppblog.com/flytosky2008gao/comments/96447.html</wfw:comment><comments>http://www.cppblog.com/flytosky2008gao/archive/2009/09/16/96447.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/flytosky2008gao/comments/commentRss/96447.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/flytosky2008gao/services/trackbacks/96447.html</trackback:ping><description><![CDATA[<a href="http://www.robvanderwoude.com/2kprintcontrol.php">http://www.robvanderwoude.com/2kprintcontrol.php</a>
<img src ="http://www.cppblog.com/flytosky2008gao/aggbug/96447.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/flytosky2008gao/" target="_blank">ggh</a> 2009-09-16 18:18 <a href="http://www.cppblog.com/flytosky2008gao/archive/2009/09/16/96447.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>makefile续</title><link>http://www.cppblog.com/flytosky2008gao/archive/2009/09/03/95186.html</link><dc:creator>ggh</dc:creator><author>ggh</author><pubDate>Thu, 03 Sep 2009 04:57:00 GMT</pubDate><guid>http://www.cppblog.com/flytosky2008gao/archive/2009/09/03/95186.html</guid><wfw:comment>http://www.cppblog.com/flytosky2008gao/comments/95186.html</wfw:comment><comments>http://www.cppblog.com/flytosky2008gao/archive/2009/09/03/95186.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/flytosky2008gao/comments/commentRss/95186.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/flytosky2008gao/services/trackbacks/95186.html</trackback:ping><description><![CDATA[<p>makefile文件是win32汇编程序中不可少的一部分，类似于dos汇编下的bat文件</p>
<p>它一般需要包含以下内容</p>
<p>1.注释</p>
<p>2.宏定义</p>
<p>3.显示规则</p>
<p>4.隐含规则</p>
<p>为了方便使用，一般都把描述文件的文件名取为默认文件名：makefile。这个例子的makefile文件如下（注意前面括号里的是行号，不是文件的真正内容）： </p>
<p>(001)&nbsp;&nbsp; # nmake工具的描述文件例子<br>(002)&nbsp;&nbsp; EXE = Test.exe&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #指定输出文件<br>(003)&nbsp;&nbsp; OBJS = x.obj \<br>(004)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; y.obj&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #需要的目标文件<br>(005)&nbsp;&nbsp; RES = x.res&nbsp;&nbsp;&nbsp;&nbsp; #需要的资源文件<br>(006)&nbsp;&nbsp; <br>(007)&nbsp;&nbsp; LINK_FLAG = /subsystem:windows #链接选项<br>(008)&nbsp;&nbsp; ML_FLAG = /c /coff&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #编译选项<br>(009)&nbsp;&nbsp; <br>(010)&nbsp;&nbsp; #定义依赖关系和执行命令<br>(011)&nbsp;&nbsp; $(EXE): $(OBJS) $(RES)<br>(012)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Link $(LINK_FLAG) /out:$(EXE) $(OBJS) $(RES)<br>(013)&nbsp;&nbsp; $(OBJS): Common.inc<br>(014)&nbsp;&nbsp; y.obj: y.inc<br>(015)<br>(016)&nbsp;&nbsp; #定义汇编编译和资源编译的默认规则<br>(017)&nbsp;&nbsp; .asm.obj:<br>(018)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ml $(ML_FLAG) $&lt;<br>(019)&nbsp;&nbsp; .rc.res:<br>(020)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; rc $&lt;<br>(021)&nbsp;&nbsp; <br>(022)&nbsp;&nbsp; #清除临时文件<br>(023)&nbsp;&nbsp; clean:<br>(024)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; del *.obj<br>(025)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; del *.res<br>1. 注释和换行<br>makefile中的注释是以#号开头一直到行尾的字符，当nmake工具处理到这些字符的时候，它会完全忽略#号及全部注释字符。<br>当一行的内容过长的时候，可以用换行符来继续，makefile的换行符是\，如例子中的第三行和第四行可以合并为：<br>OBJS = x.obj y.obj&nbsp;&nbsp;&nbsp;&nbsp; #需要的目标文件<br>在使用换行符的时候要注意在&#8220;\&#8221;后面不能再加上其他字符，包括注释和空格，否则nmake检测到&#8220;\&#8221;不在一行的最后，就不会把它当成换行符解释，就会出现错误。<br>2. 宏定义<br>makefile中允许使用简单的宏定义指代源文件及其相关编译信息，可以把宏称为变量，在整个描述文件中，只要符合下面语法的行就是宏定义：<br>变量名=变量内容<br>如上面例子文件中的2到8就是宏定义，在引用宏时只需在变量前加$符号，但是要注意的是，如果变量名的长度超过一个字符，在引用时就必须加圆括号（），下面都是有效的宏引用：<br>$(LINK_FLAG)<br>$(EXE)<br>$A<br>$(A)<br>其中最后两个引用是完全一致的。<br>宏定义的使用可以使makefile的使用更灵活：首先可以使文件便于修改，比如把第8行和第18行中ml的选项部分写成宏定义，以后要改变编译选项的时候，只要直接在makefile文件头部改变宏定义就可以了，不必重新阅读整个makefile文件；其次，当不止一个地方用到同一个文件的时候，把文件名定义为宏定义可以减少错误，增加可读性，同时也可以便于修改；最大的好处是可以直接在命令行中用新的宏定义覆盖，比如在命令行中键入：<br>nmake ML_FLAG="/c /coff /Fl"<br>那么这时就会以新的/c /coff /Fl定义代替makefile中定义的/c /coff，在这种使用中要注意两个问题，一是宏名称要区分大小写，ML_FLAG和ml_flag是不一样的；二是定义值中有空格的时候要用双引号引起来，没有空格时可以不用双引号，如ML_FLAG=/c，这使临时使用不同的参数编译文件时可以不必修改makefile。<br>3. 显式规则<br>makefile中包含有一些规则，这些规则定义了文件之间的依赖关系和产生命令，一个规则的格式是这样的：<br>目标文件：依赖文件；命令&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; （方法1）<br>或<br>目标文件：依赖文件&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; （方法2）<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 命令<br>在规则定义和命令行中，不能包含注释，例子中的第11和12行把宏定义展开后就是：<br>test.exe：x.obj y.obj x.res<br>&nbsp;&nbsp;&nbsp; Link /subsystem:windows /out:test.exe x.obj y.obj x.res<br>这里的目标文件就是test.exe，它依赖于3个文件x.obj，y.obj和x.res，如果有必要，产生目标文件的命令就是下面的Link命令，整个规则可以用两种方法，用第二种方法的时候，命令可以从第二行开始，第一行的&#8220;；&#8221;省略，但是这时命令前面必须有一个Tab字符，否则nmake无法区分这究竟是命令还是别的定义。目标文件可以有多个，依赖文件也可以有多个，同时命令也可以由多个命令行组成，当然这时候就必须用第二种方法定义了。<br>我们也可以用test.exe生成的规则定义其他文件，如x.obj或x.res的生成方法，但nmake如何知道哪个是最终要make的文件呢？实际上nmake默认将整个描述文件的第一条规则中的目标文件认为是最终文件，如果我们把11，12行放到第13行后面，那么x.obj和y.obj的建立规则就成了第一条规则，nmake建立了x.obj和x.obj之后就不理会test.exe的建立了，所以我们必须把最终需要生成的文件放在第一条规则定义。当然，在nmake的命令行参数中可以指定要make的目标，如我们要生成x.res文件，那么不必修改makefile将x.res的描述规则移动到最前面，而是直接在命令行键入以下命令即可：<br>nmake x.res<br>参数中也可以同时带好几个目标文件名，nmake会一一处理，如果指定的目标文件没有对应的规则，nmake会返回一个出错信息：<br>fatal error U1073: don't know how to make 'xxx文件'<br>当用户要求nmake去建造一个目标时，make会去找到这个目标的依赖规则，这时第二行中的命令并不会立刻就执行，而是首先要做一些事情：nmake先去检查依赖文件是否是另一条规则的目标文件，如果是则先处理这一条规则，否则不是，nmake再检查各个依赖文件的时间，看这些文件有没有比目标文件更新的，如果没有，nmake会决定不再重新建造目标文件，并给出提示：'xxx文件' is up-to-date，如果依赖文件有比目标文件更新的，才执行命令。<br>所以一个顺序下来，所有的目标文件以及它们的依赖文件，以及依赖文件的依赖文件都会被检查并更新，总而言之，一个目标文件的建立包含了顺序正确的指令链接，这个链接结构是树状的，目标文件是根，一级级扩展到多个文件，我们要求的是nmake去建立链接中处于根部的那个文件，nmake会根据链接结构从目标开始向初始状态前进，最后慢慢回来，在这个过程中执行建立每个文件所必须的命令，一直到最终目标建立完成。<br>目标也可以没有依赖文件，而且目标也可以不是一个真正存在的文件，如例子第23行到第25行中的clean是一个目标，但我们并不是要生成一个clean文件，而是希望在文件调试完毕后用nmake来清除临时文件，当我们键入nmake clean的时候，工作目录下并没有clean这个文件，那么nmake就会去执行clean定义中的命令，因为nmake把每一个不存在的目标当做是一个过时的目标，如此一来，就会删除中间过程中的文件*.obj和*.res。<br>指出了目标文件全名的规则称为显式规则，但有些类别的文件的编译方法可以是雷同 的，如从asm文件产生obj文件的命令总是用ml，从rc文件产生res文件的命令总是用rc，对于每个文件都写一条规则有些多余，这时候就要用到隐含规则。<br>4. 隐含规则<br>隐含规则可以为某一类的文件指出建立的命令，它具体定义了如何将带一个特定扩展名的文件转换成具有另一种扩展名的文件，定义的格式是：<br>.源扩展名.目标扩展名：；命令&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; （方法1）<br>或<br>.源扩展名.目标扩展名：&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; （方法2）<br>&nbsp;&nbsp;&nbsp; 命令<br>隐含规则的语法和显式规则相似，也是用&#8220;：&#8221;隔开，在&#8220;；&#8221;下面书写命令，也可以不用&#8220;；&#8221;而将命令写在第二行，同理，这时命令之前要加一个Tab字符。<br>隐含规则不能有依赖文件，所以&#8220;：&#8221;下面没有内容，例子中的第17、18行定义了从asm文件建立obj文件的隐含规则，第19和20行定义了从rc文件建立res文件的隐含规则，隐含规则中无法指定确定的输入文件名，因为输入文件名是泛指的有相同扩展名的一整类文 件，这时候就要用到几个特殊的内定宏来指定文件名，这些宏是$@，$*，$?和$&lt;，它们的含义如下：<br>●&nbsp;&nbsp; $@ —— 全路径的目标文件。<br>●&nbsp;&nbsp; $* —— 除去扩展名的全路径的目标文件。<br>●&nbsp;&nbsp; $? —— 所有源文件名。<br>●&nbsp;&nbsp; $&lt; —— 源文件名（只能用在隐含规则中）。<br>所以第19、20行中的rc $&lt; 用于x.rc的时候就是rc x.rc。<br>读者可以注意到一些显式规则没有命令行，如第13行的&#8220;$(OBJS): Common.inc&#8221;指出了所有的obj文件全部依赖于Common.inc文件，第14行的&#8220;y.obj: y.inc&#8221;则指出了y.obj同时也依赖于y.inc和第13行的规则合并，y.obj依赖于Common.inc也依赖于y.inc，但是这两条规则都没有指出产生这些obj文件的命令，所以nmake处理的时候会到隐含规则中去找命令行，最后会用第18行的&#8220;ml $(ML_FLAG) $&lt;&#8221;命令去产生这些obj文件。</p>
<p><br>本文来自CSDN博客，转载请标明出处：<a href="http://blog.csdn.net/hust_chen/archive/2008/04/25/2329368.aspx">http://blog.csdn.net/hust_chen/archive/2008/04/25/2329368.aspx</a></p>
<img src ="http://www.cppblog.com/flytosky2008gao/aggbug/95186.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/flytosky2008gao/" target="_blank">ggh</a> 2009-09-03 12:57 <a href="http://www.cppblog.com/flytosky2008gao/archive/2009/09/03/95186.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>makefile</title><link>http://www.cppblog.com/flytosky2008gao/archive/2009/09/03/95182.html</link><dc:creator>ggh</dc:creator><author>ggh</author><pubDate>Thu, 03 Sep 2009 04:31:00 GMT</pubDate><guid>http://www.cppblog.com/flytosky2008gao/archive/2009/09/03/95182.html</guid><wfw:comment>http://www.cppblog.com/flytosky2008gao/comments/95182.html</wfw:comment><comments>http://www.cppblog.com/flytosky2008gao/archive/2009/09/03/95182.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/flytosky2008gao/comments/commentRss/95182.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/flytosky2008gao/services/trackbacks/95182.html</trackback:ping><description><![CDATA[转================================ <br>Makefile文件 <br><br>　　Make工具最主要也是最基本的功能就是通过makefile文件来描述源程序之间的相互关系并自动维护编译工作。而makefile &nbsp; 文件需要按照某种语法进行编写，文件中需要说明如何编译各个源文件并连接生成可执行文件，并要求定义源文件之间的依赖关系。makefile &nbsp; 文件是许多编译器--包括 &nbsp; Windows &nbsp; NT &nbsp; 下的编译器--维护编译信息的常用方法，只是在集成开发环境中，用户通过友好的界面修改 &nbsp; makefile &nbsp; 文件而已。 <br>　　在 &nbsp; UNIX &nbsp; 系统中，习惯使用 &nbsp; Makefile &nbsp; 作为 &nbsp; makefile &nbsp; 文件。如果要使用其他文件作为 &nbsp; makefile，则可利用类似下面的 &nbsp; make &nbsp; 命令选项指定 &nbsp; makefile &nbsp; 文件： <br>　　$ &nbsp; make &nbsp; -f &nbsp; Makefile.debug <br>　　例如，一个名为prog的程序由三个C源文件filea.c、fileb.c和filec.c以及库文件LS编译生成，这三个文件还分别包含自己的头文件a.h &nbsp; 、b.h和c.h。通常情况下，C编译器将会输出三个目标文件filea.o、fileb.o和filec.o。假设filea.c和fileb.c都要声明用到一个名为defs的文件，但filec.c不用。即在filea.c和fileb.c里都有这样的声明： <br>　　#include &nbsp; "defs " <br>　　那么下面的文档就描述了这些文件之间的相互联系: <br>　　--------------------------------------------------------- <br>　　　#It &nbsp; is &nbsp; a &nbsp; example &nbsp; for &nbsp; describing &nbsp; makefile <br>　　　prog &nbsp; : &nbsp; filea.o &nbsp; fileb.o &nbsp; filec.o <br>　　　cc &nbsp; filea.o &nbsp; fileb.o &nbsp; filec.o &nbsp; -LS &nbsp; -o &nbsp; prog <br>　　　filea.o &nbsp; : &nbsp; filea.c &nbsp; a.h &nbsp; defs <br>　　　cc &nbsp; -c &nbsp; filea.c <br>　　　fileb.o &nbsp; : &nbsp; fileb.c &nbsp; b.h &nbsp; defs <br>　　　cc &nbsp; -c &nbsp; fileb.c <br>　　　filec.o &nbsp; : &nbsp; filec.c &nbsp; c.h <br>　　　cc &nbsp; -c &nbsp; filec.c <br>　　---------------------------------------------------------- <br>　 &nbsp; 这个描述文档就是一个简单的makefile文件。 <br>　　从上面的例子注意到，第一个字符为 &nbsp; # &nbsp; 的行为注释行。第一个非注释行指定prog由三个目标文件filea.o、fileb.o和filec.o链接生成。第三行描述了如何从prog所依赖的文件建立可执行文件。接下来的4、6、8行分别指定三个目标文件，以及它们所依赖的.c和.h文件以及defs文件。而5、7、9行则指定了如何从目标所依赖的文件建立目标。 <br>　　当filea.c或a.h文件在编译之后又被修改，则 &nbsp; make &nbsp; 工具可自动重新编译filea.o，如果在前后两次编译之间，filea.C &nbsp; 和a.h &nbsp; 均没有被修改，而且 &nbsp; test.o &nbsp; 还存在的话，就没有必要重新编译。这种依赖关系在多源文件的程序编译中尤其重要。通过这种依赖关系的定义，make &nbsp; 工具可避免许多不必要的编译工作。当然，利用 &nbsp; Shell &nbsp; 脚本也可以达到自动编译的效果，但是，Shell &nbsp; 脚本将全部编译任何源文件，包括哪些不必要重新编译的源文件，而 &nbsp; make &nbsp; 工具则可根据目标上一次编译的时间和目标所依赖的源文件的更新时间而自动判断应当编译哪个源文件。 <br>Makefile文件作为一种描述文档一般需要包含以下内容: <br>　　◆ &nbsp; 宏定义 <br>　　◆ &nbsp; 源文件之间的相互依赖关系 <br>　　◆ &nbsp; 可执行的命令 <br>　　Makefile中允许使用简单的宏指代源文件及其相关编译信息，在Linux中也称宏为变量。在引用宏时只需在变量前加$符号，但值得注意的是，如果变量名的长度超过一个字符，在引用时就必须加圆括号（）。 <br>　　下面都是有效的宏引用： <br>　　$(CFLAGS) <br>　　$2 <br>　　$Z <br>　　$(Z) <br>　　其中最后两个引用是完全一致的。 <br>　　需要注意的是一些宏的预定义变量，在Unix系统中，$*、$@、$?和$ &lt;四个特殊宏的值在执行命令的过程中会发生相应的变化，而在GNU &nbsp; make中则定义了更多的预定义变量。关于预定义变量的详细内容， <br>　　宏定义的使用可以使我们脱离那些冗长乏味的编译选项，为编写makefile文件带来很大的方便。 <br>　　--------------------------------------------------------- <br>　　　# &nbsp; Define &nbsp; a &nbsp; macro &nbsp; for &nbsp; the &nbsp; object &nbsp; files <br>　　　OBJECTS= &nbsp; filea.o &nbsp; fileb.o &nbsp; filec.o <br><br>　　　# &nbsp; Define &nbsp; a &nbsp; macro &nbsp; for &nbsp; the &nbsp; library &nbsp; file <br>　　　LIBES= &nbsp; -LS <br><br>　　　# &nbsp; use &nbsp; macros &nbsp; rewrite &nbsp; makefile <br>　　　prog: &nbsp; $(OBJECTS) <br>　　　cc &nbsp; $(OBJECTS) &nbsp; $(LIBES) &nbsp; -o &nbsp; prog <br>　　　&#8230;&#8230; <br>　　--------------------------------------------------------- <br>　　此时如果执行不带参数的make命令，将连接三个目标文件和库文件LS；但是如果在make命令后带有新的宏定义： <br>　　make &nbsp; "LIBES= &nbsp; -LL &nbsp; -LS " <br>则命令行后面的宏定义将覆盖makefile文件中的宏定义。若LL也是库文件，此时make命令将连接三个目标文件以及两个库文件LS和LL。 <br>　　在Unix系统中没有对常量NULL作出明确的定义，因此我们要定义NULL字符串时要使用下述宏定义： <br>　　STRINGNAME= <br>
<img src ="http://www.cppblog.com/flytosky2008gao/aggbug/95182.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/flytosky2008gao/" target="_blank">ggh</a> 2009-09-03 12:31 <a href="http://www.cppblog.com/flytosky2008gao/archive/2009/09/03/95182.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>编译选项</title><link>http://www.cppblog.com/flytosky2008gao/archive/2009/09/02/95092.html</link><dc:creator>ggh</dc:creator><author>ggh</author><pubDate>Wed, 02 Sep 2009 06:00:00 GMT</pubDate><guid>http://www.cppblog.com/flytosky2008gao/archive/2009/09/02/95092.html</guid><wfw:comment>http://www.cppblog.com/flytosky2008gao/comments/95092.html</wfw:comment><comments>http://www.cppblog.com/flytosky2008gao/archive/2009/09/02/95092.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/flytosky2008gao/comments/commentRss/95092.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/flytosky2008gao/services/trackbacks/95092.html</trackback:ping><description><![CDATA[<p>优化 </p>
<p>选项 作用 <br>/O1 创建小代码 <br>/O2 创建快速代码 <br>/Oa 假设没有别名 <br>/Ob 控制内联展开 <br>/Od 禁用优化 <br>/Og 使用全局优化 <br>/Oi 生成内部函数 <br>/Op 改善浮点数一致性 <br>/Os 代码大小优先 <br>/Ot 代码速度优先 <br>/Ow 假定在函数调用中使用别名 <br>/Ox 使用最大优化 (/Ob1gity /Gs) <br>/Oy 省略框架指针 </p>
<p>&nbsp;</p>
<p>代码生成 </p>
<p>选项 作用 <br>/clr 启用 C++ 的托管扩展并产生在公共语言运行库上运行的输出文件 <br>/EH 指定异常处理模型 <br>/G3 优化代码以优选 386 处理器。在 Visual C++ 5.0 中已经停用，编译器将忽略此选项 <br>/G4 优化代码以优选 486 处理器。在 Visual C++ 5.0 中已经停用，编译器将忽略此选项 <br>/G5 优化代码以优选 Pentium <br>/GB 与 /G6 等效；将 _M_IX86 的值设置为 600 <br>/Gd 使用 __cdecl 调用约定 <br>/Ge 激活堆栈探测 <br>/GF <br>/GF 启用字符串池 <br>/GH 调用挂钩函数 _penter <br>/GH 调用挂钩函数 _pexit <br>/GL 启用全程序优化 <br>/Gm 启用最小重新生成 <br>/Gr 启用运行时类型信息 (RTTI) <br>/Gr 使用 __fastcall 调用约定 <br>/GS 控制堆栈探测 <br>/GT 支持使用静态线程本地存储区分配的数据的纤程安全 <br>/GX 启用同步异常处理 <br>/Gy 启用函数级链接 <br>/GZ 使用 __stdcall 调用约定 <br>/MD 使用 MSVCRT.lib 创建多线程 DLL <br>/MDd 使用 MSVCRTD.lib 创建调试多线程 DLL <br>/ML 使用 LIBC.lib 创建单线程可执行文件 <br>/MLd 使用 LIBCD.lib 创建调试单线程可执行文件 <br>/MT 使用 LIBCMT.lib 创建多线程可执行文件 <br>/MTd 使用 LIBCMTD.lib 创建调试多线程可执行文件 </p>
<p>输出文件 </p>
<p>选项 作用 <br>/FA <br>/FA 创建列表文件 <br>设置列表文件名 <br>/Fd 重命名程序数据库文件 <br>/Fe 重命名可执行文件 <br>/Fm 创建映射文件 <br>/Fo 创建对象文件 <br>/Fp 指定预编译头文件名 <br>/FR <br>/FR 生成浏览器文件 <br>/Fx 将插入的代码与源文件合并 </p>
<p>调试 </p>
<p>选项 作用 <br>/GS 缓冲区安全检查 <br>/GZ 与 /RTC1 相同 <br>/RTC 启用运行时错误检查 <br>/Wp64 检测 64 位可移植性问题 <br>/Yd 将完整的调试信息放在所有对象文件中 <br>/Yl 创建调试库时插入 PCH 引用 <br>/Z7 生成与 C 7.0 兼容的调试信息 <br>/Zd 生成行号 <br>/Zi 生成完整的调试信息 </p>
<p>预处理器 </p>
<p>选项 作用 <br>/AI 指定在解析传递到#using 指令的文件引用时搜索的目录 <br>/c 在预处理期间保留注释 <br>/D 定义常数和宏 <br>/E 将预处理器输出复制到标准输出 <br>/EP 将预处理器输出复制到标准输出 <br>/Fl 预处理指定的包含文件 <br>/FU 强制使用文件名，就像它已被传递到#using 指令一样 <br>/I 在目录中搜索包含文件 <br>/P 将预处理器输出写入文件 <br>/U 移除预定义宏 <br>/U 移除所有的预定义宏 <br>/X 忽略标准包含目录 <br>/ZI 将调试信息包含在与&#8220;编辑并继续&#8221;兼容的程序数据库中 </p>
<p>(附&#8220;编辑并继续&#8221;：编辑并继续&#8221;处理大多数类型的代码更改。但是，在程序执行期间，某些更改无法应用。若要应用这些更改，必须暂停执行并生成新版本的代码。 </p>
<p>在调试会话期间不能应用下列 C/C++ 更改： <br>大多数的全局或静态数据的更改。 <br>从其他计算机复制并且未在本地生成的可执行文件的更改。 <br>影响一个对象（如类的数据成员）布局的数据类型的更改。 <br>添加超过 64k 字节的新代码或数据。 <br>添加要求在指令指针前存在构造函数的变量。 <br>影响需要运行时初始化的代码的更改。 <br>在某些实例中，添加异常处理程序。 <br>资源文件的更改。 <br>只读文件中的代码更改。 <br>没有相应 PDB 文件的代码的更改。 <br>没有对象文件的代码的更改。 </p>
<p>在以下调试方案中，&#8220;编辑并继续&#8221;不可用： <br>在 Windows 98 上调试。 <br>混合模式（本机/托管）调试。 <br>SQL 调试。 <br>调试 Dr. Watson 转储。 <br>在未选择&#8220;在未处理的异常上展开调用堆栈&#8221;选项的情况下，在发生未处理的异常之后编辑代码。 <br>调试嵌入式运行库应用程序。 <br>从&#8220;调试&#8221;菜单中使用&#8220;附加到&#8221;调试应用程序，而不是使用&#8220;启动&#8221;运行应用程序。 <br>调试优化后的代码。 <br>当目标为 64 位应用程序时，调试托管代码。如果想要使用&#8220;编辑并继续&#8221;，必须将目标平台设置为 x86。(（&#8220;Project 属性&#8221;对话框-&gt;&#8220;编译&#8221;选项卡-&gt;&#8220;高级编译器&#8221;设置。） <br>如果由于生成错误无法生成新版本的代码，则对旧版本的代码进行调试)</p>
<p>语言 </p>
<p>选项 作用 <br>/noBool 取消 C++ bool、true 和 false 关键字 <br>/vd 取消或启用隐藏的 vtordisp 类成员 <br>/vmb 对指向成员的指针使用最佳的基 <br>/vmg 对指向成员的指针使用完全一般性 <br>/vmm 声明多重继承 <br>/vms 声明单一继承 <br>/vmv 声明虚拟继承 <br>/Za 禁用语言扩展 <br>/Zc 在 /Ze 下指定标准行为 <br>/Ze 启用语言扩展 <br>/Zg 生成函数原型 <br>/Zl 从 .obj 文件中移除默认库名 <br>/Zp n 封装结构成员 <br>/Zs 只检查语法</p>
<p>链接 </p>
<p>选项 作用 <br>/F 设置堆栈大小 <br>/LD 创建动态链接库 <br>/LDd 创建调试动态链接库 <br>/link 将指定的选项传递给 LINK <br>/MD 使用 MSVCRT.lib 编译以创建多线程 DLL <br>/MDd 使用 MSVCRTD.lib 编译以创建调试多线程 DLL <br>/ML 使用 LIBC.lib 编译以创建单线程可执行文件 <br>/MLd 使用 LIBCD.lib 编译以创建调试单线程可执行文件 <br>/MT 使用 LIBCMT.lib 编译以创建多线程可执行文件 <br>/MTd 使用 LIBCMTD.lib 编译以创建调试多线程可执行文件 </p>
<p>预编译头 </p>
<p>选项 作用 <br>/Y- 忽略当前生成中的所有其他预编译头编译器选项 <br>/Yc 创建预编译头文件 <br>/Yd 将完整的调试信息放在所有对象文件中 <br>/Yu 在生成期间使用预编译头文件 <br>/YX 自动处理预编译头 </p>
<p>杂项 </p>
<p>选项 作用 <br>@ 指定响应文件 <br>/? 列出编译器选项 <br>/c 编译但不链接 <br>/H 限制外部（公共）名称的长度 <br>/HELP 列出编译器选项 <br>/J 更改默认的 char 类型 <br>/NOLOGO 取消显示登录版权标志 <br>/QI0f 确保 Pentium 0F 指令没有问题 <br>/QIfdiv FDIV、FPREM、FPTAN 和 FPATAN 指令有缺陷的 Intel Pentium 微处理器的变通方法 <br>QIfist 当需要从浮点类型转换为整型时取消 Helper 函数 _ftol 的调用 <br>/showIncludes 在编译期间显示所有包含文件的列表 <br>/Tc <br>/Tc 指定 C 源文件 <br>/Tp <br>/Tp 指定 C++ 源文件 <br>/V 设置版本字符串 <br>/w 设置警告等级 <br>/w 禁用所有警告 <br>/Wall 启用所有警告，包括默认情况下禁用的警告 <br>/WL 在从命令行编译 C++ 源代码时启用错误信息和警告消息的单行诊断 <br>/Zm 设置编译器的内存分配限制 </p>
<p><br>CL 命令行使用下列语法： </p>
<p>CL [option...] file... [option | file]... [lib...] [@command-file] [/link link-opt...] </p>
<p>下表说明CL 命令的输入项意义 </p>
<p>option 一个或多个 CL 选项。请注意，所有选项都应用于所有指定的源文件。选项是由一个正斜杠 (/) 或一个短划线 (&#8211;) 指定的。如果某个选项带有参数，则该选项的说明指定在选项和参数之间是否允许有空格。选项名（/HELP 选项除外）区分大小写。有关更多信息，请参阅 CL 选项的顺序。 </p>
<p>file 一个或多个源文件、.obj 文件或库的名称。CL 编译源文件并将 .obj 文件和库的名称传递给链接器。有关更多信息，请参阅 CL 文件名语法。 </p>
<p>lib 一个或多个库名。CL 将这些名称传递给链接器。 </p>
<p>command-file 包含多个选项和文件名的文件。有关更多信息，请参阅 CL 命令文件。 </p>
<p>link-opt 一个或多个链接器选项。CL 将这些选项传递给链接器。 </p>
<p>您可以指定任意数目的选项、文件名和库名，条件是命令行上的字符数不超过 1024，该限制是操作系统指定的。 </p>
<p>CL 命令文件请参见 <br>设置编译器选项 | 编译器选项 <br>命令文件是一个文本文件，它包含您另外在命令行上键入或使用 CL 环境变量指定的选项和文件名。CL 接受在 CL 环境变量中或命令行上用作参数的编译器命令文件。与命令行或 CL 环境变量不同，命令文件允许使用多行选项和文件名。 </p>
<p>命令文件中的选项和文件名将根据 CL 环境变量中或命令行上的命令文件名的位置被进行处理。但是，如果 /link 选项出现在命令文件中，则该行其余部分的所有选项将被传递给链接器。命令文件的后面几行中的选项和命令行上命令文件调用之后的选项仍被作为编译器选项接受。 </p>
<p>命令文件一定不能包含 CL 命令。每个选项必须在同一行上开始和结束；不能使用反斜杠 (\) 跨行组合一个选项。 </p>
<p>命令文件用一个 @ 符后接一个文件名指定；该文件名可指定绝对路径或相对路径。</p>
<p>&nbsp;</p>
<p>本文来自CSDN博客，转载请标明出处：<a href="http://blog.csdn.net/mickey139/archive/2009/06/01/4232489.aspx">http://blog.csdn.net/mickey139/archive/2009/06/01/4232489.aspx</a></p>
<img src ="http://www.cppblog.com/flytosky2008gao/aggbug/95092.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/flytosky2008gao/" target="_blank">ggh</a> 2009-09-02 14:00 <a href="http://www.cppblog.com/flytosky2008gao/archive/2009/09/02/95092.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>批处理文</title><link>http://www.cppblog.com/flytosky2008gao/archive/2009/09/02/95081.html</link><dc:creator>ggh</dc:creator><author>ggh</author><pubDate>Wed, 02 Sep 2009 02:56:00 GMT</pubDate><guid>http://www.cppblog.com/flytosky2008gao/archive/2009/09/02/95081.html</guid><wfw:comment>http://www.cppblog.com/flytosky2008gao/comments/95081.html</wfw:comment><comments>http://www.cppblog.com/flytosky2008gao/archive/2009/09/02/95081.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/flytosky2008gao/comments/commentRss/95081.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/flytosky2008gao/services/trackbacks/95081.html</trackback:ping><description><![CDATA[后缀是bat的文件就是批处理文件，是一种文本文件。简单的说，它的作用就是自动的连续执行多条命令，批处理文件的内容就是一条一条的命令。那它有什么用呢？<br><br>&nbsp; 比如，在启动wps软件时，每次都必须执行<br><br>&nbsp; C:〉cd wps<br>&nbsp; C:WPS〉spdos<br>&nbsp; C:WPS〉py<br>&nbsp; C:WPS〉wbx<br>&nbsp; C:WPS〉wps<br><br>&nbsp; 如果每次用WPS之前都这样执行一次，您是不是觉得很麻烦呢？<br><br>&nbsp; 如果有一个方法，只需编写一个批处理文件，就会自动执行刚才的所有命令，您想不想学呢？<br><br>&nbsp; 当您看完此节，自己编写的第一个批处理文件顺利执行时，您一定会大吃一惊的。<br><br>&nbsp; 此外电脑每次启动时都会寻找autoexec.bat这条批处理文件，从而可执行一些每次开机都要执行的命令，如设置路径path、加载鼠标驱动mouse、磁盘加速smartdrv等，可以使您的电脑真正自动化。<br><br>&nbsp; echo、@、call、pause、rem 是批处理文件最常用的几个命令，我们就从他们开始学起。 echo 表示显示此命令后的字符<br>&nbsp; echo off 表示在此语句后所有运行的命令都不显示命令行本身<br>&nbsp; @ 与echo off相象，但它是加在其它命令行的最前面，表示运行时不显示命令行本身。<br>&nbsp; call 调用另一条批处理文件（如果直接调用别的批处理文件 ，执行完那条文件后将无法执行当前文件后续命令）<br>&nbsp; pause 运行此句会暂停，显示Press any key to continue... 等待用户按任意键后继续<br>&nbsp; rem 表示此命令后的字符为解释行，不执行，只是给自己今后查找用的<br><br><br>&nbsp; 例：用edit编辑a.bat文件，输入下列内容后存盘为c:\a.bat，执行该批处理文件后可实现：将根目录中所有文件写入 a.txt中，启动UCDOS，进入WPS等功能。<br><br>&nbsp; 批处理文件的内容为:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 文件表示：<br><br>&nbsp;&nbsp;&nbsp; echo off&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 不显示命令行<br><br>&nbsp;&nbsp;&nbsp; dir c:\*.* &gt;a.txt&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 将c盘文件列表写入a.txt<br><br>&nbsp;&nbsp;&nbsp; call c:\ucdos\ucdos.bat&nbsp;&nbsp;&nbsp; 调用ucdos<br><br>&nbsp;&nbsp;&nbsp; echo 你好&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 显示&#8220;你好&#8221;<br><br>&nbsp;&nbsp;&nbsp; pause&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 暂停,等待按键继续<br><br>&nbsp;&nbsp;&nbsp; rem 使用wps&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 注释将使用wps<br><br>&nbsp;&nbsp;&nbsp; cd ucdos&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 进入ucdos目录<br><br>&nbsp;&nbsp;&nbsp; wps&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 使用wps&nbsp; <br><br>&nbsp; 批处理文件中还可以像C语言一样使用参数，这只需用到一个参数表示符%。<br><br>&nbsp;&nbsp; %表示参数，参数是指在运行批处理文件时在文件名后加的字符串。变量可以从 %0到%9，%0表示文件名本身，字符串用%1到%9顺序表示。<br><br>&nbsp; 例如，C：根目录下一批处理文件名为f.bat，内容为 format %1<br><br>&nbsp; 则如果执行C:\&gt;f a:&nbsp;&nbsp;&nbsp; 则实际执行的是format a:<br><br>&nbsp; 又如C：根目录下一批处理文件的名为t.bat，内容为 type %1 type %2<br><br>&nbsp; 那么运行C:\&gt;t a.txt b.txt 将顺序地显示a.txt和b.txt文件的内容<br><br>&nbsp; if goto choice for 是批处理文件中比较高级的命令，如果这几个你用得很熟练，你就是批处理文件的专家啦。<br><br>&nbsp;&nbsp; if 表示将判断是否符合规定的条件，从而决定执行不同的命令。 有三种格式:<br>&nbsp; 1、if &#8220;参数&#8221; == &#8220;字符串&#8221;&nbsp; 待执行的命令<br>&nbsp; 参数如果等于指定的字符串，则条件成立，运行命令，否则运行下一句。（注意是两个等号）<br>&nbsp; 如if &#8220;%1&#8221;== &#8220;a&#8221; format a:<br><br>&nbsp; 2、if exist 文件名&nbsp; 待执行的命令<br>&nbsp; 如果有指定的文件，则条件成立，运行命令，否则运行下一句。如if exist config.sys edit config.sys<br><br>&nbsp; 3、if errorlevel 数字&nbsp; 待执行的命令<br>&nbsp; 如果返回码等于指定的数字，则条件成立，运行命令，否则运行下一句。如if errorlevel 2 goto x2&nbsp; DOS程序运行时都会返回一个数字给DOS，称为错误码errorlevel或称返回码<br><br>&nbsp; goto 批处理文件运行到这里将跳到goto 所指定的标号处， 一般与if配合使用。 如:<br><br>&nbsp; goto end<br><br>&nbsp; :end<br>&nbsp; echo this is the end<br><br>&nbsp; 标号用 :字符串 表示，标号所在行不被执行<br><br>&nbsp; choice 使用此命令可以让用户输入一个字符，从而运行不同的命令。使用时应该加/c:参数，c:后应写提示可输入的字符，之间无空格。它的返回码为1234&#8230;&#8230;<br><br>&nbsp; 如: choice /c:dme defrag,mem,end<br>&nbsp; 将显示<br>&nbsp; defrag,mem,end[D,M,E]?<br><br>&nbsp; 例如，test.bat的内容如下:<br>&nbsp; @echo off<br>&nbsp; choice /c:dme defrag,mem,end<br>&nbsp; if errorlevel 3 goto defrag 应先判断数值最高的错误码<br>&nbsp; if errorlevel 2 goto mem<br>&nbsp; if errotlevel 1 goto end<br><br>&nbsp; :defrag<br>&nbsp; c:\dos\defrag<br>&nbsp; goto end<br><br>&nbsp; :mem<br>&nbsp; mem<br>&nbsp; goto end<br><br>&nbsp; :end<br>&nbsp; echo good bye<br><br>&nbsp; 此文件运行后，将显示 defrag,mem,end[D,M,E]? 用户可选择d m e ，然后if语句将作出判断，d表示执行标号为defrag的程序段，m表示执行标号为mem的程序段，e表示执行标号为end的程序段，每个程序段最后都以goto end将程序跳到end标号处，然后程序将显示good bye，文件结束。<br><br>&nbsp; for 循环命令，只要条件符合，它将多次执行同一命令。<br><br>&nbsp; 格式FOR [%%f] in （集合） DO [命令]<br>&nbsp; 只要参数f在指定的集合内，则条件成立，执行命令<br><br>&nbsp; 如果一条批处理文件中有一行:<br>&nbsp; for %%c in （*.bat *.txt） do type %%c<br>&nbsp; 含义是如果是以bat或txt结尾的文件，则显示文件的内容。<br><br>&nbsp; autoexec.bat&nbsp; <br><br>&nbsp; DOS在启动会自动运行autoexec.bat这条文件，一般我们在里面装载每次必用的程序，如: path（设置路径）、smartdrv（磁盘加速）、 mouse（鼠标启动）、mscdex（光驱连接）、 doskey（键盘管理）、set（设置环境变量）等。<br><br>&nbsp; 如果启动盘根目录中没有这个文件，电脑会让用户输入日期和时间。<br><br>&nbsp; 例如，一个典型的autoexec.bat内容如下:<br><br>&nbsp; @echo off&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 不显示命令行<br><br>&nbsp; prompt $p$g&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 设置提示符前有目录提示<br><br>&nbsp; path c:\dos;c:\;c:\windows;c:\ucdos;c:\tools&nbsp;&nbsp;&nbsp; 设置路径<br><br>&nbsp; lh c:\dos\doskey.com&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 加载键盘管理<br><br>&nbsp; lh c:\mouse\mouse.com&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 加载鼠标管理<br><br>&nbsp; lh c:\dos\smartdrv.exe&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 加载磁盘加速管理<br><br>&nbsp; lh c:\dos\mscdex /S /D:MSCD000 /M:12 /V&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 加载CD-ROM驱动<br><br>&nbsp; set temp=c:\temp&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 设置临时目录 
<img src ="http://www.cppblog.com/flytosky2008gao/aggbug/95081.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/flytosky2008gao/" target="_blank">ggh</a> 2009-09-02 10:56 <a href="http://www.cppblog.com/flytosky2008gao/archive/2009/09/02/95081.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>系统进程的含义</title><link>http://www.cppblog.com/flytosky2008gao/archive/2009/08/28/94692.html</link><dc:creator>ggh</dc:creator><author>ggh</author><pubDate>Fri, 28 Aug 2009 10:21:00 GMT</pubDate><guid>http://www.cppblog.com/flytosky2008gao/archive/2009/08/28/94692.html</guid><wfw:comment>http://www.cppblog.com/flytosky2008gao/comments/94692.html</wfw:comment><comments>http://www.cppblog.com/flytosky2008gao/archive/2009/08/28/94692.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/flytosky2008gao/comments/commentRss/94692.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/flytosky2008gao/services/trackbacks/94692.html</trackback:ping><description><![CDATA[<h2>系统正常状态下的进程和进程解释</h2>
<div class=t_msgfont id=postmessage_3140690>正常<span class=t_tag onclick=tagshow(event) href="tag.php?name=windows">windows</span> XP SP2每一个进程的含义---进程列表<br><br>正常windows XP SP2每一个进程的含义---进程列表---&gt;<br><br>进程0：[System Process](优先级：暂缺)5a<br>进程1：System(优先级：标准)xf<br>进程2：\SystemRoot\System32\smss.exe(优先级：标准)J'{<br>进程3：CSRSS.EXE(优先级：高)sE?b<br>进程4：\??\D:\WINDOWS\system32\winlogon.exe(优先级：高)x,Y_7<br>进程5：D:\WINDOWS\system32\services.exe(优先级：标准)7U9&gt;p@<br>进程6：D:\WINDOWS\system32\lsass.exe(优先级：标准)Z?r_.<br>进程7：D:\WINDOWS\system32\svchost.exe(优先级：标准)Nz<br>进程8：SVCHOST.EXE(优先级：标准)CZO<br>进程9：D:\WINDOWS\System32\svchost.exe(优先级：标准)yGh&gt;<br>进程10：SVCHOST.EXE(优先级：标准)o,&amp;Y<br>进程11：SVCHOST.EXE(优先级：标准)A<br>进程12：D:\WINDOWS\system32\spoolsv.exe(优先级：标准)T<br>进程13：D:\WINDOWS\Explorer.EXE(优先级：标准)i5d5<br>进程14：D:\WINDOWS\system32\ctfmon.exe(优先级：标准)aeI <br>进程15：D:\WINDOWS\system32\crypserv.exe(优先级：高)~^<br>进程16：D:\WINDOWS\System32\inetsrv\inetinfo.exe(优先级：标准)DF.<br>进程17：WDFMGR.EXE(优先级：标准)g3Qg@<br>进程18：ALG.EXE(优先级：标准)f7Hfr<br>进程19：D:\WINDOWS\System32\svchost.exe(优先级：标准)qM`!1_<br>进程20：wmiprvse.exe(优先级：标准)<br><br>---进程说明---j/hNx<br><br><br>进程0：[System Process]&lt;)yYb<br>公司：g\!H<br>描述：X<br>版权：tq^3<br>文件版本：j<br>产品名称：7m<br>产品版本：<br><br>进程1：SystemBF1}~_<br>公司：1Q<br>描述：ls<br>版权：@ho=3r<br>文件版本：PFE<br>产品名称：=+_\sF<br>产品版本<br><br>进程2：\SystemRoot\System32\smss.exe2Jm<br>公司：(:n<br>描述：s"jo7'<br>版权：Iek0b<br>文件版本：^Jr<br>产品名称：gg6y2:<br>产品版本：<br><br>进程3：CSRSS.EXE*<br>公司：<span class=t_tag onclick=tagshow(event) href="tag.php?name=Microsoft">Microsoft</span> Corporation\:e<br>描述：Client Server Runtime ProcessEk\K+[<br>版权：? Microsoft Corporation. All rights reserved.r*t<br>文件版本：5.1.2600.2180 (xpsp_sp2_rtm.040803-2158))"A<br>产品名称：Microsoft? Windows? Operating SystemuK<br>产品版本：5.1.2600.2180mX<br><br>　.v[c<br>进程4：\??\D:\WINDOWS\system32\winlogon.exefHnA<br>公司： nF^&amp;L<br>描述：wmv3<br>版权：@k<br>文件版本：-o`<br>产品名称：EDm"<br>产品版本：<br><br>进程5：D:\WINDOWS\system32\services.exe|&gt;n6<br>公司：Microsoft Corporation_<br>描述：Services and Controller app-o4nu|<br>版权：(C) Microsoft Corporation. All rights reserved.xq(<br>文件版本：5.1.2600.2180 (xpsp_sp2_rtm.040803-2158)y#\d`<br>产品名称：Microsoft(R) Windows(R) Operating Systemj<br>产品版本：5.1.2600.2180K<br><br>进程6：D:\WINDOWS\system32\lsass.exeI<br>公司：Microsoft Corporationt$wb<br>描述：LSA Shell (Export Version)\/Z<br>版权：? Microsoft Corporation. All rights reserved.:9{='<br>文件版本：5.1.2600.2180 (xpsp_sp2_rtm.040803-2158)diO+s<br>产品名称：Microsoft? Windows? Operating SystemK<br>产品版本：5.1.2600.2180\}<br><br>进程7：D:\WINDOWS\system32\svchost.exe`S3?公司：Microsoft Corporation_<br>描述：Generic Host Process for Win32 Services!j}<br>版权：? Microsoft Corporation. All rights reserved.-}_"<br>文件版本：5.1.2600.2180 (xpsp_sp2_rtm.040803-2158)U<br>产品名称：Microsoft? Windows? Operating SystemN*uEO<br>产品版本：5.1.2600.2180P<br><br>进程8：SVCHOST.EXEcP}J<br>公司：Microsoft CorporationJ7Y<br>描述：Generic Host Process for Win32 Servicesms$^<br>版权：? Microsoft Corporation. All rights reserved.n.+<br>文件版本：5.1.2600.2180 (xpsp_sp2_rtm.040803-2158);*^eP<br>产品名称：Microsoft? Windows? Operating System[<br>产品版本：5.1.2600.2180\<br><br>进程9：D:\WINDOWS\System32\svchost.exeuhO<br>公司：Microsoft Corporatione8<br>描述：Generic Host Process for Win32 ServicesQwQN<br>版权：? Microsoft Corporation. All rights reserved.gim<br>文件版本：5.1.2600.2180 (xpsp_sp2_rtm.040803-2158)w<br>产品名称：Microsoft? Windows? Operating System=(1<br>产品版本：5.1.2600.2180N<br><br>进程10：SVCHOST.EXEy#-f<br>公司：Microsoft CorporationhMy}<br>描述：Generic Host Process for Win32 Servicesl,M<br>版权：? Microsoft Corporation. All rights reserved.%!-}<br>文件版本：5.1.2600.2180 (xpsp_sp2_rtm.040803-2158)Jwg2<br>产品名称：Microsoft? Windows? Operating SystemuER<br>产品版本：5.1.2600.2180\<br><br>进程11：SVCHOST.EXE]<br>公司：Microsoft CorporationhC&amp;&gt;?1<br>描述：Generic Host Process for Win32 Services2e&amp;ZnS<br>版权：? Microsoft Corporation. All rights reserved.A"]ndF<br>文件版本：5.1.2600.2180 (xpsp_sp2_rtm.040803-2158):'j_`$<br>产品名称：Microsoft? Windows? Operating Systemb<br>产品版本：5.1.2600.2180j<br><br>进程12：D:\WINDOWS\system32\spoolsv.exe,U`?<br>公司：Microsoft Corporation Rz<br>描述：Spooler SubSystem App5~+m~<br>版权：? Microsoft Corporation. All rights reserved.Rh_c<br>文件版本：5.1.2600.2180 (xpsp_sp2_rtm.040803-2158)F<br>产品名称：Microsoft? Windows? Operating System7Cx{pT<br>产品版本：5.1.2600.2180P<br><br>进程13：D:\WINDOWS\Explorer.EXEH4vJ|<br>公司：Microsoft CorporationXkY<br>描述：Windows Explorer.YHP<br>版权：(C) Microsoft Corporation. All rights reserved.$=ql!?<br>文件版本：6.00.2900.2180 (xpsp_sp2_rtm.040803-2158)&gt;5})V<br>产品名称：Microsoft(R) Windows(R) Operating Systemwg<br>产品版本：6.00.2900.2180l2^:<br><br>进程14：D:\WINDOWS\system32\ctfmon.exeT9X<br>公司：Microsoft Corporationpv<br>描述：CTF Loader`jVUz!<br>版权：? Microsoft Corporation. All rights reserved.H)SdL[<br>文件版本：5.1.2600.2180 (xpsp_sp2_rtm.040803-2158)i)q%<br>产品名称：Microsoft? Windows? Operating SystemR-F<br>产品版本：5.1.2600.2180&gt;<br><br>进程15：D:\WINDOWS\system32\crypserv.exesg(<br>公司：Kenonic Controls Ltd.F-[<br>描述：CrypKey NT ServiceE^~&amp;^Z<br>版权：Copyright ? 2000h)Y<br>文件版本：5.4.0R\8z_1<br>产品名称：CrypKey Software Licensing System50"H]7<br>产品版本：5.4"sq`<br><br>进程16：D:\WINDOWS\System32\inetsrv\inetinfo.exeZxvi_?<br>公司：Microsoft Corporation&lt;MF<br><br><br>最基本的<span class=t_tag onclick=tagshow(event) href="tag.php?name=%CF%B5%CD%B3">系统</span>进程（也就是说，这些进程是<span class=t_tag onclick=tagshow(event) href="tag.php?name=%CF%B5%CD%B3">系统</span>运行的基本条件，有了这些进程，<span class=t_tag onclick=tagshow(event) href="tag.php?name=%CF%B5%CD%B3">系统</span>就能正常运行）: <br>smss.exe Session Manager <br>csrss.exe 子系统服务器进程 <br>winlogon.exe 管理用户登录 <br>services.exe 包含很多系统服务 <br>lsass.exe 管理 IP 安全策略以及启动 ISAKMP/Oakley (IKE) 和 IP 安全<span class=t_tag onclick=tagshow(event) href="tag.php?name=%C7%FD%B6%AF">驱动</span>程序。(系统服务) <br>产生会话密钥以及授予用于交互式客户/服务器验证的服务凭据(ticket)。(系统服务) <br>svchost.exe 包含很多系统服务 <br>svchost.exe <br>SPOOLSV.EXE 将文件加载到内存中以便迟后打印。(系统服务) <br>explorer.exe 资源管理器 <br>internat.exe 托盘区的拼音图标 <br>附加的系统进程（这些进程不是必要的，你可以根据需要通过服务管理器来增加或减少）: <br>mstask.exe 允许程序在指定时间运行。(系统服务) <br>regsvc.exe 允许远程注册表操作。(系统服务) <br>winmgmt.exe 提供系统管理信息(系统服务)。 <br>inetinfo.exe 通过 Internet 信息服务的管理单元提供 FTP 连接和管理。(系统服务) <br>tlntsvr.exe 允许远程用户登录到系统并且使用命令行运行控制台程序。(系统服务) <br>允许通过 Internet 信息服务的管理单元管理 Web 和 FTP 服务。(系统服务) <br>tftpd.exe 实现 TFTP Internet 标准。该标准不要求用户名和密码。远程安装服务的一部分。(系统服务) <br>termsrv.exe 提供多会话环境允许客户端设备访问虚拟的 Windows 2000 Professional 桌面会话以及运行在服务器上的基于 Windows 的程序。(系统服务) <br>dns.exe 应答对域名系统(DNS)名称的查询和更新请求。(系统服务) <br>以下服务很少会用到，上面的服务都对安全有害，如果不是必要的应该关掉tcpsvcs.exe 提供在 PXE 可远程启动客户计算机上远程安装 Windows 2000 Professional 的能力。(系统服务) <br>支持以下 TCP/IP 服务：Character Generator, Daytime, Discard, Echo, 以及 Quote of the Day。(系统服务) <br>ismserv.exe 允许在 Windows Advanced Server 站点间发送和接收消息。(系统服务) <br>ups.exe 管理连接到计算机的不间断电源(UPS)。(系统服务) <br>wins.exe 为注册和解析 NetBIOS 型名称的 TCP/IP 客户提供 NetBIOS 名称服务。(系统服务) <br>llssrv.exe License Logging Service(system service) <br>ntfrs.exe 在多个服务器间维护文件目录内容的文件同步。(系统服务) <br>RsSub.exe 控制用来远程储存数据的媒体。(系统服务) <br>locator.exe 管理 RPC 名称服务数据库。(系统服务) <br>lserver.exe 注册客户端许可证。(系统服务) <br>dfssvc.exe 管理分布于局域网或广域网的逻辑卷。(系统服务) <br>clipsrv.exe 支持&#8220;剪贴簿查看器&#8221;，以便可以从远程剪贴簿查阅剪贴页面。(系统服务) <br>msdtc.exe 并列事务，是分布于两个以上的数据库，消息队列，文件系统，或其它事务保护资源管理器。(系统服务) <br>faxsvc.exe 帮助您发送和接收传真。(系统服务) <br>cisvc.exe Indexing Service(system service) <br>dmadmin.exe 磁盘管理请求的系统管理服务。(系统服务) <br>mnmsrvc.exe 允许有权限的用户使用 NetMeeting 远程访问 Windows 桌面。(系统服务) <br>netdde.exe 提供动态数据交换 (DDE) 的<span class=t_tag onclick=tagshow(event) href="tag.php?name=%CD%F8%C2%E7">网络</span>传输和安全特性。(系统服务) <br>smlogsvc.exe <span class=t_tag onclick=tagshow(event) href="tag.php?name=%C5%E4%D6%C3">配置</span>性能日志和警报。(系统服务) <br>rsvp.exe 为依赖质量服务(QoS)的程序和控制应用程序提供网络信号和本地通信控制安装功能。(系统服务) <br>RsEng.exe 协调用来储存不常用数据的服务和管理<span class=t_tag onclick=tagshow(event) href="tag.php?name=%B9%A4%BE%DF">工具</span>。(系统服务) <br>RsFsa.exe 管理远程储存的文件的操作。(系统服务) <br>grovel.exe 扫描零备份存储(SIS)卷上的重复文件，并且将重复文件指向一个数据存储点，以节省磁盘空间。(系统服务) <br>SCardSvr.exe 对插入在计算机智能卡阅读器中的智能卡进行管理和访问控制。(系统服务) <br>snmp.exe 包含代理程序可以监视网络设备的活动并且向网络控制台工作站汇报。(系统服务) <br>snmptrap.exe 接收由本地或远程 SNMP 代理程序产生的陷阱消息，然后将消息传递到运行在这台计算机上 SNMP 管理程序。(系统服务) <br>UtilMan.exe 从一个窗口中启动和配置辅助工具。(系统服务) <br>msiexec.exe 依据 .MSI 文件中包含的命令来安装、修复以及删除<span class=t_tag onclick=tagshow(event) href="tag.php?name=%C8%ED%BC%FE">软件</span>。(系统服务) <br><br><br>详细说明： <br><br><br>win2k运行进程 <br>Svchost.exe <br>Svchost.exe文件对那些从动态连接库中运行的服务来说是一个普通的主机进程名。Svhost.exe文件定位在系统的%systemroot%\system32文件夹下。在启动的时候，Svchost.exe检查注册表中的位置来构建需要加载的服务列表。这就会使多个Svchost.exe在同一时间运行。每个Svchost.exe的回话期间都包含一组服务， 以至于单独的服务必须依靠Svchost.exe怎样和在那里启动。这样就更加容易控制和查找错误。 <br>Svchost.exe 组是用下面的注册表值来识别。 <br><br>HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\Svchost <br>每个在这个键下的值代表一个独立的Svchost组，并且当你正在看活动的进程时，它显示作为一个单独的例子。每个键值都是REG_MULTI_SZ类型的值而且包括运行在Svchost组内的服务。每个Svchost组都包含一个或多个从注册表值中选取的服务名，这个服务的参数值包含了一个ServiceDLL值。 <br>HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\Service 更多的信息 <br>为了能看到正在运行在Svchost列表中的服务。 <br>开始－运行－敲入cmd <br>然后在敲入 tlist -s （tlist 应该是win2k工具箱里的冬冬） <br>Tlist 显示一个活动进程的列表。开关 -s 显示在每个进程中的活动服务列表。如果想知道更多的关于进程的信息，可以敲 tlist pid。 <br><br>Tlist 显示Svchost.exe运行的两个例子。 <br>0 System Process <br>8 System <br>132 smss.exe <br>160 csrss.exe Title: <br>180 winlogon.exe Title: NetDDE Agent <br>208services.exe <br>Svcs: <br><br>AppMgmt,Browser,Dhcp,dmserver,Dnscache,Eventlog,lanmanserver,LanmanWorkstation,LmHost <br><br>s,Messenger,PlugPlay,ProtectedStorage,seclogon,TrkWks,W32Time,Wmi <br>220 lsass.exe Svcs: Netlogon,PolicyAgent,SamSs <br>404 svchost.exe Svcs: RpcSs <br>452 spoolsv.exe Svcs: Spooler <br>544 cisvc.exe Svcs: cisvc <br>556 svchost.exe Svcs: EventSystem,Netman,NtmsSvc,RasMan,SENS,TapiSrv <br>580 regsvc.exe Svcs: RemoteRegistry <br>596 mstask.exe Svcs: Schedule <br>660 snmp.exe Svcs: SNMP <br>728 winmgmt.exe Svcs: WinMgmt <br>852 cidaemon.exe Title: OleMainThreadWndName <br>812 explorer.exe Title: Program Manager <br>1032 OSA.EXE Title: Reminder <br>1300 cmd.exe Title: D:\WINNT5\System32\cmd.exe - tlist -s <br>1080 MAPISP32.EXE Title: WMS Idle <br>1264 rundll32.exe Title: <br>1000 mmc.exe Title: Device Manager <br>1144 tlist.exe <br>在这个例子中注册表<span class=t_tag onclick=tagshow(event) href="tag.php?name=%C9%E8%D6%C3">设置</span>了两个组。 <br>HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\Svchost: <br>netsvcs: Reg_Multi_SZ: EventSystem Ias Iprip Irmon Netman Nwsapagent Rasauto Rasman <br><br>Remoteaccess SENS Sharedaccess Tapisrv Ntmssvc <br>rpcss :Reg_Multi_SZ: RpcSs <br><br>smss.exe <br><br>csrss.exe <br><br>这个是用户模式Win32子系统的一部分。csrss代表客户/服务器运行子系统而且是一个基本的子系统必须一直运行。csrss 负责控制windows，创建或者删除线程和一些16位的虚拟MS-DOS环境。 <br><br>explorer.exe <br>这是一个用户的shell（我实在是不知道怎么翻译shell），在我们看起来就像任务条，桌面等等。这个进程并不是像你想象的那样是作为一个重要的进程运行在windows中，你可以从任务管理器中停掉它，或者重新启动。 通常不会对系统产生什么负面影响。 <br><br>internat.exe <br><br>这个进程是可以从任务管理器中关掉的。 <br>internat.exe在启动的时候开始运行。它加载由用户指定的不同的输入点。输入点是从注册表的 <br><br>这个位置 <br>HKEY_USERS\.DEFAULT\Keyboard Layout\Preload 加载内容的。 <br>internat.exe 加载&#8220;EN&#8221;图标进入系统的图标区，允许使用者可以很容易的转换不同的输入点。 <br>当进程停掉的时候，图标就会消失，但是输入点仍然可以通过控制面板来改变。 <br><br>lsass.exe <br>这个进程是不可以从任务管理器中关掉的。 <br>这是一个本地的安全授权服务，并且它会为使用winlogon服务的授权用户生成一个进程。这个进程是 <br>通过使用授权的包，例如默认的msgina.dll来执行的。如果授权是成功的，lsass就会产生用户的进入 <br>令牌，令牌别使用启动初始的shell。其他的由用户初始化的进程会继承这个令牌的。 <br><br>mstask.exe <br>这个进程是不可以从任务管理器中关掉的。 <br>这是一个任务调度服务，负责用户事先决定在某一时间运行的任务的运行。 <br><br>smss.exe <br>这个进程是不可以从任务管理器中关掉的。 <br>这是一个会话管理子系统，负责启动用户会话。这个进程是通过系统进程初始化的并且对许多活 <br><br>动的， <br>包括已经正在运行的Winlogon，Win32（Csrss.exe）线程和设定的系统变量作出反映。在它启动 <br><br>这些 <br>进程后，它等待Winlogon或者Csrss结束。如果这些过程时正常的，系统就关掉了。如果发生了什 <br><br>么 <br>不可预料的事情，smss.exe就会让系统停止响应（就是挂起）。 <br><br>spoolsv.exe <br>这个进程是不可以从任务管理器中关掉的。 <br>缓冲（spooler）服务是管理缓冲池中的打印和传真作业。 <br><br>service.exe <br>这个进程是不可以从任务管理器中关掉的。 <br>大多数的系统核心模式进程是作为系统进程在运行。 <br><br>System Idle Process <br>这个进程是不可以从任务管理器中关掉的。 <br>这个进程是作为单线程运行在每个处理器上，并在系统不处理其他线程的时候分派处理器的时间 <br><br>。 <br><br>taskmagr.exe <br>这个进程是可以在任务管理器中关掉的。 <br>这个进程就是任务管理器。 <br><br>winlogon.exe <br>这个进程是管理用户登录和推出的。而且winlogon在用户按下CTRL+ALT+DEL时就激活了，显示安 <br><br>全对话框。 <br><br>winmgmt.exe <br>winmgmt是win2000客户端管理的核心组件。当客户端应用程序连接或当管理程序需要他本身的服务时这个进程初始化</div>
<img src ="http://www.cppblog.com/flytosky2008gao/aggbug/94692.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/flytosky2008gao/" target="_blank">ggh</a> 2009-08-28 18:21 <a href="http://www.cppblog.com/flytosky2008gao/archive/2009/08/28/94692.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>taskkill说明</title><link>http://www.cppblog.com/flytosky2008gao/archive/2009/08/28/94687.html</link><dc:creator>ggh</dc:creator><author>ggh</author><pubDate>Fri, 28 Aug 2009 09:07:00 GMT</pubDate><guid>http://www.cppblog.com/flytosky2008gao/archive/2009/08/28/94687.html</guid><wfw:comment>http://www.cppblog.com/flytosky2008gao/comments/94687.html</wfw:comment><comments>http://www.cppblog.com/flytosky2008gao/archive/2009/08/28/94687.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/flytosky2008gao/comments/commentRss/94687.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/flytosky2008gao/services/trackbacks/94687.html</trackback:ping><description><![CDATA[<div class=tit>taskkill说明</div>
<p>
<table style="TABLE-LAYOUT: fixed; WIDTH: 100%">
    <tbody>
        <tr>
            <td>
            <div class=cnt id=blog_text>
            <p>用于结束进程的DOS命令</p>
            <p><br>TASKKILL [/S system [/U username [/P [password]]]]<br>{ [/FI filter] [/PID processid | /IM imagename] } [/F] [/T]</p>
            <p>描述:<br>这个命令行工具可用来结束至少一个进程。<br>可以根据进程 id 或图像名来结束进程。</p>
            <p>参数列表:<br>/Ssystem 指定要连接到的远程系统。</p>
            <p>/U[domain\]user指定应该在哪个用户上下文<br>执行这个命令。</p>
            <p>/P[password] 为提供的用户上下文指定<br>密码。如果忽略，提示输入。</p>
            <p>/F 指定要强行终止<br>进程。</p>
            <p>/FI filter 指定筛选进或筛选出查询的<br>的任务。</p>
            <p>/PIDprocess id 指定要终止的进程的<br>PID。</p>
            <p>/IM image name 指定要终止的进程的<br>图像名。通配符 '*'<br>可用来指定所有图像名。</p>
            <p>/T Tree kill: 终止指定的进程<br>和任何由此启动的子进程。</p>
            <p>/? 显示帮助/用法。</p>
            <p>筛选器:<br>筛选器名有效运算符有效值<br>----------- --------------- --------------<br>STATUSeq, ne运行 | 没有响应<br>IMAGENAME eq, ne图像名<br>PID eq, ne, gt, lt, ge, lePID 值<br>SESSION eq, ne, gt, lt, ge, le会话编号<br>CPUTIME eq, ne, gt, lt, ge, leCPU 时间，格式为<br>hh:mm:ss。<br>hh - 时，<br>mm - 钟，ss - 秒<br>MEMUSAGEeq, ne, gt, lt, ge, le内存使用，单位为 KB<br>USERNAMEeq, ne用户名，格式为<br>[domain\]user<br>MODULES eq, neDLL 名<br>SERVICESeq, ne服务名<br>WINDOWTITLE eq, ne窗口标题</p>
            <p>注意: 只有带有筛选器的情况下，才能跟 /IM 切换使用通配符 '*'。</p>
            <p>注意: 远程进程总是要强行终止，<br>不管是否指定了 /F 选项。</p>
            <p>例如:<br>TASKKILL /S system /F /IM notepad.exe /T<br>TASKKILL /PID 1230 /PID 1241 /PID 1253 /T<br>TASKKILL /F /IM notepad.exe /IM mspaint.exe<br>TASKKILL /F /FI "PID ge 1000" /FI "WINDOWTITLE ne untitle*"<br>TASKKILL /F /FI "USERNAME eq NT AUTHORITY\SYSTEM" /IM notepad.exe<br>TASKKILL /S system /U domain\username /FI "USERNAME ne NT*" /IM *<br>TASKKILL /S system /U username /P password /FI "IMAGENAME eq note*"</p>
            <p align=center><font size=3><strong>Windows DOs命令之Taskkill</strong></font></p>
            <font size=3>
            <p align=left><strong><br></strong></p>
            <p align=left><font size=3>语法<br>taskkill [/s Computer] [/u Domain\User [/p Password]]] [/fi FilterName] [/pid ProcessID]|[/im ImageName] [/f][/t] </font></p>
            <p align=left><font size=3>参数<br>/s Computer <br>指定远程计算机名称或 IP 地址（不能使用反斜杠）。默认值是本地计算机。 <br>/u Domain\User <br>运行具有由 User 或 Domain\User 指定用户的帐户权限命令。默认值是当前登录发布命令的计算机的用户权限。 <br>/p Password <br>指定用户帐户的密码，该用户帐户在 /u 参数中指定。 <br>/fi FilterName <br>指定将要终止或不终止的过程的类型。以下是有效的筛选器名称、运算符和值： 名称 运算符 值 <br>Hostname eq, ne 任何有效字符串。 <br>状态 eq, ne RUNNING|NOT RESPONDING <br>Imagename eq, ne 任何有效字符串。 <br>PID eg, ne, gt, lt, ge, le 任何有效的正整数。 <br>Session eg, ne, gt, lt, ge, le 任何有效的会话数。 <br>CPUTime eq, ne, gt, lt, ge, le hh:mm:ss 格式的有效时间。mm 参数和 ss 参数应在 0 到 59 之间，hh 参数可以是任何一个有效的无符号的数值。 <br>Memusage eg, ne, gt, lt, ge, le 任何有效的整数。 <br>用户名 eq, ne 任何有效的用户名 ([Domain\]User)。 <br>服务 eq, ne 任何有效字符串。&nbsp;&nbsp;<br>Windowtitle eq, ne 任何有效字符串。&nbsp;&nbsp;</font></p>
            <p align=left><font size=3>/pid ProcessID <br>指定将终止的过程的过程 ID。 <br>/im ImageName <br>指定将终止的过程的图像名称。使用通配符 (*) 指定所有图像名称。 <br>/f <br>指定将强制终止的过程。对于远程过程可忽略此参数，所有远程过程都将被强制终止。 <br>/t <br>指定终止与父进程一起的所有子进程，常被认为是&#8220;树终止&#8221;。 <br>/?<br>在命令提示符显示帮助。 <br>注释<br>只有与筛选器一起指定时，通配符 (*) 才能被接受。 <br>无论是否指定 /f 参数，都会始终强制执行对远程过程的终止操作。 <br>向 HOSTNAME 筛选器提供计算机名将导致关机和中止所有过程。 <br>使用 tasklist 确定要终止的过程的过程 ID (PID)。 <br>Taskkill 替代了 Kill 工具。 <br>范例<br>下面的范例说明如何使用 taskkill 命令：</font></p>
            <p align=left><font size=3>taskkill /pid 1230 /pid 1241 /pid 1253<br>taskkill /f /fi "USERNAME eq NT AUTHORITY\SYSTEM" /im notepad.exe<br>taskkill /s srvmain /f /im notepad.exe<br>taskkill /s srvmain /u maindom\hiropln /p </font><a href="&#109;&#97;&#105;&#108;&#116;&#111;&#58;&#112;&#64;&#115;&#115;&#87;&#50;&#51;"><font color=#0000ff size=3><u>p@ssW23</u></font></a><font size=3> /fi "IMAGENAME eq note*" /im *<br>taskkill /s srvmain /u maindom\hiropln /fi "USERNAME ne NT*" /im *<br>taskkill /f /fi "PID ge 1000" /im *<br>Tasklist命令用来显示运行在本地或远程计算机上的所有进程，带有多个执行参数。 </font></p>
            <p align=left><font size=3>使用格式 <br>Tasklist [/S system [/U username [/P [password]]]] [/M [module] | /SVC | /V] [/FI filter] [/FO format] [/NH] </font></p>
            <p align=left><font size=3>参数含义 <br>/S system 指定连接到的远程系统。 </font></p>
            <p align=left><font size=3>/U [domain\]user 指定使用哪个用户执行这个命令。 </font></p>
            <p align=left><font size=3>/P [password] 为指定的用户指定密码。 </font></p>
            <p align=left><font size=3>/M [module] 列出调用指定的DLL模块的所有进程。如果没有指定模块名，显示每个进程加载的所有模块。 </font></p>
            <p align=left><font size=3>/SVC 显示每个进程中的服务。 </font></p>
            <p align=left><font size=3>/V 显示详细信息。 </font></p>
            <p align=left><font size=3>/FI filter 显示一系列符合筛选器指定的进程。 </font></p>
            <p align=left><font size=3>/FO format 指定输出格式，有效值：TABLE、LIST、CSV。 </font></p>
            <p align=left><font size=3>/NH 指定输出中不显示栏目标题。只对TABLE和CSV格式有效。 </font></p>
            <p align=left><font size=3>应用实例。 <br>1.查看本机进程 <br>在&#8220;命令提示符&#8221;中输入Tasklist命令即可显示本机的所有进程(图1)。本机的显示结果由5部分组成：图像名(进程名)、PID、会话名、会话#和内存使用。 </font></p>
            <p align=left><font size=3>2.查看远程系统的进程 <br>在命令提示符下输入&#8220;Tasklist /s 218.22.123.26 /u jtdd /p 12345678&#8221;(不包括引号)即可查看到IP地址为218.22.123.26的远程系统的进程(图2)。其中/s参数后的&#8220;218.22.123.26&#8221;指要查看的远程系统的IP地址，/u后的&#8220;jtdd&#8221;指Tasklist命令使用的用户账号，它必须是远程系统上的一个合法账号，/p后的&#8220;12345678&#8221;指jtdd账号的密码。 <br>注意：使用Tasklist命令查看远程系统的进程时，需要远程机器的RPC服务的支持，否则，该命令不能正常使用。 </font></p>
            <p align=left><font size=3>3.查看系统进程提供的服务 <br>Tasklist命令不但可以查看系统进程，而且还可以查看每个进程提供的服务。如查看本机进程SVCHOST.EXE提供的服务，在命令提示符下输入&#8220;Tasklist /svc&#8221;命令即可(图3)。你会惊奇地发现，有4个SVCHOST.EXE进程，而总共有二十几项服务使用这个进程。 <br>对于远程系统来说，查看系统服务也很简单，使用&#8220;Tasklist /s 218.22.123.26 /u jtdd /p 12345678 /svc&#8221;命令，就可以查看IP地址为218.22.123.26的远程系统进程所提供的服务。 </font></p>
            <p align=left><font size=3>4.查看调用DLL模块文件的进程列表 <br>要查看本地系统中哪些进程调用了shell32.dll模块文件，只需在命令提示符下输入&#8220;Tasklist /m shell32.dll&#8221;即可显示这些进程的列表。 </font></p>
            <p align=left><font size=3>5.使用筛选器查找指定的进程 <br>在命令提示符下输入&#8220;TASKLIST /FI "USERNAME ne NT AUTHORITY\SYSTEM" /FI "STATUS eq running&#8221;，就可以列出系统中正在运行的非SYSTEM状态的所有进程。其中&#8220;/FI&#8221;为筛选器参数，&#8220;ne&#8221;和&#8220;eq&#8221;为关系运算符&#8220;不相等&#8221;和&#8220;相等&#8221;。 </font></p>
            <p align=left><font size=3>小提示 <br>谈到&#8220;Tasklist&#8221;命令，我们就不得不提到它的孪生兄弟&#8220;Taskkill&#8221;命令，顾名思义，它是用来关掉进程的。 <br>要关掉本机的notepad.exe进程，有两种方法： <br>1.先使用Tasklist查找它的PID，假设系统显示本机notepad.exe进程的PID值为1132，然后运行&#8220;Taskkill /pid 1132&#8221;命令即可。其中&#8220;/pid&#8221;参数后面是要终止进程的PID值。 <br>2.直接运行&#8220;Taskkill /IM notepad.exe&#8221;命令，其中&#8220;/IM&#8221;参数后面为进程的图像名。 </font></p>
            <p align=left><font size=3>================<br>查看本地进程：tasklist /svc<br>查杀本地进程：taskkill /pid <br>&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; taskkill /im explorer.exe /f&nbsp;&nbsp;<br>&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; taskkill /im wscript.exe&nbsp;&nbsp;<br>查看远程计算机进程:tasklist /s 192.168.1.160 /u administrator</font></p>
            <p align=left></p>
            <p>结束一个或多个任务或进程。可以根据进程 ID 或图像名来结束进程。</p>
            </font></div>
            </td>
        </tr>
    </tbody>
</table>
</p>
<img src ="http://www.cppblog.com/flytosky2008gao/aggbug/94687.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/flytosky2008gao/" target="_blank">ggh</a> 2009-08-28 17:07 <a href="http://www.cppblog.com/flytosky2008gao/archive/2009/08/28/94687.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>命令行终止进程</title><link>http://www.cppblog.com/flytosky2008gao/archive/2009/08/28/94686.html</link><dc:creator>ggh</dc:creator><author>ggh</author><pubDate>Fri, 28 Aug 2009 09:01:00 GMT</pubDate><guid>http://www.cppblog.com/flytosky2008gao/archive/2009/08/28/94686.html</guid><wfw:comment>http://www.cppblog.com/flytosky2008gao/comments/94686.html</wfw:comment><comments>http://www.cppblog.com/flytosky2008gao/archive/2009/08/28/94686.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/flytosky2008gao/comments/commentRss/94686.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/flytosky2008gao/services/trackbacks/94686.html</trackback:ping><description><![CDATA[0&nbsp;&nbsp;&nbsp;tasklist 列出进程列表。<br>1&nbsp;&nbsp;&nbsp;tskill&nbsp;&nbsp;&nbsp;终止不带后缀的进程，如：tskill notepad。<br>2&nbsp;&nbsp;&nbsp;taskkill 终止带后缀的进程，如：taskkill&nbsp; /im test1.exe。taskkill的具体参数说明如下：<br>TASKKILL [/S system ]]]　{ [/FI filter] [/PID processid | /IM imagename] } [/F] [/T]描述:这个命令行工具可用来结束至少一个进程。可以根据进程 id 或图像名来结束进程。参数列表:/S system 指定要连接到的远程系统。/U [domain\]user 指定应该在哪个用户上下文执行这个命令。/P [password] 为提供的用户上下文指定密码。如果忽略，提示输入。/F 指定要强行终止进程。/FI filter 指定筛选进或筛选出查询的的任务。/PID process id 指定要终止的进程的PID。/IM image name 指定要终止的进程的图像名。通配符 '*'可用来指定所有图像名。/T Tree kill: 终止指定的进程和任何由此启动的子进程。/? 显示帮助/用法。筛选器:筛选器名 有效运算符 有效值----------- --------------- --------------STATUS eq, ne 运行 | 没有响应IMAGENAME eq, ne 图像名PID eq, ne, gt, lt, ge, le PID 值SESSION eq, ne, gt, lt, ge, le 会话编号CPUTIME eq, ne, gt, lt, ge, le CPU 时间，格式为hh:mm:ss。hh - 时，mm - 钟，ss - 秒MEMUSAGE eq, ne, gt, lt, ge, le 内存使用，单位为 KBUSERNAME eq, ne 用户名，格式为[domain\]userMODULES eq, ne DLL 名SERVICES eq, ne 服务名WINDOWTITLE eq, ne 窗口标题注意: 只有带有筛选器的情况下，才能跟 /IM 切换使用通配符 '*'。注意: 远程进程总是要强行终止，不管是否指定了 /F 选项。例如:TASKKILL /S system /F /IM notepad.exe /TTASKKILL /PID 1230 /PID 1241 /PID 1253 /TTASKKILL /F /IM notepad.exe /IM mspaint.exeTASKKILL /F /FI "PID ge 1000" /FI "WINDOWTITLE ne untitle*"TASKKILL /F /FI "USERNAME eq NT AUTHORITY\SYSTEM" /IM notepad.exeTASKKILL /S system /U domain\username /FI "USERNAME ne NT*" /IM *TASKKILL /S system /U username /P password /FI "IMAGENAME eq note*"Hostname eq, ne 任何有效字符串。 状态 eq, ne RUNNING|NOT RESPONDING magename eq, ne 任何有效字符串。 PID eg, ne, gt, lt, ge, le 任何有效的正整数。 Session eg, ne, gt, lt, ge, le 任何有效的会话数。 CPUTime eq, ne, gt, lt, ge, le hh:mm:ss 格式的有效时间。mm 参数和 ss 参数应在 0 到 59 之间，hh 参数可以是任何一个有效的无符号的数值。 Memusage eg, ne, gt, lt, ge, le 任何有效的整数。 其中eq为等于，ne为不等于<br><br>
<img src ="http://www.cppblog.com/flytosky2008gao/aggbug/94686.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/flytosky2008gao/" target="_blank">ggh</a> 2009-08-28 17:01 <a href="http://www.cppblog.com/flytosky2008gao/archive/2009/08/28/94686.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>