<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>客家文化,客家人在浙江</title>
	<atom:link href="http://cnhup.net/feed" rel="self" type="application/rss+xml" />
	<link>http://cnhup.net</link>
	<description>客家记录,IT技术随笔</description>
	<lastBuildDate>Fri, 29 Jan 2010 08:32:49 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>BCB6自带的正则表达式功能</title>
		<link>http://cnhup.net/133</link>
		<comments>http://cnhup.net/133#comments</comments>
		<pubDate>Fri, 29 Jan 2010 08:32:49 +0000</pubDate>
		<dc:creator>hakka</dc:creator>
				<category><![CDATA[技术随笔]]></category>

		<guid isPermaLink="false">http://cnhup.net/?p=133</guid>
		<description><![CDATA[对于C++下的正则表达式，我想用得比较多的应该就是Boost里的regex了。自从BCB2009自带了Boost1.35以后，这个regex也自然进入了BCB自带的功能行列。
对于还没用上BCB2009的人来说也不用为了一个正则表达式功能急着找boost的安装方法，其实BCB6早已经帮我们准备好了：TRegexp和pcre库。不过当年Borland也太“谦虚”了点，竟然没把这么重要的功能写进帮助？！！
先看看轻量级的TRegexp

说它是轻量级是因为它没有完整支持正则表达式，功能也很单一，只有一个find。看下面代码演示：

?View Code C&#160;
#include &#60;stdio.h&#62;
#include &#60;stdlib.h&#62;
#include &#60;regexp.h&#62;
&#160;
int main&#40;int argc, char* argv&#91;&#93;&#41;
&#123;
    char szReg&#91;&#93;=&#34;[0-9]+&#34;;             // 正则表达式，表示一个或多个'0'到'9'的字符串
    char szStr&#91;&#93;=&#34;a123b03ad94fg45&#34;;    // 待匹配的字符串
&#160;
    printf&#40;&#34;Regex: %s\n&#34;,szReg&#41;;
    printf&#40;&#34;Str: %s\n&#34;,szStr&#41;;
    printf&#40;&#34;Result: \n&#34;&#41;;
  [...]]]></description>
			<content:encoded><![CDATA[<p>对于C++下的正则表达式，我想用得比较多的应该就是Boost里的regex了。自从BCB2009自带了Boost1.35以后，这个regex也自然进入了BCB自带的功能行列。</p>
<p>对于还没用上BCB2009的人来说也不用为了一个正则表达式功能急着找boost的安装方法，其实BCB6早已经帮我们准备好了：TRegexp和pcre库。不过当年Borland也太“谦虚”了点，竟然没把这么重要的功能写进帮助？！！</p>
<p>先看看轻量级的TRegexp<br />
<span id="more-133"></span><br />
说它是轻量级是因为它没有完整支持正则表达式，功能也很单一，只有一个find。看下面代码演示：</p>

<div class="wp_codebox_msgheader"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p133code3'); return false;">View Code</a> C</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p1333"><td class="code" id="p133code3"><pre class="c" style="font-family:monospace;">&nbsp;
<span style="color: #339933;">#include &lt;stdio.h&gt;</span>
<span style="color: #339933;">#include &lt;stdlib.h&gt;</span>
<span style="color: #339933;">#include &lt;regexp.h&gt;</span>
&nbsp;
<span style="color: #993333;">int</span> main<span style="color: #009900;">&#40;</span><span style="color: #993333;">int</span> argc<span style="color: #339933;">,</span> <span style="color: #993333;">char</span><span style="color: #339933;">*</span> argv<span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
    <span style="color: #993333;">char</span> szReg<span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">=</span><span style="color: #ff0000;">&quot;[0-9]+&quot;</span><span style="color: #339933;">;</span>             <span style="color: #666666; font-style: italic;">// 正则表达式，表示一个或多个'0'到'9'的字符串</span>
    <span style="color: #993333;">char</span> szStr<span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">=</span><span style="color: #ff0000;">&quot;a123b03ad94fg45&quot;</span><span style="color: #339933;">;</span>    <span style="color: #666666; font-style: italic;">// 待匹配的字符串</span>
&nbsp;
    <a href="http://www.opengroup.org/onlinepubs/009695399/functions/printf.html"><span style="color: #000066;">printf</span></a><span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;Regex: %s<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #339933;">,</span>szReg<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <a href="http://www.opengroup.org/onlinepubs/009695399/functions/printf.html"><span style="color: #000066;">printf</span></a><span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;Str: %s<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #339933;">,</span>szStr<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <a href="http://www.opengroup.org/onlinepubs/009695399/functions/printf.html"><span style="color: #000066;">printf</span></a><span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;Result: <span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    TRegexp regex<span style="color: #009900;">&#40;</span>szReg<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #b1b100;">for</span><span style="color: #009900;">&#40;</span>size_t len<span style="color: #339933;">=</span>0<span style="color: #339933;">,</span> nPos <span style="color: #339933;">=</span> regex.<span style="color: #202020;">find</span><span style="color: #009900;">&#40;</span>szStr<span style="color: #339933;">,&amp;</span>len<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>   <span style="color: #666666; font-style: italic;">// 用find查找匹配的字符串。nPos返回子串位置[size_t(-1)表示没找到匹配的字符串]，len返回子串长度</span>
        nPos<span style="color: #339933;">!=</span>size_t<span style="color: #009900;">&#40;</span><span style="color: #339933;">-</span>1<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        nPos <span style="color: #339933;">=</span> regex.<span style="color: #202020;">find</span><span style="color: #009900;">&#40;</span>szStr<span style="color: #339933;">,&amp;</span>len<span style="color: #339933;">,</span>nPos<span style="color: #339933;">+</span>len<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span>      <span style="color: #666666; font-style: italic;">// 从nPos+len位置开始继续查找...</span>
    <span style="color: #009900;">&#123;</span>
        <a href="http://www.opengroup.org/onlinepubs/009695399/functions/printf.html"><span style="color: #000066;">printf</span></a><span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;%.*s<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #339933;">,</span> len<span style="color: #339933;">,</span> szStr<span style="color: #339933;">+</span>nPos<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>          <span style="color: #666666; font-style: italic;">// 打印出查找结果</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    system<span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;pause&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #b1b100;">return</span> <span style="color: #0000dd;">0</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<p>虽然就一个find，功能是寒碜了一点，好在使用还算方便。在它的基础上做Match和Replace的功能也应该不算太难的事。</p>
<p>对正则表达式比较熟悉的朋友一定在想为什么不把char szReg[]=&#8221;[0-9]+&#8221;;改成char szReg[]=&#8221;\\d+&#8221;;呢？这就是偶说它功能还不完整的原因，它不支持&#8217;\'操作符！（也许有其它替代，反正偶没找到，要是哪位路过的知道 TRegexp使用&#8217;\'的方法，一定要留个言哦）。</p>
<p>于是，下面我们请出完美的pcre库。pcre库的全称是:Perl- compatible regular expressions。从名称上可以看出它遵循的是Perl的正则表达式语法，功能那是绝对没得说。不过遗憾的是BCB没有进一步把pcrecpp也带进来，所以只能用纯C的方式调用了：</p>

<div class="wp_codebox_msgheader"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p133code4'); return false;">View Code</a> C</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p1334"><td class="code" id="p133code4"><pre class="c" style="font-family:monospace;"><span style="color: #339933;">#include &lt;stdio.h&gt;</span>
 <span style="color: #339933;">#include &lt;stdlib.h&gt;</span>
 <span style="color: #339933;">#include &lt;string.h&gt;</span>
 <span style="color: #339933;">#include &lt;pcre.h&gt;</span>
&nbsp;
 <span style="color: #993333;">int</span> main<span style="color: #009900;">&#40;</span><span style="color: #993333;">int</span> argc<span style="color: #339933;">,</span> <span style="color: #993333;">char</span><span style="color: #339933;">*</span> argv<span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span>
 <span style="color: #009900;">&#123;</span>
     <span style="color: #993333;">char</span> szReg<span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">=</span><span style="color: #ff0000;">&quot;d(<span style="color: #000099; font-weight: bold;">\\</span>d+)f&quot;</span><span style="color: #339933;">;</span>        <span style="color: #666666; font-style: italic;">// 抽出a和f之间的数字</span>
     <span style="color: #993333;">char</span> szStr<span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">=</span><span style="color: #ff0000;">&quot;a123b03ad94fg45&quot;</span><span style="color: #339933;">;</span>
&nbsp;
     <a href="http://www.opengroup.org/onlinepubs/009695399/functions/printf.html"><span style="color: #000066;">printf</span></a><span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;Regex: %s<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #339933;">,</span>szReg<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
     <a href="http://www.opengroup.org/onlinepubs/009695399/functions/printf.html"><span style="color: #000066;">printf</span></a><span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;Str: %s<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #339933;">,</span>szStr<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
     <a href="http://www.opengroup.org/onlinepubs/009695399/functions/printf.html"><span style="color: #000066;">printf</span></a><span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;Result: <span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
     <span style="color: #993333;">const</span> <span style="color: #993333;">char</span>      <span style="color: #339933;">*</span>pszErr<span style="color: #339933;">;</span>
     <span style="color: #993333;">int</span>             nErrOffset<span style="color: #339933;">;</span>
     pcre <span style="color: #339933;">*</span>re <span style="color: #339933;">=</span> pcre_compile<span style="color: #009900;">&#40;</span>szReg<span style="color: #339933;">,</span>0<span style="color: #339933;">,&amp;</span>pszErr<span style="color: #339933;">,&amp;</span>nErrOffset<span style="color: #339933;">,</span>NULL<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>      <span style="color: #666666; font-style: italic;">// 先准备表达式</span>
     <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span>re<span style="color: #339933;">==</span>NULL<span style="color: #009900;">&#41;</span>
     <span style="color: #009900;">&#123;</span>
         <a href="http://www.opengroup.org/onlinepubs/009695399/functions/printf.html"><span style="color: #000066;">printf</span></a><span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;compile error at:%d, %s&quot;</span><span style="color: #339933;">,</span> nErrOffset<span style="color: #339933;">,</span> pszErr<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
         <span style="color: #b1b100;">return</span> <span style="color: #339933;">-</span><span style="color: #0000dd;">1</span><span style="color: #339933;">;</span>
     <span style="color: #009900;">&#125;</span>
&nbsp;
     <span style="color: #993333;">int</span> ovector<span style="color: #009900;">&#91;</span>30<span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>    <span style="color: #666666; font-style: italic;">// 数量由szReg决定，大致为(括号对数+1)*3，可以用pcre_info获得或者直接留大一点。</span>
     <span style="color: #993333;">int</span> len <span style="color: #339933;">=</span> strlen<span style="color: #009900;">&#40;</span>szStr<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
     <span style="color: #993333;">int</span> rc <span style="color: #339933;">=</span> pcre_exec<span style="color: #009900;">&#40;</span>re<span style="color: #339933;">,</span> NULL<span style="color: #339933;">,</span> szStr<span style="color: #339933;">,</span> len<span style="color: #339933;">,</span> 0<span style="color: #339933;">,</span> ovector<span style="color: #339933;">,</span> 30<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>   <span style="color: #666666; font-style: italic;">// 执行匹配</span>
     <span style="color: #b1b100;">for</span><span style="color: #009900;">&#40;</span><span style="color: #993333;">int</span> i<span style="color: #339933;">=</span><span style="color: #0000dd;">0</span><span style="color: #339933;">;</span> i<span style="color: #339933;">&lt;</span>rc<span style="color: #339933;">;</span> i<span style="color: #339933;">++</span><span style="color: #009900;">&#41;</span>
     <span style="color: #009900;">&#123;</span>
         <span style="color: #993333;">char</span> <span style="color: #339933;">*</span>substring_start <span style="color: #339933;">=</span> szStr <span style="color: #339933;">+</span> ovector<span style="color: #009900;">&#91;</span>2<span style="color: #339933;">*</span>i<span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
         <span style="color: #993333;">int</span> substring_length <span style="color: #339933;">=</span> ovector<span style="color: #009900;">&#91;</span>2<span style="color: #339933;">*</span>i<span style="color: #339933;">+</span>1<span style="color: #009900;">&#93;</span> <span style="color: #339933;">-</span> ovector<span style="color: #009900;">&#91;</span>2<span style="color: #339933;">*</span>i<span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
         <a href="http://www.opengroup.org/onlinepubs/009695399/functions/printf.html"><span style="color: #000066;">printf</span></a><span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;%2d: %.*s<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #339933;">,</span> i<span style="color: #339933;">,</span> substring_length<span style="color: #339933;">,</span> substring_start<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
     <span style="color: #009900;">&#125;</span>
&nbsp;
     free<span style="color: #009900;">&#40;</span>re<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>   <span style="color: #666666; font-style: italic;">// 别忘了这个</span>
&nbsp;
     system<span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;pause&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
     <span style="color: #b1b100;">return</span> <span style="color: #0000dd;">0</span><span style="color: #339933;">;</span>
 <span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<p>对于pcre库的使用，可以到它的官方网站www.pcre.org去学习。 如果觉得不过瘾，也可以自己装过一个最新版的，再弄个pcrecpp什么的，呵呵。</p>
]]></content:encoded>
			<wfw:commentRss>http://cnhup.net/133/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>谁敢再吃猫猫狗狗就要面对15天的拘留</title>
		<link>http://cnhup.net/131</link>
		<comments>http://cnhup.net/131#comments</comments>
		<pubDate>Thu, 28 Jan 2010 04:24:43 +0000</pubDate>
		<dc:creator>hakka</dc:creator>
				<category><![CDATA[涂鸦]]></category>

		<guid isPermaLink="false">http://cnhup.net/?p=131</guid>
		<description><![CDATA[新规规定，谁敢再吃猫猫狗狗就要面对15天的拘留，看到这消息，觉得很郁闷，也很片面。
吃猫狗面拘留，哪为什么只是猫狗呢？
鸡，猪，其它动物为什么就能吃呢？
还是因为猫狗是摇尾乞怜！
这是严重的动物歧视。
]]></description>
			<content:encoded><![CDATA[<p>新规规定，谁敢再吃猫猫狗狗就要面对15天的拘留，看到这消息，觉得很郁闷，也很片面。<br />
吃猫狗面拘留，哪为什么只是猫狗呢？<br />
鸡，猪，其它动物为什么就能吃呢？</p>
<p>还是因为猫狗是摇尾乞怜！</p>
<p>这是严重的动物歧视。</p>
]]></content:encoded>
			<wfw:commentRss>http://cnhup.net/131/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>linux 启动 oracle</title>
		<link>http://cnhup.net/125</link>
		<comments>http://cnhup.net/125#comments</comments>
		<pubDate>Sat, 23 Jan 2010 05:05:04 +0000</pubDate>
		<dc:creator>hakka</dc:creator>
				<category><![CDATA[技术随笔]]></category>

		<guid isPermaLink="false">http://cnhup.net/?p=125</guid>
		<description><![CDATA[su &#8211; oracle
sqlplus /nolog
connect /as sysdba
startup
exit
lsnrctl start
]]></description>
			<content:encoded><![CDATA[<p>su &#8211; oracle<br />
sqlplus /nolog<br />
connect /as sysdba<br />
startup<br />
exit</p>
<p>lsnrctl start</p>
]]></content:encoded>
			<wfw:commentRss>http://cnhup.net/125/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>银行缩写也疯狂</title>
		<link>http://cnhup.net/124</link>
		<comments>http://cnhup.net/124#comments</comments>
		<pubDate>Fri, 22 Jan 2010 07:15:02 +0000</pubDate>
		<dc:creator>hakka</dc:creator>
				<category><![CDATA[涂鸦]]></category>

		<guid isPermaLink="false">http://cnhup.net/124</guid>
		<description><![CDATA[来看看这些银行的缩写：
    中国建设银行——CBC（Construction Bank of China）——“存不存？”
    中国银行——BC（Bank of China）——“不存。”
    中国农业银行——ABC（Agriculture Bank of China）——“啊，不存！”
    中国工商银行——ICBC（Industry and Commercial Bank of China）——“爱存不存。”
    招行——CMBC ——“存吗？白痴！”
    兴业银行——CIB——“存一百。”
    国家开发银行——CDB（China Development Bank）——“存点吧！”
    汇丰银行——HSBC——“还是不存！”
]]></description>
			<content:encoded><![CDATA[<p>来看看这些银行的缩写：</p>
<p>    中国建设银行——CBC（Construction Bank of China）——“存不存？”</p>
<p>    中国银行——BC（Bank of China）——“不存。”</p>
<p>    中国农业银行——ABC（Agriculture Bank of China）——“啊，不存！”</p>
<p>    中国工商银行——ICBC（Industry and Commercial Bank of China）——“爱存不存。”</p>
<p>    招行——CMBC ——“存吗？白痴！”</p>
<p>    兴业银行——CIB——“存一百。”</p>
<p>    国家开发银行——CDB（China Development Bank）——“存点吧！”</p>
<p>    汇丰银行——HSBC——“还是不存！”</p>
]]></content:encoded>
			<wfw:commentRss>http://cnhup.net/124/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>BHO开发笔记</title>
		<link>http://cnhup.net/123</link>
		<comments>http://cnhup.net/123#comments</comments>
		<pubDate>Thu, 14 Jan 2010 04:42:48 +0000</pubDate>
		<dc:creator>hakka</dc:creator>
				<category><![CDATA[涂鸦]]></category>

		<guid isPermaLink="false">http://cnhup.net/123</guid>
		<description><![CDATA[http://www.cnblogs.com/bingxuefly/archive/2008/06/02/implementbho.html
http://69.10.233.10/KB/IP/httpget-post.aspx
http://topic.csdn.net/u/20080107/17/af45d0a0-fa7d-4673-9279-aebf859970cb.html
http://msdn.microsoft.com/en-us/library/bb250489(VS.85).aspx
http://bbs.blueidea.com/thread-2681007-1-68.html
http://hacknote.com/read/?201.html
http://www.programbbs.com/doc/221.htm
http://blog.csdn.net/Garnett25/archive/2009/03/05/3958885.aspx
]]></description>
			<content:encoded><![CDATA[<p>http://www.cnblogs.com/bingxuefly/archive/2008/06/02/implementbho.html</p>
<p>http://69.10.233.10/KB/IP/httpget-post.aspx</p>
<p>http://topic.csdn.net/u/20080107/17/af45d0a0-fa7d-4673-9279-aebf859970cb.html</p>
<p>http://msdn.microsoft.com/en-us/library/bb250489(VS.85).aspx</p>
<p>http://bbs.blueidea.com/thread-2681007-1-68.html</p>
<p>http://hacknote.com/read/?201.html</p>
<p>http://www.programbbs.com/doc/221.htm</p>
<p>http://blog.csdn.net/Garnett25/archive/2009/03/05/3958885.aspx</p>
]]></content:encoded>
			<wfw:commentRss>http://cnhup.net/123/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>syslog协议的格式</title>
		<link>http://cnhup.net/116</link>
		<comments>http://cnhup.net/116#comments</comments>
		<pubDate>Tue, 05 Jan 2010 02:22:11 +0000</pubDate>
		<dc:creator>hakka</dc:creator>
				<category><![CDATA[涂鸦]]></category>
		<category><![CDATA[syslog]]></category>

		<guid isPermaLink="false">http://cnhup.net/116</guid>
		<description><![CDATA[1、介绍
在Unix类操作系统上，syslog广泛应用于系统日志。syslog日志消息既可以记录在本地文件中，也可以通过网络发送到接收syslog的服务器。接收syslog的服务器可以对多个设备的syslog消息进行统一的存储，或者解析其中的内容做相应的处理。常见的应用场景是网络管理工具、安全管理系统、日志审计系统。
完整的syslog日志中包含产生日志的程序模块（Facility）、严重性（Severity或 Level）、时间、主机名或IP、进程名、进程ID和正文。在Unix类操作系统上，能够按Facility和Severity的组合来决定什么样的日志消息是否需要记录，记录到什么地方，是否需要发送到一个接收syslog的服务器等。由于syslog简单而灵活的特性，syslog不再仅限于 Unix类主机的日志记录，任何需要记录和发送日志的场景，都可能会使用syslog。
长期以来，没有一个标准来规范syslog的格式，导致syslog的格式是非常随意的。最坏的情况下，根本就没有任何格式，导致程序不能对syslog 消息进行解析，只能将它看作是一个字符串。
在2001年定义的RFC3164中，描述了BSD syslog协议：
http://www.ietf.org/rfc/rfc3164.txt
不过这个规范的很多内容都不是强制性的，常常是“建议”或者“约定”，也由于这个规范出的比较晚，很多设备并不遵守或不完全遵守这个规范。接下来就介绍一 下这个规范。
约定发送syslog的设备为Device，转发syslog的设备为Relay，接收syslog的设备为Collector。Relay本身也可以发送自身的syslog给Collector，这个时候它表现为一个Device。Relay也可以只转发部分接收到的syslog消息，这个时候它同时表现为Relay和Collector。
syslog消息发送到Collector的UDP 514端口，不需要接收方应答，RFC3164建议 Device 也使用514作为源端口。规定syslog消息的UDP报文不能超过1024字节，并且全部由可打印的字符组成。完整的syslog消息由3部分组成，分别是PRI、HEADER和MSG。大部分syslog都包含PRI和MSG部分，而HEADER可能没有。
2、syslog的格式
下面是一个syslog消息：
Oct 9 22:33:20 hlfedora auditd[1787]: The audit daemon is exiting.
其中“”是PRI部分，“Oct 9 22:33:20 hlfedora”是HEADER部分，“auditd[1787]: The audit daemon is exiting.”是MSG部分。
2.1、PRI部分
PRI部分由尖括号包含的一个数字构成，这个数字包含了程序模块（Facility）、严重性（Severity），这个数字是由Facility乘以 8，然后加上Severity得来。不知道他们为什么发明了这么一种不直观的表示方式。
也就是说这个数字如果换成2进制的话，低位的3个bit表示Severity，剩下的高位的部分右移3位，就是表示Facility的值。
十进制30 = 二进制0001 1110
0001 1&#8230; = Facility: DAEMON &#8211; system daemons (3)
&#8230;. .110 = Severity: INFO &#8211; informational (6)
Facility的定义如下，可以看出来syslog的Facility是早期为Unix操作系统定义的，不过它预留了User（1），Local0～7 （16～23）给其他程序使用：
      Numerical    [...]]]></description>
			<content:encoded><![CDATA[<p>1、介绍</p>
<p>在Unix类操作系统上，syslog广泛应用于系统日志。syslog日志消息既可以记录在本地文件中，也可以通过网络发送到接收syslog的服务器。接收syslog的服务器可以对多个设备的syslog消息进行统一的存储，或者解析其中的内容做相应的处理。常见的应用场景是网络管理工具、安全管理系统、日志审计系统。<span id="more-116"></span></p>
<p>完整的syslog日志中包含产生日志的程序模块（Facility）、严重性（Severity或 Level）、时间、主机名或IP、进程名、进程ID和正文。在Unix类操作系统上，能够按Facility和Severity的组合来决定什么样的日志消息是否需要记录，记录到什么地方，是否需要发送到一个接收syslog的服务器等。由于syslog简单而灵活的特性，syslog不再仅限于 Unix类主机的日志记录，任何需要记录和发送日志的场景，都可能会使用syslog。</p>
<p>长期以来，没有一个标准来规范syslog的格式，导致syslog的格式是非常随意的。最坏的情况下，根本就没有任何格式，导致程序不能对syslog 消息进行解析，只能将它看作是一个字符串。</p>
<p>在2001年定义的RFC3164中，描述了BSD syslog协议：</p>
<p>http://www.ietf.org/rfc/rfc3164.txt</p>
<p>不过这个规范的很多内容都不是强制性的，常常是“建议”或者“约定”，也由于这个规范出的比较晚，很多设备并不遵守或不完全遵守这个规范。接下来就介绍一 下这个规范。</p>
<p>约定发送syslog的设备为Device，转发syslog的设备为Relay，接收syslog的设备为Collector。Relay本身也可以发送自身的syslog给Collector，这个时候它表现为一个Device。Relay也可以只转发部分接收到的syslog消息，这个时候它同时表现为Relay和Collector。</p>
<p>syslog消息发送到Collector的UDP 514端口，不需要接收方应答，RFC3164建议 Device 也使用514作为源端口。规定syslog消息的UDP报文不能超过1024字节，并且全部由可打印的字符组成。完整的syslog消息由3部分组成，分别是PRI、HEADER和MSG。大部分syslog都包含PRI和MSG部分，而HEADER可能没有。</p>
<p>2、syslog的格式</p>
<p>下面是一个syslog消息：<br />
<30>Oct 9 22:33:20 hlfedora auditd[1787]: The audit daemon is exiting.<br />
其中“<30>”是PRI部分，“Oct 9 22:33:20 hlfedora”是HEADER部分，“auditd[1787]: The audit daemon is exiting.”是MSG部分。</p>
<p>2.1、PRI部分<br />
PRI部分由尖括号包含的一个数字构成，这个数字包含了程序模块（Facility）、严重性（Severity），这个数字是由Facility乘以 8，然后加上Severity得来。不知道他们为什么发明了这么一种不直观的表示方式。<br />
也就是说这个数字如果换成2进制的话，低位的3个bit表示Severity，剩下的高位的部分右移3位，就是表示Facility的值。<br />
十进制30 = 二进制0001 1110<br />
0001 1&#8230; = Facility: DAEMON &#8211; system daemons (3)<br />
&#8230;. .110 = Severity: INFO &#8211; informational (6)</p>
<p>Facility的定义如下，可以看出来syslog的Facility是早期为Unix操作系统定义的，不过它预留了User（1），Local0～7 （16～23）给其他程序使用：</p>
<p>      Numerical             Facility<br />
         Code</p>
<p>          0             kernel messages<br />
          1             user-level messages<br />
          2             mail system<br />
          3             system daemons<br />
          4             security/authorization messages (note 1)<br />
          5             messages generated internally by syslogd<br />
          6             line printer subsystem<br />
          7             network news subsystem<br />
          8             UUCP subsystem<br />
          9             clock daemon (note 2)<br />
         10             security/authorization messages (note 1)<br />
         11             FTP daemon<br />
         12             NTP subsystem<br />
         13             log audit (note 1)<br />
         14             log alert (note 1)<br />
         15             clock daemon (note 2)<br />
         16             local use 0  (local0)<br />
         17             local use 1  (local1)<br />
         18             local use 2  (local2)<br />
         19             local use 3  (local3)<br />
         20             local use 4  (local4)<br />
         21             local use 5  (local5)<br />
         22             local use 6  (local6)<br />
         23             local use 7  (local7)</p>
<p>       Note 1 &#8211; Various operating systems have been found to utilize<br />
          Facilities 4, 10, 13 and 14 for security/authorization,<br />
          audit, and alert messages which seem to be similar.<br />
       Note 2 &#8211; Various operating systems have been found to utilize<br />
          both Facilities 9 and 15 for clock (cron/at) messages.</p>
<p>Severity的定义如下：</p>
<p>       Numerical         Severity<br />
        Code</p>
<p>         0       Emergency: system is unusable<br />
         1       Alert: action must be taken immediately<br />
         2       Critical: critical conditions<br />
         3       Error: error conditions<br />
         4       Warning: warning conditions<br />
         5       Notice: normal but significant condition<br />
         6       Informational: informational messages<br />
         7       Debug: debug-level messages</p>
<p>也就是说，尖括号中有1～3个数字字符，只有当数字是0的时候，数字才以0开头，也就是说00和01这样在前面补0是不允许的。</p>
<p>2.2、HEADER部分<br />
HEADER部分包括两个字段，时间和主机名（或IP）。<br />
时间紧跟在PRI后面，中间没有空格，格式必须是“Mmm dd hh:mm:ss”，不包括年份。“日”的数字如果是1～9，前面会补一个空格（也就是月份后面有两个空格），而“小时”、“分”、“秒”则在前面补“0”。月份取值包括：<br />
Jan, Feb, Mar, Apr, May, Jun, Jul, Aug, Sep, Oct, Nov, Dec</p>
<p>时间后边跟一个空格，然后是主机名或者IP地址，主机名不得包括域名部分。</p>
<p>因为有些系统需要将日志长期归档，而时间字段又不包括年份，所以一些不标准的syslog格式中包含了年份，例如：<br />
<165>Aug 24 05:34:00 CST 1987 mymachine myproc[10]: %% It&#8217;s<br />
time to make the do-nuts. %% Ingredients: Mix=OK, Jelly=OK #<br />
Devices: Mixer=OK, Jelly_Injector=OK, Frier=OK # Transport:<br />
Conveyer1=OK, Conveyer2=OK # %%<br />
这样会导致解析程序将“CST”当作主机名，而“1987”开始的部分作为MSG部分。解析程序面对这种问题，可能要做很多容错处理，或者定制能解析多种syslog格式，而不仅仅是只能解析标准格式。</p>
<p>HEADER部分后面跟一个空格，然后是MSG部分。<br />
有些syslog中没有HEADER部分。这个时候MSG部分紧跟在PRI后面，中间没有空格。</p>
<p>2.3、MSG部分<br />
MSG部分又分为两个部分，TAG和Content。其中TAG部分是可选的。<br />
在前面的例子中（“<30>Oct 9 22:33:20 hlfedora auditd[1787]: The audit daemon is exiting.”），“auditd[1787]”是TAG部分，包含了进程名称和进程PID。PID可以没有，这个时候中括号也是没有的。<br />
进程PID有时甚至不是一个数字，例如“root-1787”，解析程序要做好容错准备。</p>
<p>TAG后面用一个冒号隔开Content部分，这部分的内容是应用程序自定义的。</p>
<p>3、RFC3195<br />
BSD syslog协议使用UDP协议在网络中传递，然而UDP是一个不可靠的协议，并且syslog也没有要求接收方有所反馈。为了解决这个问题，RFC又定义了一个新的规范来可靠的传递syslog消息，它使用TCP协议：</p>
<p>http://www.ietf.org/rfc/rfc3195.txt</p>
<p>不过大多数情况下，使用UDP发送不需要确认的syslog消息，已经能够满足要求了，并且这样做非常简单。因此到目前为止，RFC3195的应用还是很少见的。</p>
]]></content:encoded>
			<wfw:commentRss>http://cnhup.net/116/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>构建内网共享盘</title>
		<link>http://cnhup.net/109</link>
		<comments>http://cnhup.net/109#comments</comments>
		<pubDate>Thu, 31 Dec 2009 07:24:23 +0000</pubDate>
		<dc:creator>hakka</dc:creator>
				<category><![CDATA[涂鸦]]></category>
		<category><![CDATA[Debain]]></category>
		<category><![CDATA[mount]]></category>
		<category><![CDATA[rc.local]]></category>
		<category><![CDATA[Samba]]></category>
		<category><![CDATA[共享]]></category>

		<guid isPermaLink="false">http://cnhup.net/?p=109</guid>
		<description><![CDATA[为方便使用各种软件及避免重复存储同样的软件，非常有必要构建一台共享文件服务器，但又能尽量避免病毒的干扰，而且不安装杀毒软件，因此我们采用Linux作为操作系统。
系统环境：
Ubuntu 8.04.3 LTS
第一步：
apt-cache search samba &#8211;names-only
查看samba的安装包。
然后安装
apt-get install samba
第二步：
挂共享盘
mount /dev/sdb1 /share
第三步：
开启共享
/etc/init.d/samba start
如果想开机自动挂共享盘，可以编辑/etc/init.d/rc.local
在文件最后加入
/etc/init.d/samba start
mount /dev/sdb1 /share
exit 0


]]></description>
			<content:encoded><![CDATA[<p>为方便使用各种软件及避免重复存储同样的软件，非常有必要构建一台共享文件服务器，但又能尽量避免病毒的干扰，而且不安装杀毒软件，因此我们采用Linux作为操作系统。<br/><br />
系统环境：</p>
<blockquote><p>Ubuntu 8.04.3 LTS</p></blockquote>
<p>第一步：<span id="more-109"></span></p>
<blockquote><p>apt-cache search samba &#8211;names-only</p></blockquote>
<p>查看samba的安装包。<br />
然后安装</p>
<blockquote><p>apt-get install samba</p></blockquote>
<p>第二步：<br />
挂共享盘</p>
<blockquote><p>mount /dev/sdb1 /share</p></blockquote>
<p>第三步：<br />
开启共享</p>
<blockquote><p>/etc/init.d/samba start</p></blockquote>
<p>如果想开机自动挂共享盘，可以编辑/etc/init.d/rc.local<br />
在文件最后加入</p>
<blockquote><p>/etc/init.d/samba start<br />
mount /dev/sdb1 /share<br />
exit 0</p></blockquote>
<p><br/><br />
<br/><br/><br/><br/></p>
]]></content:encoded>
			<wfw:commentRss>http://cnhup.net/109/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>a new open source</title>
		<link>http://cnhup.net/104</link>
		<comments>http://cnhup.net/104#comments</comments>
		<pubDate>Wed, 30 Dec 2009 07:31:31 +0000</pubDate>
		<dc:creator>hakka</dc:creator>
				<category><![CDATA[opensource]]></category>

		<guid isPermaLink="false">http://cnhup.net/104</guid>
		<description><![CDATA[a new open source.
]]></description>
			<content:encoded><![CDATA[<p>a new open source.</p>
]]></content:encoded>
			<wfw:commentRss>http://cnhup.net/104/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Mysql 5.5 新特性</title>
		<link>http://cnhup.net/99</link>
		<comments>http://cnhup.net/99#comments</comments>
		<pubDate>Tue, 29 Dec 2009 06:52:46 +0000</pubDate>
		<dc:creator>hakka</dc:creator>
				<category><![CDATA[技术随笔]]></category>
		<category><![CDATA[5.5]]></category>
		<category><![CDATA[enhancements]]></category>
		<category><![CDATA[Mysql]]></category>
		<category><![CDATA[partitioning]]></category>

		<guid isPermaLink="false">http://cnhup.net/?p=99</guid>
		<description><![CDATA[http://dev.mysql.com/tech-resources/articles/mysql_55_partitioning.html

这个页面上有说明.
]]></description>
			<content:encoded><![CDATA[<p>http://dev.mysql.com/tech-resources/articles/mysql_55_partitioning.html</p>
<p><br/><br />
这个页面上有说明.</p>
]]></content:encoded>
			<wfw:commentRss>http://cnhup.net/99/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>卫生部拟禁止以携带乙肝病毒为由限制入学就业</title>
		<link>http://cnhup.net/97</link>
		<comments>http://cnhup.net/97#comments</comments>
		<pubDate>Tue, 29 Dec 2009 06:27:54 +0000</pubDate>
		<dc:creator>hakka</dc:creator>
				<category><![CDATA[涂鸦]]></category>

		<guid isPermaLink="false">http://cnhup.net/?p=97</guid>
		<description><![CDATA[导读：卫生部今日通报，我国已于近期制定取消入学就业体检中乙肝五项检查有关政策，明确禁止将携带乙肝病毒作为限制入学就业的条件。乙肝歧视望能最终消除。



卫生部今日通报，我国已于近期制定取消入学就业体检中乙肝五项检查有关政策，明确禁止将携带乙肝病毒作为限制入学就业的条件。政策在出台之前将会通过有关部门向社会公开征集意见。
卫生部06年开展了全国人群乙肝等有关疾病血清流行病学调查。调查结果表明，中国仍然有乙肝表面抗原携带者约9300万人，乙肝防治工作仍然面临严峻形势。

世界肝炎联盟主席查尔斯.高瑞(CharlesGore)对中国卫生部制订取消体检乙肝两对半检测指导意见表示高度赞赏，称“这是中国政府在消除乙肝病毒携带者的入学、就业歧视方面所做出的又一重要举措。
中国早在上世纪70年代就能检测乙肝标志物，但乙肝人群在就业和升学领域受到排斥，却是从上世纪90年代中期开始。社会对于乙肝人群由宽容到排斥的前后变化，经历了一个怎样的过程？
科学新发现要体现在政策法规之中，显然需要一定的过程。王钊回忆，“上世纪70年代，在我们的传染病管理条例中规定报告的病种里，传染性肝炎仍然被整体作为一个病种，并没有从病源上分为是细菌的还是病毒的，病毒是什么型别。”即便到了1982年，《食品卫生法》出台时，在“不得参加接触直接入口食品的工作” 的疾病中，乙肝也被笼统地包括在“病毒性肝炎”的表述中被一起排除。
]]></description>
			<content:encoded><![CDATA[<p>导读：卫生部今日通报，我国已于近期制定取消入学就业体检中乙肝五项检查有关政策，明确禁止将携带乙肝病毒作为限制入学就业的条件。乙肝歧视望能最终消除。<br />
<br/><br />
<img src="http://cnhup.net/wp-content/uploads/2009/12/img001.jpg" alt="" title="img001" width="500" height="359" class="alignleft size-full wp-image-96" /><br />
<br/><span id="more-97"></span><br />
卫生部今日通报，我国已于近期制定取消入学就业体检中乙肝五项检查有关政策，明确禁止将携带乙肝病毒作为限制入学就业的条件。政策在出台之前将会通过有关部门向社会公开征集意见。<br/><br />
卫生部06年开展了全国人群乙肝等有关疾病血清流行病学调查。调查结果表明，中国仍然有乙肝表面抗原携带者约9300万人，乙肝防治工作仍然面临严峻形势。<br />
<br/></p>
<p>世界肝炎联盟主席查尔斯.高瑞(CharlesGore)对中国卫生部制订取消体检乙肝两对半检测指导意见表示高度赞赏，称“这是中国政府在消除乙肝病毒携带者的入学、就业歧视方面所做出的又一重要举措。<br/></p>
<p>中国早在上世纪70年代就能检测乙肝标志物，但乙肝人群在就业和升学领域受到排斥，却是从上世纪90年代中期开始。社会对于乙肝人群由宽容到排斥的前后变化，经历了一个怎样的过程？</p>
<p>科学新发现要体现在政策法规之中，显然需要一定的过程。王钊回忆，“上世纪70年代，在我们的传染病管理条例中规定报告的病种里，传染性肝炎仍然被整体作为一个病种，并没有从病源上分为是细菌的还是病毒的，病毒是什么型别。”即便到了1982年，《食品卫生法》出台时，在“不得参加接触直接入口食品的工作” 的疾病中，乙肝也被笼统地包括在“病毒性肝炎”的表述中被一起排除。<br/></p>
]]></content:encoded>
			<wfw:commentRss>http://cnhup.net/97/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
