﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>C++博客-Linux,C/C++,网络......</title><link>http://www.cppblog.com/volant/</link><description /><language>zh-cn</language><lastBuildDate>Sun, 19 Apr 2026 15:07:14 GMT</lastBuildDate><pubDate>Sun, 19 Apr 2026 15:07:14 GMT</pubDate><ttl>60</ttl><item><title>Python的staticmethod和classmethod</title><link>http://www.cppblog.com/volant/archive/2014/04/16/206602.html</link><dc:creator>小夜</dc:creator><author>小夜</author><pubDate>Wed, 16 Apr 2014 04:01:00 GMT</pubDate><guid>http://www.cppblog.com/volant/archive/2014/04/16/206602.html</guid><wfw:comment>http://www.cppblog.com/volant/comments/206602.html</wfw:comment><comments>http://www.cppblog.com/volant/archive/2014/04/16/206602.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/volant/comments/commentRss/206602.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/volant/services/trackbacks/206602.html</trackback:ping><description><![CDATA[最近专职做起了Python，得积累些Python的知识。<br />-----------------<br />阅读代码的时候，看到了classmethod。staticmethod用的挺多，classmethod一直没用过，感觉有些迷惑。<br />Google了一篇文章，讲的挺清楚：<a href="http://www.libaoyin.com/2013/08/06/pyhton-staticmethod-classmethod/" target="_blank" title="pyhton静态方法和类方法">pyhton静态方法和类方法</a>。上面这篇文章主要讲原理，我这里主要说说二者的相同和区别。<br /><ol><li>都可以通过类调用；</li><li>都可以通过对象调用；</li><li>都可以继承和复写；</li><li>都可以使用类属性、类方法和类的静态方法；</li><li>使用这些属性或方法时，staticmethod必须直接通过类名进行调用，classmethod可以优雅的通过参数cls调用。</li></ol>在进行属性或方法调用时：staticmethod需要硬编码指明方法的类，如果存在继承，无法使用子类复写的方法和属性，比较适合用于对其他方法和属性不依赖或依赖较少的情况；classmethod通过cls进行调用，这个cls是调用时传入的类，可以是父类，也可以是子类，适合用于对其他方法和属性依赖较多的情况，也适用于需要通过集成扩展的情况。<br /><br />下面的代码，简单试验了两者的区别，并通过staticmethod简单的模拟了classmethod的操作：<br /><br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #0000FF; ">class</span>&nbsp;Base(object):<br />&nbsp;&nbsp;&nbsp;&nbsp;name&nbsp;=&nbsp;<span style="color: #800000; ">"</span><span style="color: #800000; ">Base</span><span style="color: #800000; ">"</span><br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;@classmethod<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">def</span>&nbsp;foo(cls):<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">print</span>&nbsp;cls.name<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;@staticmethod<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">def</span>&nbsp;foo_static1():<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">print</span>&nbsp;Base.name<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;@staticmethod<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">def</span>&nbsp;foo_static2(cls):<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">print</span>&nbsp;cls.name<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;@staticmethod<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">def</span>&nbsp;foo_static3(cls):<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">#</span><span style="color: #008000; ">&nbsp;if&nbsp;not&nbsp;isinstance(cls,&nbsp;type):</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;isinstance(cls,&nbsp;Base):<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cls&nbsp;=&nbsp;cls.<span style="color: #800080; ">__class__</span><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">print</span>&nbsp;cls.name<br /><br /><br /><span style="color: #0000FF; ">class</span>&nbsp;A(Base):<br />&nbsp;&nbsp;&nbsp;&nbsp;name&nbsp;=&nbsp;<span style="color: #800000; ">"</span><span style="color: #800000; ">A</span><span style="color: #800000; ">"</span><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">def</span>&nbsp;<span style="color: #800080; ">__init__</span>(self):<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.name&nbsp;=&nbsp;<span style="color: #800000; ">"</span><span style="color: #800000; ">I&nbsp;am&nbsp;'%s'</span><span style="color: #800000; ">"</span>&nbsp;%&nbsp;A.name<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /><br /><span style="color: #0000FF; ">class</span>&nbsp;B(Base):<br />&nbsp;&nbsp;&nbsp;&nbsp;name&nbsp;=&nbsp;<span style="color: #800000; ">"</span><span style="color: #800000; ">B</span><span style="color: #800000; ">"</span><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">def</span>&nbsp;<span style="color: #800080; ">__init__</span>(self):<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.name&nbsp;=&nbsp;<span style="color: #800000; ">"</span><span style="color: #800000; ">I&nbsp;am&nbsp;'%s'</span><span style="color: #800000; ">"</span>&nbsp;%&nbsp;B.name<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;@classmethod<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">def</span>&nbsp;foo(cls):<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">print</span>&nbsp;<span style="color: #800000; ">"</span><span style="color: #800000; ">&lt;%s&gt;</span><span style="color: #800000; ">"</span>&nbsp;%&nbsp;cls.name<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;@staticmethod<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">def</span>&nbsp;foo_static1():<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">print</span>&nbsp;<span style="color: #800000; ">"</span><span style="color: #800000; ">&lt;%s&gt;</span><span style="color: #800000; ">"</span>&nbsp;%&nbsp;Base.name<br /><br /><br /><span style="color: #0000FF; ">def</span>&nbsp;testA():<br />&nbsp;&nbsp;&nbsp;&nbsp;obj&nbsp;=&nbsp;A()<br />&nbsp;&nbsp;&nbsp;&nbsp;obj.foo()<br />&nbsp;&nbsp;&nbsp;&nbsp;obj.foo_static1()<br />&nbsp;&nbsp;&nbsp;&nbsp;obj.foo_static2(A)<br />&nbsp;&nbsp;&nbsp;&nbsp;obj.foo_static2(obj)<br />&nbsp;&nbsp;&nbsp;&nbsp;obj.foo_static3(A)<br />&nbsp;&nbsp;&nbsp;&nbsp;obj.foo_static3(obj)<br />&nbsp;&nbsp;&nbsp;&nbsp;A.foo()<br />&nbsp;&nbsp;&nbsp;&nbsp;A.foo_static1()<br /><br /><span style="color: #0000FF; ">def</span>&nbsp;testB():<br />&nbsp;&nbsp;&nbsp;&nbsp;obj&nbsp;=&nbsp;B()<br />&nbsp;&nbsp;&nbsp;&nbsp;obj.foo()<br />&nbsp;&nbsp;&nbsp;&nbsp;obj.foo_static1()<br /><br /><br /><span style="color: #0000FF; ">def</span>&nbsp;run_test(func,&nbsp;*args,&nbsp;**kwargs):<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">print</span>&nbsp;<span style="color: #800000; ">"</span><span style="color: #800000; ">=======================</span><span style="color: #800000; ">"</span><br />&nbsp;&nbsp;&nbsp;&nbsp;func(*args,&nbsp;**kwargs)<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">print</span>&nbsp;<span style="color: #800000; ">""</span><br /><br /><br /><span style="color: #0000FF; ">if</span>&nbsp;<span style="color: #800080; ">__name__</span>&nbsp;==&nbsp;<span style="color: #800000; ">'</span><span style="color: #800000; ">__main__</span><span style="color: #800000; ">'</span>:<br />&nbsp;&nbsp;&nbsp;&nbsp;run_test(testA)<br />&nbsp;&nbsp;&nbsp;&nbsp;run_test(testB)<br />&nbsp; &nbsp;&nbsp;</div><img src ="http://www.cppblog.com/volant/aggbug/206602.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/volant/" target="_blank">小夜</a> 2014-04-16 12:01 <a href="http://www.cppblog.com/volant/archive/2014/04/16/206602.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>regex——正则表达式中使用方括号</title><link>http://www.cppblog.com/volant/archive/2010/04/12/112314.html</link><dc:creator>小夜</dc:creator><author>小夜</author><pubDate>Mon, 12 Apr 2010 05:14:00 GMT</pubDate><guid>http://www.cppblog.com/volant/archive/2010/04/12/112314.html</guid><wfw:comment>http://www.cppblog.com/volant/comments/112314.html</wfw:comment><comments>http://www.cppblog.com/volant/archive/2010/04/12/112314.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/volant/comments/commentRss/112314.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/volant/services/trackbacks/112314.html</trackback:ping><description><![CDATA[<p>工作中经常需要在正则表达式中使用方括号，比如匹配Linux系统命令行提示符&#8220;[root@localhost ~]# &#8221;。在python中，可以使用正则表达式&#8220;[\[][^\[\]]*[\]][#|$] &#8221;进行匹配，但在regex中此正则表达式无法正确匹配。<br>由于man手册中缺少对方括号转义的介绍，本文对regex中方括号的使用进行测试，测试程序如下：</p>
<div style="BORDER-BOTTOM: #cccccc 1px solid; BORDER-LEFT: #cccccc 1px solid; PADDING-BOTTOM: 4px; BACKGROUND-COLOR: #eeeeee; PADDING-LEFT: 4px; WIDTH: 98%; PADDING-RIGHT: 5px; FONT-SIZE: 13px; WORD-BREAK: break-all; BORDER-TOP: #cccccc 1px solid; BORDER-RIGHT: #cccccc 1px solid; PADDING-TOP: 4px"><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"><span style="COLOR: #000000">#include&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">stdio.h</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif">#include&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #0000ff">string</span><span style="COLOR: #000000">.h</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif">#include&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">sys</span><span style="COLOR: #000000">/</span><span style="COLOR: #000000">types.h</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif">#include&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">regex.h</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"></span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;main(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;argc,&nbsp;</span><span style="COLOR: #0000ff">char</span><span style="COLOR: #000000">**</span><span style="COLOR: #000000">&nbsp;argv)<br><img id=Codehighlighter1_115_1743_Open_Image onclick="this.style.display='none'; Codehighlighter1_115_1743_Open_Text.style.display='none'; Codehighlighter1_115_1743_Closed_Image.style.display='inline'; Codehighlighter1_115_1743_Closed_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif"><img style="DISPLAY: none" id=Codehighlighter1_115_1743_Closed_Image onclick="this.style.display='none'; Codehighlighter1_115_1743_Closed_Text.style.display='none'; Codehighlighter1_115_1743_Open_Image.style.display='inline'; Codehighlighter1_115_1743_Open_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif"></span><span style="BORDER-BOTTOM: #808080 1px solid; BORDER-LEFT: #808080 1px solid; BACKGROUND-COLOR: #ffffff; DISPLAY: none; BORDER-TOP: #808080 1px solid; BORDER-RIGHT: #808080 1px solid" id=Codehighlighter1_115_1743_Closed_Text><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_115_1743_Open_Text><span style="COLOR: #000000">{<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">char</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">&nbsp;pattern,&nbsp;</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">mstr;<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;x,&nbsp;z,&nbsp;lno&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">,&nbsp;cflags&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;REG_EXTENDED;<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">char</span><span style="COLOR: #000000">&nbsp;ebuf[</span><span style="COLOR: #000000">128</span><span style="COLOR: #000000">],&nbsp;lbuf[</span><span style="COLOR: #000000">256</span><span style="COLOR: #000000">],&nbsp;format[</span><span style="COLOR: #000000">32</span><span style="COLOR: #000000">];<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;regex_t&nbsp;reg;<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;regmatch_t&nbsp;pm[</span><span style="COLOR: #000000">10</span><span style="COLOR: #000000">];<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">const</span><span style="COLOR: #000000">&nbsp;size_t&nbsp;nmatch&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">10</span><span style="COLOR: #000000">;<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pattern&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;argv[</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">];<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;z&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;regcomp(</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">reg,&nbsp;pattern,&nbsp;cflags);<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(z&nbsp;</span><span style="COLOR: #000000">!=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">)<br><img id=Codehighlighter1_428_621_Open_Image onclick="this.style.display='none'; Codehighlighter1_428_621_Open_Text.style.display='none'; Codehighlighter1_428_621_Closed_Image.style.display='inline'; Codehighlighter1_428_621_Closed_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="DISPLAY: none" id=Codehighlighter1_428_621_Closed_Image onclick="this.style.display='none'; Codehighlighter1_428_621_Closed_Text.style.display='none'; Codehighlighter1_428_621_Open_Image.style.display='inline'; Codehighlighter1_428_621_Open_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="BORDER-BOTTOM: #808080 1px solid; BORDER-LEFT: #808080 1px solid; BACKGROUND-COLOR: #ffffff; DISPLAY: none; BORDER-TOP: #808080 1px solid; BORDER-RIGHT: #808080 1px solid" id=Codehighlighter1_428_621_Closed_Text><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_428_621_Open_Text><span style="COLOR: #000000">{<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;regerror(z,&nbsp;</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">reg,&nbsp;ebuf,&nbsp;</span><span style="COLOR: #0000ff">sizeof</span><span style="COLOR: #000000">(ebuf));<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fprintf(stderr,&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">%s:&nbsp;pattern&nbsp;'%s'&nbsp;\n</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,ebuf,&nbsp;pattern);<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;regfree(</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">reg);<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">while</span><span style="COLOR: #000000">(fgets(lbuf,&nbsp;</span><span style="COLOR: #0000ff">sizeof</span><span style="COLOR: #000000">(lbuf),&nbsp;stdin))<br><img id=Codehighlighter1_680_1699_Open_Image onclick="this.style.display='none'; Codehighlighter1_680_1699_Open_Text.style.display='none'; Codehighlighter1_680_1699_Closed_Image.style.display='inline'; Codehighlighter1_680_1699_Closed_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="DISPLAY: none" id=Codehighlighter1_680_1699_Closed_Image onclick="this.style.display='none'; Codehighlighter1_680_1699_Closed_Text.style.display='none'; Codehighlighter1_680_1699_Open_Image.style.display='inline'; Codehighlighter1_680_1699_Open_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="BORDER-BOTTOM: #808080 1px solid; BORDER-LEFT: #808080 1px solid; BACKGROUND-COLOR: #ffffff; DISPLAY: none; BORDER-TOP: #808080 1px solid; BORDER-RIGHT: #808080 1px solid" id=Codehighlighter1_680_1699_Closed_Text><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_680_1699_Open_Text><span style="COLOR: #000000">{<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">lno;<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;((z&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;strlen(lbuf))&nbsp;</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">&amp;&amp;</span><span style="COLOR: #000000">&nbsp;lbuf[z</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">]</span><span style="COLOR: #000000">==</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">\n</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">)&nbsp;lbuf[z&nbsp;</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">]&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;z&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;regexec(</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">reg,&nbsp;lbuf,&nbsp;nmatch,&nbsp;pm,&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">);<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(z&nbsp;</span><span style="COLOR: #000000">==</span><span style="COLOR: #000000">&nbsp;REG_NOMATCH)<br><img id=Codehighlighter1_898_998_Open_Image onclick="this.style.display='none'; Codehighlighter1_898_998_Open_Text.style.display='none'; Codehighlighter1_898_998_Closed_Image.style.display='inline'; Codehighlighter1_898_998_Closed_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="DISPLAY: none" id=Codehighlighter1_898_998_Closed_Image onclick="this.style.display='none'; Codehighlighter1_898_998_Closed_Text.style.display='none'; Codehighlighter1_898_998_Open_Image.style.display='inline'; Codehighlighter1_898_998_Open_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="BORDER-BOTTOM: #808080 1px solid; BORDER-LEFT: #808080 1px solid; BACKGROUND-COLOR: #ffffff; DISPLAY: none; BORDER-TOP: #808080 1px solid; BORDER-RIGHT: #808080 1px solid" id=Codehighlighter1_898_998_Closed_Text><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_898_998_Open_Text><span style="COLOR: #000000">{<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">not&nbsp;match\n</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">continue</span><span style="COLOR: #000000">;<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">else</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(z&nbsp;</span><span style="COLOR: #000000">!=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">)<br><img id=Codehighlighter1_1049_1280_Open_Image onclick="this.style.display='none'; Codehighlighter1_1049_1280_Open_Text.style.display='none'; Codehighlighter1_1049_1280_Closed_Image.style.display='inline'; Codehighlighter1_1049_1280_Closed_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="DISPLAY: none" id=Codehighlighter1_1049_1280_Closed_Image onclick="this.style.display='none'; Codehighlighter1_1049_1280_Closed_Text.style.display='none'; Codehighlighter1_1049_1280_Open_Image.style.display='inline'; Codehighlighter1_1049_1280_Open_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="BORDER-BOTTOM: #808080 1px solid; BORDER-LEFT: #808080 1px solid; BACKGROUND-COLOR: #ffffff; DISPLAY: none; BORDER-TOP: #808080 1px solid; BORDER-RIGHT: #808080 1px solid" id=Codehighlighter1_1049_1280_Closed_Text><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_1049_1280_Open_Text><span style="COLOR: #000000">{<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;regerror(z,&nbsp;</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">reg,&nbsp;ebuf,&nbsp;</span><span style="COLOR: #0000ff">sizeof</span><span style="COLOR: #000000">(ebuf));<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fprintf(stderr,&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">%s:&nbsp;regcom('%s')\n</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&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;ebuf,&nbsp;lbuf);<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">2</span><span style="COLOR: #000000">;<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(pm[</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">].rm_so</span><span style="COLOR: #000000">!=-</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">)<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">%04d:&nbsp;%s\n</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,&nbsp;lno,&nbsp;lbuf);<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">&nbsp;(x&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;&nbsp;x&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">&nbsp;nmatch&nbsp;</span><span style="COLOR: #000000">&amp;&amp;</span><span style="COLOR: #000000">&nbsp;pm[x].rm_so&nbsp;</span><span style="COLOR: #000000">!=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;&nbsp;</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">&nbsp;x)<br><img id=Codehighlighter1_1461_1656_Open_Image onclick="this.style.display='none'; Codehighlighter1_1461_1656_Open_Text.style.display='none'; Codehighlighter1_1461_1656_Closed_Image.style.display='inline'; Codehighlighter1_1461_1656_Closed_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="DISPLAY: none" id=Codehighlighter1_1461_1656_Closed_Image onclick="this.style.display='none'; Codehighlighter1_1461_1656_Closed_Text.style.display='none'; Codehighlighter1_1461_1656_Open_Image.style.display='inline'; Codehighlighter1_1461_1656_Open_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="BORDER-BOTTOM: #808080 1px solid; BORDER-LEFT: #808080 1px solid; BACKGROUND-COLOR: #ffffff; DISPLAY: none; BORDER-TOP: #808080 1px solid; BORDER-RIGHT: #808080 1px solid" id=Codehighlighter1_1461_1656_Closed_Text><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_1461_1656_Open_Text><span style="COLOR: #000000">{<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mstr&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;strndup(lbuf&nbsp;</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">&nbsp;pm[x].rm_so,&nbsp;pm[x].rm_eo</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">pm[x].rm_so);<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&nbsp;$%d:&nbsp;%s\n</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,&nbsp;x,&nbsp;mstr);<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;free(mstr);<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fflush(stdout);<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;regfree(</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">reg);<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif">}</span></span></div>
下面是对正则表达式&#8220;[\[][^\[\]]*[\]][#|$] &#8221; 的测试，显然不符合要求。
<div style="BORDER-BOTTOM: #cccccc 1px solid; BORDER-LEFT: #cccccc 1px solid; PADDING-BOTTOM: 4px; BACKGROUND-COLOR: #eeeeee; PADDING-LEFT: 4px; WIDTH: 98%; PADDING-RIGHT: 5px; FONT-SIZE: 13px; WORD-BREAK: break-all; BORDER-TOP: #cccccc 1px solid; BORDER-RIGHT: #cccccc 1px solid; PADDING-TOP: 4px"><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"><span style="COLOR: #000000">.</span><span style="COLOR: #000000">/</span><span style="COLOR: #000000">testreg&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">[\[][^\[\]]*[\]][#|$]&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&nbsp;&nbsp;<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif">[root@localhost&nbsp;bin]#&nbsp;<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif">not&nbsp;match<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif">[a\]#&nbsp;<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"></span><span style="COLOR: #000000">0005</span><span style="COLOR: #000000">:&nbsp;[a\]#&nbsp;<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif">&nbsp;$</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">:&nbsp;[a\]#&nbsp;</span></div>
从简单的开始先测试左括号&#8220;[&#8221;的匹配：
<div style="BORDER-BOTTOM: #cccccc 1px solid; BORDER-LEFT: #cccccc 1px solid; PADDING-BOTTOM: 4px; BACKGROUND-COLOR: #eeeeee; PADDING-LEFT: 4px; WIDTH: 98%; PADDING-RIGHT: 5px; FONT-SIZE: 13px; WORD-BREAK: break-all; BORDER-TOP: #cccccc 1px solid; BORDER-RIGHT: #cccccc 1px solid; PADDING-TOP: 4px"><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"><span style="COLOR: #000000">.</span><span style="COLOR: #000000">/</span><span style="COLOR: #000000">testreg&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">[\[]+</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif">a<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif">not&nbsp;match<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif">[<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"></span><span style="COLOR: #000000">0002</span><span style="COLOR: #000000">:&nbsp;[<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif">&nbsp;$</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">:&nbsp;[<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif">[root@localhost&nbsp;bin]#&nbsp;<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"></span><span style="COLOR: #000000">0003</span><span style="COLOR: #000000">:&nbsp;[root@localhost&nbsp;bin]#&nbsp;<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif">&nbsp;$</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">:&nbsp;[</span></div>
再测试右括号&#8220;]&#8221;：
<div style="BORDER-BOTTOM: #cccccc 1px solid; BORDER-LEFT: #cccccc 1px solid; PADDING-BOTTOM: 4px; BACKGROUND-COLOR: #eeeeee; PADDING-LEFT: 4px; WIDTH: 98%; PADDING-RIGHT: 5px; FONT-SIZE: 13px; WORD-BREAK: break-all; BORDER-TOP: #cccccc 1px solid; BORDER-RIGHT: #cccccc 1px solid; PADDING-TOP: 4px"><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"><span style="COLOR: #000000">.</span><span style="COLOR: #000000">/</span><span style="COLOR: #000000">testreg&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">[\]]+</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif">]<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif">not&nbsp;match<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif">\]&nbsp;&nbsp;<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"></span><span style="COLOR: #000000">0002</span><span style="COLOR: #000000">:&nbsp;\]<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif">&nbsp;$</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">:&nbsp;\]<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"></span><span style="COLOR: #000000">-----------------</span><span style="COLOR: #000000"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif">.</span><span style="COLOR: #000000">/</span><span style="COLOR: #000000">testreg&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">[]]+</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif">]]<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"></span><span style="COLOR: #000000">0001</span><span style="COLOR: #000000">:&nbsp;]]<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif">&nbsp;$</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">:&nbsp;]]</span></div>
两个简单的正则表达式可以看出：regex中左方括号需要转义，右方括号不需要转义。<br>下面我们再来测试匹配一下任意非方括号字符：
<div style="BORDER-BOTTOM: #cccccc 1px solid; BORDER-LEFT: #cccccc 1px solid; PADDING-BOTTOM: 4px; BACKGROUND-COLOR: #eeeeee; PADDING-LEFT: 4px; WIDTH: 98%; PADDING-RIGHT: 5px; FONT-SIZE: 13px; WORD-BREAK: break-all; BORDER-TOP: #cccccc 1px solid; BORDER-RIGHT: #cccccc 1px solid; PADDING-TOP: 4px"><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"><span style="COLOR: #000000">.</span><span style="COLOR: #000000">/</span><span style="COLOR: #000000">testreg&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">[^\[]]+</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">对[转义，不对]转义</span><span style="COLOR: #008000"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"></span><span style="COLOR: #000000">[abc]<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"></span><span style="COLOR: #000000">0001</span><span style="COLOR: #000000">:&nbsp;[abc]<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif">&nbsp;$</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">:&nbsp;c]<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif">.</span><span style="COLOR: #000000">/</span><span style="COLOR: #000000">testreg&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">[^\[\]]+</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">对[和]转义</span><span style="COLOR: #008000"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"></span><span style="COLOR: #000000">[abc]<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"></span><span style="COLOR: #000000">0001</span><span style="COLOR: #000000">:&nbsp;[abc]<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif">&nbsp;$</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">:&nbsp;c]<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif">.</span><span style="COLOR: #000000">/</span><span style="COLOR: #000000">testreg&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">[^]\[]+</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">对[转义，不对]转义，且把]放在^后使]不与前面的[匹配</span><span style="COLOR: #008000"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"></span><span style="COLOR: #000000">[abc]<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"></span><span style="COLOR: #000000">0001</span><span style="COLOR: #000000">:&nbsp;[abc]<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif">&nbsp;$</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">:&nbsp;abc</span></div>
通过上面测试可以得出正确的正则表达式来匹配Linux命令行提示符——&#8220;[\[][^]\[]*[]][#$] &#8221;或&#8220;\[[^]\[]*][#$] &#8221;。
<img src ="http://www.cppblog.com/volant/aggbug/112314.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/volant/" target="_blank">小夜</a> 2010-04-12 13:14 <a href="http://www.cppblog.com/volant/archive/2010/04/12/112314.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Python内置函数--dir</title><link>http://www.cppblog.com/volant/archive/2009/10/16/98773.html</link><dc:creator>小夜</dc:creator><author>小夜</author><pubDate>Fri, 16 Oct 2009 12:32:00 GMT</pubDate><guid>http://www.cppblog.com/volant/archive/2009/10/16/98773.html</guid><wfw:comment>http://www.cppblog.com/volant/comments/98773.html</wfw:comment><comments>http://www.cppblog.com/volant/archive/2009/10/16/98773.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/volant/comments/commentRss/98773.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/volant/services/trackbacks/98773.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 1.命令介绍最近学习并使用了一个python的内置函数dir，首先help一下：&gt;&gt;&gt;&nbsp;help(dir)Help&nbsp;on&nbsp;built-in&nbsp;function&nbsp;dir&nbsp;in&nbsp;module&nbsp;__builtin__:dir()&nbsp;&nbsp;&nbsp;&nbsp;dir([object])...&nbsp;&nbsp;<a href='http://www.cppblog.com/volant/archive/2009/10/16/98773.html'>阅读全文</a><img src ="http://www.cppblog.com/volant/aggbug/98773.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/volant/" target="_blank">小夜</a> 2009-10-16 20:32 <a href="http://www.cppblog.com/volant/archive/2009/10/16/98773.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>玩了玩python 3.1，不错</title><link>http://www.cppblog.com/volant/archive/2009/09/23/97042.html</link><dc:creator>小夜</dc:creator><author>小夜</author><pubDate>Wed, 23 Sep 2009 11:58:00 GMT</pubDate><guid>http://www.cppblog.com/volant/archive/2009/09/23/97042.html</guid><wfw:comment>http://www.cppblog.com/volant/comments/97042.html</wfw:comment><comments>http://www.cppblog.com/volant/archive/2009/09/23/97042.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/volant/comments/commentRss/97042.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/volant/services/trackbacks/97042.html</trackback:ping><description><![CDATA[就是很多库和工具还不支持，等库和工具都正常了，就转用它了。
<img src ="http://www.cppblog.com/volant/aggbug/97042.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/volant/" target="_blank">小夜</a> 2009-09-23 19:58 <a href="http://www.cppblog.com/volant/archive/2009/09/23/97042.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Windows文件关联问题</title><link>http://www.cppblog.com/volant/archive/2009/09/01/94991.html</link><dc:creator>小夜</dc:creator><author>小夜</author><pubDate>Tue, 01 Sep 2009 07:56:00 GMT</pubDate><guid>http://www.cppblog.com/volant/archive/2009/09/01/94991.html</guid><wfw:comment>http://www.cppblog.com/volant/comments/94991.html</wfw:comment><comments>http://www.cppblog.com/volant/archive/2009/09/01/94991.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/volant/comments/commentRss/94991.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/volant/services/trackbacks/94991.html</trackback:ping><description><![CDATA[<p>&nbsp;起因很简单，不小心为一个文件关联了默认打开方式，然后就eclipse中一打开该文件就出来个记事本，打开的时候只好使用右键，选择打开方式，颇为繁琐。</p><p>于是，百度之。看到的第一种方法是直接修改注册表，删除扩展名对应的注册项，结果以失败告终，用eclipse打开文件依然出来记事本，可能是修改的地方不对或不全。</p><p>找到第二种方法，终于解决问题，记录如下：打开Explorer，点击菜单&#8220;工具 | 文件夹选项&#8221;，点击&#8220;文件类型&#8221;，找到对应的扩展名后删除即可。</p><p>对于我遇到的这个问题，还可以通过修改eclipse解决：点击菜单&#8220;window | preferences&#8221;，进入&#8220;General | Editors | File Associations&#8221;，添加一个扩展名，然后设置一个默认打开方式即可。</p><img src ="http://www.cppblog.com/volant/aggbug/94991.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/volant/" target="_blank">小夜</a> 2009-09-01 15:56 <a href="http://www.cppblog.com/volant/archive/2009/09/01/94991.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>面试中的趣味</title><link>http://www.cppblog.com/volant/archive/2009/06/23/88347.html</link><dc:creator>小夜</dc:creator><author>小夜</author><pubDate>Tue, 23 Jun 2009 02:20:00 GMT</pubDate><guid>http://www.cppblog.com/volant/archive/2009/06/23/88347.html</guid><wfw:comment>http://www.cppblog.com/volant/comments/88347.html</wfw:comment><comments>http://www.cppblog.com/volant/archive/2009/06/23/88347.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/volant/comments/commentRss/88347.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/volant/services/trackbacks/88347.html</trackback:ping><description><![CDATA[<h2><span style="font-family:黑体;mso-ascii-font-family:Arial">面试中的趣味</span></h2>

<p class="MsoNormal" style="text-indent:21.0pt"><span style="font-family:宋体;
mso-ascii-font-family:&quot;Times New Roman&quot;;mso-hansi-font-family:&quot;Times New Roman&quot;">林子大了，什么鸟都有。</span></p>

<p class="MsoNormal" style="text-indent:21.0pt"><span style="font-family:宋体;
mso-ascii-font-family:&quot;Times New Roman&quot;;mso-hansi-font-family:&quot;Times New Roman&quot;">面试是一件比较有意思的工作，能够接触形形色色的人。</span></p>

<h3><span style="font-family:宋体;mso-ascii-font-family:&quot;Times New Roman&quot;;
mso-hansi-font-family:&quot;Times New Roman&quot;">嚣张的面试者</span></h3>

<p class="MsoNormal" style="text-indent:21.0pt"><span style="font-family:宋体;
mso-ascii-font-family:&quot;Times New Roman&quot;;mso-hansi-font-family:&quot;Times New Roman&quot;">最近面试了一个比较嚣张的人，说是比较喜欢有挑战的工作，离职主要是由于工作没有挑战性。看其笔试，并不是特别显眼。</span></p>

<p class="MsoNormal" style="text-indent:21.0pt"><span style="font-family:宋体;
mso-ascii-font-family:&quot;Times New Roman&quot;;mso-hansi-font-family:&quot;Times New Roman&quot;">他：在项目中我是让测试者比较头疼的人，本来安排</span><span lang="EN-US">10</span><span style="font-family:宋体;mso-ascii-font-family:&quot;Times New Roman&quot;;
mso-hansi-font-family:&quot;Times New Roman&quot;">天干完的活，</span><span lang="EN-US">3</span><span style="font-family:宋体;mso-ascii-font-family:&quot;Times New Roman&quot;;mso-hansi-font-family:
&quot;Times New Roman&quot;">天就干完了，我就找他们测试，测试人员比较烦，总得提前进行测试工作。</span></p>

<p class="MsoNormal" style="text-indent:21.0pt"><span style="font-family:宋体;
mso-ascii-font-family:&quot;Times New Roman&quot;;mso-hansi-font-family:&quot;Times New Roman&quot;">我：一个项目总有一个项目的进度安排，测试和开发都如此。在多余的时间里，有没有考虑做些其他的事情？</span></p>

<p class="MsoNormal" style="text-indent:21.0pt"><span style="font-family:宋体;
mso-ascii-font-family:&quot;Times New Roman&quot;;mso-hansi-font-family:&quot;Times New Roman&quot;">他：我都天天看</span><span lang="EN-US">PDF</span><span style="font-family:宋体;mso-ascii-font-family:&quot;Times New Roman&quot;;
mso-hansi-font-family:&quot;Times New Roman&quot;">了，还能干什么？</span></p>

<p class="MsoNormal" style="text-indent:21.0pt"><span style="font-family:宋体;
mso-ascii-font-family:&quot;Times New Roman&quot;;mso-hansi-font-family:&quot;Times New Roman&quot;">我：没有考虑做一些代码质量优化类似的工作？</span></p>

<p class="MsoNormal" style="text-indent:21.0pt"><span style="font-family:宋体;
mso-ascii-font-family:&quot;Times New Roman&quot;;mso-hansi-font-family:&quot;Times New Roman&quot;">他：&#8230;&#8230;</span></p>

<p class="MsoNormal" style="text-indent:21.0pt"><span style="font-family:宋体;
mso-ascii-font-family:&quot;Times New Roman&quot;;mso-hansi-font-family:&quot;Times New Roman&quot;">我：你感觉你这段代码写的怎么样？（我指着他笔试的代码）</span></p>

<p class="MsoNormal" style="text-indent:21.0pt"><span style="font-family:宋体;
mso-ascii-font-family:&quot;Times New Roman&quot;;mso-hansi-font-family:&quot;Times New Roman&quot;">他：因为是笔试，我考虑的并不多，肯定能正确的运行。</span></p>

<p class="MsoNormal" style="text-indent:21.0pt"><span style="font-family:宋体;
mso-ascii-font-family:&quot;Times New Roman&quot;;mso-hansi-font-family:&quot;Times New Roman&quot;">我：能正确的运行吗？（我指着他代码中的一处）</span></p>

<p class="MsoNormal" style="text-indent:21.0pt"><span style="font-family:宋体;
mso-ascii-font-family:&quot;Times New Roman&quot;;mso-hansi-font-family:&quot;Times New Roman&quot;">他：我忘记了（汗一个，</span><span lang="EN-US">for</span><span style="font-family:宋体;mso-ascii-font-family:&quot;Times New Roman&quot;;
mso-hansi-font-family:&quot;Times New Roman&quot;">循环连初始化都能忘记），不过在真正开发的时候不会这样。</span></p>

<p class="MsoNormal" style="text-indent:21.0pt"><span style="font-family:宋体;
mso-ascii-font-family:&quot;Times New Roman&quot;;mso-hansi-font-family:&quot;Times New Roman&quot;">我：就算能正确运行（还有些别的错误，我没有和他纠缠了），那你感觉这段代码，有哪些需要优化的地方？</span></p>

<p class="MsoNormal" style="text-indent:21.0pt"><span style="font-family:宋体;
mso-ascii-font-family:&quot;Times New Roman&quot;;mso-hansi-font-family:&quot;Times New Roman&quot;">他：&#8230;&#8230;</span></p>

<p class="MsoNormal" style="text-indent:21.0pt"><span style="font-family:宋体;
mso-ascii-font-family:&quot;Times New Roman&quot;;mso-hansi-font-family:&quot;Times New Roman&quot;">面试完后，同事说好嚣张的面试者，说其嚣张主要是神态和语气。哎，第一次发现面试人员责问面试官的，更何况是被一个并不怎么样的人。</span></p>

<h3><span style="font-family:宋体;mso-ascii-font-family:&quot;Times New Roman&quot;;
mso-hansi-font-family:&quot;Times New Roman&quot;">面试时请先准备一下</span></h3>

<p class="MsoNormal" style="text-indent:21.0pt"><span style="font-family:宋体;
mso-ascii-font-family:&quot;Times New Roman&quot;;mso-hansi-font-family:&quot;Times New Roman&quot;">有一个面试者，学历挺高，成绩也不错，毕业也不是一年两年了，说是想转做</span><span lang="EN-US">Linux C</span><span style="font-family:宋体;mso-ascii-font-family:
&quot;Times New Roman&quot;;mso-hansi-font-family:&quot;Times New Roman&quot;">开发，笔试题做的不是很好。</span></p>

<p class="MsoNormal" style="text-indent:21.0pt"><span style="font-family:宋体;
mso-ascii-font-family:&quot;Times New Roman&quot;;mso-hansi-font-family:&quot;Times New Roman&quot;">他说</span><span lang="EN-US">C</span><span style="font-family:宋体;mso-ascii-font-family:&quot;Times New Roman&quot;;
mso-hansi-font-family:&quot;Times New Roman&quot;">语言是一门比较简单的语言，能够很快时间就能掌握。</span></p>

<p class="MsoNormal" style="text-indent:21.0pt"><span style="font-family:宋体;
mso-ascii-font-family:&quot;Times New Roman&quot;;mso-hansi-font-family:&quot;Times New Roman&quot;">对于他的解释，我没有怀疑，也没有过多的纠缠。毕竟，</span><span lang="EN-US">C</span><span style="font-family:宋体;mso-ascii-font-family:&quot;Times New Roman&quot;;
mso-hansi-font-family:&quot;Times New Roman&quot;">的简洁是众所周知的。但是，既然说简单，能够很容易的掌握，为何不先准备，先掌握呢？</span></p>

<p class="MsoNormal" style="text-indent:21.0pt"><span style="font-family:宋体;
mso-ascii-font-family:&quot;Times New Roman&quot;;mso-hansi-font-family:&quot;Times New Roman&quot;">机会永远把握在有准备的人手中。与其说，不如进一步去做，掌握主动是面试不败的真理。面试者看的不只是能力，还有态度。</span></p>

<h3><span style="font-family:宋体;mso-ascii-font-family:&quot;Times New Roman&quot;;
mso-hansi-font-family:&quot;Times New Roman&quot;">漂亮的代码</span></h3>

<p class="MsoNormal" style="text-indent:21.0pt"><span style="font-family:宋体;
mso-ascii-font-family:&quot;Times New Roman&quot;;mso-hansi-font-family:&quot;Times New Roman&quot;">&#8220;什么是漂亮的代码？&#8221;</span></p>

<p class="MsoNormal" style="text-indent:21.0pt"><span style="font-family:宋体;
mso-ascii-font-family:&quot;Times New Roman&quot;;mso-hansi-font-family:&quot;Times New Roman&quot;">前一段时间，面试一个程序员的时候，他的目标是写漂亮的代码，我便问道这样一个问题。对方的回答是&#8220;看起来比较舒服的代码&#8221;，我没有细究。</span></p>

<p class="MsoNormal" style="text-indent:21.0pt"><span style="font-family:宋体;
mso-ascii-font-family:&quot;Times New Roman&quot;;mso-hansi-font-family:&quot;Times New Roman&quot;">做软件开发工作也有四年的时间了，虽然也做产品分析等工作，但大部分时间都是一线的设计和编码工作。编写优秀的代码，也算是一个个人追求了。代码常用的修饰语很多，漂亮的代码、高效的代码、稳定的代码等从多个方面对代码进行形容。那什么样的代码才是优秀卓越的代码，这是一个我和面试者都要思考的问题。</span></p>
<img src ="http://www.cppblog.com/volant/aggbug/88347.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/volant/" target="_blank">小夜</a> 2009-06-23 10:20 <a href="http://www.cppblog.com/volant/archive/2009/06/23/88347.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[导入]Linux的loadavg</title><link>http://www.cppblog.com/volant/archive/2009/06/18/87975.html</link><dc:creator>小夜</dc:creator><author>小夜</author><pubDate>Thu, 18 Jun 2009 06:40:00 GMT</pubDate><guid>http://www.cppblog.com/volant/archive/2009/06/18/87975.html</guid><wfw:comment>http://www.cppblog.com/volant/comments/87975.html</wfw:comment><comments>http://www.cppblog.com/volant/archive/2009/06/18/87975.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/volant/comments/commentRss/87975.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/volant/services/trackbacks/87975.html</trackback:ping><description><![CDATA[
查看linux系统性能的时候，会涉及到一个参数loadavg。那loadavg确切的含义是什么呢？<img src="http://blog.csdn.net/volant_hoo/aggbug/4169030.aspx" width="1" height="1"><br>文章来源:<a href="http://blog.csdn.net/volant_hoo/archive/2009/05/11/4169030.aspx">http://blog.csdn.net/volant_hoo/archive/2009/05/11/4169030.aspx</a><img src ="http://www.cppblog.com/volant/aggbug/87975.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/volant/" target="_blank">小夜</a> 2009-06-18 14:40 <a href="http://www.cppblog.com/volant/archive/2009/06/18/87975.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[导入]date和stat</title><link>http://www.cppblog.com/volant/archive/2009/06/18/87974.html</link><dc:creator>小夜</dc:creator><author>小夜</author><pubDate>Thu, 18 Jun 2009 06:40:00 GMT</pubDate><guid>http://www.cppblog.com/volant/archive/2009/06/18/87974.html</guid><wfw:comment>http://www.cppblog.com/volant/comments/87974.html</wfw:comment><comments>http://www.cppblog.com/volant/archive/2009/06/18/87974.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/volant/comments/commentRss/87974.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/volant/services/trackbacks/87974.html</trackback:ping><description><![CDATA[
linux系统中的两个命令，今天写了个脚本，比较当前时间和文件中最后修改时间，用到了两个命令，mark一下。
两个命令中都有一系列format选项，date用的较多，使用&#8220;+&#8221;接format选项即可，在脚本中使用date +%s获取当前时间（1970年到现在的秒数）。stat命令用的较少，man了一下，又baidu了一番，最后细看了有看，试了又试，才发现stat有个开关&#8220;-c  --format=FORMAT   use the specified FORMAT instead of the default&#8221;。脚本中使用该开关得到文件的最后修改时间，命令为&#8220;stat -c %Y ${filename}&#8221;。
在linux这种开放的系统中，命令行参数是有很多风格的，使用时要抛开惯性，细看手册。
<img src="http://blog.csdn.net/volant_hoo/aggbug/4169102.aspx" width="1" height="1"><br>文章来源:<a href="http://blog.csdn.net/volant_hoo/archive/2009/05/11/4169102.aspx">http://blog.csdn.net/volant_hoo/archive/2009/05/11/4169102.aspx</a><img src ="http://www.cppblog.com/volant/aggbug/87974.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/volant/" target="_blank">小夜</a> 2009-06-18 14:40 <a href="http://www.cppblog.com/volant/archive/2009/06/18/87974.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[导入]标准C函数：strncpy</title><link>http://www.cppblog.com/volant/archive/2009/06/18/87973.html</link><dc:creator>小夜</dc:creator><author>小夜</author><pubDate>Thu, 18 Jun 2009 06:38:00 GMT</pubDate><guid>http://www.cppblog.com/volant/archive/2009/06/18/87973.html</guid><wfw:comment>http://www.cppblog.com/volant/comments/87973.html</wfw:comment><comments>http://www.cppblog.com/volant/archive/2009/06/18/87973.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/volant/comments/commentRss/87973.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/volant/services/trackbacks/87973.html</trackback:ping><description><![CDATA[
前两天看libsmi源代码，里面对strncpy函数进行了封装，感觉有些缺陷，虽然内部使用的函数，满足要求就可以了，但想了想发现自己它了解的也不是很多。
关于strncpy，《C程序设计语言》中是这样介绍的：&#8220;char *strncpy(s, ct, n)，strncpy用于把字符串ct中最多n个字符拷贝到字符串s中，并返回s。如果ct中少于n个字符，那么就用&#8217;\0&#8217;补充。&#8221;
写了一个简单的程序对strncpy进行测试。<img src="http://blog.csdn.net/volant_hoo/aggbug/4167919.aspx" width="1" height="1"><br>文章来源:<a href="http://blog.csdn.net/volant_hoo/archive/2009/05/11/4167919.aspx">http://blog.csdn.net/volant_hoo/archive/2009/05/11/4167919.aspx</a><img src ="http://www.cppblog.com/volant/aggbug/87973.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/volant/" target="_blank">小夜</a> 2009-06-18 14:38 <a href="http://www.cppblog.com/volant/archive/2009/06/18/87973.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[导入]GCC C语言扩展（1）</title><link>http://www.cppblog.com/volant/archive/2009/06/18/87972.html</link><dc:creator>小夜</dc:creator><author>小夜</author><pubDate>Thu, 18 Jun 2009 06:38:00 GMT</pubDate><guid>http://www.cppblog.com/volant/archive/2009/06/18/87972.html</guid><wfw:comment>http://www.cppblog.com/volant/comments/87972.html</wfw:comment><comments>http://www.cppblog.com/volant/archive/2009/06/18/87972.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/volant/comments/commentRss/87972.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/volant/services/trackbacks/87972.html</trackback:ping><description><![CDATA[
看开源的代码中发现了一些静态函数声明后有如下内容：__attribute__ ((constructor))这是gcc的扩展属性。<img src="http://blog.csdn.net/volant_hoo/aggbug/4169081.aspx" width="1" height="1"><br>文章来源:<a href="http://blog.csdn.net/volant_hoo/archive/2009/05/11/4169081.aspx">http://blog.csdn.net/volant_hoo/archive/2009/05/11/4169081.aspx</a><img src ="http://www.cppblog.com/volant/aggbug/87972.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/volant/" target="_blank">小夜</a> 2009-06-18 14:38 <a href="http://www.cppblog.com/volant/archive/2009/06/18/87972.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>