<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom"><title type="text">Linux_博客园|网站分类</title><subtitle type="text">代码改变世界</subtitle><id>http://feed.cnblogs.com/blog/sitecateogry/linux/rss</id><updated>2012-02-12T04:20:52Z</updated><generator>CNBlogs BlogServer</generator><link rel="alternate" type="text/html" href="http://www.cnblogs.com/cate/linux/"/><link rel="self" type="application/atom+xml" href="http://feed.cnblogs.com/blog/sitecateogry/linux/rss"/><entry><id>http://www.cnblogs.com/evan-cai/archive/2012/02/11/2346573.html</id><title type="text">CentOS下整合Eclipse和Thrift的方法</title><summary type="text"/><published>2012-02-11T07:36:00Z</published><updated>2012-02-11T07:36:00Z</updated><author><name>落叶歸根</name><uri>http://www.cnblogs.com/evan-cai/</uri></author><link rel="alternate" href="http://www.cnblogs.com/evan-cai/archive/2012/02/11/2346573.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/evan-cai/archive/2012/02/11/2346573.html"/><content type="html">&lt;p&gt;首先下载thrift.0.7.0（thrift需要很多支持，如boost，详细见&lt;a href="http://wiki.apache.org/thrift/ThriftRequirements"&gt;http://wiki.apache.org/thrift/ThriftRequirements&lt;/a&gt;，安装先请先确定已经具体这些条件，特别是boost）&lt;/p&gt;&#xD;
&lt;p&gt;解压&lt;/p&gt;&#xD;
&lt;p&gt;# tar -zxvf thrift-0.7.0.tar.gz&lt;/p&gt;&#xD;
&lt;p&gt;最好自己看thrift-0.7.0文件夹下的README文件里的Installation说明&lt;/p&gt;&#xD;
&lt;p&gt;一般是&lt;/p&gt;&#xD;
&lt;p&gt;#./configure --with-boost=/usr/local&lt;/p&gt;&#xD;
&lt;p&gt;... ...&lt;/p&gt;&#xD;
&lt;p&gt;#make&lt;/p&gt;&#xD;
&lt;p&gt;... ...&lt;/p&gt;&#xD;
&lt;p&gt;#make install&lt;/p&gt;&#xD;
&lt;p&gt;安装好后在终端输入thrift验证一下，如果有反应，说明安装成功&lt;/p&gt;&#xD;
&lt;p&gt;安装Eclipse，并安装CDT插件，安装教程可以百度或者Google一下（我的CentOS在安装系统的时候就默认安装了Eclipse）&lt;/p&gt;&#xD;
&lt;p&gt;安装完CDT插件后就可以在Eclipse下编写C/C++项目了。&lt;/p&gt;&#xD;
&lt;p&gt;在Eclipse下New一下C++ Project，Project type为Empty Project，Toolchains为Linux GCC，编辑项目名称，点Finish&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;右键项目名称-&amp;gt;Propertise-&amp;gt;C/C++General-&amp;gt;Includes.&lt;/p&gt;&#xD;
&lt;p&gt;选择GNU C++，点击右边Add..按钮，Directory输入/usr/local/include/thrift，或点File System选择thrift的include文件夹&lt;/p&gt;&#xD;
&lt;p&gt;还是在当前页面，选择第三个Tab：Libraries，点击右边Add..按钮，在File处填上thrift（可继续点Add按钮，在File处填上pthread添加多线程库），然后确定&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;测试：&lt;/p&gt;&#xD;
&lt;p&gt;编写.thrift，将生成的文件copy到ecplise c++项目下，ctrl+B构建，右键运行。&lt;/p&gt;&#xD;
&lt;p&gt;可能会提示error while loading shared libraries: libthrift.so.0: cannot open shared object file: No such file or directory&lt;/p&gt;&#xD;
&lt;p&gt;解决方法：&lt;/p&gt;&#xD;
&lt;p&gt;seclipse的项目属性--&amp;gt;C/C++ Build--&amp;gt;Settings--&amp;gt;Tool settings--&amp;gt;GCC C++ Linker--&amp;gt;Miscellaneous的Other options (-Xlinker [option])添加 -R/usr/local/lib&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/evan-cai/aggbug/2346573.html?type=0" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/evan-cai/archive/2012/02/11/2346573.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/lengyuhong/archive/2012/02/09/2344638.html</id><title type="text">学习笔记 《鸟哥的私房菜——软件安装：源码和Tarball》</title><summary type="text"/><published>2012-02-09T15:22:00Z</published><updated>2012-02-09T15:22:00Z</updated><author><name>lengyuhong</name><uri>http://www.cnblogs.com/lengyuhong/</uri></author><link rel="alternate" href="http://www.cnblogs.com/lengyuhong/archive/2012/02/09/2344638.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/lengyuhong/archive/2012/02/09/2344638.html"/><content type="html">&lt;p&gt;文章原文：&lt;/p&gt;&#xD;
&lt;p&gt;&lt;a href="http://linux-vbird.bluedata.org/linux_base/0520source_code_and_tarball.htm#library_dyna_sta"&gt;http://linux-vbird.bluedata.org/linux_base/0520source_code_and_tarball.htm#library_dyna_sta&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;重点学习内容：&lt;/p&gt;&#xD;
&lt;p&gt;一、 源码的编译：&lt;/p&gt;&#xD;
&lt;p&gt;特别注意-l 和-L两个参数，在使用到外部函数库时是非常重要的。&lt;/p&gt;&#xD;
&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;"&gt;&#xD;
&lt;pre&gt;[guest@test guest]# gcc sin.c -lm -L/lib -L/usr/lib &lt;br /&gt;# 特别注意，那个 -lm 可以拆开成两部份来看， &lt;br /&gt;# -l 是『加入某个函式库(library)』的意思，而 &lt;br /&gt;# m 则是 libm.so 这个函式库，其中， lib 与附档名(.a 或 .so)不需要写 &lt;br /&gt;# 所以 -lm 表示使用 libm.so (或 libm.a) 这个函式库的意思～ &lt;br /&gt;# 至于那个 -L 后面接的路径呢？这表示： &lt;br /&gt;#『我要的函式库 libm.so 请到 /lib 或 /usr/lib 里面搜寻！』 &lt;br /&gt;[guest@test guest]# ./a.&lt;span style="color: #0000ff;"&gt;out&lt;/span&gt; &lt;br /&gt;&lt;span style="color: #800080;"&gt;1.000000&lt;/span&gt;&lt;/pre&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;二、动态和静态函数库：&lt;/p&gt;&#xD;
&lt;table border="2"&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;&#xD;
&lt;td&gt;静态函数库&lt;/td&gt;&#xD;
&lt;td&gt;&amp;nbsp; &amp;nbsp; 动态函数库 &amp;nbsp;&amp;nbsp;&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td&gt;扩展名&lt;/td&gt;&#xD;
&lt;td&gt;&#xD;
&lt;p&gt;通常为libXXX.a &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;td&gt;&amp;nbsp; 通常为libXXX.so&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td&gt;编译行为&lt;/td&gt;&#xD;
&lt;td&gt;&#xD;
&lt;p&gt;这类函数库在编译的时候会直接整合到执行程序当中，&lt;/p&gt;&#xD;
&lt;p&gt;所以利用静态函数库编译成的文件会比较大一点&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;td&gt;&#xD;
&lt;p&gt;动态函数库在编译的时候，在程序里面只有一个&amp;ldquo;指向&amp;rdquo;（Pointer，我的理解就个指针）&lt;/p&gt;&#xD;
&lt;p&gt;的位置而已。也就是说，动态函数的内容并没有整合到可执行的文件当中，而是当可执行&lt;/p&gt;&#xD;
&lt;p&gt;文件要使用到函数库的机制时，程序才去读取函数库来使用。由于可执行文件仅具有执行&lt;/p&gt;&#xD;
&lt;p&gt;动态函数库所在的指针而已，并不包含函数库的内容。所以它的文件会小一点&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td&gt;独立执行的状态&lt;/td&gt;&#xD;
&lt;td&gt;&#xD;
&lt;p&gt;它最大的优点，编译成功的可执行文件可以独立执行，&lt;/p&gt;&#xD;
&lt;p&gt;而不需要再向外部要求读取函数库的内容&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;td&gt;&#xD;
&lt;p&gt;这类型的函数库所编译出来的程序不能独立执行，因为当我们使用到函数库时，程序才会去&lt;/p&gt;&#xD;
&lt;p&gt;读取函数库，所以函数库文件必须存在才行，而且函数库的所在目录也不能改变，因为我们&lt;/p&gt;&#xD;
&lt;p&gt;的可执行文件里面仅有&amp;ldquo;指标&amp;rdquo;，亦即当要取用该动态函数库时，程序会主动去某个路径下读取，&lt;/p&gt;&#xD;
&lt;p&gt;所以动态函数库可不能随意移动或删除，会影响到很多相关的程序&amp;nbsp;&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td&gt;升级难易度&lt;/td&gt;&#xD;
&lt;td&gt;&#xD;
&lt;p&gt;虽然可执行文件可以单独执行，但因为函数库时直接整合到&lt;/p&gt;&#xD;
&lt;p&gt;可执行文件，因此若函数库升级时，整个可执行必须要重新&lt;/p&gt;&#xD;
&lt;p&gt;编译才能将新版的函数库整合到程序当中，也就是说，在升&lt;/p&gt;&#xD;
&lt;p&gt;级方面，只要函数库升级了，所有将此函数库纳入的程序都&lt;/p&gt;&#xD;
&lt;p&gt;必须重新编译&amp;nbsp;&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;td&gt;&#xD;
&lt;p&gt;当函数库升级后，可执行文件根本不需要进行重新编译的行为，因为可执行文件会直接指向&lt;/p&gt;&#xD;
&lt;p&gt;新的函数库文件（前提是函数库新旧版本的文件名相同）&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;/tbody&gt;&#xD;
&lt;/table&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;目前Linux distribution比较倾向于使用动态库，处于的考虑是升级的方便。&lt;/p&gt;&#xD;
&lt;p&gt;绝大多数的函数库防止在/usr/bin，/lib目录下，此外，linux系统里面的函数其实kernel就提供了，它放在/lib/modules里面&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/lengyuhong/aggbug/2344638.html?type=0" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/lengyuhong/archive/2012/02/09/2344638.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/LiteraturePan/archive/2012/02/09/2344587.html</id><title type="text">学习笔记-Linux下配置WeicoAir客户端</title><summary type="text"/><published>2012-02-09T14:18:00Z</published><updated>2012-02-09T14:18:00Z</updated><author><name>LiteraturePan</name><uri>http://www.cnblogs.com/LiteraturePan/</uri></author><link rel="alternate" href="http://www.cnblogs.com/LiteraturePan/archive/2012/02/09/2344587.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/LiteraturePan/archive/2012/02/09/2344587.html"/><content type="html">&lt;p&gt;&lt;img style="float: right;" src="http://pic002.cnblogs.com/images/2012/370876/2012020922132644.png" alt="" width="150" /&gt;&lt;/p&gt;&#xD;
&lt;p&gt;实不相瞒，笔者是一名不折不扣的微博控。记得第一次注册微博的时间在2009年08月29号，可能不太准确，但就在那段时间。&lt;/p&gt;&#xD;
&lt;p&gt;所以说笔者接触微博的时间是在微博推出大概一年后。注册微博后，起先不知道怎么玩转微博，所以更新速度很慢。后来，渐渐地被微博所吸引，开始尝试各种微博接入方式，包括手机客户端&lt;span&gt;、手机网页&lt;span&gt;、电脑端网页&lt;span&gt;、电脑端浏览器插件&lt;span&gt;、电脑端客户端、第三方客户端、第三方同步社区等等！&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;　　应该说很多人目前用的都是windows操作系统的机子，所以使用微博的时候，接入方式比较丰富，第三方软件很多。而笔者最近一个月改用了ubuntu操作系统（Linux的发行版），因为无法使用微博客户端之类的程序，所以基本上登录微博都是使用网页版或者chrome浏览器的Fawave插件的。当然，Fawave还是非常给力的，笔者最喜欢的也就是Fawave，Fawave有太多的优点，这里就不一一详述了。&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;　　言归正传，之所以要在Linux环境下使用WeicoAir客户端是因为想尝试下。Linux有太多的魅力需要被发掘！&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;　　安装这个程序，过程还是有些麻烦的！下面分享安装流程。&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;流程笔记：&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;一.安装&amp;ldquo;Adobe AIR&amp;rdquo;&lt;/p&gt;&#xD;
&lt;p&gt;解释：&lt;strong&gt;（&lt;/strong&gt;Adobe AIR（AIR=Adobe Integrated Runtime），开发代号为Apoll。AIR是针对网络与桌面应用的结合所开发出来的技术，可以不必经由浏览器而对网络上的云端程式做控制。Adobe Integrated Runtime允许你利用现有的web开发技能(包括Flash, Flex, HTML, JavaScript, Ajax)优势，建立和配置跨平台（或跨操作系统）的桌面RIA（Internet Applications）应用。AIR能使你在熟悉的环境下工作，去利用你觉得的最舒适的工具，并且通过支持&lt;a href="http://baike.baidu.com/view/7641.htm" target="_blank"&gt;Flash&lt;/a&gt;,&amp;nbsp;&lt;a href="http://baike.baidu.com/view/623340.htm" target="_blank"&gt;Flex&lt;/a&gt;,&amp;nbsp;&lt;a href="http://baike.baidu.com/view/692.htm" target="_blank"&gt;HTML&lt;/a&gt;,&amp;nbsp;&lt;a href="http://baike.baidu.com/view/16168.htm" target="_blank"&gt;JavaScript&lt;/a&gt;, and&amp;nbsp;&lt;a href="http://baike.baidu.com/view/1641.htm" target="_blank"&gt;Ajax&lt;/a&gt;，去建立接近你需要的尽可能好的体验。&lt;strong&gt;）&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;1.笔者访问了&lt;a href="http://get.adobe.com/cn/air/"&gt;http://get.adobe.com/cn/air/&lt;/a&gt;&amp;nbsp;，网页提示&amp;ldquo;&lt;span&gt;Adobe AIR for Linux&amp;nbsp;&lt;/span&gt;&lt;a href="http://blogs.adobe.com/flashplayer/2011/06/adobe-air-and-linux-increasing-distribution-on-devices.html" target="_blank"&gt;不再受支持&lt;/a&gt;&lt;span&gt;。要访问旧的不受支持版本，请阅读&lt;/span&gt;&lt;a href="http://kb2.adobe.com/cps/853/cpsid_85304.html" target="_blank"&gt;AIR 存档&lt;/a&gt;&lt;span&gt;。&lt;/span&gt;&amp;rdquo;，真心的感觉好无奈。&lt;/p&gt;&#xD;
&lt;p&gt;2.点击提示信息中的&lt;a href="http://kb2.adobe.com/cps/853/cpsid_85304.html" target="_blank"&gt;AIR 存档&lt;/a&gt;，打开网页&lt;a href="http://kb2.adobe.com/cps/853/cpsid_85304.html"&gt;http://kb2.adobe.com/cps/853/cpsid_85304.html&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;3.选择了最新版的ruantime&amp;ldquo;Adobe AIR 2.6 runtime downloads&amp;rdquo;&amp;mdash;&amp;mdash;&amp;nbsp;&lt;a href="http://airdownload.adobe.com/air/lin/download/2.6/AdobeAIRInstaller.bin"&gt;Adobe AIR 2.6.0 Linux (15.4 MB)&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;4.下载的文件为AdobeAIRInstaller.bin，&lt;span&gt;然后重命名它为adobeair.bin,把它复制到桌面。&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span&gt;　　5.&lt;span&gt;在桌面新建文件夹&amp;ldquo;air&amp;rdquo;,把该文件复制进去。&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;6.&lt;span&gt;然后打开终端，输入 cd ~/桌面/air&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span&gt;　　7.&lt;span&gt;接着输入 sudo chmod +x adobeair.bin&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span&gt;&lt;span&gt;　　8.&lt;span&gt;紧着着输入 sudo ./adobeair.bin&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;　　9.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;稍等，就会出现安装界面，按步骤安装就完成了。&lt;/p&gt;&#xD;
&lt;p&gt;以上是安装adobe air过程。&lt;/p&gt;&#xD;
&lt;p&gt;附图：&lt;/p&gt;&#xD;
&lt;p&gt;&lt;img src="http://pic002.cnblogs.com/images/2012/370876/2012020921533574.png" alt="" /&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;二.安装&amp;ldquo;WeicoAir&amp;rdquo;&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;1.访问&lt;strong&gt;&lt;a href="http://www.eicodesign.com/weico/air.html"&gt;http://www.eicodesign.com/weico/air.html&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;2.点击&amp;ldquo;下载WeicoAir&amp;rdquo;的链接&lt;/p&gt;&#xD;
&lt;p&gt;3.双击下载的文件，按照步骤安装。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;安装结果：&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;&lt;/strong&gt;　　附图：　　&lt;/p&gt;&#xD;
&lt;p&gt;&lt;img src="http://pic002.cnblogs.com/images/2012/370876/2012020921573684.png" alt="" /&gt;&lt;/p&gt;&#xD;
&lt;p&gt;安装完成后，运行程序的时候，启动速度比较快，可能得益于软件的轻巧。但是也有很多遗憾：（如下）&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span&gt;　　1.Ubuntu下WeicoAir都是乱码，解决方法很简单。就是删除/etc/fonts/conf.d路径下，49-sansserif.conf文件。（如果提示不能删除，是因为你没有用ROOT用户登录）&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span&gt;&lt;span&gt;　　2.Adobe&amp;nbsp;&lt;span&gt;AIR只提供了安装程序，却没有提供卸载程序，所以暂时无法卸载，这是一个遗憾。&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;　　3.偶尔启动不了，原因暂时不明。&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;&lt;br /&gt;&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;　　感想：&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;1.Linux用户太少了，看到&amp;ldquo;Adobe AIR for Linux&amp;nbsp;不再受支持&amp;rdquo;，说实话，有些伤心！&lt;/p&gt;&#xD;
&lt;p&gt;2.WeicoAir很轻便。&lt;/p&gt;&#xD;
&lt;p&gt;3.虽然说微博桌面这类客户端都是exe程序，在常规的Linux环境下无法运行，但是，微博开发者们研发基于Adobe Air的客户端可谓是一个很好的动作，实现了微博的跨平台！&lt;/p&gt;&#xD;
&lt;p&gt;4.笔者刚刚接触Linux，很多操作都不懂，我也深深体会到了Linux的复杂，就拿上面那个运行bin格式的程序说，需要输入一大堆乱七八糟的命令，实在头痛。但是Linux同时带给我们很多乐趣，发现问题，然后试图通过自己的努力解决问题，这何尝不是一种快乐呢？玩转命令其实也是一种很得意的事情！&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;后言：&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;基于Adobe Air的微博客户端其实不止WeicoAir，还有比如wing微博、AIR微博等等，都很不错。至于下载地址，自己可以google一下或者百度一下。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;参考鸣谢：&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;1.&lt;a href="http://www.linuxidc.com/Linux/2008-09/15916.htm"&gt;http://www.linuxidc.com/Linux/2008-09/15916.htm&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;2.&lt;a href="http://baike.baidu.com/view/1167325.htm"&gt;http://baike.baidu.com/view/1167325.htm&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;作者：&lt;a href="http://www.cnblogs.com/LiteraturePan" target="_blank"&gt;pwxtom&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;本文地址：&lt;a href="http://www.cnblogs.com/LiteraturePan/archive/2012/02/09/2344587.html"&gt;http://www.cnblogs.com/LiteraturePan/archive/2012/02/09/2344587.html&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;[转载请以链接形式标明本文地址]&lt;/p&gt;&lt;img src="http://www.cnblogs.com/LiteraturePan/aggbug/2344587.html?type=0" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/LiteraturePan/archive/2012/02/09/2344587.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/china_x01/archive/2012/02/08/2343271.html</id><title type="text">x01.os.3: U 盘安装</title><summary type="text"/><published>2012-02-08T14:04:00Z</published><updated>2012-02-08T14:04:00Z</updated><author><name>x01</name><uri>http://www.cnblogs.com/china_x01/</uri></author><link rel="alternate" href="http://www.cnblogs.com/china_x01/archive/2012/02/08/2343271.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/china_x01/archive/2012/02/08/2343271.html"/><content type="html">&lt;p&gt;&lt;strong&gt;&lt;span style="font-size: 16px;"&gt;&lt;span style="font-size: 16px;"&gt;Linus &lt;/span&gt;的争论&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="font-size: 16px;"&gt;　　Linus 和 Tanenbaum 关于宏内核，微内核曾有小小争论。其实，linux 为了实用，采用更有效率的宏内核；minix 为了教学，采用更优雅的微内核，都是恰当之举，实无争论的必要！&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="font-size: 16px;"&gt;　　有位捐献者对 Linus 使用纯 C 和大量的宏感到不理解：为什么不使用 C++ 和函数呢？于是，争论 再次发生！其实，这是系统开发和应用开发的差别。据说，开发 unix 的一个家伙宣称：C 函数的调用很 cheap，于是大家写了大量的小函数。但后来发现，函数调用的开销高达 50%。为什么会如此呢？ 除了多余的 push，pop 外，还要进行昂贵的两次转移：call，ret。&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="font-size: 16px;"&gt;　　明白这些争论，对写 OS 是有好处的。于渊的《Orange'S 一个操作系统的实现》语之甚详，值得购买！ 其网站为：&lt;a href="http://www.osfromscratch.org"&gt;http://www.osfromscratch.org&lt;/a&gt; 在此基础上，再来研究 minix、linux 当不太难。&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="font-size: 16px;"&gt;&lt;strong&gt;U 盘安装&lt;/strong&gt; &lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="font-size: 16px;"&gt;　　Win 类：下载&amp;ldquo;老毛桃 U 盘安装&amp;rdquo;；Unix 类：下载 &amp;ldquo;Universal-USB-Installer-1.8.8.0.exe&amp;rdquo;。 具体使用，相关网站有详细介绍。&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="font-size: 16px;"&gt;　　如使用老毛桃制作安装 U 盘，建议选择 USB-ZIP-FAT32。 BIOS 中设置硬盘启动，将 U 盘作为 Hard disk devices 的第一项。&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;&lt;span style="font-size: 16px;"&gt;小哨兵&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="font-size: 16px;"&gt;　　安装有小哨兵还原卡的电脑，在更改后，如新装了程序，需在重启时按 Ctrl+F10，进入小哨兵管理系统， 输入密码，将更新保存，方可生效。&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="font-size: 16px;"&gt;　　如移除还原卡后，又想重新装上，插上卡，启动后进入 BIOS ，设置从还原卡启动，即 Card 作为 Hard disk devices 的第一项，Ctrl+F10 选择 &lt;strong&gt;快速安装&lt;/strong&gt; 即可。&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;&lt;span style="font-size: 16px;"&gt;End&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="font-size: 16px;"&gt;　　操作系统，不是写出来就完了。还有许多实际的应用，不可不知！今天遇到了两个麻烦，解决后记录在此。&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="font-size: 16px;"&gt;&lt;/span&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/china_x01/aggbug/2343271.html?type=0" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/china_x01/archive/2012/02/08/2343271.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/songxk/archive/2012/02/08/2342611.html</id><title type="text">配置SecureCRT连接VirtualBox虚拟机中的Linux环境</title><summary type="text"/><published>2012-02-08T05:59:00Z</published><updated>2012-02-08T05:59:00Z</updated><author><name>songxk</name><uri>http://www.cnblogs.com/songxk/</uri></author><link rel="alternate" href="http://www.cnblogs.com/songxk/archive/2012/02/08/2342611.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/songxk/archive/2012/02/08/2342611.html"/><content type="html">&lt;p&gt;在实际的运维中我们常常使用SecuriteCRT来远程控制Linux服务器。下面将详细介绍windows 7下通过VirtualBox搭建linux开发环境，并最终通过SecurityCRT来远程访问linux服务器。&lt;/p&gt;&#xD;
&lt;p&gt;主要分为以下几个步骤&lt;/p&gt;&#xD;
&lt;p&gt;1、VirtualBox安装&lt;/p&gt;&#xD;
&lt;p&gt;2、Ubuntu安装&lt;/p&gt;&#xD;
&lt;p&gt;3、SecuriteCRT安装&lt;/p&gt;&#xD;
&lt;p&gt;4、配置Linux网络&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;一、我使用的软件&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;VirtualBox4.0，VirtualBox是开源软件，可以访问&lt;a href="https://www.virtualbox.org/wiki/Downloads"&gt;https://www.virtualbox.org/wiki/Downloads&lt;/a&gt;下载&lt;/p&gt;&#xD;
&lt;p&gt;Ubuntu11.10 DeskTop版，Ubuntu是开源免费系统，可以访问&lt;a href="http://www.ubuntu.org.cn/download/"&gt;http://www.ubuntu.org.cn/download/&lt;/a&gt;下载&lt;/p&gt;&#xD;
&lt;p&gt;SecuriteCRT6.6，SecuriteCRT是收费软件，不过网上可以找到破解版的&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;二、配置&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;其中前三步安装软件比较简单，就不做详细介绍，主要介绍一下第四步配置。&lt;/p&gt;&#xD;
&lt;p&gt;但是在安装Ubuntu的时候需要注意一下，在安装前或者安装后，点击VirtualBox的设置&lt;/p&gt;&#xD;
&lt;p&gt;特别注意，在新建&lt;/p&gt;&#xD;
&lt;p style="display: inline !important;"&gt;结束后要在设置中虚拟出一块网卡，这块网卡将用来供主机远程访问linux服务器。具体如下：&lt;/p&gt;&#xD;
&lt;p style="display: inline !important;"&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;img src="http://pic002.cnblogs.com/images/2012/326139/2012020813565257.png" alt="" /&gt;&lt;/p&gt;&#xD;
&lt;p&gt;其中网络连接1走默认的设置就可以了，网络连接2设置连接方式为&amp;ldquo;Bridged Adapter&amp;rdquo;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;img src="http://pic002.cnblogs.com/images/2012/326139/2012020813570942.png" alt="" /&gt;&lt;/p&gt;&#xD;
&lt;p&gt;完成安装之后主要进行网络的配置：&lt;/p&gt;&#xD;
&lt;p&gt;（1）在Linux下执行ifconfig命令来查看一下eth1网卡，如下图：&lt;/p&gt;&#xD;
&lt;p&gt;&lt;img src="http://pic002.cnblogs.com/images/2012/326139/2012020813572443.png" alt="" /&gt;&lt;/p&gt;&#xD;
&lt;p&gt;如果没有出现eth1，就进行一下操作，如果出现了就可以跳过：&lt;/p&gt;&#xD;
&lt;p&gt;Sudo ifconfig eth1 XXX netmask 255.255.255.0&lt;/p&gt;&#xD;
&lt;p&gt;Sudo ifconfig eth1 up&lt;/p&gt;&#xD;
&lt;p&gt;注：XXX可以通过参考Windows下面的与之桥接的网卡来设置，例如我的电脑上是：&lt;/p&gt;&#xD;
&lt;p&gt;&lt;img src="http://pic002.cnblogs.com/images/2012/326139/2012020813573757.png" alt="" /&gt;&lt;/p&gt;&#xD;
&lt;p&gt;那么XXX可以设置为192.168.93.X（X不能是0、11、255），再次ifconfig就可以看到了。&lt;/p&gt;&#xD;
&lt;p&gt;（2）在Linux中使用编辑器（以下我都是使用的gedit，可以根据自己爱好使用）打开interfaces文件&lt;/p&gt;&#xD;
&lt;p&gt;Sudo gedit /etc/network/interfaces&lt;/p&gt;&#xD;
&lt;p&gt;在文件末尾添加如下内容&lt;/p&gt;&#xD;
&lt;p&gt;#eth1&lt;/p&gt;&#xD;
&lt;p&gt;auto eth1&lt;/p&gt;&#xD;
&lt;p&gt;iface eht1 inet static&lt;/p&gt;&#xD;
&lt;p&gt;address XXX&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; # 注：XXX就是上面设置的那个ip&lt;/p&gt;&#xD;
&lt;p&gt;netmask 255.255.255.0&lt;/p&gt;&#xD;
&lt;p&gt;broadcast 192.168.X.255 #注：X同XXX中对应位置的值，例如我的是93&lt;/p&gt;&#xD;
&lt;p&gt;保存文件，退出gedit，重启虚拟机后，eth1也就是第二个网卡会自动启动。注意，一定要加上&amp;ldquo;broadcast 192.168.X.255&amp;rdquo;这一行，否则OpenSSH客户端工具就无法连接到虚拟机。&lt;/p&gt;&#xD;
&lt;p&gt;（3）在Linux下使用如下命令&lt;/p&gt;&#xD;
&lt;p&gt;Sudo gedit /etc/resolv.conf&lt;/p&gt;&#xD;
&lt;p&gt;在文件下面添加如下内容&lt;/p&gt;&#xD;
&lt;p&gt;nameserver 202.106.196.115&lt;/p&gt;&#xD;
&lt;p&gt;nameserver 202.106.196.152&lt;/p&gt;&#xD;
&lt;p&gt;nameserver 8.8.8.8&lt;/p&gt;&#xD;
&lt;p&gt;nameserver 192.168.1.1&lt;/p&gt;&#xD;
&lt;p&gt;保存后退出gedit，重启networking，命令如下：&lt;/p&gt;&#xD;
&lt;p&gt;Sudo /etc/init.d/networking restart&lt;/p&gt;&#xD;
&lt;p&gt;（4）这个时候eth1的设置就完成了，接下来要确定linux上的ssh开启了没，如果没开机或者没安装就要安装后开启ssh，命令如下：&lt;/p&gt;&#xD;
&lt;p&gt;sudo apt-get install openssh-server openssh-client&lt;/p&gt;&#xD;
&lt;p&gt;这时候Linux基本上就设置完了，接下来使用securiteCRT来连接Linux：&lt;/p&gt;&#xD;
&lt;p&gt;&lt;img src="http://pic002.cnblogs.com/images/2012/326139/2012020813580041.png" alt="" /&gt;&lt;/p&gt;&#xD;
&lt;p&gt;HostName就是刚才设置的ip，port一般默认是22（可以在Linux下面使用gedit etc/ssh/sshd_config来查看ssh的配置参数，也可以使用sudo gedit /etc/ssh/sshd_config来编辑修改）&lt;/p&gt;&#xD;
&lt;p&gt;Username是安装Ubuntu设置的账号，如果开启了root，也可以使用root账号。&lt;/p&gt;&#xD;
&lt;p&gt;然后输入密码就可以登陆了：&lt;/p&gt;&#xD;
&lt;p&gt;&lt;img src="http://pic002.cnblogs.com/images/2012/326139/2012020813581179.png" alt="" /&gt;&lt;/p&gt;&#xD;
&lt;p&gt;注：有时候在securiteCRT中中文会出现乱码，可以讲securiteCRT中的编码设置为UTF-8（在SecureCRT的Options选项中选择Session Options，修改Appearance中的字符编码为UTF-8，这样只能修改securiteCRT中的编码显示，可能在Linux中还是乱码，对于Linux系统乱码问题可以参考&lt;a href="http://blog.csdn.net/malundao/article/details/6584209"&gt;http://blog.csdn.net/malundao/article/details/6584209&lt;/a&gt;）&lt;/p&gt;&lt;img src="http://www.cnblogs.com/songxk/aggbug/2342611.html?type=0" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/songxk/archive/2012/02/08/2342611.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/ysisl/archive/2012/02/08/2342176.html</id><title type="text">VM-Linux 中安装VM-Windos</title><summary type="text"/><published>2012-02-08T01:05:00Z</published><updated>2012-02-08T01:05:00Z</updated><author><name>双宇</name><uri>http://www.cnblogs.com/ysisl/</uri></author><link rel="alternate" href="http://www.cnblogs.com/ysisl/archive/2012/02/08/2342176.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/ysisl/archive/2012/02/08/2342176.html"/><content type="html">&lt;p&gt;安装后整体环境： &#xD;
&lt;p&gt;主机：WIN7 64x&amp;nbsp; &#xD;
&lt;p&gt;主机VM版本： VM 7.0.0 build-20373 &#xD;
&lt;p&gt;VM7-Linux OS：Oracle Enterprise Linux&amp;nbsp; 5.7 &#xD;
&lt;p&gt;VM7-Linux OS -Tools:&amp;nbsp; VM7.0-Tools &#xD;
&lt;p&gt;Linux VM版本：VM 8.0.1.528992 &#xD;
&lt;p&gt;VM8-Windos OS: Windows Server 2003 &#xD;
&lt;p&gt;VM8-Windos OS -Tools : VM8.0-Tools &#xD;
&lt;p&gt;&lt;p&gt;VM8 下载地址:&amp;nbsp; 官网（需注册）http://downloads.vmware.com/d/details/wkst_801_lx/dCVkYnRwdHBidGRoag== &#xD;
&lt;p&gt;下载后文件：&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; VMware-Workstation-Full-8.0.1-528992.i386.bundle &#xD;
&lt;p&gt;注册机：&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;a href="http://images.cnblogs.com/cnblogs_com/ysisl/201202/201202080902265088.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="EN0017f2d6" border="0" alt="EN0017f2d6" src="http://images.cnblogs.com/cnblogs_com/ysisl/201202/201202080902267596.png" width="182" height="56" /&gt;&lt;/a&gt;,好像没有用，找了两个可以用的KEY： &#xD;
&lt;p&gt;MF0KF-2Y183-HZXW9-409Q6-C325W &#xD;
&lt;p&gt;0A4NA-D00E4-LZJY1-UK9N6-1357G &#xD;
&lt;p&gt;安装过程： &#xD;
&lt;p&gt;1. 防止系统检测到主机是VM虚拟机后报错： &#xD;
&lt;p&gt;"You must have at least version 8.7.0 of VMware Tools installed to install this product inside a virtual machine. Your version is xxxx. &#xD;
&lt;p&gt;Please update VMware Tools." &#xD;
&lt;p&gt;需手动在配置文件中加入下面配置项： &#xD;
&lt;p&gt;amonitor_control.restrict_backdoor = "TRUE" &#xD;
&lt;blockquote style='border:2px solid #EFEFEF;color:#333333;padding:5px 10px;'&gt;&#xD;
&lt;blockquote style='border:2px solid #EFEFEF;color:#333333;padding:5px 10px;'&gt;disable_acceleration = "TRUE"&lt;/blockquote&gt;&#xD;
&lt;blockquote style='border:2px solid #EFEFEF;color:#333333;padding:5px 10px;'&gt;monitor_control.vt32 = "TRUE"&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; # for INTEL CPU&lt;/blockquote&gt;&#xD;
&lt;blockquote style='border:2px solid #EFEFEF;color:#333333;padding:5px 10px;'&gt;monitor_control.enable_svm = "TRUE"&amp;nbsp;&amp;nbsp; # for AMD CPU&lt;/blockquote&gt;&lt;/blockquote&gt;&#xD;
&lt;p&gt;2. 在Linux OS中mount VM8安装文件 &#xD;
&lt;p&gt;&lt;p&gt;3. 加可执行权限 ：&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; chmod +x VMware-Workstation-Full-8.0.1-528992.i386.bundle &#xD;
&lt;p&gt;&lt;p&gt;4. 执行安装 &#xD;
&lt;p&gt;&lt;p&gt;5. 在Linux OS中mount 主机中已安装好的Windows Server 2003 虚拟机，在主机VM7下可以直接打开 &#xD;
&lt;p&gt;因为VM的虚拟机是基于文件的，所以虚拟机系统本身可以在Windows和Linux下移植 &#xD;
&lt;p&gt;&lt;p&gt;6. 在Linux中使用VM8 打开Windows虚拟机前，需配置Win虚拟机的网络设置为桥接方式 &#xD;
&lt;p&gt;如果是为了让主机能够访问VM-Win ，就像访问VM-Linux一样，则使用桥接方式，可以让VM-Win和VM-Linux处于同一网段下分配不同IP&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &#xD;
&lt;p&gt;如果主机为DHCP方式分配网络，则VM会以桥接方式自动分配IP，与主机处于同一网段 &#xD;
&lt;p&gt;&lt;p&gt;7. 打开虚拟机后，找到IP，打开远程桌面访问权限，开通3389端口 &#xD;
&lt;p&gt;为了安全起见，也可以修改REG中 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server\Wds\rdpwd\Tds\tcp&amp;nbsp;&amp;nbsp; PortNumber &#xD;
&lt;p&gt;来修改远程桌面端口号 &#xD;
&lt;p&gt;&lt;p&gt;8. 如果使用NAT方式，则需要在linux 虚拟机中设置端口映射，将vm-windows 的3389端口映射到linux的3389端口上。 &#xD;
&lt;p&gt;端口映射配置文件路径 /etc/vmware/vmnet8/nat/nat.conf &#xD;
&lt;p&gt;添加行： &#xD;
&lt;p&gt;3389 vm-windows虚拟机IP:3389 &#xD;
&lt;p&gt;&lt;p&gt;9. 在主机中使用远程桌面连接VM-Win。(或者使用VM自带的VNC来设置远程登录) &lt;/p&gt;&lt;img src="http://www.cnblogs.com/ysisl/aggbug/2342176.html?type=0" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/ysisl/archive/2012/02/08/2342176.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/feisky/archive/2012/02/07/2341980.html</id><title type="text">Unix编程艺术——配置</title><summary type="text"/><published>2012-02-07T13:58:00Z</published><updated>2012-02-07T13:58:00Z</updated><author><name>feisky</name><uri>http://www.cnblogs.com/feisky/</uri></author><link rel="alternate" href="http://www.cnblogs.com/feisky/archive/2012/02/07/2341980.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/feisky/archive/2012/02/07/2341980.html"/><content type="html">&lt;p style="text-align: center"&gt;&lt;/p&gt;&lt;p style="text-align: justify"&gt;&lt;p&gt;&lt;strong&gt;什么应是可配置的&#xD;
&lt;/strong&gt;&lt;/p&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;div style="text-align: justify"&gt;Unix提倡建立机制而把策略决定权留给用户，往往会导致选项过多。&#xD;
&lt;/div&gt;&lt;/li&gt;&lt;li&gt;&lt;div style="text-align: justify"&gt;不应该配置：&#xD;
&lt;/div&gt;&lt;ul&gt;&lt;li&gt;&lt;div style="text-align: justify"&gt;能够可靠自动检测的东西；&#xD;
&lt;/div&gt;&lt;/li&gt;&lt;li&gt;&lt;div style="text-align: justify"&gt;用户不应该看到优化开关；&#xD;
&lt;/div&gt;&lt;/li&gt;&lt;li&gt;&lt;div style="text-align: justify"&gt;能用脚本包装器或简单管道完成的任务，就不要使用配置开关实现。&#xD;
&lt;/div&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p style="text-align: justify"&gt;&lt;p&gt;&lt;strong&gt;配置放在哪里&#xD;
&lt;/strong&gt;&lt;/p&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;div style="text-align: justify"&gt;/etc目录：管理员设置的系统级选项&#xD;
&lt;/div&gt;&lt;ul&gt;&lt;li&gt;&lt;div style="text-align: justify"&gt;支持#开头的注释&#xD;
&lt;/div&gt;&lt;/li&gt;&lt;li&gt;&lt;div style="text-align: justify"&gt;不去别隐匿的空白符&#xD;
&lt;/div&gt;&lt;/li&gt;&lt;li&gt;&lt;div style="text-align: justify"&gt;多个连续的空行视为单个空行&#xD;
&lt;/div&gt;&lt;/li&gt;&lt;li&gt;&lt;div style="text-align: justify"&gt;词法上把文件视作简单的用空白符分割的标记序列，或多行标记，但支持以字符串语法对内嵌空白符的标记&#xD;
&lt;/div&gt;&lt;/li&gt;&lt;li&gt;&lt;div style="text-align: justify"&gt;支持\转义&#xD;
&lt;/div&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p style="text-align: justify"&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;div style="text-align: justify"&gt;环境变量：管理员设置的系统级选项&#xD;
&lt;/div&gt;&lt;/li&gt;&lt;li&gt;&lt;div style="text-align: justify"&gt;用户主目录的点文件：用户控制的选项&#xD;
&lt;/div&gt;&lt;/li&gt;&lt;li&gt;&lt;div style="text-align: justify"&gt;用户设置的环境变量：大量程序共享、独立于应用程序的选项&#xD;
&lt;/div&gt;&lt;/li&gt;&lt;li&gt;&lt;div style="text-align: justify"&gt;程序的命令行参数：调用时可能发生变化的选项&#xD;
&lt;/div&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;注意：环境变量通常覆盖点文件的设置，但又可能被命令行选项覆盖。&lt;/p&gt;&lt;img src="http://www.cnblogs.com/feisky/aggbug/2341980.html?type=0" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/feisky/archive/2012/02/07/2341980.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/Baesky/archive/2012/02/07/2341618.html</id><title type="text">Novice learning resources for linux shell programming and vim</title><summary type="text"/><published>2012-02-07T08:23:00Z</published><updated>2012-02-07T08:23:00Z</updated><author><name>iGrfx</name><uri>http://www.cnblogs.com/Baesky/</uri></author><link rel="alternate" href="http://www.cnblogs.com/Baesky/archive/2012/02/07/2341618.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/Baesky/archive/2012/02/07/2341618.html"/><content type="html">&lt;p&gt;Due to my recent work need to use Vim and linux shell programming， I gathered some nice articles about self-learning those relative knowledge. Here I share them for you , hope it does work :)&lt;/p&gt;&#xD;
&lt;p&gt;first, you need some shell exprience. &lt;a title="BBG" href="http://www.linuxtopia.org/online_books/bash_guide_for_beginners/index.html"&gt;Bash Guide for Beginners&lt;/a&gt; by Machtelt Garrels is a good start point.&lt;/p&gt;&#xD;
&lt;p&gt;after you known the basic about bash, you must need some editor to pratice your idea. &lt;a title="vim" href="http://www.vim.org/download.php#pc"&gt;Vim&lt;/a&gt; is my choice since it exist on my redhat :). Of course, if you are beginner with it, you need some tutorial. This link show you a nice free book:&lt;a title="vim books" href="http://www.truth.sk/vim/vimbook-OPL.pdf"&gt;&lt;strong&gt;The Vim book&lt;/strong&gt;&lt;/a&gt; by Steve Oualline.&lt;/p&gt;&#xD;
&lt;p&gt;last, you will excel shell and vim if you use them as more as you could. Here is a guide may help you imporve you skill more quickly:&lt;a title="absp" href="http://tldp.org/LDP/abs/html/index.html"&gt;Advanced Bash-Scripting Guide&lt;/a&gt; by Mendel Cooper.&lt;/p&gt;&#xD;
&lt;p&gt;I learn more though above, happy vim~ happy bash-scripting!&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/Baesky/aggbug/2341618.html?type=0" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/Baesky/archive/2012/02/07/2341618.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/mengqh/archive/2012/02/07/2341575.html</id><title type="text">apache 的工作模式</title><summary type="text"/><published>2012-02-07T07:57:00Z</published><updated>2012-02-07T07:57:00Z</updated><author><name>加油戈多</name><uri>http://www.cnblogs.com/mengqh/</uri></author><link rel="alternate" href="http://www.cnblogs.com/mengqh/archive/2012/02/07/2341575.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/mengqh/archive/2012/02/07/2341575.html"/><content type="html">&lt;p&gt;什么是apache的工作模式？&lt;/p&gt;  &lt;p&gt;个人理解：apache的工作模式就是apache在运行时候的内存分配，进程和线程的使用方式。举个例子：一台apache正在运行的服务器，如果有个用户访问这个apache，那么apache是启用一个进程来处理用户的请求呢？还是在已有的进程中启用一个线程来处理该用户的请求？这个选择就是 apache的工作模式来确定的。如果指定了某个工作模式比如prefork模式，那么每个用户的请求就要启用一个进程来处理。&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;apache有几种工作模式？怎么查看和修改apache的工作模式？&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;apache的工作模式有：beos，event，worker，prefork，mpmt_os2。&lt;/p&gt;  &lt;p&gt;在linux（centos）下使用#http –l 命令可以查看当前使用的工作模式。也可以使用#apachectl -l命令。&lt;/p&gt;  &lt;p&gt;#http –l&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;#apachectl –l&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;看到的prefork.c，说明使用的prefork工作模式。&lt;/p&gt;  &lt;p&gt;可以在编译的时候使用#–with-mpm=prefork对应的工作模式名称来修改工作模式。&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;beos工作模式（跟linux关系不大，或者暂时用不上）&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;在Beos系统上的工作模式，使用一个单独的控制线程来创建和控制处理请求的工作线程。&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;event工作模式（不太稳定，或者说暂时用不上）&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;event模式由于把服务进程从链接中分离出来，在开启KeepAlive场合下相对worker模式能够承受的了更高的负载。event模式为 worker开发的变种模式，配置以及指令与worker完全相同。不过event模式不能很好的支持https的访问，有时还会出现一系列的问题。&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;worker工作模式（与php配合不好，或者说暂时用不上）&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;worker模式由于使用线程来进行处理请求，所以能够处理海量请求，而系统资源的开销要小于基于进程的服务器。同时worker模式也使用了多进程，每个进程又有着多个线程，以获得基于进程服务器的稳定性。&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;mpmt_os2工作模式（很少用，或者说暂时用不上）&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;mpmt_os2是专门针对OS/2优化过的混合多进程多线程多路处理模块(MPM) 。&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;prefork工作模式（本篇文章的主角，使用最多而且最稳定的工作模式）&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;prefork工作模式是linux下apache安装时候的默认工作模式，是使用最普遍的工作模式。为了能够简单的明白他的工作原理，下面是一个假设：&lt;/p&gt;  &lt;p&gt;有一台正在运行的apache服务器，用户A访问该apache的时候apache建立一个新的进程1处理用户A的请求。&lt;/p&gt;  &lt;p&gt;这时又有一个用户B访问该apache，apache又建立一个新的进程2处理用户B的请求。&lt;/p&gt;  &lt;p&gt;后来又有用户C，D，E访问该apache，apache又建立三个进程3，4，5处理他们的请求。&lt;/p&gt;  &lt;p&gt;如果每当一个新用户访问该apache，apache再建立一个新的进程处理用户的请求，是不是太慢了呢？&lt;/p&gt;  &lt;p&gt;所以apache的prefork模式在apache第一次启动的时候就建立5个进程，等待用户的连接请求，有一个用户访问，就有一个进程处理他的请求。&lt;/p&gt;  &lt;p&gt;那么如果有5个用户同时访问apache，apache第一次建立的5个进程全部用光了，所以apache就再从新在建立5个进程，等待下一批用户的请求。&lt;/p&gt;  &lt;p&gt;prefork模式会根据服务器的硬件情况，设定apache最多只能同时建立256个进程。再多的请求就只能等待前面的进程处理完毕在进行处理。&lt;/p&gt;  &lt;p&gt;假设完毕！&lt;/p&gt;  &lt;p&gt;上面的假设就是prefork模式的工作原理。但是上面假设中具体的数字不是定死的，而是通过prefork模式的配置来设置的。下面是http.conf中的配置信息。&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;*带井号的为注释部分&lt;/p&gt;  &lt;p&gt;prefork模式的几个重要的参数：&lt;/p&gt;  &lt;p&gt;名称   &lt;br /&gt;默认值    &lt;br /&gt;说明&lt;/p&gt;  &lt;p&gt;StartServers   &lt;br /&gt;5    &lt;br /&gt;apache启动时候默认开始的进程数&lt;/p&gt;  &lt;p&gt;MinSpareServers   &lt;br /&gt;5    &lt;br /&gt;最小的闲置进程数&lt;/p&gt;  &lt;p&gt;MaxSpareServers   &lt;br /&gt;10    &lt;br /&gt;最大的闲置进程数&lt;/p&gt;  &lt;p&gt;ServerLimit   &lt;br /&gt;256    &lt;br /&gt;最大的进程总数（参考，实际看MaxClients）&lt;/p&gt;  &lt;p&gt;MaxClients   &lt;br /&gt;256    &lt;br /&gt;最大的进程总数&lt;/p&gt;  &lt;p&gt;MaxRequestsPerChild   &lt;br /&gt;4000    &lt;br /&gt;每个进程处理的最多请求数&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;StartServers&lt;/strong&gt;：这个看了就明白了。&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;MinSpareServers&lt;/strong&gt;：举个例子就明白了。&lt;/p&gt;  &lt;p&gt;apache在没有用户访问时候有5个闲置的进程，如果有一个用户访问网站。则闲置的进程就只有4个，这个值小于MinSpareServers，所以apache就以第一秒1个进程，第二秒2个进程，第三秒4个进程的速度新建空闲进程。直到大于等于MinSpareServers个空闲进程才结束。&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;MaxSpareServers&lt;/strong&gt;：还是举个例子就明白了。&lt;/p&gt;  &lt;p&gt;apache在没有用户访问时候有5个闲置的进程，如果有5个用户同时访问网站。则闲置的进程就只有0个，这个值小于 MinSpareServers，所以apache就以第一秒1个进程，第二秒2个进程，第三秒4个进程的速度新建空闲进程。直到大于等于 MinSpareServers个空闲进程才结束。在这个例子中直到第三秒，一共生成1+2+4个进程才能满足大于等于MinSpareServers的要求。后来这5个用户访问完apache，访问结束，关闭浏览器。所以apache就有了5+7个空闲的进程。这时空闲的进程比较多，apache就开始关闭一些进程，直到满足小于MaxSpareServers个空闲进程才结束。如果该值小于MinSpareServers则apache默认将该值设置成MinSpareServers+1。&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;ServerLimit&lt;/strong&gt;：这个参数是控制apache的进程总数的，那为什么会有两个参数控制apache的进程总数呢？这个参数在apache1的时代是没有的，因为那个时候有个256M内存的服务器就很厉害了。后来apache2的时代到来，服务器的硬件也得到升级。很多服务器都是4G内存，还有很多比4G内存大的服务器出现。apache1的时代只有一个MaxClients参数控制进程总数就够了，而这个参数最大值是256定死了。但是到了apache2的时代必须调整ServerLimit值大于256才能使MaxClient支持大于256的值。&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;MaxClients&lt;/strong&gt;：apache最大的进程数。apache1的时代只有一个MaxClients参数控制进程总数就够了，而这个参数最大值是256定死了。但是到了apache2的时代必须调整ServerLimit值大于256才能使MaxClient支持大于256的值。&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;MaxRequestsPerChild&lt;/strong&gt;：举个例子就明白了。&lt;/p&gt;  &lt;p&gt;apache在没有用户访问的时候有5个空闲进程。当一个用户访问网站，访问完又离开。则apache的第一个进程就处理了一个请求，从新进入闲置状态。再有一个用户访问网站，访问完后离开。则apache的第一个进程就处理了1+1个请求。这样继续访问3998个用户，这个进程就处理了4000个请求，之后就自动关闭这个进程。这个时候apache就只有4个限制的进程，小于MinSpareServers值所以apache从今建立一个空闲进程。至于为什么处理完4000个请求就要关闭这个进程呢？答案之一：为了防止内存的泄露。&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;下面图文介绍这些参数（要深刻理解一个知识就要亲自去体验）&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;测试环境参数   &lt;br /&gt;说明&lt;/p&gt;  &lt;p&gt;操作系统   &lt;br /&gt;centos4.5（虚拟机）&lt;/p&gt;  &lt;p&gt;服务器   &lt;br /&gt;apache2.2.6&lt;/p&gt;  &lt;p&gt;内存   &lt;br /&gt;1G&lt;/p&gt;  &lt;p&gt;服务器地址   &lt;br /&gt;192.168.212.128&lt;/p&gt;  &lt;p&gt;客户端地址   &lt;br /&gt;192.168.212.1&lt;/p&gt;  &lt;p&gt;测试文件index.php&lt;/p&gt;  &lt;pre&gt;&lt;pre&gt;&amp;lt;?php&#xD;
&lt;/pre&gt;&lt;pre&gt;&lt;a href="http://www.php.net/for"&gt;for&lt;/a&gt;($i = 0;$i &amp;lt;= 10;$i++){&#xD;
&lt;/pre&gt;&lt;pre&gt;&lt;a href="http://www.php.net/echo"&gt;echo&lt;/a&gt; &lt;a href="http://www.php.net/date"&gt;date&lt;/a&gt;('H:i:s',&lt;a href="http://www.php.net/time"&gt;time&lt;/a&gt;());&#xD;
&lt;/pre&gt;&lt;pre&gt;&lt;a href="http://www.php.net/echo"&gt;echo&lt;/a&gt; '&amp;lt;br/&amp;gt;';&#xD;
&lt;/pre&gt;&lt;pre&gt;&lt;a href="http://www.php.net/sleep"&gt;sleep&lt;/a&gt;(10);&#xD;
&lt;/pre&gt;&lt;pre&gt;}&#xD;
&lt;/pre&gt;&lt;pre&gt;?&amp;gt;&lt;/pre&gt;&lt;/pre&gt;&#xD;
&#xD;
&lt;p&gt;测试http.conf的prefork模式设置：（设置有点极端，但是可以很好的理解说明）&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;&amp;#160;&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;首先查看apache第一次启动时候的空闲进程：&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;linux（centos）下查看apache的进程可以使用#ps -ef|grep httpd命令，查看apache进程的内存使用情况可以使用#ps –U apache –u apache u命令&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;#service httpd restrat：重启apache，初始化进程&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;#ps -ef|grep httpd：用户名为apache的才是apache用于处理用户请求的进程&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;#ps –U apache –u apache u：查看用户名为apache的进程（即apache为了处理用户请求而建立的进程详情）&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;&amp;#160;&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;当前为没有任何用户访问时候apache建立StartServers=1个进程&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;&lt;strong&gt;当有一个用户访问（通过本机上的ie浏览器访问虚拟主机上apache服务器模式该情景）&lt;/strong&gt;&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;&amp;#160;&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;可以看到apache的进程增加为2个，为什么呢？当唯一的空闲进程时候完之后，空闲进程小于MinSpareServers，apache就从新建立一个进程。注意查看RSS值（该进程的内存使用量KB）为4424的空闲进程。&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;再看看访问完成之后的apache进程数。&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;&amp;#160;&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;可以看到还是只有两个进程，而且这两个进程都是空闲的。&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;&lt;strong&gt;当有两个用户访问（通过本机上的两个ie浏览访问虚拟主机上的apache服务器模拟该情景）&lt;/strong&gt;&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;&amp;#160;&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;可以看到有两个用户访问的时候apache的进程数增加为3个。为什么呢？当本来空闲2个进程时候完之后，空闲进程小于MinSpareServers，apache就从新建立一个进程。注意查看RSS值（该进程的内存使用量KB）为4424的空闲进程。&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;再看看访问完成之后的apache进程数。&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;&amp;#160;&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;可以看到空闲的进程数又减少为2个。为什么呢？当两个用户访问完成之后两个用户的进程都会关闭，这时候就会有3个空闲进程，这个值大于MaxSpareServers=2的值。所以apache会自动关掉一个进程满足MaxSpareServers=2的值。&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;&lt;strong&gt;当有三个用户同时访问（通过本机上的三个ie浏览访问虚拟主机上的apache服务器模拟该情景）&lt;/strong&gt;&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;&amp;#160;&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;可以看到apache的进程有3个，而这三个进程都在处理用户的请求，没有多余的空闲进程产生。为什么呢？因为在上面我们设置了MaxClients的值为3。所以apache最多只会生成3个进程。&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;再看看这三个用户访问完成之后的apache进程数。&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;&amp;#160;&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;可以看到空闲的进程数又减少为2个。为什么呢？当三个用户访问完成之后三个用户的进程都会关闭，这时候就会有3个空闲进程，这个值大于MaxSpareServers=2的值。所以apache会自动关掉一个进程满足MaxSpareServers=2的值。&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;&lt;strong&gt;当有四个用户同时访问（通过本机上的四个ie浏览访问虚拟主机上的apache服务器模拟该情景）&lt;/strong&gt;&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;&amp;#160;&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;可以看到虽然有四个用户同时访问，但是apache创建的进程数还是只有3个。就是说apache只对前面的3个用户请求进行了处理。第4个用户只能等待。&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;这个时候查看apache的&lt;a href="http://i.shichenghy.com/?p=869"&gt;TCP连接情况&lt;/a&gt;。（对于TCP连接不太理解的可以&lt;a href="http://i.shichenghy.com/?p=869"&gt;点击查看&lt;/a&gt;）&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;&amp;#160;&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;可以看到这4个用户都已经建立了连接。但是apache只处理了前面的3个请求。处理完3个请求在处理最后一个请求，这点可能从文件的打印内容看到。四个用户几乎是同时访问的。&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;&amp;#160;&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;可以看到最后一个用户的请求时间是前面三个用户访问完成之后开始的。&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;&lt;strong&gt;依次类推，当有7个用户同时访问时候又是什么样的？只贴几张图，看了就明白了。&lt;/strong&gt;&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;&lt;strong&gt;结论&lt;/strong&gt;&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;如果从头到尾详细读过本篇文章，会得出如下的结论：&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;1，apache是严格按照prefork模式的配置参数来进程分配和管理的。不像网上有些文章那样修改了某个值，apache不起作用。只能说您改的不对，或者说您对上面的内容还不够理解。&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;2，MaxClients值就是apache的最大进程数。不像网上有些文章说的这个值越大越好（有的文章既然推荐该值为4000），您可以从上面的进程图中看到apache的每个进程的%MEM（内存占用百分比）值为0.5%左右。所以这个值的具体设置的最大数位：100/0.5 = 200。而这也只是在这个服务器只有一个apache的情况下。如果服务器有其他程序需要占用内存（比如mysql）这个值要小于200。你总不能把操作系统的所有内存都给apache吧？&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;3，每个浏览器是一个用户，每个用户就是一条进程。明白意思了吧？我的这台服务器的并发量只有200。就是说我的这台服务器只能支持同时200个用户访问，再多的用户访问就只能是等待。或者说我这台服务器只支持200个浏览器的访问。关于服务器的并发我会在下面一片文章中详细讲解。&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;4，200的并发量很小吗？要知道apache处理数据的速度是相当快的。一条正常的首页访问可能就一秒钟处理完毕。所以在假想的状态下，我的这台服务器，每分钟可以访问60*200=12000个用户。每天可以访问12000*60*24=17280000个用户的访问。这当然是在完全饱和的访问状态的假想数据。下一篇文章我会详细讲解网站并发，请求，连击等内容。&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;5，如果访问的用户数大于MaxClients的数，多出的用户不会立刻断掉连接，还是会建立TCP连接。只不过会等待前面的用户处理完在得到相应。在php.ini，http.conf，操作系统设定的超时时间内得不到相应才会断掉连接。&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;&lt;strong&gt;补充&lt;/strong&gt;&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;本篇文章是本人对apache的工作模式，连接请求，并发等内容后总结的个人观点。难免会有些错误。&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;本文地址：&lt;a href="http://www.qindamoni.net/139"&gt;http://www.qindamoni.net/139&lt;/a&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/mengqh/aggbug/2341575.html?type=0" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/mengqh/archive/2012/02/07/2341575.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/feisky/archive/2012/02/06/2340610.html</id><title type="text">获取Centos命令对应的源码</title><summary type="text"/><published>2012-02-06T13:40:00Z</published><updated>2012-02-06T13:40:00Z</updated><author><name>feisky</name><uri>http://www.cnblogs.com/feisky/</uri></author><link rel="alternate" href="http://www.cnblogs.com/feisky/archive/2012/02/06/2340610.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/feisky/archive/2012/02/06/2340610.html"/><content type="html">&lt;p&gt;&lt;/p&gt;&lt;p&gt;安装工具&#xD;
&lt;/p&gt;&lt;p&gt;# yum install yum-utils&#xD;
&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;设置源：&#xD;
&lt;/p&gt;&lt;p&gt;[base-src]&#xD;
&lt;/p&gt;&lt;p&gt;name=CentOS-5.4 - Base src - &#xD;
&lt;/p&gt;&lt;p&gt;baseurl=http://vault.centos.org/5.4/os/SRPMS/&#xD;
&lt;/p&gt;&lt;p&gt;#mirrorlist=http://mirrorlist.centos.org/?release=5.4&amp;amp;arch=SRPMS&amp;amp;repo=os&#xD;
&lt;/p&gt;&lt;p&gt;gpgcheck=1&#xD;
&lt;/p&gt;&lt;p&gt;gpgkey=http://vault.centos.org/RPM-GPG-KEY-CentOS-5&#xD;
&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;[updates-src]&#xD;
&lt;/p&gt;&lt;p&gt;name=CentOS-5.4 - Updates src-centos &#xD;
&lt;/p&gt;&lt;p&gt;baseurl=http://vault.centos.org/5.4/updates/SRPMS/&#xD;
&lt;/p&gt;&lt;p&gt;#mirrorlist=http://mirrorlist.centos.org/?release=5.4&amp;amp;arch=SRPMS&amp;amp;repo=updates&#xD;
&lt;/p&gt;&lt;p&gt;gpgcheck=1&#xD;
&lt;/p&gt;&lt;p&gt;gpgkey=http://vault.centos.org/RPM-GPG-KEY-CentOS-5&#xD;
&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;#packages used/produced in the build but not released&#xD;
&lt;/p&gt;&lt;p&gt;[addons-src]&#xD;
&lt;/p&gt;&lt;p&gt;name=CentOS-5.4 - Addons src - &#xD;
&lt;/p&gt;&lt;p&gt;baseurl=http://vault.centos.org/5.4/addons/SRPMS/&#xD;
&lt;/p&gt;&lt;p&gt;#mirrorlist=http://mirrorlist.centos.org/?release=5.4&amp;amp;arch=SRPMS&amp;amp;repo=addons&#xD;
&lt;/p&gt;&lt;p&gt;gpgcheck=1&#xD;
&lt;/p&gt;&lt;p&gt;gpgkey=http://vault.centos.org/RPM-GPG-KEY-CentOS-5&#xD;
&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;#additional packages that may be useful&#xD;
&lt;/p&gt;&lt;p&gt;[extras-src]&#xD;
&lt;/p&gt;&lt;p&gt;name=CentOS-5.4 - Extras src-centos &#xD;
&lt;/p&gt;&lt;p&gt;baseurl=http://vault.centos.org/5.4/extras/SRPMS/&#xD;
&lt;/p&gt;&lt;p&gt;#mirrorlist=http://mirrorlist.centos.org/?release=5.4&amp;amp;arch=SRPMS&amp;amp;repo=extras&#xD;
&lt;/p&gt;&lt;p&gt;gpgcheck=1&#xD;
&lt;/p&gt;&lt;p&gt;gpgkey=http://vault.centos.org/RPM-GPG-KEY-CentOS-5&#xD;
&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;#additional packages that extend functionality of existing packages&#xD;
&lt;/p&gt;&lt;p&gt;[centosplus-src]&#xD;
&lt;/p&gt;&lt;p&gt;name=CentOS-5.4 - Plus src-centos &#xD;
&lt;/p&gt;&lt;p&gt;baseurl=http://vault.centos.org/5.4/centosplus/SRPMS/&#xD;
&lt;/p&gt;&lt;p&gt;#mirrorlist=http://mirrorlist.centos.org/?release=5.4&amp;amp;arch=SRPMS&amp;amp;repo=centosplus&#xD;
&lt;/p&gt;&lt;p&gt;gpgcheck=1&#xD;
&lt;/p&gt;&lt;p&gt;enabled=0&#xD;
&lt;/p&gt;&lt;p&gt;gpgkey=http://vault.centos.org/RPM-GPG-KEY-CentOS-5&#xD;
&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;#contrib - packages by Centos Users&#xD;
&lt;/p&gt;&lt;p&gt;[contrib-src]&#xD;
&lt;/p&gt;&lt;p&gt;name=CentOS-5.4 - Contrib src-centos &#xD;
&lt;/p&gt;&lt;p&gt;baseurl=http://vault.centos.org/5.4/contrib/SRPMS/&#xD;
&lt;/p&gt;&lt;p&gt;#mirrorlist=http://mirrorlist.centos.org/?release=5.4&amp;amp;arch=SRPMS&amp;amp;repo=contrib&#xD;
&lt;/p&gt;&lt;p&gt;gpgcheck=1&#xD;
&lt;/p&gt;&lt;p&gt;enabled=0&#xD;
&lt;/p&gt;&lt;p&gt;gpgkey=http://vault.centos.org/RPM-GPG-KEY-CentOS-5&#xD;
&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;下载命令对应的源码：&#xD;
&lt;/p&gt;&lt;p&gt;# rpm -qf `which mkdir`&#xD;
&lt;/p&gt;&lt;p&gt;coreutils-5.97-23.el5&#xD;
&lt;/p&gt;&lt;p&gt;# yumdownloader --source coreutils&#xD;
&lt;/p&gt;&lt;p&gt;# rpm2cpio coreutils-5.97-23.el5_4.2.src.rpm | cpio -id&#xD;
&lt;/p&gt;&lt;p&gt;这样就得到了源码包coreutils-5.97.tar.bz2&lt;/p&gt;&lt;img src="http://www.cnblogs.com/feisky/aggbug/2340610.html?type=0" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/feisky/archive/2012/02/06/2340610.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/wusee/archive/2012/02/06/2340508.html</id><title type="text">firefox火狐浏览器源码下载地址</title><summary type="text"/><published>2012-02-06T10:48:00Z</published><updated>2012-02-06T10:48:00Z</updated><author><name>无色</name><uri>http://www.cnblogs.com/wusee/</uri></author><link rel="alternate" href="http://www.cnblogs.com/wusee/archive/2012/02/06/2340508.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/wusee/archive/2012/02/06/2340508.html"/><content type="html">&lt;p&gt;http://releases.mozilla.org/pub/mozilla.org/firefox/releases/&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;找到对应版本&lt;/p&gt;&#xD;
&lt;p&gt;如10.0版源码在&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;http://releases.mozilla.org/pub/mozilla.org/firefox/releases/10.0/source/&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;另外发现语言包在如下目录中，该版为10.0下的linux版的各类语言包，&lt;a href="http://releases.mozilla.org/pub/mozilla.org/firefox/releases/10.0/linux-i686/xpi/zh-CN.xpi"&gt;zh-CN.xpi&lt;/a&gt;为中文包。&lt;/p&gt;&#xD;
&lt;p&gt;http://releases.mozilla.org/pub/mozilla.org/firefox/releases/10.0/linux-i686/xpi/&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;由于源码较大，在unbuntu linux一个个点目录查看不是很方便，我用eclipse c++中的菜单file&amp;gt;import导入，选existing code as makefile project,选择existing code location 定位到解压的源码目录，就可以正常导入查看，方便转跳。&lt;/p&gt;&#xD;
&lt;p&gt;很多开源c/c++项目，都可以此方法方便查看源码。&lt;/p&gt;&#xD;
&lt;p&gt;备记。。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/wusee/aggbug/2340508.html?type=0" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/wusee/archive/2012/02/06/2340508.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/LiteraturePan/archive/2012/02/05/2339106.html</id><title type="text">Linux：你不知道的事</title><summary type="text"/><published>2012-02-05T08:29:00Z</published><updated>2012-02-05T08:29:00Z</updated><author><name>LiteraturePan</name><uri>http://www.cnblogs.com/LiteraturePan/</uri></author><link rel="alternate" href="http://www.cnblogs.com/LiteraturePan/archive/2012/02/05/2339106.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/LiteraturePan/archive/2012/02/05/2339106.html"/><content type="html">&lt;p&gt;&lt;img style="float: right;" src="http://pic002.cnblogs.com/images/2012/370876/2012020814395296.png" alt="" width="150" /&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;前言：&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;Everything has two sides,it has advantages and disadvantages.Linux has no exception.But I believe Linux has more&amp;nbsp;advantages.&lt;/p&gt;&#xD;
&lt;p&gt;For example...&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;事件回放：&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;在新浪微博中发现一条关于介绍Linux优点的微博。源地址：&lt;a href="http://weibo.com/1962359461/y3Fx2g5n0"&gt;http://weibo.com/1962359461/y3Fx2g5n0&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;a href="http://weibo.com/1962359461/info" target="_blank"&gt;　　@计算机知识&lt;/a&gt;&amp;nbsp;搜到这样的一张图片：&lt;/p&gt;&#xD;
&lt;p&gt;&lt;img src="http://pic002.cnblogs.com/images/2012/370876/2012020515542218.jpg" alt="" /&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&amp;lt;&lt;em&gt;网友回复&amp;gt;&lt;/em&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;a title="校长Ubuntu" href="http://weibo.com/ubuntu526"&gt;校长Ubuntu&lt;/a&gt;：哈哈&lt;/p&gt;&#xD;
&lt;p&gt;&lt;a title="程序员石斌" href="http://weibo.com/1814451164"&gt;程序员石斌&lt;/a&gt;：难道这家伙没考虑过快播装不上的问题？&lt;/p&gt;&#xD;
&lt;p&gt;&lt;a title="林曉鋒_" href="http://weibo.com/920574057feng"&gt;林曉鋒_&lt;/a&gt;：上 黄 网 就一定会中毒？哈哈//&lt;a href="http://weibo.com/n/%E6%A0%A1%E9%95%BFUbuntu"&gt;@校长Ubuntu&lt;/a&gt;:哈哈&lt;/p&gt;&#xD;
&lt;p&gt;&lt;a title="校长Ubuntu" href="http://weibo.com/ubuntu526"&gt;校长Ubuntu&lt;/a&gt;&lt;span&gt;：提一下也怕?//&lt;/span&gt;&lt;a href="http://weibo.com/n/%E9%B2%81%E5%BF%97%E5%BB%BA"&gt;@鲁志建&lt;/a&gt;&lt;span&gt;:支持，改变现在微软培训班的模式 //&lt;/span&gt;&lt;a href="http://weibo.com/n/ICT%E6%95%99%E8%82%B2"&gt;@ICT教育&lt;/a&gt;&lt;span&gt;:我想在中学尝试推广ubuntu，这个理由实在不敢向领导说 //&lt;/span&gt;&lt;a href="http://weibo.com/n/%E6%A0%A1%E9%95%BFUbuntu"&gt;@校长Ubuntu&lt;/a&gt;&lt;span&gt;:哈哈&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span&gt;　　&lt;a title="校长Ubuntu" href="http://weibo.com/ubuntu526"&gt;校长Ubuntu&lt;/a&gt;&lt;span&gt;：广州华师附小一位老师也在推广哦，是小学//&lt;/span&gt;&lt;a href="http://weibo.com/n/OItisTang"&gt;@OItisTang&lt;/a&gt;&lt;span&gt;:我也一直有个愿望就是推广Ubuntu/Linux//&lt;/span&gt;&lt;a href="http://weibo.com/n/%E6%A0%A1%E9%95%BFUbuntu"&gt;@校长Ubuntu&lt;/a&gt;&lt;span&gt;: 提一下也怕?//&lt;/span&gt;&lt;a href="http://weibo.com/n/%E9%B2%81%E5%BF%97%E5%BB%BA"&gt;@鲁志建&lt;/a&gt;&lt;span&gt;:支持，改变现在微软培训班的模式 //&lt;/span&gt;&lt;a href="http://weibo.com/n/ICT%E6%95%99%E8%82%B2"&gt;@ICT教育&lt;/a&gt;&lt;span&gt;:我想在中学尝试推广ubuntu，这个理由实在不敢向领导说 //&lt;/span&gt;&lt;a href="http://weibo.com/n/%E6%A0%A1%E9%95%BFUbuntu"&gt;@校长Ubuntu&lt;/a&gt;&lt;span&gt;:哈哈&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span&gt;&lt;span&gt;　　&lt;a title="ICT教育" href="http://weibo.com/ictedu"&gt;ICT教育&lt;/a&gt;&lt;span&gt;：现在寒假期间，比较冷清，平时好一些，相对于国内同类网站，已经算好的了。我们在努力给大家提供更多更好的内容，给信息技术教师们更好的应用体验。欢迎您常来指教！&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;　　&lt;a title="记得_lx" href="http://weibo.com/adazjj"&gt;记得_lx&lt;/a&gt;&lt;span&gt;：回复&lt;/span&gt;&lt;a href="http://weibo.com/n/%E8%AE%A1%E7%AE%97%E6%9C%BA%E7%9F%A5%E8%AF%86"&gt;@计算机知识&lt;/a&gt;&lt;span&gt;:不是吧~！这种东西linux也能想的出来，太强大了吧~！&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;　　etc...&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;感想：&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;1.笔者记得有个工程师说过，他们公司的服务器安装了RedHat操作系统（Linux的发行版），24h*365运行，不用关机，系统没有垃圾，没有死机过一次。但是主机里安静地躺着不计其数的计算机病毒。因为几乎所有的病毒都是针对windows系统设计的，所以Linux的机子是完全没有必要安装杀毒软件的，其实防火墙也基本上不用配置，因为系统自带防火墙，如果实在不放心你去安装一个吧！&lt;/p&gt;&#xD;
&lt;p&gt;2.比较linux系统的全球平均使用率和国内的使用率，国内是远远低于发达国家水平的。如何在国内推广linux是一个很大的问题，但是很多有志之士已经开始做了，比如在一些学校推广学习Linux的课程。他们不求回报不是为了钱，他们只是按照自己的兴趣去做！&lt;/p&gt;&#xD;
&lt;p&gt;3.AVfans们可以尽情的Surfing Internet，Linux将是你们最有力的保障！如果岛国的网站上不去，可以配置本机的VPN上网，也可以利用ssh方式代理网络。总之，Linux给你想法！&lt;/p&gt;&#xD;
&lt;p&gt;4.&amp;ldquo;椰树椰汁&amp;rdquo;味道不错，亲，还不加香精噢！（笔者打字此刻在喝那个东东 -_-）&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;拓展阅读：&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;　　&lt;/strong&gt;Linux是一种自由和开放源码的计算机操作系统。目前存在着许多不同的Linux，但它们全都使用了Linux核心。 Linux可安装在各种各样的电脑硬件设备，从手机、平板电脑、路由器和影音游戏控制台，到桌上型电脑，大型电脑和超级电脑。 Linux是一个领先的操作系统，世界上运算最快的10台超级电脑运行的都是Linux操作系统。&lt;/p&gt;&#xD;
&lt;p&gt;Linux操作系统也是自由软件和开放源代码发展中最著名的例子。只要遵循GNU通用公共许可证,任何人和机构都可以自由地使用Linux的所有底层源代码，也可以自由地修改和再发布。严格来讲，Linux这个词本身只表示Linux核心，但在实际上人们已经习惯了用Linux来形容整个基于Linux核心，并且使用GNU 工程各种工具和数据库的操作系统（也被称为GNU/ Linux）。通常情况下，Linux被打包成供桌上型电脑和服务器使用的Linux发行版本。一些流行的主流Linux发行版本，包括Debian（及其衍生版本Ubuntu），Fedora和openSUSE等。 Linux得名于电脑业余爱好者Linus Torvalds。（更多详情访问&lt;a href="http://zh.wikipedia.org/wiki/Linux"&gt;http://zh.wikipedia.org/wiki/Linux&lt;/a&gt;）&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;作者：&lt;a href="http://www.cnblogs.com/LiteraturePan" target="_blank"&gt;pwxtom&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;本文地址：&lt;a href="http://www.cnblogs.com/LiteraturePan/archive/2012/02/05/2339106.html"&gt;http://www.cnblogs.com/LiteraturePan/archive/2012/02/05/2339106.html&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;[转载请以链接形式标明本文地址]&lt;/p&gt;&lt;img src="http://www.cnblogs.com/LiteraturePan/aggbug/2339106.html?type=0" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/LiteraturePan/archive/2012/02/05/2339106.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/rentiansheng/archive/2012/02/04/2337731.html</id><title type="text">Ubuntu学习1安装过程</title><summary type="text"/><published>2012-02-04T01:12:00Z</published><updated>2012-02-04T01:12:00Z</updated><author><name>任忌</name><uri>http://www.cnblogs.com/rentiansheng/</uri></author><link rel="alternate" href="http://www.cnblogs.com/rentiansheng/archive/2012/02/04/2337731.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/rentiansheng/archive/2012/02/04/2337731.html"/><content type="html">&lt;p &gt;1.用PE分出一个分区并作为主分区，不用激活为活动分区&lt;/p&gt;&#xD;
&lt;p &gt;2.在windows系统中将ubuntu的光盘插入到光驱中，会弹出自动播放对话框。选择&amp;rdquo;运行wubi.exe&amp;ldquo;，然后按提示操作，根据提示选择分区，然后安装就行了&lt;/p&gt;&#xD;
&lt;p &gt;3.安装完成之后就会提示你重新启动,自动进入ubuntu安装界面，无需什么特别的操作。&lt;/p&gt;&#xD;
&lt;p &gt;4.在主面板中的所有程序中 搜索&amp;ldquo;终端&amp;rdquo;。然后拖到 桌面或者启动器上。&lt;/p&gt;&#xD;
&lt;p &gt;5.在任务栏的声音的左边找到网络的。然后根据需要设这就行了&lt;/p&gt;&#xD;
&lt;p &gt;也可以在终端中使用ifconfig查看搜有的网络设备，eth0有线网卡，wlan0无线网卡&lt;/p&gt;&#xD;
&lt;p &gt;6获取root账户密码，在安装的时候无法设置root账户密码。但是在安装过后，使用sudo passwd root&lt;/p&gt;&#xD;
&lt;p &gt;命令来设置root账户。先输入的是本账户的密码。让后是root密码两次。输入过后不显示任意字符的。&lt;/p&gt;&#xD;
&lt;p &gt;7.更新源列表，如果在装系统的同时没有联网在使用 sudo apt-get install &amp;lt;软件&amp;gt;的时候没有安装文件&lt;/p&gt;&#xD;
&lt;p &gt;先使用su 转到root账户 。然后使用 sudo apt-get update 更新资源列表了&lt;/p&gt;&#xD;
&lt;p &gt;8.让后使用sudo apt-get vim 安装vim就行了，&lt;/p&gt;&#xD;
&lt;p &gt;9.系统默认是安装gcc、gdb、gedit的。只有root账户才可在根目录和系统文件夹中建立文件夹的，其他账户只能在tmp中建立文件和文件夹&lt;/p&gt;&#xD;
&lt;p &gt;此文章仅个人安装的时候遇到的问题。希望对大家有帮助。&lt;/p&gt;&lt;img src="http://www.cnblogs.com/rentiansheng/aggbug/2337731.html?type=0" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/rentiansheng/archive/2012/02/04/2337731.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/LYLtim/archive/2012/02/03/2337087.html</id><title type="text">兄弟连Linux基础知识与系统管理视频教程下载地址汇总</title><summary type="text"/><published>2012-02-03T06:53:00Z</published><updated>2012-02-03T06:53:00Z</updated><author><name>LYLtim</name><uri>http://www.cnblogs.com/LYLtim/</uri></author><link rel="alternate" href="http://www.cnblogs.com/LYLtim/archive/2012/02/03/2337087.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/LYLtim/archive/2012/02/03/2337087.html"/><content type="html">&lt;p&gt;课程大纲&amp;mdash;&amp;mdash;&lt;br /&gt;&lt;br /&gt;第1讲 Linux应用与发展&lt;br /&gt;1、&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;UNIX/Linux发展历史&lt;br /&gt;2、&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;自由软件&lt;br /&gt;3、&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Linux应用领域&lt;br /&gt;4、&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Linux学习方法&lt;br /&gt;第2讲 Linux系统安装&lt;br /&gt;1、&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;VMware虚拟机软件应用&lt;br /&gt;2、&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Linux系统安装详解及配置&lt;br /&gt;3、&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;远程登录管理工具介绍&lt;br /&gt;第3讲 Linux常用命令&lt;br /&gt;1、&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;文件处理命令&lt;br /&gt;2、&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;权限管理命令&lt;br /&gt;3、&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;文件搜索命令&lt;br /&gt;4、&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;帮助命令&lt;br /&gt;5、&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;压缩解压命令&lt;br /&gt;6、&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;网络通信命令&lt;br /&gt;7、&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;系统关机命令&lt;br /&gt;8、&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Shell应用技巧&lt;br /&gt;第4讲 Vim/Vi文本编辑器&lt;br /&gt;1、&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Vim/Vi工作模式&lt;br /&gt;2、&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;插入命令&lt;br /&gt;3、&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;定位命令&lt;br /&gt;4、&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;删除命令&lt;br /&gt;5、&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;复制、剪切命令&lt;br /&gt;6、&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;替换、取消命令&lt;br /&gt;7、&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;保存退出命令&lt;br /&gt;8、&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;搜索、替换命令&lt;br /&gt;9、&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;应用技巧&lt;br /&gt;第5讲 Linux引导流程解析&lt;br /&gt;1、&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Linux引导流程&lt;br /&gt;2、&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Linux运行级别&lt;br /&gt;3、&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Linux启动服务管理&lt;br /&gt;4、&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;GRUB配置与应用&lt;br /&gt;5、&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;启动故障分析与解决&lt;br /&gt;第6讲 Linux软件包管理&lt;br /&gt;1、&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;二进制软件包管理（RPM、YUM）&lt;br /&gt;2、&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;源代码包安装&lt;br /&gt;3、&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;脚本安装（Shell或Java脚本）&lt;br /&gt;4、&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Debian系Linux软件包管理简介&lt;br /&gt;第7讲 Linux用户管理&lt;br /&gt;1、&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;用户管理配置文件&lt;br /&gt;2、&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;用户管理命令&lt;br /&gt;3、&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;用户组管理命令&lt;br /&gt;4、&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;批量添加用户&lt;br /&gt;5、&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;用户授权&lt;br /&gt;第8讲 Linux进程管理&lt;br /&gt;1、&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;进程的概念&lt;br /&gt;2、&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;进程管理命令&lt;br /&gt;3、&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;计划任务&lt;br /&gt;第9讲 Linux文件系统管理&lt;br /&gt;1、&amp;nbsp;&amp;nbsp;文件系统结构&lt;br /&gt;2、&amp;nbsp;&amp;nbsp;常用文件系统操作命令&lt;br /&gt;3、&amp;nbsp;&amp;nbsp;添加硬盘分区&lt;br /&gt;4、&amp;nbsp;&amp;nbsp;磁盘配额设置&lt;br /&gt;5、&amp;nbsp;&amp;nbsp;备份与恢复&lt;br /&gt;第10讲 Shell编程&lt;br /&gt;1、&amp;nbsp;&amp;nbsp;Shell变量定义&lt;br /&gt;2、&amp;nbsp;&amp;nbsp;Shell基本语法&lt;br /&gt;3、&amp;nbsp;&amp;nbsp;Shell程序调试&lt;br /&gt;4、&amp;nbsp;&amp;nbsp;Shell应用实例&lt;br /&gt;&lt;br /&gt;电驴下载地址&amp;mdash;&amp;mdash;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;a href="http://www.verycd.com/topics/2875873" target="_blank"&gt;http://www.verycd.com/topics/2875873&lt;/a&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/LYLtim/aggbug/2337087.html?type=0" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/LYLtim/archive/2012/02/03/2337087.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/LiteraturePan/archive/2012/02/02/2336328.html</id><title type="text">Linux的好处</title><summary type="text"/><published>2012-02-02T14:19:00Z</published><updated>2012-02-02T14:19:00Z</updated><author><name>LiteraturePan</name><uri>http://www.cnblogs.com/LiteraturePan/</uri></author><link rel="alternate" href="http://www.cnblogs.com/LiteraturePan/archive/2012/02/02/2336328.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/LiteraturePan/archive/2012/02/02/2336328.html"/><content type="html">&lt;p&gt;&lt;img style="float: right;" src="http://pic002.cnblogs.com/images/2012/370876/2012020222154791.gif" alt="" /&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span&gt;　　&lt;/span&gt;&lt;strong&gt;Linux是免费的&lt;/strong&gt;&lt;br /&gt;&lt;span&gt;　　不错，linux是免费的，不过，我也可以毫不脸红的说，Windows也是免费的。我其实很注意在经济能力承受范围内保护知识产权，不过很可惜，作为个人，Windows显然超出了我的经济承受能力，对此，我也爱莫能助。&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span&gt;　　&lt;/span&gt;&lt;strong&gt;Linux是开源的&lt;/strong&gt;&lt;br /&gt;&lt;span&gt;　　说句不怕丢人的话，自称电脑高手的我，如今还没弄明白开源是什么意思。因为要解决Ubuntu问题，常常混论坛，看到一大堆的代码，除了简单的复制粘贴之外，就马上跳过了。开玩笑，我是一名应用工程师，电脑爱好者，我要看代码干嘛？你把整个系统源代码给我，我还嫌占我硬盘空间呢。&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span&gt;　　不过，话说两边。开源之后，我用别人的东西，或者是修改别人的东西，再或者是在别人的东西上加以改进，成为自己需要的东西。都不在成为问题。没有Windows程序那么复杂的脱壳处理。这点，蛮好的。&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span&gt;　　&lt;/span&gt;&lt;strong&gt;稳定&lt;/strong&gt;&lt;br /&gt;&lt;span&gt;　　说到这里，才是正题。稳定压倒一切，一切的一切！想当初接触Linux，主要是公司的内部服务器，嗯...也不能说是服务器，就算是一台备份电脑把，就是每个部门的一些资料统一会备份到那台电脑上，尤其是出去旅游的照片，以及常用驱动啥的。&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span&gt;　　我为他装了RadHat 9，目前365&amp;times;24小时运行1年多了，硬盘里面什么糯虫啊，木马啊，熊猫烧香啊一大推病毒，而且作为一台PIII，依然运行良好。不愧是Unix发展而来的。&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span&gt;　　&lt;/span&gt;&lt;strong&gt;操作系统的低占有率&lt;/strong&gt;&lt;br /&gt;&lt;span&gt;　　这点其实不是每个人都深有感触的，必须是我这样，有着7、8年电脑使用经验的人才有。在这里要隆重介绍一下我目前仍在服役的电脑，虽然它现在只是个FTP。&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span&gt;　　CPU: Pentium II 300&lt;/span&gt;&lt;br /&gt;&lt;span&gt;　　Memory: 128MB SDRAM (2&amp;times;64)&lt;/span&gt;&lt;br /&gt;&lt;span&gt;　　MB: MSI6360 (440BX)&lt;/span&gt;&lt;br /&gt;&lt;span&gt;　　HDD: 80GB&lt;/span&gt;&lt;br /&gt;&lt;span&gt;　　Graphics: S3 Savage 3D (4MB)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span&gt;　　我给这台机器装了Ubuntu 7，令人觉得比较恐怖的。如果只论看网页，上BBS的速度，有时候比我的Core 2 Duo的本本还要快点！&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span&gt;　　当然，作为一台私人FTP，里面的病毒也不少，不过，我抱着欣赏的态度，一直让他们静静的躺在硬盘中。&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span&gt;　　&lt;/span&gt;&lt;strong&gt;跨平台以及可移植性&lt;/strong&gt;&lt;br /&gt;&lt;span&gt;　　这点和我们关系不大，我不知道能够看到这篇文章的人中间，有没有用的不是X86架构的电脑，如果有，那你一定觉得我很肤浅了。&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span&gt;　　其实这方面的应用最光的就是群集计算机，也就是N多台计算机运行一个计算，大家知道的比较多的用途就是算算核爆之类的东东。如果你会算，请直接去国家安全局报到。&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span&gt;　　&lt;/span&gt;&lt;strong&gt;绝佳的内存管理&lt;/strong&gt;&lt;br /&gt;&lt;span&gt;　　这点，我真是要好好的赞一下linux，它的内存管理的确是太强大的，而且是Windows学不来的。简单来说，linux会将没有使用的内存作为缓冲区，来加速程序的运行，而且采取的是内存保护模式来执行程序的。这样的话，即使某一个或者几个程序崩溃了，也不会影响到整个程序的运行。&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span&gt;　　说白了，就是不会和Windows一样，一个死，全部死！&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span&gt;　　&lt;/span&gt;&lt;strong&gt;内核&lt;/strong&gt;&lt;br /&gt;&lt;span&gt;　　我个人觉得linux最大的亮点即使内核(kernel)了，内核负责管理计算机的所有硬件程序，如处理器、内存等，而且必须保证资源分配的合理性。当linux启动之后，内核被调入内存中，并且长期驻留，直到关机为止（停电也算）&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span&gt;　　内核通常很小，而且常驻内存。这什么意思？也就是说，linux负责管理计算机硬件的部分只有很小的一点点，并且长期在读取速度最快的内存中负责调配资源。&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span&gt;　　因此，一个最简单的linxu系统是什么，就是内核。我就见过电脑只装个内核的。&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span&gt;　　&lt;/span&gt;&lt;strong&gt;易裁剪性&lt;/strong&gt;&lt;br /&gt;&lt;span&gt;　　这就是我个人的感受了。大家知道很多精简版的XP系统，实际上就是裁剪掉的很多无用的程序。但是由于Windows组件之间的关联关系太复杂了，稍稍一不注意，裁掉一个组件就会导致整个系统无法运行。我在做Windows Embedded的时候，最头疼的事情就是寻找可以去掉的组件。但是最后才发现，裁剪之后的系统，和原系统基本上没有多大区别。&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span&gt;　　linux就不同，它不是一个完好的系统给你裁剪。而且给你一个基本的内核给你之后，让你添加。&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span&gt;　　举个简单的例子：你只需要计算功能，OK。装一个内核和一个计算器就好了，别的什么都不需要。当然具体实施没这么简单了，但是实际情况也大概如此。&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span&gt;　　应用方面，我见过的就是视频存储服务器，那系统可真是简单。一共20M的系统，里面含有内核，网络，视频处理这几个功能。相比Windows，不用我说也可以看出来谁的执行效率高吧！&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span&gt;　　其实还有很多好处，是说不完的。但是linux有个最大的缺点，就是易用性。虽然现在linux发展得已经很好用的，但是说句真心话，真的没Windows好用，真的，是对所有人来说，少部分人我不管。毕竟还有些人觉得VxWork好用呢，觉得linux易用性不错的人就别喷我了。&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;作者：&lt;a href="http://www.linuxdiyf.com/bbs/space.php?uid=83120" target="_blank"&gt;Software&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;原文地址：&lt;a href="http://www.linuxdiyf.com/bbs/thread-100210-1-1.html"&gt;http://www.linuxdiyf.com/bbs/thread-100210-1-1.html&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;本文地址：&lt;a href="http://www.cnblogs.com/LiteraturePan/archive/2012/02/02/2336328.html"&gt;http://www.cnblogs.com/LiteraturePan/archive/2012/02/02/2336328.html&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;[转载请以链接形式标明原文地址]&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/LiteraturePan/aggbug/2336328.html?type=0" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/LiteraturePan/archive/2012/02/02/2336328.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/Antoni/archive/2012/02/02/2335903.html</id><title type="text">在CentOS构造内核树----通过yum方式（智能化方式）</title><summary type="text"/><published>2012-02-02T07:57:00Z</published><updated>2012-02-02T07:57:00Z</updated><author><name>Antoni</name><uri>http://www.cnblogs.com/Antoni/</uri></author><link rel="alternate" href="http://www.cnblogs.com/Antoni/archive/2012/02/02/2335903.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/Antoni/archive/2012/02/02/2335903.html"/><content type="html">最近要开始学习Linux的设备驱动程序编写，买了《Linux设备驱动程序》回来看，一开始的时候作者就要求我们要先构造内核树。那好吧，就构造呗，同样也是通过yum这个命令了。&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&#xD;
&#xD;
打开终端，运行如下命令：（按顺序执行）&lt;br/&gt;&#xD;
1、uname -r（看看内核是什么版本）&lt;br/&gt;&#xD;
2、yum list | grep kernel（查找与有“kernel”关键字的软件）&lt;/br&gt;&lt;br/&gt;&lt;br/&gt;&#xD;
&#xD;
显示出来的关于“kernel”的软件有以下几个：&lt;br/&gt;&#xD;
abrt-addon--kerneloops.i686                      2.0.4-14.el6.centos            @anacond&lt;br/&gt;&#xD;
kernel.i686                                      2.6.32-220.4.1.el6             @updates&lt;br/&gt;&#xD;
kernel-firmware.noarch                           2.6.32-220.4.1.el6             @updates&lt;br/&gt;&#xD;
&#xD;
kernel-devel.i686                                2.6.32-220.4.1.el6             updates&lt;br/&gt;&#xD;
kernel-headers.i686                              2.6.32-220.4.1.el6             updates&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&#xD;
&#xD;
大家可以看到这个列表，凡是带有“@updates”和“@anacond”都是已经安装了的，不用管它，关键是那些“updates”关键字的。可以看到有“devel”和“headers”这两个软件更新，这里我偷懒了，其实还有“kernel-debug”之类的，不过那些软件写驱动也暂时用不上，不装也罢。&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&#xD;
&#xD;
接下来就按照常规去走就对了，执行命令：yum install "软件的名字"，yum会帮你执行软连接之类的东西，不用你们去劳心。安装完毕以后，为以防万一，重启一下吧。接下来就可以开始写驱动了。&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&#xD;
&#xD;
&#xD;
注：如果有新的内核，建议你们更新一下，再构造内核树&#xD;
&#xD;
&#xD;
&#xD;
&lt;img src="http://www.cnblogs.com/Antoni/aggbug/2335903.html?type=0" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/Antoni/archive/2012/02/02/2335903.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/LiteraturePan/archive/2012/02/02/2335576.html</id><title type="text">Ubuntu常用软件推荐</title><summary type="text"/><published>2012-02-02T04:50:00Z</published><updated>2012-02-02T04:50:00Z</updated><author><name>LiteraturePan</name><uri>http://www.cnblogs.com/LiteraturePan/</uri></author><link rel="alternate" href="http://www.cnblogs.com/LiteraturePan/archive/2012/02/02/2335576.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/LiteraturePan/archive/2012/02/02/2335576.html"/><content type="html">&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;img style="float: right;" src="http://pic002.cnblogs.com/images/2012/370876/2012020814431139.png" alt="" width="150" /&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;a href="http://baike.baidu.com/view/4236.htm" target="_blank"&gt;　　Ubuntu&lt;/a&gt;是一个以桌面应用为主的&lt;a href="http://baike.baidu.com/view/46577.htm" target="_blank"&gt;Linux操作系统&lt;/a&gt;，其名称来自非洲南部祖鲁语或豪萨语的&amp;ldquo;ubuntu&amp;rdquo;一词（译为吾帮托或乌班图），意思是&amp;ldquo;人性&amp;rdquo;、&amp;ldquo;我的存在是因为大家的存在&amp;rdquo;，是非洲传统的一种价值观，类似华人社会的&amp;ldquo;仁爱&amp;rdquo;思想。Ubuntu基于Debian发行版和GNOME桌面环境，与Debian的不同在于它每6个月会发布一个新版本。Ubuntu的目标在于为一般用户提供一个最新的、同时又相当稳定的主要由自由软件构建而成的操作系统。Ubuntu具有庞大的社区力量，用户可以方便地从社区获得帮助。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;Ubuntu常用软件推荐&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;使用windows系统的用户应该很熟悉软件的安装流程，一般都是下载安装包，双击安装。但是，ubuntu完全不同，ubuntu是通过&amp;ldquo;apt-get install&amp;rdquo;命令获取软件的，笔者也是刚刚接触ubuntu，感受到了ubuntu的独特魅力。软件有安全的软件源，所以ubuntu的软件是安全的，不像windows那样泛滥。这种软件获取方式的出现无疑方便了用户，且有利于ubuntu向普通用户的推广。&lt;/p&gt;&#xD;
&lt;p&gt;以下是软件推荐的地址：&lt;/p&gt;&#xD;
&lt;p&gt;&lt;a href="http://wiki.ubuntu.org.cn/Qref/Applications"&gt;http://wiki.ubuntu.org.cn/Qref/Applications&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span&gt;列出国内用户比较&lt;/span&gt;常用&lt;span&gt;的软件，&lt;span&gt;为新手指明软件的方向，也可供已入门的同仁参考。&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;&lt;br /&gt;&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;　　附加推荐&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;下载ubuntu镜像文件（支持多国语言）官方链接&lt;a href="http://www.ubuntu.com/download/ubuntu/download"&gt;http://www.ubuntu.com/download/ubuntu/download&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;ubuntu中文社区链接&lt;a href="http://forum.ubuntu.org.cn/"&gt;http://forum.ubuntu.org.cn/&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;了解更多ubuntu相关信息&lt;a href="http://zh.wikipedia.org/wiki/Ubuntu"&gt;http://zh.wikipedia.org/wiki/Ubuntu&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;作者：&lt;a href="http://www.cnblogs.com/LiteraturePan" target="_blank"&gt;pwxtom&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;本文地址：&lt;a href="http://www.cnblogs.com/LiteraturePan/archive/2012/02/02/2335576.html"&gt;http://www.cnblogs.com/LiteraturePan/archive/2012/02/02/2335576.html&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;[转载请以链接形式标明本文地址]&lt;/p&gt;&lt;img src="http://www.cnblogs.com/LiteraturePan/aggbug/2335576.html?type=0" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/LiteraturePan/archive/2012/02/02/2335576.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/moss_tan_jun/archive/2012/02/01/2334597.html</id><title type="text">C#异步调用与线程总结</title><summary type="text"/><published>2012-02-01T07:01:00Z</published><updated>2012-02-01T07:01:00Z</updated><author><name>moss_tan_jun</name><uri>http://www.cnblogs.com/moss_tan_jun/</uri></author><link rel="alternate" href="http://www.cnblogs.com/moss_tan_jun/archive/2012/02/01/2334597.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/moss_tan_jun/archive/2012/02/01/2334597.html"/><content type="html">&lt;div id="cnblogs_post_body"&gt;&#xD;
&lt;p&gt;委托调用、子线程程调用、与线程池调用&lt;br /&gt;1，委托调用&lt;br /&gt;(1)，同步委托：委托的Invoke方法用来进行同步调用。同步调用也可以叫阻塞调用，它将阻塞当前线程，然后执行调用，调用完毕后再继续向下进行。&lt;br /&gt;&amp;nbsp;从下面的例子中可以看到，同步委托的执行是在主线程main中执行的，所以当执行委托时，当前工作会处于等待状态，开始执行委托，当委托执行完后在继续执行&amp;#8220;当前工作&amp;#8221;&lt;/p&gt;&#xD;
&lt;div &gt;&lt;!--&#xD;
&lt;br /&gt;&#xD;
&lt;br /&gt;Code highlighting produced by Actipro CodeHighlighter (freeware)&#xD;
&lt;br /&gt;http://www.CodeHighlighter.com/&#xD;
&lt;br /&gt;&#xD;
&lt;br /&gt;--&gt;&lt;span style="color: #0000ff"&gt;public&lt;/span&gt;&lt;span style="color: #0000ff"&gt;delegate&lt;/span&gt;&lt;span style="color: #0000ff"&gt;int&lt;/span&gt;&lt;span style="color: #000000"&gt; AddHandler(&lt;/span&gt;&lt;span style="color: #0000ff"&gt;int&lt;/span&gt;&lt;span style="color: #000000"&gt; i,&lt;/span&gt;&lt;span style="color: #0000ff"&gt;int&lt;/span&gt;&lt;span style="color: #000000"&gt; y); &lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;private&lt;/span&gt;&lt;span style="color: #0000ff"&gt;void&lt;/span&gt;&lt;span style="color: #000000"&gt; button1_Click(&lt;/span&gt;&lt;span style="color: #0000ff"&gt;object&lt;/span&gt;&lt;span style="color: #000000"&gt; sender, EventArgs e) &lt;br /&gt;{ &lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008000"&gt;//&lt;/span&gt;&lt;span style="color: #008000"&gt;添加当前主线程名称&amp;#8220;main&amp;#8221;&lt;/span&gt;&lt;span style="color: #008000"&gt; &lt;br /&gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;Thread.CurrentThread.Name &lt;/span&gt;&lt;span style="color: #000000"&gt;=&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #800000"&gt;main&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #000000"&gt;; &lt;br /&gt;AddHandler handler &lt;/span&gt;&lt;span style="color: #000000"&gt;=&lt;/span&gt;&lt;span style="color: #0000ff"&gt;new&lt;/span&gt;&lt;span style="color: #000000"&gt; AddHandler(Add); &lt;br /&gt;Debug.WriteLine(handler.Invoke(&lt;/span&gt;&lt;span style="color: #800080"&gt;1&lt;/span&gt;&lt;span style="color: #000000"&gt;,&lt;/span&gt;&lt;span style="color: #800080"&gt;2&lt;/span&gt;&lt;span style="color: #000000"&gt;)); &lt;br /&gt;Debug.WriteLine(&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #800000"&gt;OK&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #000000"&gt;); &lt;br /&gt;} &lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;int&lt;/span&gt;&lt;span style="color: #000000"&gt; Add(&lt;/span&gt;&lt;span style="color: #0000ff"&gt;int&lt;/span&gt;&lt;span style="color: #000000"&gt; x,&lt;/span&gt;&lt;span style="color: #0000ff"&gt;int&lt;/span&gt;&lt;span style="color: #000000"&gt; y) &lt;br /&gt;{ &lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008000"&gt;//&lt;/span&gt;&lt;span style="color: #008000"&gt;输出当前执行操作的现场&lt;/span&gt;&lt;span style="color: #008000"&gt; &lt;br /&gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;Debug.WriteLine(Thread.CurrentThread.Name); &lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;return&lt;/span&gt;&lt;span style="color: #000000"&gt; x &lt;/span&gt;&lt;span style="color: #000000"&gt;+&lt;/span&gt;&lt;span style="color: #000000"&gt; y; &lt;br /&gt;}&lt;/span&gt;&lt;/div&gt;&#xD;
&lt;p&gt;输出结果：main&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; OK&lt;br /&gt;&amp;nbsp;从Debug.WriteLine(Thread.CurrentThread.Name) 看出同步委托代码执行所在的线程与调用方式相关，同步委托代码执行所在的线程等于调用委托所在的线程.&lt;br /&gt;(2),异步委托：异步调用不阻塞主线程，而是把调用在线程池中的新线程中执行，我们可以不必关心，也无需关心这个&amp;#8220;新线程&amp;#8221;是怎么定义的&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 委托的异步调用通过BeginInvoke和EndInvoke来实现。&lt;br /&gt;&amp;nbsp;从下面的例子中可以看到，异步委托的执行是在新线程中执行，所以当执行委托时，当前工作会不会阻塞，异步委托 与当前线程是同时执行的。&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/p&gt;&#xD;
&lt;div &gt;&lt;!--&#xD;
&lt;br /&gt;&#xD;
&lt;br /&gt;Code highlighting produced by Actipro CodeHighlighter (freeware)&#xD;
&lt;br /&gt;http://www.CodeHighlighter.com/&#xD;
&lt;br /&gt;&#xD;
&lt;br /&gt;--&gt;&lt;span style="color: #0000ff"&gt;public&lt;/span&gt;&lt;span style="color: #0000ff"&gt;delegate&lt;/span&gt;&lt;span style="color: #0000ff"&gt;int&lt;/span&gt;&lt;span style="color: #000000"&gt; AddHandler(&lt;/span&gt;&lt;span style="color: #0000ff"&gt;int&lt;/span&gt;&lt;span style="color: #000000"&gt; i,&lt;/span&gt;&lt;span style="color: #0000ff"&gt;int&lt;/span&gt;&lt;span style="color: #000000"&gt; y); &lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;private&lt;/span&gt;&lt;span style="color: #0000ff"&gt;void&lt;/span&gt;&lt;span style="color: #000000"&gt; button1_Click(&lt;/span&gt;&lt;span style="color: #0000ff"&gt;object&lt;/span&gt;&lt;span style="color: #000000"&gt; sender, EventArgs e) &lt;br /&gt;{ &lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008000"&gt;//&lt;/span&gt;&lt;span style="color: #008000"&gt;添加当前主线程名称&amp;#8220;main&amp;#8221;&lt;/span&gt;&lt;span style="color: #008000"&gt; &lt;br /&gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;Thread.CurrentThread.Name &lt;/span&gt;&lt;span style="color: #000000"&gt;=&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #800000"&gt;main&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #000000"&gt;; &lt;br /&gt;AddHandler handler &lt;/span&gt;&lt;span style="color: #000000"&gt;=&lt;/span&gt;&lt;span style="color: #0000ff"&gt;new&lt;/span&gt;&lt;span style="color: #000000"&gt; AddHandler(Add); &lt;br /&gt;Debug.WriteLine(handler.BeginInvoke(&lt;/span&gt;&lt;span style="color: #800080"&gt;1&lt;/span&gt;&lt;span style="color: #000000"&gt;, &lt;/span&gt;&lt;span style="color: #800080"&gt;2&lt;/span&gt;&lt;span style="color: #000000"&gt;, &lt;/span&gt;&lt;span style="color: #0000ff"&gt;null&lt;/span&gt;&lt;span style="color: #000000"&gt;, &lt;/span&gt;&lt;span style="color: #0000ff"&gt;null&lt;/span&gt;&lt;span style="color: #000000"&gt;)); &lt;br /&gt;Debug.WriteLine(&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #800000"&gt;OK&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #000000"&gt;); &lt;br /&gt;} &lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;int&lt;/span&gt;&lt;span style="color: #000000"&gt; Add(&lt;/span&gt;&lt;span style="color: #0000ff"&gt;int&lt;/span&gt;&lt;span style="color: #000000"&gt; x,&lt;/span&gt;&lt;span style="color: #0000ff"&gt;int&lt;/span&gt;&lt;span style="color: #000000"&gt; y) &lt;br /&gt;{ &lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008000"&gt;//&lt;/span&gt;&lt;span style="color: #008000"&gt;输出当前执行操作的现场&lt;/span&gt;&lt;span style="color: #008000"&gt; &lt;br /&gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;Debug.WriteLine(Thread.CurrentThread.Name); &lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;return&lt;/span&gt;&lt;span style="color: #000000"&gt; x &lt;/span&gt;&lt;span style="color: #000000"&gt;+&lt;/span&gt;&lt;span style="color: #000000"&gt; y; &lt;br /&gt;} &lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&#xD;
&lt;p&gt;输出结果：OK&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 空&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;Debug.WriteLine(Thread.CurrentThread.Name) 输出为空，看出异步委托代码执行是在我们没有指定名字的新线程中执行的。&lt;br /&gt;&amp;nbsp;备注：由于异步委托时启用线程池线程执行，.Net没有赋予程序员直接停止其调用的方法，使得我们没有办法直接控制委托的停止和执行，假设 Add是一个0-100循环，一般情况下我们是没有办法 在委托循环到50让委托停下来的，二般情况是可以通过一些特殊的手段的需要的话就Goolge一下吧！所以显得委托调用不够灵活&lt;/p&gt;&#xD;
&lt;p&gt;下面给一个一步委托返回值的列子：&lt;/p&gt;&#xD;
&lt;div &gt;&lt;!--&#xD;
&lt;br /&gt;&#xD;
&lt;br /&gt;Code highlighting produced by Actipro CodeHighlighter (freeware)&#xD;
&lt;br /&gt;http://www.CodeHighlighter.com/&#xD;
&lt;br /&gt;&#xD;
&lt;br /&gt;--&gt;&lt;span style="color: #0000ff"&gt;public&lt;/span&gt;&lt;span style="color: #0000ff"&gt;delegate&lt;/span&gt;&lt;span style="color: #0000ff"&gt;int&lt;/span&gt;&lt;span style="color: #000000"&gt; AddHandler(&lt;/span&gt;&lt;span style="color: #0000ff"&gt;int&lt;/span&gt;&lt;span style="color: #000000"&gt; i,&lt;/span&gt;&lt;span style="color: #0000ff"&gt;int&lt;/span&gt;&lt;span style="color: #000000"&gt; y); &lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;private&lt;/span&gt;&lt;span style="color: #0000ff"&gt;void&lt;/span&gt;&lt;span style="color: #000000"&gt; button1_Click(&lt;/span&gt;&lt;span style="color: #0000ff"&gt;object&lt;/span&gt;&lt;span style="color: #000000"&gt; sender, EventArgs e) &lt;br /&gt;{ &lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008000"&gt;//&lt;/span&gt;&lt;span style="color: #008000"&gt;添加当前主线程名称&amp;#8220;main&amp;#8221;&lt;/span&gt;&lt;span style="color: #008000"&gt; &lt;br /&gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;Thread.CurrentThread.Name &lt;/span&gt;&lt;span style="color: #000000"&gt;=&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #800000"&gt;main&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #000000"&gt;; &lt;br /&gt;AddHandler handler &lt;/span&gt;&lt;span style="color: #000000"&gt;=&lt;/span&gt;&lt;span style="color: #0000ff"&gt;new&lt;/span&gt;&lt;span style="color: #000000"&gt; AddHandler(Add); &lt;br /&gt;IAsyncResult obj &lt;/span&gt;&lt;span style="color: #000000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt; handler.BeginInvoke(&lt;/span&gt;&lt;span style="color: #800080"&gt;1&lt;/span&gt;&lt;span style="color: #000000"&gt;, &lt;/span&gt;&lt;span style="color: #800080"&gt;2&lt;/span&gt;&lt;span style="color: #000000"&gt;, &lt;/span&gt;&lt;span style="color: #0000ff"&gt;null&lt;/span&gt;&lt;span style="color: #000000"&gt;, &lt;/span&gt;&lt;span style="color: #0000ff"&gt;null&lt;/span&gt;&lt;span style="color: #000000"&gt;); &lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008000"&gt;//&lt;/span&gt;&lt;span style="color: #008000"&gt;使用EndInvoke方法接收返回值&lt;/span&gt;&lt;span style="color: #008000"&gt; &lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;int&lt;/span&gt;&lt;span style="color: #000000"&gt; i &lt;/span&gt;&lt;span style="color: #000000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt; handler.EndInvoke(obj); &lt;br /&gt;Debug.WriteLine(i.ToString()); &lt;br /&gt;} &lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;int&lt;/span&gt;&lt;span style="color: #000000"&gt; Add(&lt;/span&gt;&lt;span style="color: #0000ff"&gt;int&lt;/span&gt;&lt;span style="color: #000000"&gt; x,&lt;/span&gt;&lt;span style="color: #0000ff"&gt;int&lt;/span&gt;&lt;span style="color: #000000"&gt; y) &lt;br /&gt;{ &lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008000"&gt;//&lt;/span&gt;&lt;span style="color: #008000"&gt;输出当前执行操作的现场&lt;/span&gt;&lt;span style="color: #008000"&gt; &lt;br /&gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;Debug.WriteLine(Thread.CurrentThread.Name); &lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;return&lt;/span&gt;&lt;span style="color: #000000"&gt; x &lt;/span&gt;&lt;span style="color: #000000"&gt;+&lt;/span&gt;&lt;span style="color: #000000"&gt; y; &lt;br /&gt;}&lt;/span&gt;&lt;/div&gt;&#xD;
&lt;p&gt;2，子线程调用：子线程的最大特点是在子线程执行任务时候，不占用主线程，而且我们可以自由控制它。Visual C#中使用的线程都是通过自命名空间System.Threading中的Thread类经常实例化完成的。通过Thread类的构造函数来创建可供Visual C#使用的线程，通过Thread中的方法和属性来设定线程属性和控制线程的状态。以下Thread类中的最典型的构造函数语法，在Visual C#中一般使用这个构造函数来创建、初始化Thread实例。&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/p&gt;&#xD;
&lt;div &gt;&lt;!--&#xD;
&lt;br /&gt;&#xD;
&lt;br /&gt;Code highlighting produced by Actipro CodeHighlighter (freeware)&#xD;
&lt;br /&gt;http://www.CodeHighlighter.com/&#xD;
&lt;br /&gt;&#xD;
&lt;br /&gt;--&gt;&lt;span style="color: #0000ff"&gt;private&lt;/span&gt;&lt;span style="color: #0000ff"&gt;void&lt;/span&gt;&lt;span style="color: #000000"&gt; button1_Click(&lt;/span&gt;&lt;span style="color: #0000ff"&gt;object&lt;/span&gt;&lt;span style="color: #000000"&gt; sender, EventArgs e) &lt;br /&gt;{ &lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008000"&gt;//&lt;/span&gt;&lt;span style="color: #008000"&gt;添加当前主线程名称&amp;#8220;main&amp;#8221;&lt;/span&gt;&lt;span style="color: #008000"&gt; &lt;br /&gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;Thread.CurrentThread.Name &lt;/span&gt;&lt;span style="color: #000000"&gt;=&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #800000"&gt;main&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #000000"&gt;; &lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008000"&gt;//&lt;/span&gt;&lt;span style="color: #008000"&gt;通过Thread类的构造函数线程，并指示一个委托让线程 执行指定方法&lt;/span&gt;&lt;span style="color: #008000"&gt; &lt;br /&gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;Thread t &lt;/span&gt;&lt;span style="color: #000000"&gt;=&lt;/span&gt;&lt;span style="color: #0000ff"&gt;new&lt;/span&gt;&lt;span style="color: #000000"&gt; Thread(&lt;/span&gt;&lt;span style="color: #0000ff"&gt;new&lt;/span&gt;&lt;span style="color: #000000"&gt; ThreadStart(Add)); &lt;br /&gt;t.Name &lt;/span&gt;&lt;span style="color: #000000"&gt;=&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #800000"&gt;子线程&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #000000"&gt;; &lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008000"&gt;//&lt;/span&gt;&lt;span style="color: #008000"&gt;开始新线程&lt;/span&gt;&lt;span style="color: #008000"&gt; &lt;br /&gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;t.Start(); &lt;br /&gt;&lt;br /&gt;Debug.WriteLine(Thread.CurrentThread.Name); &lt;br /&gt;} &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;void&lt;/span&gt;&lt;span style="color: #000000"&gt; Add() &lt;br /&gt;{ &lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;for&lt;/span&gt;&lt;span style="color: #000000"&gt; (&lt;/span&gt;&lt;span style="color: #0000ff"&gt;int&lt;/span&gt;&lt;span style="color: #000000"&gt; i &lt;/span&gt;&lt;span style="color: #000000"&gt;=&lt;/span&gt;&lt;span style="color: #800080"&gt;0&lt;/span&gt;&lt;span style="color: #000000"&gt;; i &lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800080"&gt;100000&lt;/span&gt;&lt;span style="color: #000000"&gt;; i&lt;/span&gt;&lt;span style="color: #000000"&gt;++&lt;/span&gt;&lt;span style="color: #000000"&gt;) &lt;br /&gt;{ &lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008000"&gt;//&lt;/span&gt;&lt;span style="color: #008000"&gt;输出当前执行操作的线程名&lt;/span&gt;&lt;span style="color: #008000"&gt; &lt;br /&gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;Debug.WriteLine(Thread.CurrentThread.Name&lt;/span&gt;&lt;span style="color: #000000"&gt;+&lt;/span&gt;&lt;span style="color: #000000"&gt;i); &lt;br /&gt;&lt;br /&gt;} &lt;br /&gt;}&lt;/span&gt;&lt;/div&gt;&#xD;
&lt;p&gt;输出结果：&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; main&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 子线程0&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 子线程2&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 子线程3&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 从输出结果我们 可以看到 ，新线程的执行，不会阻塞主线程。 我们可以通过 Abort()方法结束线程。这里就不给出代码了。&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 下面说一下，带参数的线程委托，看下面的代码：&amp;nbsp;&amp;nbsp;&lt;/p&gt;&#xD;
&lt;div &gt;&lt;!--&#xD;
&lt;br /&gt;&#xD;
&lt;br /&gt;Code highlighting produced by Actipro CodeHighlighter (freeware)&#xD;
&lt;br /&gt;http://www.CodeHighlighter.com/&#xD;
&lt;br /&gt;&#xD;
&lt;br /&gt;--&gt;&lt;span style="color: #0000ff"&gt;void&lt;/span&gt;&lt;span style="color: #000000"&gt; Add(&lt;/span&gt;&lt;span style="color: #0000ff"&gt;int&lt;/span&gt;&lt;span style="color: #000000"&gt; q) &lt;br /&gt;{ &lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;for&lt;/span&gt;&lt;span style="color: #000000"&gt; (&lt;/span&gt;&lt;span style="color: #0000ff"&gt;int&lt;/span&gt;&lt;span style="color: #000000"&gt; i &lt;/span&gt;&lt;span style="color: #000000"&gt;=&lt;/span&gt;&lt;span style="color: #800080"&gt;0&lt;/span&gt;&lt;span style="color: #000000"&gt;; i &lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #000000"&gt; q; i&lt;/span&gt;&lt;span style="color: #000000"&gt;++&lt;/span&gt;&lt;span style="color: #000000"&gt;) &lt;br /&gt;{ &lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008000"&gt;//&lt;/span&gt;&lt;span style="color: #008000"&gt;输出当前执行操作的线程名&lt;/span&gt;&lt;span style="color: #008000"&gt; &lt;br /&gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;Debug.WriteLine(Thread.CurrentThread.Name &lt;/span&gt;&lt;span style="color: #000000"&gt;+&lt;/span&gt;&lt;span style="color: #000000"&gt; i); &lt;br /&gt;&lt;br /&gt;} &lt;br /&gt;} &lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;private&lt;/span&gt;&lt;span style="color: #0000ff"&gt;void&lt;/span&gt;&lt;span style="color: #000000"&gt; button1_Click(&lt;/span&gt;&lt;span style="color: #0000ff"&gt;object&lt;/span&gt;&lt;span style="color: #000000"&gt; sender, EventArgs e) &lt;br /&gt;{ &lt;br /&gt;&lt;br /&gt;Thread.CurrentThread.Name &lt;/span&gt;&lt;span style="color: #000000"&gt;=&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #800000"&gt;main&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #000000"&gt;; &lt;br /&gt;Thread t &lt;/span&gt;&lt;span style="color: #000000"&gt;=&lt;/span&gt;&lt;span style="color: #0000ff"&gt;new&lt;/span&gt;&lt;span style="color: #000000"&gt; Thread(&lt;/span&gt;&lt;span style="color: #0000ff"&gt;new&lt;/span&gt;&lt;span style="color: #000000"&gt; ThreadStart(Add(&lt;/span&gt;&lt;span style="color: #800080"&gt;100&lt;/span&gt;&lt;span style="color: #000000"&gt;))); &lt;br /&gt;t.Name &lt;/span&gt;&lt;span style="color: #000000"&gt;=&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #800000"&gt;子线程&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #000000"&gt;; &lt;br /&gt;&lt;br /&gt;t.Start(); &lt;br /&gt;&lt;br /&gt;Debug.WriteLine(Thread.CurrentThread.Name); &lt;br /&gt;}&lt;/span&gt;&lt;/div&gt;&#xD;
&lt;p&gt;如果你像这样 Thread t = new Thread(Add(100));传入参数的话肯定是不可能的 因为委托时不能带参数的，这里提供一种简单的解决方法，就是在线程委托中再委托的办法实现&lt;/p&gt;&#xD;
&lt;div &gt;&lt;!--&#xD;
&lt;br /&gt;&#xD;
&lt;br /&gt;Code highlighting produced by Actipro CodeHighlighter (freeware)&#xD;
&lt;br /&gt;http://www.CodeHighlighter.com/&#xD;
&lt;br /&gt;&#xD;
&lt;br /&gt;--&gt;&lt;span style="color: #0000ff"&gt;private&lt;/span&gt;&lt;span style="color: #0000ff"&gt;void&lt;/span&gt;&lt;span style="color: #000000"&gt; button1_Click(&lt;/span&gt;&lt;span style="color: #0000ff"&gt;object&lt;/span&gt;&lt;span style="color: #000000"&gt; sender, EventArgs e) &lt;br /&gt;{ &lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008000"&gt;//&lt;/span&gt;&lt;span style="color: #008000"&gt;添加当前主线程名称&amp;#8220;main&amp;#8221;&lt;/span&gt;&lt;span style="color: #008000"&gt; &lt;br /&gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;Thread.CurrentThread.Name &lt;/span&gt;&lt;span style="color: #000000"&gt;=&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #800000"&gt;main&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #000000"&gt;; &lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008000"&gt;//&lt;/span&gt;&lt;span style="color: #008000"&gt;在线程委托中再定义一个委托在新委托中调用方法void Add(int q)。&lt;/span&gt;&lt;span style="color: #008000"&gt; &lt;br /&gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;Thread t &lt;/span&gt;&lt;span style="color: #000000"&gt;=&lt;/span&gt;&lt;span style="color: #0000ff"&gt;new&lt;/span&gt;&lt;span style="color: #000000"&gt; Thread(&lt;/span&gt;&lt;span style="color: #0000ff"&gt;new&lt;/span&gt;&lt;span style="color: #000000"&gt; ThreadStart(&lt;/span&gt;&lt;span style="color: #0000ff"&gt;delegate&lt;/span&gt;&lt;span style="color: #000000"&gt; {Add(&lt;/span&gt;&lt;span style="color: #800080"&gt;1000&lt;/span&gt;&lt;span style="color: #000000"&gt;); })); &lt;br /&gt;t.Name &lt;/span&gt;&lt;span style="color: #000000"&gt;=&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #800000"&gt;子线程&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #000000"&gt;; &lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008000"&gt;//&lt;/span&gt;&lt;span style="color: #008000"&gt;开始新线程&lt;/span&gt;&lt;span style="color: #008000"&gt; &lt;br /&gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;t.Start(); &lt;br /&gt;Debug.WriteLine(Thread.CurrentThread.Name); &lt;br /&gt;}&lt;/span&gt;&lt;/div&gt;&#xD;
&lt;p&gt;带返回值的：&lt;/p&gt;&#xD;
&lt;div &gt;&lt;!--&#xD;
&lt;br /&gt;&#xD;
&lt;br /&gt;Code highlighting produced by Actipro CodeHighlighter (freeware)&#xD;
&lt;br /&gt;http://www.CodeHighlighter.com/&#xD;
&lt;br /&gt;&#xD;
&lt;br /&gt;--&gt;&lt;span style="color: #0000ff"&gt;private&lt;/span&gt;&lt;span style="color: #0000ff"&gt;void&lt;/span&gt;&lt;span style="color: #000000"&gt; button1_Click(&lt;/span&gt;&lt;span style="color: #0000ff"&gt;object&lt;/span&gt;&lt;span style="color: #000000"&gt; sender, EventArgs e) &lt;br /&gt;{ &lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008000"&gt;//&lt;/span&gt;&lt;span style="color: #008000"&gt;添加当前主线程名称&amp;#8220;main&amp;#8221;&lt;/span&gt;&lt;span style="color: #008000"&gt; &lt;br /&gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;Thread.CurrentThread.Name &lt;/span&gt;&lt;span style="color: #000000"&gt;=&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #800000"&gt;main&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #000000"&gt;; &lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008000"&gt;//&lt;/span&gt;&lt;span style="color: #008000"&gt;定义一个变量准备接收子线程返回值&lt;/span&gt;&lt;span style="color: #008000"&gt; &lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;int&lt;/span&gt;&lt;span style="color: #000000"&gt; iResult &lt;/span&gt;&lt;span style="color: #000000"&gt;=&lt;/span&gt;&lt;span style="color: #800080"&gt;0&lt;/span&gt;&lt;span style="color: #000000"&gt;; &lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008000"&gt;//&lt;/span&gt;&lt;span style="color: #008000"&gt;在线程委托中再定义一个委托在新委托中调用方法void Add(int q)。&lt;/span&gt;&lt;span style="color: #008000"&gt; &lt;br /&gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;Thread t &lt;/span&gt;&lt;span style="color: #000000"&gt;=&lt;/span&gt;&lt;span style="color: #0000ff"&gt;new&lt;/span&gt;&lt;span style="color: #000000"&gt; Thread(&lt;/span&gt;&lt;span style="color: #0000ff"&gt;new&lt;/span&gt;&lt;span style="color: #000000"&gt; ThreadStart(&lt;/span&gt;&lt;span style="color: #0000ff"&gt;delegate&lt;/span&gt;&lt;span style="color: #000000"&gt; {iResult &lt;/span&gt;&lt;span style="color: #000000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt; Add(&lt;/span&gt;&lt;span style="color: #800080"&gt;1000&lt;/span&gt;&lt;span style="color: #000000"&gt;); })); &lt;br /&gt;t.Name &lt;/span&gt;&lt;span style="color: #000000"&gt;=&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #800000"&gt;子线程&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #000000"&gt;; &lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008000"&gt;//&lt;/span&gt;&lt;span style="color: #008000"&gt;开始新线程&lt;/span&gt;&lt;span style="color: #008000"&gt; &lt;br /&gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;t.Start(); &lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008000"&gt;//&lt;/span&gt;&lt;span style="color: #008000"&gt;设置一个循环来等待子线程结束&lt;/span&gt;&lt;span style="color: #008000"&gt; &lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;while&lt;/span&gt;&lt;span style="color: #000000"&gt; (t.ThreadState &lt;/span&gt;&lt;span style="color: #000000"&gt;!=&lt;/span&gt;&lt;span style="color: #000000"&gt; System.Threading.ThreadState.Stopped) &lt;br /&gt;{ &lt;br /&gt;t.Join(&lt;/span&gt;&lt;span style="color: #800080"&gt;10&lt;/span&gt;&lt;span style="color: #000000"&gt;); &lt;br /&gt;} &lt;br /&gt;&lt;br /&gt;Debug.WriteLine(iResult.ToString()); &lt;br /&gt;Debug.WriteLine(Thread.CurrentThread.Name); &lt;br /&gt;}&lt;/span&gt;&lt;/div&gt;&#xD;
&lt;p&gt;3，线程池调用 :&amp;#8220;线程池&amp;#8221;是可以用来在后台执行多个任务的线程集合。这使主线程可以自由地异步执行其他任务。&lt;br /&gt;线程池通常用于服务器应用程序。每个传入请求都将分配给线程池中的一个线程，因此可以异步处理请求，而不会占用主线程，也不会延迟后续请求的处理。&lt;br /&gt;ThreadPool(线程池)是一个静态类，它没有定义任何的构造方法()，我们只能够使用它的静态方法，这是因为，这是因为ThreadPool是托管线程池，是由CLR管理的。&lt;br /&gt;ThreadPool使用WaitCallback委托，它所要做的工作是在后台进行的。使工作项的排队和运行更容易，可以给工作者线程传递一个状态对象（提供数据）。状态对象是私有的作用域位于线程层，所以不需要进行同步。&lt;br /&gt;ThreadPool目标是为了减除线程的初始化开销，实现并行处理。&lt;br /&gt;一个ThreadPool里面注册的线程拥有默认的堆栈大小，默认的优先级。并且，他们都存在于多线程空间（Multithreaded apartment）中。&lt;/p&gt;&#xD;
&lt;p&gt;ThreadPool中的Thread不能手动取消，也不用手动开始。所以ThreadPool并不适用比较长的线程。你要做的只是把一个WaitCallback委托塞给ThreadPool，然后剩下的工作将由系统自动完成。系统会在ThreadPool的线程队列中一一启动线程。&lt;/p&gt;&#xD;
&lt;p&gt;当线程池满时，多余的线程会在队列里排队，当线程池空闲时，系统自动掉入排队的线程，以保持系统利用率。&lt;/p&gt;&#xD;
&lt;p&gt;我们的程序中使用ThreadPool来进行一些比较耗时或者需要阻塞的操作。当学要复杂的同步技术，例如事件，或需要对一个现场表调用Join方法时线程池就不能满足需求了.在以下情况中不宜使用ThreadPool而应该使用单独的Thread&amp;nbsp;&lt;/p&gt;&#xD;
&lt;div &gt;&lt;!--&#xD;
&lt;br /&gt;&#xD;
&lt;br /&gt;Code highlighting produced by Actipro CodeHighlighter (freeware)&#xD;
&lt;br /&gt;http://www.CodeHighlighter.com/&#xD;
&lt;br /&gt;&#xD;
&lt;br /&gt;--&gt;&lt;span style="color: #0000ff"&gt;private&lt;/span&gt;&lt;span style="color: #0000ff"&gt;void&lt;/span&gt;&lt;span style="color: #000000"&gt; button1_Click(&lt;/span&gt;&lt;span style="color: #0000ff"&gt;object&lt;/span&gt;&lt;span style="color: #000000"&gt; sender, EventArgs e) &lt;br /&gt;{ &lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008000"&gt;//&lt;/span&gt;&lt;span style="color: #008000"&gt;添加当前主线程名称&amp;#8220;main&amp;#8221;&lt;/span&gt;&lt;span style="color: #008000"&gt; &lt;br /&gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;Thread.CurrentThread.Name &lt;/span&gt;&lt;span style="color: #000000"&gt;=&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #800000"&gt;main&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #000000"&gt;; &lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008000"&gt;//&lt;/span&gt;&lt;span style="color: #008000"&gt;使用线程池ThreadPool创建线程&lt;/span&gt;&lt;span style="color: #008000"&gt; &lt;br /&gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;ThreadPool.QueueUserWorkItem(Add); &lt;br /&gt;Debug.WriteLine(Thread.CurrentThread.Name); &lt;br /&gt;} &lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008000"&gt;//&lt;/span&gt;&lt;span style="color: #008000"&gt;这里加obj参数是为了适应委托格式 public delegate void WaitCallback(object state) &lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008000"&gt;//&lt;/span&gt;&lt;span style="color: #008000"&gt;包含回调方法要使用的信息的对象。&lt;/span&gt;&lt;span style="color: #008000"&gt; &lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;void&lt;/span&gt;&lt;span style="color: #000000"&gt; Add(&lt;/span&gt;&lt;span style="color: #0000ff"&gt;object&lt;/span&gt;&lt;span style="color: #000000"&gt; obj) &lt;br /&gt;{ &lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;for&lt;/span&gt;&lt;span style="color: #000000"&gt; (&lt;/span&gt;&lt;span style="color: #0000ff"&gt;int&lt;/span&gt;&lt;span style="color: #000000"&gt; i &lt;/span&gt;&lt;span style="color: #000000"&gt;=&lt;/span&gt;&lt;span style="color: #800080"&gt;0&lt;/span&gt;&lt;span style="color: #000000"&gt;; i &lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800080"&gt;100000&lt;/span&gt;&lt;span style="color: #000000"&gt;; i&lt;/span&gt;&lt;span style="color: #000000"&gt;++&lt;/span&gt;&lt;span style="color: #000000"&gt;) &lt;br /&gt;{ &lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008000"&gt;//&lt;/span&gt;&lt;span style="color: #008000"&gt;输出当前执行操作的现场&lt;/span&gt;&lt;span style="color: #008000"&gt; &lt;br /&gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;Debug.WriteLine(Thread.CurrentThread.Name&lt;/span&gt;&lt;span style="color: #000000"&gt;+&lt;/span&gt;&lt;span style="color: #000000"&gt;i); &lt;br /&gt;} &lt;br /&gt;}&lt;/span&gt;&lt;/div&gt;&#xD;
&lt;p&gt;可以同样用委托再委托的方法 调用带有参数(或没有任何参数)的方法&lt;/p&gt;&#xD;
&lt;div &gt;&lt;!--&#xD;
&lt;br /&gt;&#xD;
&lt;br /&gt;Code highlighting produced by Actipro CodeHighlighter (freeware)&#xD;
&lt;br /&gt;http://www.CodeHighlighter.com/&#xD;
&lt;br /&gt;&#xD;
&lt;br /&gt;--&gt;&lt;span style="color: #0000ff"&gt;private&lt;/span&gt;&lt;span style="color: #0000ff"&gt;void&lt;/span&gt;&lt;span style="color: #000000"&gt; button1_Click(&lt;/span&gt;&lt;span style="color: #0000ff"&gt;object&lt;/span&gt;&lt;span style="color: #000000"&gt; sender, EventArgs e) &lt;br /&gt;{ &lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008000"&gt;//&lt;/span&gt;&lt;span style="color: #008000"&gt;添加当前主线程名称&amp;#8220;main&amp;#8221;&lt;/span&gt;&lt;span style="color: #008000"&gt; &lt;br /&gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;Thread.CurrentThread.Name &lt;/span&gt;&lt;span style="color: #000000"&gt;=&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #800000"&gt;main&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #000000"&gt;; &lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008000"&gt;//&lt;/span&gt;&lt;span style="color: #008000"&gt;使用线程池ThreadPool创建线程&lt;/span&gt;&lt;span style="color: #008000"&gt; &lt;br /&gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;ThreadPool.QueueUserWorkItem(&lt;/span&gt;&lt;span style="color: #0000ff"&gt;delegate&lt;/span&gt;&lt;span style="color: #000000"&gt; { Add(&lt;/span&gt;&lt;span style="color: #800080"&gt;333&lt;/span&gt;&lt;span style="color: #000000"&gt;, &lt;/span&gt;&lt;span style="color: #800080"&gt;44&lt;/span&gt;&lt;span style="color: #000000"&gt;); }, &lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #800000"&gt;111&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #000000"&gt;); &lt;br /&gt;Debug.WriteLine(Thread.CurrentThread.Name); &lt;br /&gt;&lt;br /&gt;} &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;void&lt;/span&gt;&lt;span style="color: #000000"&gt; Add(&lt;/span&gt;&lt;span style="color: #0000ff"&gt;object&lt;/span&gt;&lt;span style="color: #000000"&gt; obj,&lt;/span&gt;&lt;span style="color: #0000ff"&gt;int&lt;/span&gt;&lt;span style="color: #000000"&gt; q) &lt;br /&gt;{ &lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;for&lt;/span&gt;&lt;span style="color: #000000"&gt; (&lt;/span&gt;&lt;span style="color: #0000ff"&gt;int&lt;/span&gt;&lt;span style="color: #000000"&gt; i &lt;/span&gt;&lt;span style="color: #000000"&gt;=&lt;/span&gt;&lt;span style="color: #800080"&gt;0&lt;/span&gt;&lt;span style="color: #000000"&gt;; i &lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #000000"&gt; q; i&lt;/span&gt;&lt;span style="color: #000000"&gt;++&lt;/span&gt;&lt;span style="color: #000000"&gt;) &lt;br /&gt;{ &lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008000"&gt;//&lt;/span&gt;&lt;span style="color: #008000"&gt;输出当前执行操作的现场&lt;/span&gt;&lt;span style="color: #008000"&gt; &lt;br /&gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;Debug.WriteLine(Thread.CurrentThread.Name&lt;/span&gt;&lt;span style="color: #000000"&gt;+&lt;/span&gt;&lt;span style="color: #000000"&gt;i); &lt;br /&gt;} &lt;br /&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;img src="http://www.cnblogs.com/moss_tan_jun/aggbug/2334597.html?type=0" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/moss_tan_jun/archive/2012/02/01/2334597.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/Antoni/archive/2012/02/01/2334347.html</id><title type="text">利用安装光盘创建本地yum源补装 RPM 软件包-通过命令行模式</title><summary type="text"/><published>2012-02-01T06:28:00Z</published><updated>2012-02-01T06:28:00Z</updated><author><name>Antoni</name><uri>http://www.cnblogs.com/Antoni/</uri></author><link rel="alternate" href="http://www.cnblogs.com/Antoni/archive/2012/02/01/2334347.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/Antoni/archive/2012/02/01/2334347.html"/><content type="html">    突然想写这篇文章是因为公司的电脑在安装Linux的时候没有对应的驱动程序，或者是显卡太烂吧。只能以最小化的形式去安装&lt;br/&gt;Linux，最后安装出来的结果是：GCC没有，Firefox，GNOME都没有。只能是自己动手安装了，写下来这篇文章当做是笔记吧，&lt;br/&gt;&#xD;
防止自己忘记。&lt;br/&gt;&lt;br/&gt;&#xD;
    呃。。。。我是通过虚拟机安装的，使用的是CentOS光盘镜像。那么先挂载光盘吧，强烈建议在root用户下操作，命令是如下：（按顺序操作）&lt;br/&gt;&#xD;
    1、mkdir /media/cdrom&lt;br/&gt;&#xD;
    2、mount -t iso9660 /dev/cdrom /media/cdrom&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&#xD;
&#xD;
    挂载光驱以后，在使用yum命令前，还需要配置一下yum的配置文件，一般来说，yum在执行的时候都会在配置文件寻找安装文件的本地路径或者是网络路径，所以应修改配置文件，以便yum能够寻找到本地光盘，操作命令如下：（按顺序操作）&lt;br/&gt;&#xD;
    1、cd /etc/yum.repos.d&lt;br/&gt;&#xD;
    2、cp *.repo /home（这是由于已经有了yum的默认配置文件，在寻找安装包的时候默认以这个为主，会干扰待会儿写的配置文件，稍微备份一下）&lt;br/&gt;&#xD;
    3、rm *.repo&lt;br/&gt;&#xD;
    4、vi local.repo（创建一个新的配置文件）&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&#xD;
&#xD;
    写法如下：&lt;br/&gt;&#xD;
    [dvd]&lt;br/&gt;&#xD;
    name=install CentOS DVD&lt;br/&gt;&#xD;
    baseurl=file:///media/cdrom（就是刚刚挂载的光盘路径）&lt;br/&gt;&#xD;
    enabled=1&lt;br/&gt;&#xD;
    gpgcheck=0&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&#xD;
&#xD;
    然后保存即可，在讲述安装软件包前，先说一下yum通常经常使用的命令吧：&lt;br/&gt;&#xD;
    yum list（显示安装源有哪些软件可以安装，例如：MySQL, GCC...）&lt;br/&gt;&lt;br/&gt;&#xD;
    yum grouplist（以分类的模式，显示有哪些类型的软件可以安装，例如：Additional Development, Debugging tools）&lt;br/&gt;&lt;br/&gt;&#xD;
    yum groupinstall "填写软件类型的名字"（例如yum groupinstall "Debugging tools"）&lt;br/&gt;&lt;br/&gt;&#xD;
    yum clean all（清除yum在使用过程中的缓存）&lt;br/&gt;&lt;br/&gt;&#xD;
&#xD;
    我就只说在这篇文章用到的yum命令了，剩下的有些参数请各位去百度一下吧。还有，我采用的是分类型的软件安装，我懒得一个一个去安装了，开发的就把开发的一次性给安装上。操作命令如下：（按顺序操作）&lt;br/&gt;&#xD;
   &#xD;
    1、yum grouplist &gt; /home/list（把搜索出来的列表存放到list文本文件里面，以便查看有哪些软件类型）&lt;br/&gt;&#xD;
    2、yum groupinstall "填写你想要安装的软件类型"&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&#xD;
&#xD;
&#xD;
    这样就可以了，就可以安装你想要的软件了。yum会把处理好每一款软件的依赖关系，不用用户去劳心劳力地去查找依赖关系，免得麻烦，最后说一句，这个在CentOS，RedHat，Fedora这些发行商下应该是通用的，大家都是同一款源代码，不过Ubuntu其他的发行商就不清楚了，如果有更好的方法，希望大家能告诉小弟，不胜感激。&lt;img src="http://www.cnblogs.com/Antoni/aggbug/2334347.html?type=0" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/Antoni/archive/2012/02/01/2334347.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/yanjieee/archive/2012/02/01/2334486.html</id><title type="text">QT实现窗口圆角</title><summary type="text"/><published>2012-02-01T06:15:00Z</published><updated>2012-02-01T06:15:00Z</updated><author><name>yanjieee</name><uri>http://www.cnblogs.com/yanjieee/</uri></author><link rel="alternate" href="http://www.cnblogs.com/yanjieee/archive/2012/02/01/2334486.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/yanjieee/archive/2012/02/01/2334486.html"/><content type="html">&lt;div &gt;&#xD;
&lt;pre &gt;//==========实现上边角圆弧==========&#xD;
    setWindowFlags(Qt::FramelessWindowHint);&#xD;
    QBitmap bmp(this-&amp;gt;size());&#xD;
    bmp.fill();&#xD;
    QPainter p(&amp;amp;bmp);&#xD;
//    p.setPen(Qt::NoPen);&#xD;
//    p.setBrush(Qt::black);&#xD;
    p.setRenderHint(QPainter::Antialiasing);    //抗锯齿&#xD;
    //p.drawRoundedRect(bmp.rect(), 20, 20); //四个角都是圆弧&#xD;
    //只要上边角圆弧&#xD;
    int arcR = 10;    //弧度&#xD;
    QRect rect = this-&amp;gt;rect();&#xD;
    QPainterPath path;&#xD;
    //逆时针&#xD;
    path.moveTo(arcR, 0);&#xD;
    path.arcTo(0, 0, arcR * 2, arcR * 2, 90.0f, 90.0f);&#xD;
    path.lineTo(0, rect.height());&#xD;
    path.lineTo(rect.width(), rect.height());&#xD;
    path.lineTo(rect.width(), arcR);&#xD;
    path.arcTo(rect.width() - arcR * 2, 0, arcR * 2, arcR * 2, 0.0f, 90.0f);&#xD;
    path.lineTo(arcR, 0);&#xD;
    p.drawPath(path);&#xD;
    //p.fillPath(path, QBrush(Qt::Red)); //arm和windows平台没有这行代码将显示一个透明的空空的框&#xD;
    setMask(bmp);&#xD;
    //==========实现上边角圆弧==========&#xD;
&lt;/pre&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;p&gt;可以放在窗体的构造函数中，具体的代码原理我也没有详细看，拿来主意，:-)。&lt;/p&gt;&#xD;
&lt;p&gt;原理应该是使用一个BITMAP来实现窗体绘画，圆角是使用path路径来逐步画出来的。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;转自：&lt;a href="http://blog.csdn.net/fariel_zhang/article/details/6315463"&gt;http://blog.csdn.net/fariel_zhang/article/details/6315463&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;一些画图原理可参考：http://blog.sina.com.cn/s/blog_83dddc170100s0u4.html&lt;/p&gt;&lt;img src="http://www.cnblogs.com/yanjieee/aggbug/2334486.html?type=0" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/yanjieee/archive/2012/02/01/2334486.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry></feed>
