﻿<?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++,网络......-随笔分类-Linux开发</title><link>http://www.cppblog.com/volant/category/8097.html</link><description /><language>zh-cn</language><lastBuildDate>Wed, 14 Apr 2010 03:08:56 GMT</lastBuildDate><pubDate>Wed, 14 Apr 2010 03:08:56 GMT</pubDate><ttl>60</ttl><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>[导入]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>[导入]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>[导入]共享内存</title><link>http://www.cppblog.com/volant/archive/2009/06/18/87971.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/87971.html</guid><wfw:comment>http://www.cppblog.com/volant/comments/87971.html</wfw:comment><comments>http://www.cppblog.com/volant/archive/2009/06/18/87971.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/volant/comments/commentRss/87971.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/volant/services/trackbacks/87971.html</trackback:ping><description><![CDATA[
进程间通信知识了解不少，今天第一次正式使用，就出问题了。
看看共享内存的原理，操作系统把一块公共的内存区域，映射到进程内存空间中，但映射的内存地址并不能保证映射后的地址一致性（其实一致的可能性很小，基本没有成功过），而此处array执行的地址为创建共享内存进程中正确的数组地址，在新的进程中就不对了。
因此在共享内存中，需要慎重使用指针变量。对于本文中的问题修改很简单，删除int *array，每次使用结构的地址跳过这些额外信息即可，可通过下面的宏函数得到数据域的指针。
<img src="http://blog.csdn.net/volant_hoo/aggbug/4169093.aspx" width="1" height="1"><br>文章来源:<a href="http://blog.csdn.net/volant_hoo/archive/2009/05/11/4169093.aspx">http://blog.csdn.net/volant_hoo/archive/2009/05/11/4169093.aspx</a><img src ="http://www.cppblog.com/volant/aggbug/87971.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/87971.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>