﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>博客园-waterflier's Blog -- 刘智聪的Blog </title><link>http://www.cnblogs.com/waterflier/</link><description>热爱生活,热爱编程</description><language>zh-cn</language><lastBuildDate>Sat, 30 Aug 2008 12:49:19 GMT</lastBuildDate><pubDate>Sat, 30 Aug 2008 12:49:19 GMT</pubDate><ttl>60</ttl><item><title>Blog很久没更新了 </title><link>http://www.cnblogs.com/waterflier/archive/2008/06/05/1214701.html</link><dc:creator>waterflier</dc:creator><author>waterflier</author><pubDate>Thu, 05 Jun 2008 11:37:00 GMT</pubDate><guid>http://www.cnblogs.com/waterflier/archive/2008/06/05/1214701.html</guid><wfw:comment>http://www.cnblogs.com/waterflier/comments/1214701.html</wfw:comment><comments>http://www.cnblogs.com/waterflier/archive/2008/06/05/1214701.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cnblogs.com/waterflier/comments/commentRss/1214701.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/waterflier/services/trackbacks/1214701.html</trackback:ping><description><![CDATA[<p align="left">&nbsp;</p>
工作了以后，Blog就很少更新了。时不时地会有一点像把一些经验写下来的冲动，不过一旦准备写，惰性就上来了。要加强执行力！ 
<img src ="http://www.cnblogs.com/waterflier/aggbug/1214701.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/41966/" target="_blank">[新闻]Google推出Android Market挑战App Store</a>]]></description></item><item><title>好久没更新了</title><link>http://www.cnblogs.com/waterflier/archive/2007/06/12/780234.html</link><dc:creator>waterflier</dc:creator><author>waterflier</author><pubDate>Tue, 12 Jun 2007 03:12:00 GMT</pubDate><guid>http://www.cnblogs.com/waterflier/archive/2007/06/12/780234.html</guid><wfw:comment>http://www.cnblogs.com/waterflier/comments/780234.html</wfw:comment><comments>http://www.cnblogs.com/waterflier/archive/2007/06/12/780234.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.cnblogs.com/waterflier/comments/commentRss/780234.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/waterflier/services/trackbacks/780234.html</trackback:ping><description><![CDATA[前段时间闲疯了，懒得更新。<br>最近忙疯了，没时间更新。<br><br><br><img src ="http://www.cnblogs.com/waterflier/aggbug/780234.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/41965/" target="_blank">[新闻]美国年轻人最喜欢的15大网站</a>]]></description></item><item><title>再见了!F1的王者</title><link>http://www.cnblogs.com/waterflier/archive/2006/10/23/537134.html</link><dc:creator>waterflier</dc:creator><author>waterflier</author><pubDate>Mon, 23 Oct 2006 04:29:00 GMT</pubDate><guid>http://www.cnblogs.com/waterflier/archive/2006/10/23/537134.html</guid><wfw:comment>http://www.cnblogs.com/waterflier/comments/537134.html</wfw:comment><comments>http://www.cnblogs.com/waterflier/archive/2006/10/23/537134.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cnblogs.com/waterflier/comments/commentRss/537134.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/waterflier/services/trackbacks/537134.html</trackback:ping><description><![CDATA[<p>感谢你为我们带了如此精彩的谢幕表演！没有冠军没有香槟都没有关系!!!!!!!!!<br></p>
<img src ="http://www.cnblogs.com/waterflier/aggbug/537134.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/41964/" target="_blank">[新闻]2008年8月30日IT博客精选</a>]]></description></item><item><title>好久没写blog了</title><link>http://www.cnblogs.com/waterflier/archive/2006/09/08/499147.html</link><dc:creator>waterflier</dc:creator><author>waterflier</author><pubDate>Fri, 08 Sep 2006 12:02:00 GMT</pubDate><guid>http://www.cnblogs.com/waterflier/archive/2006/09/08/499147.html</guid><wfw:comment>http://www.cnblogs.com/waterflier/comments/499147.html</wfw:comment><comments>http://www.cnblogs.com/waterflier/archive/2006/09/08/499147.html#Feedback</comments><slash:comments>4</slash:comments><wfw:commentRss>http://www.cnblogs.com/waterflier/comments/commentRss/499147.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/waterflier/services/trackbacks/499147.html</trackback:ping><description><![CDATA[<p>好久没写了。最近几个月，考了英语，完成了一个项目。疯狂的燃烧了一把模型魂，可惜烂尾不少，只完成了几个BB而已。<br>现在终于可以过只需专注一件事的生活了，感觉不错。就是... 很多写了一半的文章到底什么时候才会有激情完成阿.. 我的文章烂尾的也太多了。</p>
<p>&nbsp;</p>
<img src ="http://www.cnblogs.com/waterflier/aggbug/499147.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/41963/" target="_blank">[新闻]《极品飞车12》最新真人照片、游戏截图</a>]]></description></item><item><title>MSVC中的"pseudo register"调试技术</title><link>http://www.cnblogs.com/waterflier/archive/2006/07/21/456570.html</link><dc:creator>waterflier</dc:creator><author>waterflier</author><pubDate>Fri, 21 Jul 2006 07:37:00 GMT</pubDate><guid>http://www.cnblogs.com/waterflier/archive/2006/07/21/456570.html</guid><wfw:comment>http://www.cnblogs.com/waterflier/comments/456570.html</wfw:comment><comments>http://www.cnblogs.com/waterflier/archive/2006/07/21/456570.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnblogs.com/waterflier/comments/commentRss/456570.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/waterflier/services/trackbacks/456570.html</trackback:ping><description><![CDATA[<p>&nbsp;&nbsp;&nbsp; 如果我写windows程序,并且用MSVC调试程序,那么通常我都会在Debug 的Watch window中保留一个这样的监视项 "@err,hr" .可以即时的显示当前的GetLastError值已经对应的字符串解释.非常的好用. 这个东西我一直都当做是vc的一个技巧来使用(也不记得是怎么学来的,好像是看某人调试的时候偷学的). 并没有继续寻找其它类似的监视项.今天突然心血来潮,在网上找了找,又有收获^_^<br></p>
<p>整的假寄存器列表:<br>&nbsp;<br>@ERR<br>&nbsp;最后错误值; 和GetLastError() API 函数一致<br>&nbsp;<br>@TIB<br>&nbsp;当前线程信息; 在调试器无法处理&#8221;FS:0&#8221;格式的时候是必要的<br>&nbsp;<br>@CLK<br>&nbsp;未列入文档的寄存器; 只是在Watch窗口适用<br>&nbsp;<br>@EAX, @EBX, @ECX, @EDX, @ESI, @EDI, @EIP, @ESP, @EBP, @EFL<br>&nbsp;Intel CPU 寄存器<br>&nbsp;<br>@CS, @DS, @ES, @SS, @FS, @GS<br>&nbsp;Intel CPU 段寄存器<br>&nbsp;<br>@ST0, @ST1, @ST2, @ST3, @ST4, @ST5, @ST6, @ST7<br>&nbsp;Intel CPU 浮点寄存器<br>&nbsp;<br>其中@TIB很有用,可以用在多线程调试的时候作为断点的条件变量.这样就可以只观察一个线程的执行情况.</p>
<img src ="http://www.cnblogs.com/waterflier/aggbug/456570.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/41962/" target="_blank">[新闻]IBM正在开发超强性能4TB固态硬盘阵列</a>]]></description></item><item><title>最近想写的几篇文章</title><link>http://www.cnblogs.com/waterflier/archive/2006/05/17/402891.html</link><dc:creator>waterflier</dc:creator><author>waterflier</author><pubDate>Wed, 17 May 2006 14:48:00 GMT</pubDate><guid>http://www.cnblogs.com/waterflier/archive/2006/05/17/402891.html</guid><wfw:comment>http://www.cnblogs.com/waterflier/comments/402891.html</wfw:comment><comments>http://www.cnblogs.com/waterflier/archive/2006/05/17/402891.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.cnblogs.com/waterflier/comments/commentRss/402891.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/waterflier/services/trackbacks/402891.html</trackback:ping><description><![CDATA[<p>&nbsp;&nbsp;&nbsp; 一直以来都没有把工作过程中的经验整理成文章的习惯，到是比较喜欢把一些技术细节写成文章免</p>
<p>的自己忘记。 而且经验性的东西总结起来题目比较大，内容多。我懒，有的时候真的很想把一些碰到的</p>
<p>挫折和解决的方法以及延伸的思考写出来，最后都是写了几行就去玩游戏了。这个习惯真的很不好，许</p>
<p>多本以为会牢记的深刻教训都随着时间的流逝渐渐忘记了.. 比如说原来的许多许多windows 窗口系统的</p>
<p>开发经验,MFC的使用经验，我也就工作一年都在Linux下，现在几乎都记不得了。主要原因就是当时不懒</p>
<p>得写..好记性比不过烂笔头。这个坏习惯一定要改，这里先把题目记下来，监督自己慢慢写。</p>
<p>&nbsp;&nbsp; 《TCP服务器开发》 主要内容:关于IO模型选择的原则,如何进行性能测试方面，开发如何选择库，用</p>
<p>库与不用库的优劣分析，自己开发需要注意屏蔽的细节。就这么多，好多内容。我这懒人都不知道什么</p>
<p>时候才能完成</p>
<p>&nbsp;&nbsp;&nbsp; 《UDP 服务器开发》 姊妹篇，增加什么情况下应该使用UDP来设计协议的一些经验<br>&nbsp;&nbsp;&nbsp; 《Jabber 服务器开发感想》 想系统的回顾一下这个jabber server的开发经验。<br>&nbsp;&nbsp;&nbsp; 《数据库同步类中的设计模式》 这里的数据库同步类指用C++封装一些用于操作数据库特定表的类</p>
<img src ="http://www.cnblogs.com/waterflier/aggbug/402891.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/41961/" target="_blank">[新闻]Microsoft F# CTP(2008年9月)</a>]]></description></item><item><title>使用感想:VS2005的优点和缺点</title><link>http://www.cnblogs.com/waterflier/archive/2006/04/21/380961.html</link><dc:creator>waterflier</dc:creator><author>waterflier</author><pubDate>Fri, 21 Apr 2006 02:15:00 GMT</pubDate><guid>http://www.cnblogs.com/waterflier/archive/2006/04/21/380961.html</guid><wfw:comment>http://www.cnblogs.com/waterflier/comments/380961.html</wfw:comment><comments>http://www.cnblogs.com/waterflier/archive/2006/04/21/380961.html#Feedback</comments><slash:comments>17</slash:comments><wfw:commentRss>http://www.cnblogs.com/waterflier/comments/commentRss/380961.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/waterflier/services/trackbacks/380961.html</trackback:ping><description><![CDATA[<p>看到</p>
<p><a href="http://community.csdn.net/Expert/topic/4699/4699658.xml?temp=.7951166">http://community.csdn.net/Expert/topic/4699/4699658.xml?temp=.7951166</a><br><br></p>
<p>觉得也应该把自己的感受写下来,没想到居然写了不少... 够字数在blog里凑篇文章了:)</p>
<p>作为C++程序员，我只谈我用到的部分的改进~<br>新的工具总是会有不少优点的。<br>优点:<br>1)最喜欢的 Code Definition Windows。终于可以像Source Insight一样在点击某个类型或函数的时候直接查看对应的实现代码了。<br>2)然后是Caller Graph.从Source Insight学来的很实用的功能，可以用图表的方式显示某个函数被项目中哪些地方调用了。<br>3)Class View窗口支持Search了，而且在点击一个类的时候把类的成员放到单独的窗口里显示(有些像Eclipse的outline窗口了)，不错。就是在公司15寸LCD上会觉得Class View太拥挤了。如果用17寸LCD会很舒适。<br>4)智能提示功能得到了进一步加强。<br>5)调试器大改进！大大提高了对于字符串类型变量的支持！可以选择纯文本，html,xml 3种方式来分析字符串。My God!对于我现在开发的基于XML的网络协议太他妈实用了。<br>6)据说加入了方便团队开发，测试的功能。由于我目前只是个人使用，项目还不敢贸然迁移到新IDE上，所以不知道。</p>
<p>缺点：<br>不觉得很慢，我只安装了C++,C#.感觉还好，在我amd semphone 2600+ 512m的机器上比vs2003稍微慢一些。<br>最大的缺点就是不稳定，我把一个项目移过来尝试的时候，写代码的过程中崩溃了2次，调试多线程+异步IO崩溃了n次..这个m$的东西一向是这样的，等打补丁吧。vs2002当年也是崩溃到完全没法用，到了vs2003就非常稳定了。<br>还有一个缺点是很多vs的插件还没有更进，好在我不用什么插件，据我所知很多人用的bc,va都没有出vs8的版本吧。对于哪些离开va就不想写代码的人，等va出新版本吧。<br>然后。。。麻烦的。。。项目中使用的大部分库都要用vc8重编译才能使用。my god!大工程。而且，而且，有几个库编译无法通过..估计是编译器错误检查严格了..</p>
<img src ="http://www.cnblogs.com/waterflier/aggbug/380961.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/41960/" target="_blank">[新闻]微软4.86亿美元收购Greenfield</a>]]></description></item><item><title>跨平台的UTF8GBK转换以及GBKw_chart转换代码，支持std::string </title><link>http://www.cnblogs.com/waterflier/archive/2006/03/06/343745.html</link><dc:creator>waterflier</dc:creator><author>waterflier</author><pubDate>Mon, 06 Mar 2006 03:41:00 GMT</pubDate><guid>http://www.cnblogs.com/waterflier/archive/2006/03/06/343745.html</guid><wfw:comment>http://www.cnblogs.com/waterflier/comments/343745.html</wfw:comment><comments>http://www.cnblogs.com/waterflier/archive/2006/03/06/343745.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cnblogs.com/waterflier/comments/commentRss/343745.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/waterflier/services/trackbacks/343745.html</trackback:ping><description><![CDATA[<P>关于unicode,各种编码等国际化的技术原理可以参看我blog上的文章。最近的项目里要用到GBK-</P>
<P>&gt;wchar_t,wchar_t-&gt;UTF8.所以对这部分功能做了些简单封装。其实对于国际化技术的封装，无非</P>
<P>就是</P>
<P>DBCS &lt;=&gt; wchar_t .</P>
<P>wchar_t &lt;=&gt; 各种unicode编码 比如说UTF8,UTF16等。</P>
<P>这样的转换都是绝对可以成功的。像GBK&lt;-&gt;BIG5这种dbcs&lt;=&gt;dbcs的转换就不一定能成功了。</P>
<P>wchar_t作为C++的字符串内部处理用类型，主要原因是各种字符串函数都都有wchar_t作为接口的</P>
<P>版本。方便使用。wchar_t这个东西的长度是由编译器,平台实现决定的，所以请记住，处理</P>
<P>wchar_t的时候，千万不要关心他的长度。如果你的代码对wchar_t的长度特别关心，这个时候你需</P>
<P>要的应该是一种标准的unicode编码</P>
<P>(Linux下的wchar_t长度为4byte,好心痛)</P>
<P>罗嗦这么多，各位看官久等了。上代码。</P>
<P>&nbsp;&nbsp; class string_util<BR>&nbsp;{<BR>&nbsp;public:</P>
<P>#ifndef _UNIX<BR>&nbsp;&nbsp;&nbsp; //我的程序只需要支持GBK,各位可以在这里加上Linux下的编码名字与windows下的codepage的</P>
<P>对应关系进行扩展。<BR>&nbsp;&nbsp;&nbsp; static inline int codepage(const char* code_page)<BR>&nbsp;&nbsp;&nbsp; {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return 936;//"GBK"<BR>&nbsp;&nbsp;&nbsp; }<BR>&nbsp;#endif</P>
<P>&nbsp;&nbsp;&nbsp;&nbsp; static inline int dbcs2wchar(const char* code_page,/*in*/const char* in,int </P>
<P>in_len,<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /*out*/wchar_t* out,int out_max)<BR>&nbsp;&nbsp;&nbsp;&nbsp; {<BR>#ifdef _UNIX<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; size_t result;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; iconv_t env;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; env = iconv_open("WCHAR_T",code_page);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; result = iconv(env,(char**)&amp;in,(size_t*)&amp;in_len,(char**)&amp;out,(size_t*)</P>
<P>&amp;out_max);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; iconv_close(env);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return (int) result;<BR>#else<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return ::MultiByteToWideChar(codepage(code_page),0,in,in_len,out,out_max);<BR>#endif<BR>&nbsp;&nbsp;&nbsp;&nbsp; }</P>
<P>&nbsp;&nbsp;&nbsp;&nbsp; static inline int dbcs2wchar(const char* code_page,/*in*/const string&amp; </P>
<P>in,/*out*/wstring&amp; out)<BR>&nbsp;&nbsp;&nbsp;&nbsp; {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int len = in.length() + 1;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int result;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; wchar_t* pBuffer = new wchar_t[len];<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; memset(pBuffer,0,len*sizeof(wchar_t));<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; result = dbcs2wchar(code_page,in.c_str(),in.length(),pBuffer,len*sizeof</P>
<P>(wchar_t));<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(pBuffer &gt;= 0)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; out = pBuffer;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; else<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; out.clear();<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; delete[] pBuffer;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return result;<BR>&nbsp;&nbsp;&nbsp;&nbsp; }</P>
<P>&nbsp;&nbsp;&nbsp;&nbsp; static inline int wchar2dbcs(const char* code_page,/*in*/const wchar_t* in,int </P>
<P>in_len,<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /*out*/char* out,int out_max)<BR>&nbsp;&nbsp;&nbsp;&nbsp; {<BR>#ifdef _UNIX<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; size_t result;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; iconv_t env;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; env = iconv_open(code_page,"WCHAR_T");<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; result = iconv(env,(char**)&amp;in,(size_t*)&amp;in_len,(char**)&amp;out,(size_t*)</P>
<P>&amp;out_max);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; iconv_close(env);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return (int) result;<BR>#else<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; BOOL use_def_char;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; use_def_char = FALSE;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return ::WideCharToMultiByte(codepage(code_page),0,in,in_len/sizeof</P>
<P>(wchar_t),out,out_max,"?",&amp;use_def_char);<BR>#endif&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp;&nbsp; }</P>
<P>&nbsp;&nbsp;&nbsp;&nbsp; static inline int wchar2dbcs(const char* code_page,/*in*/const wstring&amp; </P>
<P>in,/*out*/string&amp; out)<BR>&nbsp;&nbsp;&nbsp;&nbsp; {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int len = in.length() + 1;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int result;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; char* pBuffer = new char[len*3];<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; memset(pBuffer,0,len*3);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; result = wchar2dbcs(code_page,in.c_str(),in.length() * sizeof</P>
<P>(wchar_t),pBuffer,len*3);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(result &gt;= 0)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {&nbsp; <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; out = pBuffer;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; else<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; out = "";<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; delete[] pBuffer;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return result;<BR>&nbsp;&nbsp;&nbsp;&nbsp; }</P>
<P>&nbsp;&nbsp;&nbsp;&nbsp; static inline int wchar2utf8(/*in*/const wchar_t* in,int in_len,<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /*out*/char* out,int out_max)<BR>&nbsp;&nbsp;&nbsp;&nbsp; {<BR>#ifdef _UNIX<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; size_t result;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; iconv_t env;<BR>&nbsp;&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; env = iconv_open("UTF8","WCHAR_T");<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; result = iconv(env,(char**)&amp;in,(size_t*)&amp;in_len,(char**)&amp;out,(size_t*)</P>
<P>&amp;out_max);&nbsp;&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; iconv_close(env);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return (int) result;<BR>#else<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; BOOL use_def_char;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; use_def_char = FALSE;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return ::WideCharToMultiByte(CP_UTF8,0,in,in_len/sizeof</P>
<P>(wchar_t),out,out_max,NULL,NULL);<BR>#endif<BR>&nbsp;&nbsp;&nbsp;&nbsp; }<BR>&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp;&nbsp; static inline int wchar2utf8(/*in*/const wstring&amp; in,/*out*/string&amp; out)<BR>&nbsp;&nbsp;&nbsp;&nbsp; {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int len = in.length() + 1;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int result;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; char* pBuffer = new char[len*3];<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; memset(pBuffer,0,len*3);&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; result = wchar2utf8(in.c_str(),in.length() * sizeof(wchar_t),pBuffer,len*3);&nbsp; <BR>&nbsp;&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(result &gt;= 0)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; out = pBuffer;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; else<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; out = "";<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; delete[] pBuffer;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return result;<BR>&nbsp;&nbsp;&nbsp;&nbsp; }<BR>&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp;&nbsp; static inline int utf82wchar(/*in*/const char* in,int in_len,<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /*out*/wchar_t* out,int out_max)<BR>&nbsp;&nbsp;&nbsp;&nbsp; {<BR>#ifdef _UNIX<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; size_t result;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; iconv_t env;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; env = iconv_open("WCHAR_T","UTF8");<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; result = iconv(env,(char**)&amp;in,(size_t*)&amp;in_len,(char**)&amp;out,(size_t*)</P>
<P>&amp;out_max);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; iconv_close(env);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return (int) result;<BR>#else<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return ::MultiByteToWideChar(CP_UTF8,0,in,in_len,out,out_max);<BR>#endif<BR>&nbsp;&nbsp;&nbsp;&nbsp; }</P>
<P>&nbsp;&nbsp;&nbsp;&nbsp; static inline int utf82wchar(/*in*/const string&amp; in,/*out*/wstring&amp; out)<BR>&nbsp;&nbsp;&nbsp;&nbsp; {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int len = in.length() + 1;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int result;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //wstring temp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; wchar_t* pBuffer = new wchar_t[len];<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; memset(pBuffer,0,len*sizeof(wchar_t));<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; result = utf82wchar(in.c_str(),in.length(),pBuffer,len*sizeof(wchar_t));<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //printf("utf82wchar result is %d,errno is %s\n",result,strerror(errno));<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(result &gt;= 0)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; out = pBuffer;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; else<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; out.clear();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; delete[] pBuffer;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return result;<BR>&nbsp;&nbsp;&nbsp;&nbsp; }<BR>};</P><img src ="http://www.cnblogs.com/waterflier/aggbug/343745.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/41959/" target="_blank">[新闻]苹果已然取代微软地位成行业众矢之的</a>]]></description></item><item><title>Linux下CVS的配置</title><link>http://www.cnblogs.com/waterflier/archive/2006/02/18/332965.html</link><dc:creator>waterflier</dc:creator><author>waterflier</author><pubDate>Sat, 18 Feb 2006 02:59:00 GMT</pubDate><guid>http://www.cnblogs.com/waterflier/archive/2006/02/18/332965.html</guid><wfw:comment>http://www.cnblogs.com/waterflier/comments/332965.html</wfw:comment><comments>http://www.cnblogs.com/waterflier/archive/2006/02/18/332965.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.cnblogs.com/waterflier/comments/commentRss/332965.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/waterflier/services/trackbacks/332965.html</trackback:ping><description><![CDATA[<p>又忘记了...4个月前配的。今天搞半天都没搞上去。今天还要搞定将原来的仓库导入的问题...<br></p>
<p>这里找篇文章看起来比较全的...先看看。有补充的继续。<br></p>
<pre>Trying 127.0.0.1...<br>Connected to localhost.localdomain (127.0.0.1).<br>Escape character is '^]'.<br><br>cvs [pserver aborted]: bad auth protocol start:<br><br>Connection closed by foreign host.<br>address@hidden sam]$ rpm -qa cvs<br>cvs-1.11.1p1-7<br>address@hidden sam]<br><br>address@hidden sam]$ cat /etc/xinetd.d/cvspserver<br>service cvspserver<br>{<br>        disable         = no<br>        port            = 2401<br>        socket_type     = stream<br>        protocol        = tcp<br>        wait            = no<br>        user            = root<br>        passenv         = PATH<br>        server          = /usr/bin/cvs<br>        server_args     = -f --allow-root=/repository<br>pserver<br>}<br><br>address@hidden sam]$ cat /etc/xinetd.conf<br>#<br># Simple configuration file for xinetd<br>#<br># Some defaults, and include /etc/xinetd.d/<br><br>defaults<br>{<br>        instances               = 60<br>        log_type                = SYSLOG authpriv<br>        log_on_success          = HOST PID<br>        log_on_failure          = HOST<br>        cps                     = 25 30<br>}<br><br>includedir /etc/xinetd.d<br><br><br>-------------------------------------</pre>
<p>下载完之后安装的步骤：</p>
<p># tar xzvf cvs-1.11.tar.gz</p>
<p># cd cvs-1.11</p>
<p>#./configure</p>
<p># make</p>
<p># make install</p>
<p>-----------------------</p>
<p>注解：cvs-1.11.tar.gz 是下载的文件名</p>
<p>#是根用户的标志，而且必须是在根用户之下</p>
<p><br>这个东西主要是为软件工程用的,在开发大型项目比如现在的开发源码项目,经常会有很多开发树,为了保证开发的进度,出了错能够即时的回到原有的状态, 而设计了这中代码管理工具.</p>
<p>&nbsp;</p>
<p><br>我觉得m113是根本就没有作除 rpm -i cvs-xxx 以外的事</p>
<p><br>1.检查 /etc/services</p>
<p>vi /etc/services</p>
<p>:/cvspserver</p>
<p>如果找到的行前面并没有#，那么就不用修改了，否则去掉行首的#</p>
<p><br>2.在 /etc/xinetd.d 目录下创建一个文件，随便命名，比如 cvs</p>
<p>vi /etc/xinetd.d/cvs</p>
<p>在其中添上</p>
<p>service cvspserver</p>
<p>{</p>
<p>socket_type = stream</p>
<p>wait = no</p>
<p>user = root</p>
<p>env = HOME=</p>
<p>server = /usr/bin/cvs</p>
<p>server-tags = --allow-root=/home/cvsroot pserver</p>
<p>}</p>
<p><br>3.保存以后创建一个名为 cvs 的组和一个名为 cvsroot 的用户</p>
<p>groupadd cvs</p>
<p>useradd -g cvs -s /sbin/nologin cvsroot</p>
<p>cd /home/cvsroot</p>
<p>chown -R cvsroot /home/cvsroot</p>
<p><br>4.然后</p>
<p>vi /etc/profile</p>
<p>在其中添上</p>
<p>CVSROOT = /home/cvsroot</p>
<p>export CVSROOT</p>
<p><br>5.重启 xinetd:</p>
<p>/etc/init.d/xinetd restart</p>
<p><br>6.cvs init</p>
<p><br>这样CVS就可以用了</p>
<p><br>添加仓库: 进入到你的源码目录</p>
<p>cd /your/sources/path</p>
<p>然后执行</p>
<p>cvs export SOURCE_DIR_NAME Author Version</p>
<p>其中的SOURCE_DIR_NAME 就是你的工程在 CVSROOT 目录中保存的目录名, Author 为工程作者， Version 为你的工程发行版本号，必须以字母开头</p>
<p>&nbsp;</p>
<p><br>1.如果系统没有安装CVS的，可以到 <a href="http://ftp.cvshome.org/">http://ftp.cvshome.org/</a> 去下载。已经安装的也建议删除旧的，下载一个新的。我的做法是:</p>
<p>下载 <a href="http://ftp.cvshome.org/linux/cvs-1.11.2-i386-linux-glibc-2.1.gz">http://ftp.cvshome.org/linux/cvs-1.11.2-i386-linux-glibc-2.1.gz</a>;</p>
<p>gzip -d cvs-1.11.2-i386-linux-glibc-2.1.gz;</p>
<p>mv cvs-1.11.2-i386-linux-glibc-2.1 /usr/local/bin/cvs;</p>
<p>chmod 755 /usr/local/bin/cvs;</p>
<p>这样做就是没有man pages。要不你可以下载rpm格式的。安装后应该有man pages。</p>
<p><br>至于CVS系统的安全，我只知道可以不使用 real user 登陆:</p>
<p>chmod 644 $CVSROOT/CVSROOT/config</p>
<p>vi $CVSROOT/CVSROOT/config</p>
<p>将第二行的</p>
<p>#SystemAuth = no</p>
<p>去掉注释，即改为</p>
<p>SystemAuth = no</p>
<p><br>然后，创建一个并没有根目录的用户,用户名随便,这个用户就是作为你的虚拟用户帐号的</p>
<p>useradd -g cvs -M username</p>
<p><br>接着将 shadow 复制到 $CVSROOT/CVSROOT, 并重命名为 passwd:</p>
<p>cp /etc/shadow $CVSROOT/CVSROOT/passwd</p>
<p><br>修改passwd文件:</p>
<p>chmod 0644 $CVSROOT/CVSROOT/passwd</p>
<p>vi $CVSROOT/CVSROOT/passwd</p>
<p>将 username 对应那一行以外的行全部去掉，然后去掉 username 所在行第二个冒号以后的所有内容，并添上字符串 cvsroot, 改为如下格式</p>
<p>username:sds54354jkbft576/fdsh:cvsroot</p>
<p><br>最后去掉在系统中添加的那个 username:</p>
<p>userdel -f username</p>
<p><br>好了，这样你的CVS用户就只能用 passwd 中规定的用户来登陆你的CVS SERVER了，并且登录以后自动映射为real user cvsroot</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>CVS的安全方面你说的找个文档我也看过,增加一个用户还好,多了之后,烦死了,我觉得应该可以连接ldap,或者mysql的数据库,作为用户的认证服务</p>
<p><br>&nbsp;</p>
<img src ="http://www.cnblogs.com/waterflier/aggbug/332965.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/41958/" target="_blank">[新闻]Intel 收购 Poky Linux ,为 MID 注入新的动力</a>]]></description></item><item><title>Linux下iptables的配置</title><link>http://www.cnblogs.com/waterflier/archive/2006/01/12/316234.html</link><dc:creator>waterflier</dc:creator><author>waterflier</author><pubDate>Thu, 12 Jan 2006 11:22:00 GMT</pubDate><guid>http://www.cnblogs.com/waterflier/archive/2006/01/12/316234.html</guid><wfw:comment>http://www.cnblogs.com/waterflier/comments/316234.html</wfw:comment><comments>http://www.cnblogs.com/waterflier/archive/2006/01/12/316234.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.cnblogs.com/waterflier/comments/commentRss/316234.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/waterflier/services/trackbacks/316234.html</trackback:ping><description><![CDATA[<p>打开文件 <font face="Times New Roman" color=#000000 size=3>/etc/sysconfig/iptables</font> 编辑如下内容</p>
<p># Firewall configuration written by system-config-securitylevel<br># Manual customization of this file is not recommended.<br>*filter<br>:INPUT ACCEPT [0:0]<br>:FORWARD ACCEPT [0:0]<br>:OUTPUT ACCEPT [0:0]<br>:RH-Firewall-1-INPUT - [0:0]<br>-A INPUT -j RH-Firewall-1-INPUT<br>-A FORWARD -j RH-Firewall-1-INPUT<br>-A RH-Firewall-1-INPUT -i lo -j ACCEPT<br>-A RH-Firewall-1-INPUT -p icmp --icmp-type any -j ACCEPT<br>-A RH-Firewall-1-INPUT -p 50 -j ACCEPT<br>-A RH-Firewall-1-INPUT -p 51 -j ACCEPT<br>-A RH-Firewall-1-INPUT -p udp --dport 5353 -d 224.0.0.251 -j ACCEPT<br>-A RH-Firewall-1-INPUT -p udp -m udp --dport 631 -j ACCEPT<br>-A RH-Firewall-1-INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT<br>-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT<br>-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 443 -j ACCEPT<br>-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT<br>-A RH-Firewall-1-INPUT -m state --state NEW -m udp -p udp --dport 9000 -j ACCEPT<br>-A RH-Firewall-1-INPUT -m state --state NEW -m udp -p udp --dport 9001 -j ACCEPT<br>-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 9222 -j ACCEPT<br>-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 9200 -j ACCEPT<br>-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 5222 -j ACCEPT<br>-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 5269 -j ACCEPT<br>-A RH-Firewall-1-INPUT -j REJECT --reject-with icmp-host-prohibited<br><br>这个文件为Linux启动时iptables自动加载的规则文件，不用再启动后自己手工输入一条条规则了，而且也便于维护。<br><br>如果这个时候系统正在运行，修改了这个文件想要重新加载，输入如下命令<br>iptables-restore /etc/sysconfig/iptables<br>重新加载规则<br></p>
<p>输入iptables --list 查看规则 是不是和自己想要的一样了~<br></p>
<p>纯粹mark,linux的命令用一次忘一次。</p>
<p>&nbsp;</p>
<p><br>&nbsp;</p>
<p>&nbsp;</p>
<p><br>&nbsp;</p>
<p>&nbsp;</p>
<img src ="http://www.cnblogs.com/waterflier/aggbug/316234.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/41957/" target="_blank">[新闻]雅虎将关闭社交网站Mash</a>]]></description></item></channel></rss>