﻿<?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++博客-柯枫</title><link>http://www.cppblog.com/kefeng/</link><description>我们应该做的并不是远方模糊不清的事，而是手边确定无疑的事情。</description><language>zh-cn</language><lastBuildDate>Tue, 14 Apr 2026 23:06:46 GMT</lastBuildDate><pubDate>Tue, 14 Apr 2026 23:06:46 GMT</pubDate><ttl>60</ttl><item><title>Vim正则表达式[转]</title><link>http://www.cppblog.com/kefeng/archive/2010/10/20/130574.html</link><dc:creator>柯枫</dc:creator><author>柯枫</author><pubDate>Wed, 20 Oct 2010 07:57:00 GMT</pubDate><guid>http://www.cppblog.com/kefeng/archive/2010/10/20/130574.html</guid><wfw:comment>http://www.cppblog.com/kefeng/comments/130574.html</wfw:comment><comments>http://www.cppblog.com/kefeng/archive/2010/10/20/130574.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.cppblog.com/kefeng/comments/commentRss/130574.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/kefeng/services/trackbacks/130574.html</trackback:ping><description><![CDATA[<p>Vim中的正则表达式功能很强大，如果能自由运用，则可以完成很多难以想象的操作。</p>
<p>如果你比较熟悉Perl的正规表达式，可以直接参照<a  href="http://www.idv2.com/vimwiki/index.php?%E6%AD%A3%E5%88%99%E8%A1%A8%E8%BE%BE%E5%BC%8F#perldiff"><font color="#336699">与Perl正则表达式的区别</font></a>一节。</p>
<h2><strong><u>一、使用正则表达式的命令</u></strong></h2>
<p>使用正则表达式的命令最常见的就是<strong> </strong><font color="#ff0000"><strong>/ （搜索）</strong></font>命令。其格式如下：</p>
<pre><font color="#ff0000"><strong>/正则表达式</strong></font></pre>
<p>另一个很有用的命令就是 <font color="#ff0000"><strong>:s（替换）</strong></font>命令，将第一个//之间的正则表达式替换成第二个//之间的字符串。</p>
<pre><font color="#ff0000"><strong>:s/正则表达式/替换字符串/选项</strong></font></pre>
<p>在学习正则表达式时可以利用 <strong>/</strong> 命令来练习。</p>
<h2><strong><u>二、元字符</u></strong></h2>
<p>元字符是具有特殊意义的字符。使用元字符可以表达<strong>任意字符</strong>、<strong>行首</strong>、<strong>行 尾</strong>、<strong>某几个字符</strong>等意义。</p>
<p><strong>元字符一览</strong></p>
<div class="ie5">
<table class="style_table" border="0" height="282" cellspacing="1" width="625">
    <thead>
        <tr>
            <td class="style_td">元字符</td>
            <td class="style_td">说明</td>
        </tr>
    </thead>
    <tbody>
        <tr>
            <td class="style_td"><font color="#ff0000"><strong>.</strong></font></td>
            <td class="style_td">匹配任意一个字符</td>
        </tr>
        <tr>
            <td class="style_td"><font color="#ff0000"><strong>[abc]</strong></font></td>
            <td class="style_td">匹配方括号中的任意一个字符。可以使用-表示字符范围，<br>
            如<strong>[a-z0-9]</strong>匹 配小写字母和阿拉伯数字。</td>
        </tr>
        <tr>
            <td class="style_td"><font color="#ff0000"><strong>[^abc]</strong></font></td>
            <td class="style_td">在方括号内开头使用<strong>^</strong>符号，表示匹配除方括号中字符之外的任意字符。</td>
        </tr>
        <tr>
            <td class="style_td"><font color="#ff0000"><strong>\d</strong></font></td>
            <td class="style_td">匹配阿拉伯数字，等同于<strong>[0-9]</strong>。</td>
        </tr>
        <tr>
            <td class="style_td"><font color="#ff0000"><strong>\D</strong></font></td>
            <td class="style_td">匹配阿拉伯数字之外的任意字符，等同于<strong>[^0-9]</strong>。</td>
        </tr>
        <tr>
            <td class="style_td"><font color="#ff0000"><strong>\x</strong></font></td>
            <td class="style_td">匹配十六进制数字，等同于<strong>[0-9A-Fa-f]</strong>。</td>
        </tr>
        <tr>
            <td class="style_td"><font color="#ff0000"><strong>\X</strong></font></td>
            <td class="style_td">匹配十六进制数字之外的任意字符，等同于<strong>[^0-9A-Fa-f]</strong>。</td>
        </tr>
        <tr>
            <td class="style_td"><font color="#ff0000"><strong>\w</strong></font></td>
            <td class="style_td">匹配单词字母，等同于<strong>[0-9A-Za-z_]</strong>。</td>
        </tr>
        <tr>
            <td class="style_td"><font color="#ff0000"><strong>\W</strong></font></td>
            <td class="style_td">匹配单词字母之外的任意字符，等同于<strong>[^0-9A-Za-z_]</strong>。</td>
        </tr>
        <tr>
            <td class="style_td"><font color="#ff0000"><strong>\t</strong></font></td>
            <td class="style_td">匹配&lt;TAB&gt;字符。</td>
        </tr>
        <tr>
            <td class="style_td"><font color="#ff0000"><strong>\s</strong></font></td>
            <td class="style_td">匹配空白字符，等同于<strong>[ \t]</strong>。</td>
        </tr>
        <tr>
            <td class="style_td"><font color="#ff0000"><strong>\S</strong></font></td>
            <td class="style_td">匹配非空白字符，等同于<strong>[^ \t]</strong>。</td>
        </tr>
    </tbody>
</table>
</div>
<p>另外，如果要查找字符 *、.、/等，则需要在前面用 <strong>\</strong> 符号，表示这不是元字符，而只是普通字符而已。</p>
<div class="ie5">
<table class="style_table" border="0" height="120" cellspacing="1" width="236">
    <thead>
        <tr>
            <td class="style_td">元字符</td>
            <td class="style_td">说明</td>
        </tr>
    </thead>
    <tbody>
        <tr>
            <td class="style_td"><font color="#ff0000"><strong>\*</strong></font></td>
            <td class="style_td">匹配 * 字符。</td>
        </tr>
        <tr>
            <td class="style_td"><font color="#ff0000"><strong>\.</strong></font></td>
            <td class="style_td">匹配 . 字符。</td>
        </tr>
        <tr>
            <td class="style_td"><font color="#ff0000"><strong>\/</strong></font></td>
            <td class="style_td">匹配 / 字符。</td>
        </tr>
        <tr>
            <td class="style_td"><font color="#ff0000"><strong>\\</strong></font></td>
            <td class="style_td">匹配 \ 字符。</td>
        </tr>
        <tr>
            <td class="style_td"><font color="#ff0000"><strong>\[</strong></font></td>
            <td class="style_td">匹配 [ 字符。</td>
        </tr>
    </tbody>
</table>
</div>
<h3>表示数量的元字符</h3>
<div class="ie5">
<table class="style_table" border="0" height="153" cellspacing="1" width="214">
    <thead>
        <tr>
            <td class="style_td">元字符</td>
            <td class="style_td">说明</td>
        </tr>
    </thead>
    <tbody>
        <tr>
            <td class="style_td"><font color="#ff0000"><strong>*</strong></font></td>
            <td class="style_td">匹配0-任意个</td>
        </tr>
        <tr>
            <td class="style_td"><font color="#ff0000"><strong>\+</strong></font></td>
            <td class="style_td">匹配1-任意个</td>
        </tr>
        <tr>
            <td class="style_td"><font color="#ff0000"><strong>\?</strong></font></td>
            <td class="style_td">匹配0-1个</td>
        </tr>
        <tr>
            <td class="style_td"><font color="#ff0000"><strong>\{n,m}</strong></font></td>
            <td class="style_td">匹配n-m个</td>
        </tr>
        <tr>
            <td class="style_td"><font color="#ff0000"><strong>\{n}</strong></font></td>
            <td class="style_td">匹配n个</td>
        </tr>
        <tr>
            <td class="style_td"><font color="#ff0000"><strong>\{n,}</strong></font></td>
            <td class="style_td">匹配n-任意个</td>
        </tr>
        <tr>
            <td class="style_td"><font color="#ff0000"><strong>\{,m}</strong></font></td>
            <td class="style_td">匹配0-m个</td>
        </tr>
    </tbody>
</table>
</div>
<h3>表示位置的符号</h3>
<div class="ie5">
<table class="style_table" border="0" height="98" cellspacing="1" width="208">
    <thead>
        <tr>
            <td class="style_td">元字符</td>
            <td class="style_td">说明</td>
        </tr>
    </thead>
    <tbody>
        <tr>
            <td class="style_td"><font color="#ff0000"><strong>$</strong></font></td>
            <td class="style_td">匹配行尾</td>
        </tr>
        <tr>
            <td class="style_td"><font color="#ff0000"><strong>^</strong></font></td>
            <td class="style_td">匹配行首</td>
        </tr>
        <tr>
            <td class="style_td"><font color="#ff0000"><strong>\&lt;</strong></font></td>
            <td class="style_td">匹配单词词首</td>
        </tr>
        <tr>
            <td class="style_td"><font color="#ff0000"><strong>\&gt;</strong></font></td>
            <td class="style_td">匹配单词词尾</td>
        </tr>
    </tbody>
</table>
</div>
<p><strong>使用例</strong></p>
<pre>/char\s\+[A-Za-z_]\w*;                 " 查找所有以char开头，之后是一个以上的空白，<br>                                             " 最后是一个标识符和分号<br>/\d\d:\d\d:\d\d                        " 查找如 17:37:01 格式的时间字符串<br>:g/^\s*$/d                             " 删除只有空白的行<br>:s/\&lt;four\&gt;/4/g                        " 将所有的four替换成4，但是fourteen中的four不替换</pre>
<h2><strong><u>三、替换变量</u></strong></h2>
<p>在正规表达式中使用 <font color="#ff0000"><strong>\(</strong></font> 和<font color="#ff0000"> <strong>\)</strong> </font>符号括起正规表达式，即可在后面使用<font color="#ff0000"><strong>\1</strong></font>、<font color="#ff0000"><strong>\2</strong></font> 等变量来访问 <strong>\(</strong> 和 <strong>\)</strong> 中的内容。</p>
<p><strong>使用例</strong></p>
<pre>/\(a\+\)[^a]\+\1                                          " 查找开头和结尾处a的个数相同的字符串，<br>                                                                  " 如 aabbbaa，aaacccaaa，但是不匹配 abbbaa<br>:s/\(http:\/\/[-a-z\._~\+%\/]\+\)/&lt;a href="\1"&gt;\1&lt;\/a&gt;/   " 将URL替换为&lt;a href="http://url"&gt;http://url&lt;/a&gt;的格式<br>:s/\(\w\+\)\s\+\(\w\+\)/\2\t\1                            " 将 data1 data2 修改为 data2 data1</pre>
<h2><u><strong>四、函数式</strong></u></h2>
<p>在替换命令 <strong>s///</strong> 中可以使用函数表达式来书写替换内容，格式为</p>
<pre><strong><font color="#ff0000">:s/替换字符串/\=函数式</font></strong></pre>
<p>在函数式中可以使用 submatch(1)、submatch(2) 等来引用 <strong>\1</strong>、<strong>\2</strong>  等的内容，而submatch(0)可以引用匹配的整个内容。</p>
<p><strong>使用例</strong></p>
<pre>:%s/\&lt;id\&gt;/\=line(".")                              " 将各行的 id 字符串替换为行号<br>:%s/^\&lt;\w\+\&gt;/\=(line(".")-10) .".". submatch(1)    " 将每行开头的单词替换为 (行号-10).单词 的格式，<br>                                                           " 如第11行的 word 替换成 1. word</pre>
<h2><u><strong>五、与Perl正则表达式的区别</strong></u></h2>
<p><strong>元字符的区别</strong></p>
<table class="style_table" border="0" height="99" cellspacing="1" width="300">
    <thead>
        <tr>
            <td class="style_td">Vim语法</td>
            <td class="style_td">Perl语法</td>
            <td class="style_td">含义</td>
        </tr>
    </thead>
    <tbody>
        <tr>
            <td class="style_td">\+</td>
            <td class="style_td">+</td>
            <td class="style_td">1-任意个</td>
        </tr>
        <tr>
            <td class="style_td">\?</td>
            <td class="style_td">?</td>
            <td class="style_td">0-1个</td>
        </tr>
        <tr>
            <td class="style_td">\{n,m}</td>
            <td class="style_td">{n,m}</td>
            <td class="style_td">n-m个</td>
        </tr>
        <tr>
            <td class="style_td">\(和\)</td>
            <td class="style_td">(和)</td>
            <td class="style_td">分组</td>
        </tr>
    </tbody>
</table>
<br>
<br>
<h1><u><strong>六、vi 正则表达式练习</strong></u></h1>
<br>
<p>闲言碎语不要讲&#8230;例子说明一切，比如下面这段我需要换成 ubb 标签</p>
<p> </p>
<p> </p>
<p>vim 命令模式，输入</p>
<p>:%s/.*src=&#8221;([^"]*)&#8221;[^&gt;]*&gt;/[img]1[/img]/g</p>
<p>替换为</p>
<p>[img ]gu.jpg[ /img]</p>
<p>[img ]os.jpg[ /img]</p>
<p>[img ]hu.jpg[ /img]</p>
<p>[img ]ang.jpg[ /img]</p>
<p>解释如下：</p>
<p>:</p>
<p>命令执行状态</p>
<p>%s</p>
<p>表示查找并替换</p>
<p>%s/<span style="color: red;">a</span>/<span style="color: green;">b</span>/<span style="color: blue;">g</span></p>
<p><span style="color: red;">a</span> 被查找的字符串（正则匹配）；<span style="color: green;">b</span> 要替换成的文字；<span style="color: blue;">g</span>  表示全局搜索替换（否则只处理找到的第一个结果）</p>
<p><span style="color: red;">(</span>[^"]*<span style="color: red;">)</span></p>
<p>表示非引号的字符N个；外面 <span style="color: red;">()</span> 表示后面替换要用（用  1,&#8230;,9等引用）</p>
<p>[/img]</p>
<p>/ 需要被  转义</p>
<p>与其它工具正则不一样的地方在于 () 也必须 ()，怪不得我老是弄不出来。</p>
<p>相关资料：</p>
<p>via <a  href="http://net.pku.edu.cn/%7Eyhf/tao_regexps_zh.html" rel="external" class="ubblink">http://net.pku.edu.cn/~yhf/tao_regexps_zh.html</a></p>
<p>vi 命令   作用</p>
<p>:%s/ */ /g  把一个或者多个空格替换为一个空格。</p>
<p>:%s/ *$//  去掉行尾的所有空格。</p>
<p>:%s/^/ /  在每一行头上加入一个空格。</p>
<p>:%s/^[0-9][0-9]* //  去掉行首的所有数字字符。</p>
<p>:%s/b[aeio]g/bug/g  将所有的bag、beg、big和bog改为bug。</p>
<p>:%s/t([aou])g/h1t/g   将所有tag、tog和tug分别改为hat、hot和hug（注意用group的用法和使用1引用前面被匹配的字符）。</p>
<p><font color="#ff0000"><strong>Sed</strong></font></p>
<p>Sed是Stream EDitor的缩写，是Unix下常用的基于文件和管道的编辑工具，可以在手册中得到关于sed的详细信息。</p>
<p>这里是一些有趣的sed脚本，假定我们正在处理一个叫做price.txt的文件。注意这些编辑并不会改变源文件，sed只是处理源文件的每一行并 把结果显示在标准输出中（当然很容易使用重定向来定制）：</p>
<p>sed脚本       描述</p>
<p>sed &#8217;s/^$/d&#8217; price.txt   删除所有空行</p>
<p>sed &#8217;s/^[  ]*$/d&#8217; price.txt   删除所有只包含空格或者制表符的行</p>
<p>sed &#8217;s/&#8221;//g&#8217; price.txt   删除所有引号</p><img src ="http://www.cppblog.com/kefeng/aggbug/130574.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/kefeng/" target="_blank">柯枫</a> 2010-10-20 15:57 <a href="http://www.cppblog.com/kefeng/archive/2010/10/20/130574.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>fstream读写二进制文件</title><link>http://www.cppblog.com/kefeng/archive/2010/10/12/129591.html</link><dc:creator>柯枫</dc:creator><author>柯枫</author><pubDate>Tue, 12 Oct 2010 03:30:00 GMT</pubDate><guid>http://www.cppblog.com/kefeng/archive/2010/10/12/129591.html</guid><wfw:comment>http://www.cppblog.com/kefeng/comments/129591.html</wfw:comment><comments>http://www.cppblog.com/kefeng/archive/2010/10/12/129591.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/kefeng/comments/commentRss/129591.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/kefeng/services/trackbacks/129591.html</trackback:ping><description><![CDATA[<div style="background-color: #eeeeee; font-size: 13px; border: 1px solid #cccccc; padding: 4px 5px 4px 4px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: #008080;">&nbsp;1</span>&nbsp;<span style="color: #000000;">#include&nbsp;</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">iostream</span><span style="color: #000000;">&gt;</span><span style="color: #000000;"><br></span><span style="color: #008080;">&nbsp;2</span>&nbsp;<span style="color: #000000;">#include&nbsp;</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">fstream</span><span style="color: #000000;">&gt;</span><span style="color: #000000;"><br></span><span style="color: #008080;">&nbsp;3</span>&nbsp;<span style="color: #000000;"><br></span><span style="color: #008080;">&nbsp;4</span>&nbsp;<span style="color: #000000;"></span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;main()<br></span><span style="color: #008080;">&nbsp;5</span>&nbsp;<span style="color: #000000;">{<br></span><span style="color: #008080;">&nbsp;6</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;length;<br></span><span style="color: #008080;">&nbsp;7</span>&nbsp;<span style="color: #000000;">&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;">buffer;<br></span><span style="color: #008080;">&nbsp;8</span>&nbsp;<span style="color: #000000;"><br></span><span style="color: #008080;">&nbsp;9</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;std::fstream&nbsp;rfile;<br></span><span style="color: #008080;">10</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;rfile.open(</span><span style="color: #000000;">"</span><span style="color: #000000;">test.txt</span><span style="color: #000000;">"</span><span style="color: #000000;">,std::fstream::</span><span style="color: #0000ff;">in</span><span style="color: #000000;">|</span><span style="color: #000000;">std::fstream::binary);<br></span><span style="color: #008080;">11</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">(</span><span style="color: #000000;">!</span><span style="color: #000000;">rfile)<br></span><span style="color: #008080;">12</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;{<br></span><span style="color: #008080;">13</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;std::cerr</span><span style="color: #000000;">&lt;&lt;</span><span style="color: #000000;">"</span><span style="color: #000000;">Open&nbsp;test.txt&nbsp;failed!</span><span style="color: #000000;">"</span><span style="color: #000000;">&lt;&lt;</span><span style="color: #000000;">std::endl;<br></span><span style="color: #008080;">14</span>&nbsp;<span style="color: #000000;">&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;">-</span><span style="color: #000000;">1</span><span style="color: #000000;">;<br></span><span style="color: #008080;">15</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;}<br></span><span style="color: #008080;">16</span>&nbsp;<span style="color: #000000;"><br></span><span style="color: #008080;">17</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">get&nbsp;length&nbsp;of&nbsp;file:</span><span style="color: #008000;"><br></span><span style="color: #008080;">18</span>&nbsp;<span style="color: #008000;"></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;rfile.seekg(</span><span style="color: #000000;">0</span><span style="color: #000000;">,std::ios::end);<br></span><span style="color: #008080;">19</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;length&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;rfile.tellg();<br></span><span style="color: #008080;">20</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;rfile.seekg(</span><span style="color: #000000;">0</span><span style="color: #000000;">,std::ios::beg);<br></span><span style="color: #008080;">21</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;std::cout</span><span style="color: #000000;">&lt;&lt;</span><span style="color: #000000;">"</span><span style="color: #000000;">length:</span><span style="color: #000000;">"</span><span style="color: #000000;">&lt;&lt;</span><span style="color: #000000;">length</span><span style="color: #000000;">&lt;&lt;</span><span style="color: #000000;">std::endl;<br></span><span style="color: #008080;">22</span>&nbsp;<span style="color: #000000;"><br></span><span style="color: #008080;">23</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">allocate&nbsp;memory:</span><span style="color: #008000;"><br></span><span style="color: #008080;">24</span>&nbsp;<span style="color: #008000;"></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;buffer&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">new</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">char</span><span style="color: #000000;">[length];<br></span><span style="color: #008080;">25</span>&nbsp;<span style="color: #000000;"><br></span><span style="color: #008080;">26</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">read&nbsp;data&nbsp;as&nbsp;a&nbsp;block:</span><span style="color: #008000;"><br></span><span style="color: #008080;">27</span>&nbsp;<span style="color: #008000;"></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;rfile.read(buffer,length);<br></span><span style="color: #008080;">28</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;rfile.close();<br></span><span style="color: #008080;">29</span>&nbsp;<span style="color: #000000;"><br></span><span style="color: #008080;">30</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">write&nbsp;to&nbsp;outfile</span><span style="color: #008000;"><br></span><span style="color: #008080;">31</span>&nbsp;<span style="color: #008000;"></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;std::fstream&nbsp;wfile(</span><span style="color: #000000;">"</span><span style="color: #000000;">new.txt</span><span style="color: #000000;">"</span><span style="color: #000000;">,std::fstream::</span><span style="color: #0000ff;">out</span><span style="color: #000000;">|</span><span style="color: #000000;">std::fstream::binary);<br></span><span style="color: #008080;">32</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;wfile.write(buffer,length);<br></span><span style="color: #008080;">33</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;<br></span><span style="color: #008080;">34</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">delete&nbsp;buffer</span><span style="color: #008000;"><br></span><span style="color: #008080;">35</span>&nbsp;<span style="color: #008000;"></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;delete[]&nbsp;buffer;<br></span><span style="color: #008080;">36</span>&nbsp;<span style="color: #000000;"><br></span><span style="color: #008080;">37</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">close&nbsp;rfile&nbsp;wfile</span><span style="color: #008000;"><br></span><span style="color: #008080;">38</span>&nbsp;<span style="color: #008000;"></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;rfile.close();<br></span><span style="color: #008080;">39</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;wfile.close();<br></span><span style="color: #008080;">40</span>&nbsp;<span style="color: #000000;"><br></span><span style="color: #008080;">41</span>&nbsp;<span style="color: #000000;">&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></span><span style="color: #008080;">42</span>&nbsp;<span style="color: #000000;">}<br></span><span style="color: #008080;">43</span>&nbsp;<span style="color: #000000;"></span></div>
<br><img src ="http://www.cppblog.com/kefeng/aggbug/129591.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/kefeng/" target="_blank">柯枫</a> 2010-10-12 11:30 <a href="http://www.cppblog.com/kefeng/archive/2010/10/12/129591.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>libmemcached安装及简单例子</title><link>http://www.cppblog.com/kefeng/archive/2010/10/11/129422.html</link><dc:creator>柯枫</dc:creator><author>柯枫</author><pubDate>Mon, 11 Oct 2010 04:05:00 GMT</pubDate><guid>http://www.cppblog.com/kefeng/archive/2010/10/11/129422.html</guid><wfw:comment>http://www.cppblog.com/kefeng/comments/129422.html</wfw:comment><comments>http://www.cppblog.com/kefeng/archive/2010/10/11/129422.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/kefeng/comments/commentRss/129422.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/kefeng/services/trackbacks/129422.html</trackback:ping><description><![CDATA[1、下载安装libmemcached <br>&nbsp;$ wget http://launchpad.net/libmemcached/1.0/0.44/+download/libmemcached-0.44.tar.gz<br>&nbsp;$ tar xvzf libmemcached-0.44tar.gz <br>&nbsp;$ cd libmemcached-0.44<br>&nbsp;$ ./configure<br>&nbsp;$ make<br>&nbsp;$ sudo make install<br>&nbsp;libmemcached 默认安装在/usr/local/,头文件安装在/usr/local/include/libmemcachde/,动态库默认安装在/usr/local/lib/下。<br>2、libmemcached简单测试使用<br>
<div style="background-color: #eeeeee; font-size: 13px; border-left-color: #cccccc; padding: 4px 5px 4px 4px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: #008080;">&nbsp;1</span>&nbsp;<span style="color: #000000;">#include&nbsp;</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">iostream</span><span style="color: #000000;">&gt;</span><span style="color: #000000;"><br></span><span style="color: #008080;">&nbsp;2</span>&nbsp;<span style="color: #000000;">#include&nbsp;</span><span style="color: #000000;">&lt;</span><span style="color: #0000ff;">string</span><span style="color: #000000;">&gt;</span><span style="color: #000000;"><br></span><span style="color: #008080;">&nbsp;3</span>&nbsp;<span style="color: #000000;">#include&nbsp;</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">libmemcached</span><span style="color: #000000;">/</span><span style="color: #000000;">memcached.h</span><span style="color: #000000;">&gt;</span><span style="color: #000000;"><br></span><span style="color: #008080;">&nbsp;4</span>&nbsp;<span style="color: #000000;"><br></span><span style="color: #008080;">&nbsp;5</span>&nbsp;<span style="color: #000000;"></span><span style="color: #0000ff;">using</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">namespace</span><span style="color: #000000;">&nbsp;std;<br></span><span style="color: #008080;">&nbsp;6</span>&nbsp;<span style="color: #000000;"><br></span><span style="color: #008080;">&nbsp;7</span>&nbsp;<span style="color: #000000;"></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,</span><span style="color: #0000ff;">char</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">*</span><span style="color: #000000;">argv[])<br></span><span style="color: #008080;">&nbsp;8</span>&nbsp;<span style="color: #000000;">{<br></span><span style="color: #008080;">&nbsp;9</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">connect&nbsp;server</span><span style="color: #008000;"><br></span><span style="color: #008080;">10</span>&nbsp;<span style="color: #008000;"></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;memcached_st&nbsp;</span><span style="color: #000000;">*</span><span style="color: #000000;">memc;<br></span><span style="color: #008080;">11</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;memcached_return&nbsp;rc;<br></span><span style="color: #008080;">12</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;memcached_server_st&nbsp;</span><span style="color: #000000;">*</span><span style="color: #000000;">server;<br></span><span style="color: #008080;">13</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;time_t&nbsp;expiration;<br></span><span style="color: #008080;">14</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;uint32_t&nbsp;&nbsp;flags;<br></span><span style="color: #008080;">15</span>&nbsp;<span style="color: #000000;"><br></span><span style="color: #008080;">16</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;memc&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;memcached_create(NULL);<br></span><span style="color: #008080;">17</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;server&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;memcached_server_list_append(NULL,</span><span style="color: #000000;">"</span><span style="color: #000000;">localhost</span><span style="color: #000000;">"</span><span style="color: #000000;">,</span><span style="color: #000000;">11211</span><span style="color: #000000;">,</span><span style="color: #000000;">&amp;</span><span style="color: #000000;">rc);<br></span><span style="color: #008080;">18</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;rc</span><span style="color: #000000;">=</span><span style="color: #000000;">memcached_server_push(memc,server);<br></span><span style="color: #008080;">19</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;memcached_server_list_free(server);<br></span><span style="color: #008080;">20</span>&nbsp;<span style="color: #000000;"><br></span><span style="color: #008080;">21</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">string</span><span style="color: #000000;">&nbsp;key&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">key</span><span style="color: #000000;">"</span><span style="color: #000000;">;<br></span><span style="color: #008080;">22</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">string</span><span style="color: #000000;">&nbsp;value&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">value</span><span style="color: #000000;">"</span><span style="color: #000000;">;<br></span><span style="color: #008080;">23</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;size_t&nbsp;value_length&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;value.length();<br></span><span style="color: #008080;">24</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;size_t&nbsp;key_length&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;key.length();<br></span><span style="color: #008080;">25</span>&nbsp;<span style="color: #000000;"><br></span><span style="color: #008080;">26</span>&nbsp;<span style="color: #000000;"><br></span><span style="color: #008080;">27</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">Save&nbsp;data</span><span style="color: #008000;"><br></span><span style="color: #008080;">28</span>&nbsp;<span style="color: #008000;"></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;rc</span><span style="color: #000000;">=</span><span style="color: #000000;">memcached_set(memc,key.c_str(),key.length(),value.c_str(),value.length(),expiration,flags);<br></span><span style="color: #008080;">29</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">(rc</span><span style="color: #000000;">==</span><span style="color: #000000;">MEMCACHED_SUCCESS)<br></span><span style="color: #008080;">30</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;{<br></span><span style="color: #008080;">31</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cout</span><span style="color: #000000;">&lt;&lt;</span><span style="color: #000000;">"</span><span style="color: #000000;">Save&nbsp;data:</span><span style="color: #000000;">"</span><span style="color: #000000;">&lt;&lt;</span><span style="color: #000000;">value</span><span style="color: #000000;">&lt;&lt;</span><span style="color: #000000;">"</span><span style="color: #000000;">&nbsp;sucessful!</span><span style="color: #000000;">"</span><span style="color: #000000;">&lt;&lt;</span><span style="color: #000000;">endl;<br></span><span style="color: #008080;">32</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;}<br></span><span style="color: #008080;">33</span>&nbsp;<span style="color: #000000;"><br></span><span style="color: #008080;">34</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">Get&nbsp;data</span><span style="color: #008000;"><br></span><span style="color: #008080;">35</span>&nbsp;<span style="color: #008000;"></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">char</span><span style="color: #000000;">*</span><span style="color: #000000;">&nbsp;result&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;memcached_get(memc,key.c_str(),key_length,</span><span style="color: #000000;">&amp;</span><span style="color: #000000;">value_length,</span><span style="color: #000000;">&amp;</span><span style="color: #000000;">flags,</span><span style="color: #000000;">&amp;</span><span style="color: #000000;">rc);<br></span><span style="color: #008080;">36</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">(rc&nbsp;</span><span style="color: #000000;">==</span><span style="color: #000000;">&nbsp;MEMCACHED_SUCCESS)<br></span><span style="color: #008080;">37</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;{<br></span><span style="color: #008080;">38</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cout</span><span style="color: #000000;">&lt;&lt;</span><span style="color: #000000;">"</span><span style="color: #000000;">Get&nbsp;value:</span><span style="color: #000000;">"</span><span style="color: #000000;">&lt;&lt;</span><span style="color: #000000;">result</span><span style="color: #000000;">&lt;&lt;</span><span style="color: #000000;">"</span><span style="color: #000000;">&nbsp;sucessful!</span><span style="color: #000000;">"</span><span style="color: #000000;">&lt;&lt;</span><span style="color: #000000;">endl;<br></span><span style="color: #008080;">39</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;}<br></span><span style="color: #008080;">40</span>&nbsp;<span style="color: #000000;"><br></span><span style="color: #008080;">41</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">Delete&nbsp;data</span><span style="color: #008000;"><br></span><span style="color: #008080;">42</span>&nbsp;<span style="color: #008000;"></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;rc</span><span style="color: #000000;">=</span><span style="color: #000000;">memcached_delete(memc,key.c_str(),key_length,expiration);<br></span><span style="color: #008080;">43</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">(rc</span><span style="color: #000000;">==</span><span style="color: #000000;">MEMCACHED_SUCCESS)<br></span><span style="color: #008080;">44</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;{<br></span><span style="color: #008080;">45</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cout</span><span style="color: #000000;">&lt;&lt;</span><span style="color: #000000;">"</span><span style="color: #000000;">Delete&nbsp;key:</span><span style="color: #000000;">"</span><span style="color: #000000;">&lt;&lt;</span><span style="color: #000000;">key</span><span style="color: #000000;">&lt;&lt;</span><span style="color: #000000;">"</span><span style="color: #000000;">&nbsp;sucessful!</span><span style="color: #000000;">"</span><span style="color: #000000;">&lt;&lt;</span><span style="color: #000000;">endl;<br></span><span style="color: #008080;">46</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;}<br></span><span style="color: #008080;">47</span>&nbsp;<span style="color: #000000;"><br></span><span style="color: #008080;">48</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">free</span><span style="color: #008000;"><br></span><span style="color: #008080;">49</span>&nbsp;<span style="color: #008000;"></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;memcached_free(memc);<br></span><span style="color: #008080;">50</span>&nbsp;<span style="color: #000000;">&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></span><span style="color: #008080;">51</span>&nbsp;<span style="color: #000000;">}<br></span><span style="color: #008080;">52</span>&nbsp;<span style="color: #000000;"><br></span><span style="color: #008080;">53</span>&nbsp;<span style="color: #000000;"></span></div>
<br>编译：g++ -o testmemcached testmemcached.cpp -lmemcached<br>运行：./testmemcached<br>结果：Save data:value sucessful!<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Get value:value sucessful!<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Delete key:key sucessful!<br><br> <img src ="http://www.cppblog.com/kefeng/aggbug/129422.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/kefeng/" target="_blank">柯枫</a> 2010-10-11 12:05 <a href="http://www.cppblog.com/kefeng/archive/2010/10/11/129422.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Linux下安装memcached</title><link>http://www.cppblog.com/kefeng/archive/2010/10/11/129408.html</link><dc:creator>柯枫</dc:creator><author>柯枫</author><pubDate>Mon, 11 Oct 2010 01:45:00 GMT</pubDate><guid>http://www.cppblog.com/kefeng/archive/2010/10/11/129408.html</guid><wfw:comment>http://www.cppblog.com/kefeng/comments/129408.html</wfw:comment><comments>http://www.cppblog.com/kefeng/archive/2010/10/11/129408.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/kefeng/comments/commentRss/129408.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/kefeng/services/trackbacks/129408.html</trackback:ping><description><![CDATA[<p>1、运行memcached需要本文开头介绍的libevent库</p>
<pre><span style="color: #ff0000;">$ sudo yum install libevent libevent-deve</span></pre>
<p>2、下载安装memcached</p>
<pre style="color: #ff0000;">$ wget http://memcached.googlecode.com/files/memcached-1.4.5.tar.gz<br>$ tar zxf memcached-1.4.5.tar.gz
$ cd memcached-1.4.5
$ ./configure
$ make
$ sudo make install</pre>
<p>默认情况下memcached安装到/usr/local/bin下。</p>
<h3 style="font-weight: normal;" id="content_2_8">3、memcached的启动</h3>
<p>从终端输入以下命令，启动memcached。</p>
<pre><span style="color: #ff0000;">$ /usr/local/bin/memcached -p 11211 -m 64m -vv </span><span style="color: #805050; background-color: #90c1ff;"><br></span></pre>
<p>这里显示了调试信息。这样就在前台启动了memcached，监听TCP端口11211
最大内存使用量为64M。调试信息的内容大部分是关于存储的信息，
下次连载时具体说明。</p>
<p>作为daemon后台启动时，只需</p>
<pre style="color: #ff0000;">$ /usr/local/bin/memcached -p 11211 -m 64m -d</pre>
<p>这里使用的memcached启动选项的内容如下。</p>
<div class="ie5">
<table class="style_table" border="0" cellspacing="1">
    <tbody>
        <tr>
            <td style="color: #ff0000;" class="style_td">选项</td>
            <td style="color: #ff0000;" class="style_td">说明</td>
        </tr>
        <tr>
            <td style="color: #ff0000;" class="style_td">-p</td>
            <td style="color: #ff0000;" class="style_td">使用的TCP端口。默认为11211</td>
        </tr>
        <tr>
            <td style="color: #ff0000;" class="style_td">-m</td>
            <td style="color: #ff0000;" class="style_td">最大内存大小。默认为64M</td>
        </tr>
        <tr>
            <td style="color: #ff0000;" class="style_td">-vv</td>
            <td style="color: #ff0000;" class="style_td">用very vrebose模式启动，调试信息和错误输出到控制台</td>
        </tr>
        <tr>
            <td style="color: #ff0000;" class="style_td">-d</td>
            <td style="color: #ff0000;" class="style_td">作为daemon在后台启动</td>
        </tr>
    </tbody>
</table>
</div>
<p>上面四个是常用的启动选项，其他还有很多，通过</p>
<pre style="color: #ff0000;">$ /usr/local/bin/memcached -h</pre><img src ="http://www.cppblog.com/kefeng/aggbug/129408.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/kefeng/" target="_blank">柯枫</a> 2010-10-11 09:45 <a href="http://www.cppblog.com/kefeng/archive/2010/10/11/129408.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>