﻿<?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++博客-mingjiagu</title><link>http://www.cppblog.com/mingjiagu/</link><description /><language>zh-cn</language><lastBuildDate>Wed, 08 Apr 2026 23:29:27 GMT</lastBuildDate><pubDate>Wed, 08 Apr 2026 23:29:27 GMT</pubDate><ttl>60</ttl><item><title>创建硬链接：Invalid cross-device link错误(转帖)</title><link>http://www.cppblog.com/mingjiagu/archive/2011/12/01/161271.html</link><dc:creator>mousegu</dc:creator><author>mousegu</author><pubDate>Thu, 01 Dec 2011 03:27:00 GMT</pubDate><guid>http://www.cppblog.com/mingjiagu/archive/2011/12/01/161271.html</guid><wfw:comment>http://www.cppblog.com/mingjiagu/comments/161271.html</wfw:comment><comments>http://www.cppblog.com/mingjiagu/archive/2011/12/01/161271.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/mingjiagu/comments/commentRss/161271.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/mingjiagu/services/trackbacks/161271.html</trackback:ping><description><![CDATA[<div style="margin: 15px" id="art">test243:~ # ln -d /usr/local/named/etc/named.conf /etc/named.conf<br />ln: creating hard link ' /etc/............. /etc/named.conf' ：Invalid cross-device link<br />原因：<br />硬链接限制：1.不能跨文件系统。2，不能连接目录。<span style="color: rgb(255,1,2)">只能在同一个分区建立数据关联</span><br />此处因为2个文件在不同的目录所有不能建立硬链接。<br /><br /><br /><span style="font-family: 黑体">以下是网络收集的一些资料</span>：<br />硬链接和软连接的比较<br />1）在同一文件系统下，可以创建软链接或硬链接（同文件系统不同目录下也可以）；<br />2）硬链接的文件显示大小跟原文件一样；软链接的文件很小，只有几十个字节；<br />3）硬链接的文件的inode跟原文件一样；软连接的文件有自己的inode，跟原文件不一样；<br />4）创建软链接或硬链接文件不会明显占用文件系统磁盘空间；<br /><br />我们测试一下跨文件系统（/home --&gt; /var ），是否可以建立软链接和硬链接：<br />软链接成功：<br />[root@s14 var]# <span style="background-color: rgb(204,255,255)">ln -s /home/zjw/Wins2003.tar.gz /var/wins2003.symboliclink</span><br />硬链接失败：<br />[root@s14 var]#<span style="background-color: rgb(204,255,255)"> ln -b /home/zjw/Wins2003.tar.gz /var/wins2003.hardlink </span><br /><font color="#800080">ln: creating hard link `/var/wins2003.hardlink' to `/home/zjw/Wins2003.tar.gz': Invalid cross-device link</font><br /><br />上述实验说明：<br />1）软链接可以跨文件系统建立； 硬链接则不可以；<br /><br /><strong>硬链接(hard link)</strong><br />UNIX文件系统提供了一种将不同文件链接至同一个文件的机制，我们称这种机制为链接。它可以使得单个程序对同一文件使用不同的名字。这样的好处是文件系 统只存在一个文件的副本，系统简单地通过在目录中建立一个新的登记项来实现这种连接。<strong>该登记项具有一个新的文件名和要连接文件的 inode号，文件的目录登记项就是所谓的文件硬链接</strong>（<font color="#800080">硬链接，目录登记项： 文件名--&gt;文件的inode；文件名可以有多个，但文件inode只是一个</font>）。不论一个文件有多少硬链接，在磁盘上只有一个描述它的inode，只要该文件的链接数不为0，该文件就保持存在。<strong>硬链接不能跨越文件系统，也不能对目录建立硬链接！<br /></strong>硬 连接是直接建立在节点表上的（inode），建立硬连接指向一个文件的时候，会更新节点表上面的计数值。举个例子，一个文件被连接了两次（硬连接），这 个文件的计数值 是3，而无论通过3个文件名中的任何一个访问，效果都是完全一样的，但是如果删除其中任意一个，都只是把计数值减1，不会删除实际的内容的，（任何存在的 文件本身就算是一个硬连接）只有计数值变 成0也就是没有任何硬连接指向的时候才会真实的删除内容。<br /><clk></clk><br /><strong>软链接(symbolic link)</strong><br /><clk></clk>我们把符号链接称为软链接，它是指向另一个文件的特殊文件，这种文件的<strong>数据部分仅包含它所要链接文件的路径名</strong>。软链接是为了克服硬<clk></clk>链接的不足而引入的，<strong>软链接不直接使用inode号作为文件指针，而是使用文件路径名作为指针</strong>（<font color="#800080">软链接：文件名 + 数据部分--&gt;目标文件的路径名</font>）。软件有自己的inode，并在磁盘上有一小片空间存放路径名。因此，软链接能够跨文件系统，也可以和目录链接！其二，软链接可以对一个不存在的文件名进行链接，但直到这个名字对应的文件被创建后，才能打开其 链接。 <br /></div><img src ="http://www.cppblog.com/mingjiagu/aggbug/161271.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/mingjiagu/" target="_blank">mousegu</a> 2011-12-01 11:27 <a href="http://www.cppblog.com/mingjiagu/archive/2011/12/01/161271.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>代码覆盖率测试（转载自转载时请表明原文出处(http://blog.sina.com.cn/wyw1976)及作者邮箱(wyw1976@gmail.com)）</title><link>http://www.cppblog.com/mingjiagu/archive/2011/11/15/160159.html</link><dc:creator>mousegu</dc:creator><author>mousegu</author><pubDate>Tue, 15 Nov 2011 03:32:00 GMT</pubDate><guid>http://www.cppblog.com/mingjiagu/archive/2011/11/15/160159.html</guid><wfw:comment>http://www.cppblog.com/mingjiagu/comments/160159.html</wfw:comment><comments>http://www.cppblog.com/mingjiagu/archive/2011/11/15/160159.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/mingjiagu/comments/commentRss/160159.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/mingjiagu/services/trackbacks/160159.html</trackback:ping><description><![CDATA[<span style="widows: 2; text-transform: none; text-indent: 0px; letter-spacing: normal; border-collapse: separate; font: medium Simsun; white-space: normal; orphans: 2; color: rgb(0,0,0); word-spacing: 0px; -webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; -webkit-text-decorations-in-effect: none; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px" class="Apple-style-span"><span style="text-align: left; line-height: 21px; font-family: simsun; color: rgb(50,62,50); font-size: 14px" class="Apple-style-span"> 
<p style="padding-bottom: 0px; line-height: 21px; border-right-width: 0px; list-style-type: none; margin: 0px 0px 5px; padding-left: 0px; padding-right: 0px; word-wrap: normal; border-top-width: 0px; border-bottom-width: 0px; word-break: normal; border-left-width: 0px; padding-top: 0px"><span class="Apple-converted-space">&nbsp;</span>在Linux中，可以用gcov进行代码覆盖率测试。设想一种测试场景：被测对象是一个动态链接库，另外有几个试程序，现在想知道：</p>
<p style="padding-bottom: 0px; line-height: 21px; border-right-width: 0px; list-style-type: none; margin: 0px 0px 5px; padding-left: 0px; padding-right: 0px; word-wrap: normal; border-top-width: 0px; border-bottom-width: 0px; word-break: normal; border-left-width: 0px; padding-top: 0px">（1）这些测试程序是否足够多了，即是否能覆盖所有的动态链接库中的代码；</p>
<p style="padding-bottom: 0px; line-height: 21px; border-right-width: 0px; list-style-type: none; margin: 0px 0px 5px; padding-left: 0px; padding-right: 0px; word-wrap: normal; border-top-width: 0px; border-bottom-width: 0px; word-break: normal; border-left-width: 0px; padding-top: 0px">（2）动态链接库中是否有冗余的代码，即无论什么测试都不可能走到的代码；</p>
<p style="padding-bottom: 0px; line-height: 21px; border-right-width: 0px; list-style-type: none; margin: 0px 0px 5px; padding-left: 0px; padding-right: 0px; word-wrap: normal; border-top-width: 0px; border-bottom-width: 0px; word-break: normal; border-left-width: 0px; padding-top: 0px">（3）动态链接库中的hot spot, 即那些代码是被执行最多的，以便优化</p>
<p style="padding-bottom: 0px; line-height: 21px; border-right-width: 0px; list-style-type: none; margin: 0px 0px 5px; padding-left: 0px; padding-right: 0px; word-wrap: normal; border-top-width: 0px; border-bottom-width: 0px; word-break: normal; border-left-width: 0px; padding-top: 0px">&nbsp;<wbr>&nbsp;<wbr>gcov 就可以很好的满足上述3点需求。</p>
<p style="padding-bottom: 0px; line-height: 21px; border-right-width: 0px; list-style-type: none; margin: 0px 0px 5px; padding-left: 0px; padding-right: 0px; word-wrap: normal; border-top-width: 0px; border-bottom-width: 0px; word-break: normal; border-left-width: 0px; padding-top: 0px">&nbsp;<wbr></p>
<p style="padding-bottom: 0px; line-height: 21px; border-right-width: 0px; list-style-type: none; margin: 0px 0px 5px; padding-left: 0px; padding-right: 0px; word-wrap: normal; border-top-width: 0px; border-bottom-width: 0px; word-break: normal; border-left-width: 0px; padding-top: 0px">步骤如下：</p>
<p style="padding-bottom: 0px; line-height: 21px; border-right-width: 0px; list-style-type: none; margin: 0px 0px 5px; padding-left: 0px; padding-right: 0px; word-wrap: normal; border-top-width: 0px; border-bottom-width: 0px; word-break: normal; border-left-width: 0px; padding-top: 0px"><font style="line-height: 21px; word-wrap: normal; word-break: normal" color="#ff0000"><strong style="font-weight: bold">（1）编译测试对象</strong></font></p>
<p style="padding-bottom: 0px; line-height: 21px; border-right-width: 0px; list-style-type: none; margin: 0px 0px 5px; padding-left: 0px; padding-right: 0px; word-wrap: normal; border-top-width: 0px; border-bottom-width: 0px; word-break: normal; border-left-width: 0px; padding-top: 0px">在编译被测对象时加入&#8220;-fprofile-arcs -ftest-coverage &#8221;， 例如下面是动态链接库的源码:cal.c</p>
<p style="padding-bottom: 0px; line-height: 21px; border-right-width: 0px; list-style-type: none; margin: 0px 0px 5px; padding-left: 0px; padding-right: 0px; word-wrap: normal; border-top-width: 0px; border-bottom-width: 0px; word-break: normal; border-left-width: 0px; padding-top: 0px"><font style="line-height: 15px; word-wrap: normal; font-size: 10px; word-break: normal" color="#0000ff">#include &lt;stdio.h&gt;<br />int cal(int i)<br />{<br />&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr><span class="Apple-converted-space">&nbsp;</span>if(i&lt;0)<br />&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr><span class="Apple-converted-space">&nbsp;</span>printf("\n %d", i);<br />&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr><span class="Apple-converted-space">&nbsp;</span>if(i&lt;5)<br />&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr><span class="Apple-converted-space">&nbsp;</span>printf("\n%d", i);<br />&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr><span class="Apple-converted-space">&nbsp;</span>if(i&gt;20)<br />&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr><span class="Apple-converted-space">&nbsp;</span>printf("\n%d", i);<br />&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr><span class="Apple-converted-space">&nbsp;</span>if(i&gt;100)<br />&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr><span class="Apple-converted-space">&nbsp;</span>printf("\n%d", i);</font></p>
<p style="padding-bottom: 0px; line-height: 21px; border-right-width: 0px; list-style-type: none; margin: 0px 0px 5px; padding-left: 0px; padding-right: 0px; word-wrap: normal; border-top-width: 0px; border-bottom-width: 0px; word-break: normal; border-left-width: 0px; padding-top: 0px"><font style="line-height: 15px; word-wrap: normal; font-size: 10px; word-break: normal" color="#0000ff">&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr><span class="Apple-converted-space">&nbsp;</span>return 1;</font></p>
<p style="padding-bottom: 0px; line-height: 21px; border-right-width: 0px; list-style-type: none; margin: 0px 0px 5px; padding-left: 0px; padding-right: 0px; word-wrap: normal; border-top-width: 0px; border-bottom-width: 0px; word-break: normal; border-left-width: 0px; padding-top: 0px"><font style="line-height: 15px; word-wrap: normal; font-size: 10px; word-break: normal" color="#0000ff">}<br /></font></p>
<p style="padding-bottom: 0px; line-height: 21px; border-right-width: 0px; list-style-type: none; margin: 0px 0px 5px; padding-left: 0px; padding-right: 0px; word-wrap: normal; border-top-width: 0px; border-bottom-width: 0px; word-break: normal; border-left-width: 0px; padding-top: 0px"><font style="line-height: 15px; word-wrap: normal; font-size: 10px; word-break: normal"><br /><font style="line-height: 18px; word-wrap: normal; font-size: 12px; word-break: normal">编译命令如下：</font></font></p>
<p style="padding-bottom: 0px; line-height: 21px; border-right-width: 0px; list-style-type: none; margin: 0px 0px 5px; padding-left: 0px; padding-right: 0px; word-wrap: normal; border-top-width: 0px; border-bottom-width: 0px; word-break: normal; border-left-width: 0px; padding-top: 0px"><font style="line-height: 15px; word-wrap: normal; font-size: 10px; word-break: normal"><font style="line-height: 18px; word-wrap: normal; font-size: 12px; word-break: normal">gcc -fprofile-arcs -ftest-coverage&nbsp;<wbr><span class="Apple-converted-space">&nbsp;</span>-c cal.c<br />gcc -fprofile-arcs -ftest-coverage&nbsp;<wbr><span class="Apple-converted-space">&nbsp;</span>-shared -o libcal.so cal.o<br />编译成功后，除了产生*.so , *.o, 还将在cal.c 所在的目录中产生cal.gcno文件</font></font></p>
<p style="padding-bottom: 0px; line-height: 21px; border-right-width: 0px; list-style-type: none; margin: 0px 0px 5px; padding-left: 0px; padding-right: 0px; word-wrap: normal; border-top-width: 0px; border-bottom-width: 0px; word-break: normal; border-left-width: 0px; padding-top: 0px"><font style="line-height: 15px; word-wrap: normal; font-size: 10px; word-break: normal"><font style="line-height: 18px; word-wrap: normal; font-size: 12px; word-break: normal"><font style="line-height: 21px; word-wrap: normal; font-size: 14px; word-break: normal" color="#ff0000"><strong style="font-weight: bold">(2)编译测试程序</strong></font></font></font></p>
<p style="padding-bottom: 0px; line-height: 21px; border-right-width: 0px; list-style-type: none; margin: 0px 0px 5px; padding-left: 0px; padding-right: 0px; word-wrap: normal; border-top-width: 0px; border-bottom-width: 0px; word-break: normal; border-left-width: 0px; padding-top: 0px"><font style="line-height: 15px; word-wrap: normal; font-size: 10px; word-break: normal">main.c:</font></p>
<p style="padding-bottom: 0px; line-height: 21px; border-right-width: 0px; list-style-type: none; margin: 0px 0px 5px; padding-left: 0px; padding-right: 0px; word-wrap: normal; border-top-width: 0px; border-bottom-width: 0px; word-break: normal; border-left-width: 0px; padding-top: 0px"><font style="line-height: 15px; word-wrap: normal; font-size: 10px; word-break: normal" color="#0000ff">#include &lt;stdio.h&gt;</font></p>
<p style="padding-bottom: 0px; line-height: 21px; border-right-width: 0px; list-style-type: none; margin: 0px 0px 5px; padding-left: 0px; padding-right: 0px; word-wrap: normal; border-top-width: 0px; border-bottom-width: 0px; word-break: normal; border-left-width: 0px; padding-top: 0px"><font style="line-height: 15px; word-wrap: normal; font-size: 10px; word-break: normal" color="#0000ff">int main()<br />{</font></p>
<p style="padding-bottom: 0px; line-height: 21px; border-right-width: 0px; list-style-type: none; margin: 0px 0px 5px; padding-left: 0px; padding-right: 0px; word-wrap: normal; border-top-width: 0px; border-bottom-width: 0px; word-break: normal; border-left-width: 0px; padding-top: 0px"><font style="line-height: 15px; word-wrap: normal; font-size: 10px; word-break: normal" color="#0000ff">&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr><span class="Apple-converted-space">&nbsp;</span>int i = 0;</font></p>
<p style="padding-bottom: 0px; line-height: 21px; border-right-width: 0px; list-style-type: none; margin: 0px 0px 5px; padding-left: 0px; padding-right: 0px; word-wrap: normal; border-top-width: 0px; border-bottom-width: 0px; word-break: normal; border-left-width: 0px; padding-top: 0px"><font style="line-height: 15px; word-wrap: normal; font-size: 10px; word-break: normal"><font style="line-height: 15px; word-wrap: normal; word-break: normal" color="#0000ff">&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr><span class="Apple-converted-space">&nbsp;</span>for(i=0;i&lt;45;i++)<br />&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr><span class="Apple-converted-space">&nbsp;</span>{<br />&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr><span class="Apple-converted-space">&nbsp;</span>cal(i);<br />&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr><span class="Apple-converted-space">&nbsp;</span>}<br />&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr><span class="Apple-converted-space">&nbsp;</span>return 1;<br />}<br /></font><font style="line-height: 18px; word-wrap: normal; font-size: 12px; word-break: normal">&nbsp;<wbr></font></font></p>
<p style="padding-bottom: 0px; line-height: 21px; border-right-width: 0px; list-style-type: none; margin: 0px 0px 5px; padding-left: 0px; padding-right: 0px; word-wrap: normal; border-top-width: 0px; border-bottom-width: 0px; word-break: normal; border-left-width: 0px; padding-top: 0px"><font style="line-height: 18px; word-wrap: normal; font-size: 12px; word-break: normal">编译命令如下(假设libcal.so放在/root下)：</font></p>
<p style="padding-bottom: 0px; line-height: 21px; border-right-width: 0px; list-style-type: none; margin: 0px 0px 5px; padding-left: 0px; padding-right: 0px; word-wrap: normal; border-top-width: 0px; border-bottom-width: 0px; word-break: normal; border-left-width: 0px; padding-top: 0px"><font style="line-height: 15px; word-wrap: normal; font-size: 10px; word-break: normal">&nbsp;<wbr><font style="line-height: 18px; word-wrap: normal; font-size: 12px; word-break: normal">gcc&nbsp;<wbr>-o main main.c -L/root -lcal</font></font></p>
<p style="padding-bottom: 0px; line-height: 21px; border-right-width: 0px; list-style-type: none; margin: 0px 0px 5px; padding-left: 0px; padding-right: 0px; word-wrap: normal; border-top-width: 0px; border-bottom-width: 0px; word-break: normal; border-left-width: 0px; padding-top: 0px">&nbsp;<wbr><font style="line-height: 21px; word-wrap: normal; word-break: normal" color="#ff0000"><strong style="font-weight: bold">（3）运行测试程序</strong></font></p>
<p style="padding-bottom: 0px; line-height: 21px; border-right-width: 0px; list-style-type: none; margin: 0px 0px 5px; padding-left: 0px; padding-right: 0px; word-wrap: normal; border-top-width: 0px; border-bottom-width: 0px; word-break: normal; border-left-width: 0px; padding-top: 0px">./main</p>
<p style="padding-bottom: 0px; line-height: 21px; border-right-width: 0px; list-style-type: none; margin: 0px 0px 5px; padding-left: 0px; padding-right: 0px; word-wrap: normal; border-top-width: 0px; border-bottom-width: 0px; word-break: normal; border-left-width: 0px; padding-top: 0px">运行完毕后，在cal.c 所在的目录中产生cal.gcda文件</p>
<p style="padding-bottom: 0px; line-height: 21px; border-right-width: 0px; list-style-type: none; margin: 0px 0px 5px; padding-left: 0px; padding-right: 0px; word-wrap: normal; border-top-width: 0px; border-bottom-width: 0px; word-break: normal; border-left-width: 0px; padding-top: 0px">&nbsp;<wbr><font style="line-height: 21px; word-wrap: normal; word-break: normal" color="#ff0000"><strong style="font-weight: bold">（4）运行gcov</strong></font></p>
<p style="padding-bottom: 0px; line-height: 21px; border-right-width: 0px; list-style-type: none; margin: 0px 0px 5px; padding-left: 0px; padding-right: 0px; word-wrap: normal; border-top-width: 0px; border-bottom-width: 0px; word-break: normal; border-left-width: 0px; padding-top: 0px"><font style="line-height: 21px; word-wrap: normal; word-break: normal" color="#000000">进入cal.c所在的目录，运行&#8220;gcov cal.c&#8221;, 会产生cal.c.gov, 内容如下：<br /></font><font style="line-height: 15px; word-wrap: normal; font-size: 10px; word-break: normal" color="#0000ff">&nbsp;<wbr>&nbsp;<wbr><span class="Apple-converted-space">&nbsp;</span>-:&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr><span class="Apple-converted-space">&nbsp;</span>0:Source:cal.c<br />&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr><span class="Apple-converted-space">&nbsp;</span>-:&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr><span class="Apple-converted-space">&nbsp;</span>0:Graph:cal.gcno<br />&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr><span class="Apple-converted-space">&nbsp;</span>-:&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr><span class="Apple-converted-space">&nbsp;</span>0:Data:cal.gcda<br />&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr><span class="Apple-converted-space">&nbsp;</span>-:&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr><span class="Apple-converted-space">&nbsp;</span>0:Runs:1<br />&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr><span class="Apple-converted-space">&nbsp;</span>-:&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr><span class="Apple-converted-space">&nbsp;</span>0:Programs:1<br />&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr><span class="Apple-converted-space">&nbsp;</span>-:&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr><span class="Apple-converted-space">&nbsp;</span>1:#include &lt;stdio.h&gt;<br />&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr><span class="Apple-converted-space">&nbsp;</span>-:&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr><span class="Apple-converted-space">&nbsp;</span>2:int cal(int i)<br />&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr><span class="Apple-converted-space">&nbsp;</span>45:&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr><span class="Apple-converted-space">&nbsp;</span>3:{<br />&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr><span class="Apple-converted-space">&nbsp;</span>45:&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr><span class="Apple-converted-space">&nbsp;</span>4:&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr><span class="Apple-converted-space">&nbsp;</span>if(i&lt;0)<br />&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr><span class="Apple-converted-space">&nbsp;</span>#####:&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr><span class="Apple-converted-space">&nbsp;</span>5:&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr><span class="Apple-converted-space">&nbsp;</span>printf("\n %d", i);<br />&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr><span class="Apple-converted-space">&nbsp;</span>45:&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr><span class="Apple-converted-space">&nbsp;</span>6:&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr><span class="Apple-converted-space">&nbsp;</span>if(i&lt;5)<br />&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr><span class="Apple-converted-space">&nbsp;</span>5:&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr><span class="Apple-converted-space">&nbsp;</span>7:&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr><span class="Apple-converted-space">&nbsp;</span>printf("\n%d", i);<br />&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr><span class="Apple-converted-space">&nbsp;</span>45:&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr><span class="Apple-converted-space">&nbsp;</span>8:&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr><span class="Apple-converted-space">&nbsp;</span>if(i&gt;20)<br />&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr><span class="Apple-converted-space">&nbsp;</span>24:&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr><span class="Apple-converted-space">&nbsp;</span>9:&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr><span class="Apple-converted-space">&nbsp;</span>printf("\n%d", i);<br />&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr><span class="Apple-converted-space">&nbsp;</span>45:&nbsp;<wbr>&nbsp;<wbr><span class="Apple-converted-space">&nbsp;</span>10:&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr><span class="Apple-converted-space">&nbsp;</span>if(i&gt;100)<br />&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr><span class="Apple-converted-space">&nbsp;</span>#####:&nbsp;<wbr>&nbsp;<wbr><span class="Apple-converted-space">&nbsp;</span>11:&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr><span class="Apple-converted-space">&nbsp;</span>printf("\n%d", i);<br />&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr><span class="Apple-converted-space">&nbsp;</span>-:&nbsp;<wbr>&nbsp;<wbr><span class="Apple-converted-space">&nbsp;</span>12:<br />&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr><span class="Apple-converted-space">&nbsp;</span>45:&nbsp;<wbr>&nbsp;<wbr><span class="Apple-converted-space">&nbsp;</span>13:&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr><span class="Apple-converted-space">&nbsp;</span>return 1;<br />&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr><span class="Apple-converted-space">&nbsp;</span>-:&nbsp;<wbr>&nbsp;<wbr><span class="Apple-converted-space">&nbsp;</span>14:<br />&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr><span class="Apple-converted-space">&nbsp;</span>-:&nbsp;<wbr>&nbsp;<wbr><span class="Apple-converted-space">&nbsp;</span>15:}<br /></font></p>
<p style="padding-bottom: 0px; line-height: 21px; border-right-width: 0px; list-style-type: none; margin: 0px 0px 5px; padding-left: 0px; padding-right: 0px; word-wrap: normal; border-top-width: 0px; border-bottom-width: 0px; word-break: normal; border-left-width: 0px; padding-top: 0px"><font style="line-height: 21px; word-wrap: normal; word-break: normal" color="#000000">其中， &#8220;#####&#8221;表示该行没执行，数字表示执行的次数</font></p>
<p style="padding-bottom: 0px; line-height: 21px; border-right-width: 0px; list-style-type: none; margin: 0px 0px 5px; padding-left: 0px; padding-right: 0px; word-wrap: normal; border-top-width: 0px; border-bottom-width: 0px; word-break: normal; border-left-width: 0px; padding-top: 0px">&nbsp;<wbr></p>
<p style="padding-bottom: 0px; line-height: 21px; border-right-width: 0px; list-style-type: none; margin: 0px 0px 5px; padding-left: 0px; padding-right: 0px; word-wrap: normal; border-top-width: 0px; border-bottom-width: 0px; word-break: normal; border-left-width: 0px; padding-top: 0px">&nbsp;<wbr><font style="line-height: 21px; word-wrap: normal; word-break: normal" color="#ff0000"><strong style="font-weight: bold">（4）运行lcov</strong></font></p>
<p style="padding-bottom: 0px; line-height: 21px; border-right-width: 0px; list-style-type: none; margin: 0px 0px 5px; padding-left: 0px; padding-right: 0px; word-wrap: normal; border-top-width: 0px; border-bottom-width: 0px; word-break: normal; border-left-width: 0px; padding-top: 0px"><font style="line-height: 21px; word-wrap: normal; word-break: normal" color="#000000">lcov是一个与gcov配合使用， 可以将gcov的结果整理成HTML。可能需要安装&#8220;apt-get install lcov&#8221;</font></p>
<p style="padding-bottom: 0px; line-height: 21px; border-right-width: 0px; list-style-type: none; margin: 0px 0px 5px; padding-left: 0px; padding-right: 0px; word-wrap: normal; border-top-width: 0px; border-bottom-width: 0px; word-break: normal; border-left-width: 0px; padding-top: 0px">执行&#8220;lcov --directory&nbsp;<wbr><span class="Apple-converted-space">&nbsp;</span>.&nbsp;<wbr>&nbsp;<wbr><span class="Apple-converted-space">&nbsp;</span>--capture --output-file cov.txt&#8221;</p>
<p style="padding-bottom: 0px; line-height: 21px; border-right-width: 0px; list-style-type: none; margin: 0px 0px 5px; padding-left: 0px; padding-right: 0px; word-wrap: normal; border-top-width: 0px; border-bottom-width: 0px; word-break: normal; border-left-width: 0px; padding-top: 0px">然后&#8220;genhtml&nbsp;<wbr><span class="Apple-converted-space">&nbsp;</span>-o&nbsp;<wbr><span class="Apple-converted-space">&nbsp;</span>results cov.txt&#8221;</p>
<p style="padding-bottom: 0px; line-height: 21px; border-right-width: 0px; list-style-type: none; margin: 0px 0px 5px; padding-left: 0px; padding-right: 0px; word-wrap: normal; border-top-width: 0px; border-bottom-width: 0px; word-break: normal; border-left-width: 0px; padding-top: 0px">最终结果会以html的形式放在result目录下。</p>
<p style="padding-bottom: 0px; line-height: 21px; border-right-width: 0px; list-style-type: none; margin: 0px 0px 5px; padding-left: 0px; padding-right: 0px; word-wrap: normal; border-top-width: 0px; border-bottom-width: 0px; word-break: normal; border-left-width: 0px; padding-top: 0px">&nbsp;<wbr></p>
<p style="padding-bottom: 0px; line-height: 21px; border-right-width: 0px; list-style-type: none; margin: 0px 0px 5px; padding-left: 0px; padding-right: 0px; word-wrap: normal; border-top-width: 0px; border-bottom-width: 0px; word-break: normal; border-left-width: 0px; padding-top: 0px">需要说明的是：</p>
<p style="padding-bottom: 0px; line-height: 21px; border-right-width: 0px; list-style-type: none; margin: 0px 0px 5px; padding-left: 0px; padding-right: 0px; word-wrap: normal; border-top-width: 0px; border-bottom-width: 0px; word-break: normal; border-left-width: 0px; padding-top: 0px">（1）gcov的结果可以累加。如果上面的程序main运行多次, cal.c.gov的结果是不同的，每行执行的次数会增加。</p>
<p style="padding-bottom: 0px; line-height: 21px; border-right-width: 0px; list-style-type: none; margin: 0px 0px 5px; padding-left: 0px; padding-right: 0px; word-wrap: normal; border-top-width: 0px; border-bottom-width: 0px; word-break: normal; border-left-width: 0px; padding-top: 0px">（2）*.gcno会产生在源文件编译时所在的目录。例如cal.c所在的目录是/root/cal_lib, 动态链接库编译成功后，将该目录删除了，运行程序main时，仍然会产生/root/cal_lib并在其中生成cal.gcda.</p>
<p style="padding-bottom: 0px; line-height: 21px; border-right-width: 0px; list-style-type: none; margin: 0px 0px 5px; padding-left: 0px; padding-right: 0px; word-wrap: normal; border-top-width: 0px; border-bottom-width: 0px; word-break: normal; border-left-width: 0px; padding-top: 0px">(3)在运行gcov时， cal.c， cal.gcno和cal.gcda必须在同一目录中。</p></span></span><img src ="http://www.cppblog.com/mingjiagu/aggbug/160159.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/mingjiagu/" target="_blank">mousegu</a> 2011-11-15 11:32 <a href="http://www.cppblog.com/mingjiagu/archive/2011/11/15/160159.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Linux gcov(转载)</title><link>http://www.cppblog.com/mingjiagu/archive/2011/11/14/160066.html</link><dc:creator>mousegu</dc:creator><author>mousegu</author><pubDate>Mon, 14 Nov 2011 03:27:00 GMT</pubDate><guid>http://www.cppblog.com/mingjiagu/archive/2011/11/14/160066.html</guid><wfw:comment>http://www.cppblog.com/mingjiagu/comments/160066.html</wfw:comment><comments>http://www.cppblog.com/mingjiagu/archive/2011/11/14/160066.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cppblog.com/mingjiagu/comments/commentRss/160066.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/mingjiagu/services/trackbacks/160066.html</trackback:ping><description><![CDATA[<table cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td id="postmessage_14023281" class="t_msgfont">简介<br />在这章里，我们将会探讨gcov实用程序，并且了解一下如何使用gcov来帮助<span class="t_tag" href="tag.php?name=%B2%E2%CA%D4">测试</span>与支持<span class="t_tag" href="tag.php?name=%C8%ED%BC%FE">软件</span>配置与优化。我们将会了解如何使用gcov来构建软件，并且理解他所提供的各种数据类型。最后，我们将探讨当执行保险测试时要避免的事情。<br />gcov是什么？<br />我们从gcov可以为我们做什么开始。gcov是一个保险测试工具。当构建一个程序时，gcov会监视一个程序的执行，并且会标识出执行了哪一行源码，哪一行没有执行。更进一步，gcov可以标识出某一行源执行的次数，这对于执行配置很有用（程序在哪里花费了大多数的<span class="t_tag" href="tag.php?name=%CA%B1%BC%E4">时间</span>）。因为gcov可以分辨出哪一行没有执行，这对于保险测试工具是很有用的。<br />我们将会讨论3.2.2版本的GNU编译器工具链的gcov的用法。<br />准备镜像<br />让我们来看一下如何为gcov的使用准备镜像。我们将会在接下来的部分提供更为详细的gcov的选项，所以这里只是作为一个介绍。我们将将会使用下面的所列的bubblesort的源码：<br />1: #include <br />2:<br />3: void bubbleSort( int list[], int size )<br />4: {<br />5: int i, j, temp, swap = 1;<br />6:<br />7: while (swap) {<br />8:<br />9: swap = 0;<br />10:<br />11: for ( i = (size-1) ; i &gt;= 0 ; i&#8212; ) {<br />12:<br />13: for ( j = 1 ; j list[j] ) {<br />16:<br />17: temp = list[j-1];<br />18: list[j-1] = list[j];<br />19: list[j] = temp;<br />20: swap = 1;<br />21:<br />22: }<br />23:<br />24: }<br />25:<br />26: }<br />27:<br />28: }<br />29:<br />30: }<br />31:<br />32: int main()<br />33: {<br />34: int theList[10]={10, 9, 8, 7, 6, 5, 4, 3, 2, 1};<br />35: int i;<br />36:<br />37: /* Invoke the bubble sort algorithm */<br />38: bubbleSort( theList, 10 );<br />39:<br />40: /* Print out the final list */<br />41: for (i = 0 ; i 使用gcov程序<br />现在我们准备好了我们的程序镜像了，让我们继续我们其余的部分。运行我们的程序就会生成我们在前面所讨论的数据集<span class="t_tag" href="tag.php?name=%CE%C4%BC%FE">文件</span>。然后我们使用我们希望进行检测的源码运行gcov程序。如下面所示：<br />$ ./bubblesort<br />...<br />$ gcov bubblesort.c<br />100.00% of 17 source lines executed in file bubblesort.c<br />Creating bubblesort.c.gcov.<br />这告诉我们在我们的例子程序中所有的源码行至少都执行了一次。我们可以通过查看所生成的bubblesort.c.gcov文件来了解每一源码行所实际运行的次数。如下面所示：<br />-: 0:Source:bubblesort.c<br />-: 0:Graph:bubblesort.gcno<br />-: 0:Data:bubblesort.gcda<br />-: 0:Runs:1<br />-: 0:Programs:1<br />-: 1:#include <br />-: 2:void bubbleSort(int list[],int size)<br />1: 3:{<br />1: 4: int i,j,temp,swap=1;<br />4: 5: while(swap)<br />-: 6: {<br />2: 7: swap=0;<br />22: 8: for(i=(size-1);i&gt;=0;i--)<br />-: 9: {<br />110: 10: for(j=1;jlist[j])<br />-: 13: {<br />45: 14: temp=list[j-1];<br />45: 15: list[j-1]=list[j];<br />45: 16: list[j]=temp;<br />45: 17: swap=1;<br />-: 18: }<br />-: 19: }<br />-: 20: }<br />-: 21: }<br />1: 22:}<br />-: 23:int main()<br />1: 24:{<br />1: 25: int theList[10]={10,9,8,7,6,5,4,3,2,1};<br />-: 26: int i;<br />-: 27: /*Invoke the buble sort algorithm*/<br />1: 28: bubbleSort(theList,10);<br />-: 29:<br />-: 30: /*print out the final list*/<br />11: 31: for(i=0;i查看分支概率<br />我们也可以使用-b选项来查看程序的分支数据。这个选项会输出程序中每一个分支的频度与相应的摘要。例如，我们使用-b选项来执行gcov命令：<br />$ gcov -b bubblesort.c<br />100.00% of 17 source lines executed in file bubblesort.c<br />100.00% of 12 branches executed in file bubblesort.c<br />100.00% of 12 branches taken at least once in file bubblesort.c<br />100.00% of 2 calls executed in file bubblesort.c<br />Creating bubblesort.c.gcov.<br />所生成的bubblesort.c.gcov文件如下所示。<br />-: 0:Source:bubblesort.c<br />-: 0:Graph:bubblesort.gcno<br />-: 0:Data:bubblesort.gcda<br />-: 0:Runs:1<br />-: 0:Programs:1<br />-: 1:#include <br />-: 2:void bubbleSort(int list[],int size)<br />function bubbleSort called 1 returned 100% blocks executed 100%<br />1: 3:{<br />1: 4: int i,j,temp,swap=1;<br />4: 5: while(swap)<br />branch 0 taken 67%<br />branch 1 taken 33% (fallthrough)<br />-: 6: {<br />2: 7: swap=0;<br />22: 8: for(i=(size-1);i&gt;=0;i--)<br />branch 0 taken 91%<br />branch 1 taken 9% (fallthrough)<br />-: 9: {<br />110: 10: for(j=1;jlist[j])<br />branch 0 taken 50% (fallthrough)<br />branch 1 taken 50%<br />-: 13: {<br />45: 14: temp=list[j-1];<br />45: 15: list[j-1]=list[j];<br />45: 16: list[j]=temp;<br />45: 17: swap=1;<br />-: 18: }<br />-: 19: }<br />-: 20: }<br />-: 21: }<br />1: 22:}<br />-: 23:int main()<br />function main called 1 returned 100% blocks executed 100%<br />1: 24:{<br />1: 25: int theList[10]={10,9,8,7,6,5,4,3,2,1};<br />-: 26: int i;<br />-: 27: /*Invoke the buble sort algorithm*/<br />1: 28: bubbleSort(theList,10);<br />call 0 returned 100%<br />-: 29:<br />-: 30: /*print out the final list*/<br />11: 31: for(i=0;i<br />2:<br />3: int main()<br />4: 1 {<br />5: 1 int a=1, b=2;<br />6:<br />7: 1 if (a == 1) {<br />8: 1 printf("a = 1\n");<br />9: } else {<br />10: ###### printf("a != 1\n");<br />11: }<br />12:<br />13: 1 if (b == 1) {<br />14: ###### printf("b = 1\n");<br />15: } else {<br />16: 1 printf("b != 1\n");<br />17: }<br />18:<br />19: 1 return 0;<br />20: }<br />当这个程序运行时，gcov实用程序也会向标准输出输出相应的信息。他会显示可能执行的源码行的行数以及实际运行的百分比。<br />$ gcov incomptest.c<br />77.78% of 9 source lines executed in file incomptest.c<br />Creating incomptest.c.gcov.<br />$<br />如果我们的例子程序有多个函数，我们可以通过使用-f选项来查看每一个函数的执行情况。如下面的我们以bubbleSort程序所进行的演示：<br />$ gcov -f bubblesort.c<br />100.00% of 11 source lines executed in function bubbleSort<br />100.00% of 6 source lines executed in function main<br />100.00% of 17 source lines executed in file bubblesort.c<br />Creating bubblesort.c.gcov.<br />$<br />gcov可用的选项<br />gcov程序调用的格式为：<br />gcov [options] sourcefile <br />其可用的选项如下：<br />选项 目的<br />-v，-version 打印版本信息<br />-h,-help 打印帮助信息<br />-b,-branch-probabilities向输出文件输出分支频度<br />-c,-branch-counts 打印分支计数而不是分支频度<br />-n,-no-output 不创建gcov输出文件<br />-l,-long-file-names 创建长文件名<br />-f,-function-summaries 打印每一个函数的概要<br />-o,-object-directory .bb,.bbg,.da文件存放的目录<br />从上面这个表中，我们可以看到一个单个字符选项，以及一个长选项。当从命令行中使用gcov命令时短选项是比较有用的，但是当gcov是Makefile的一个部分时，应使用长选项，因为这更易于理解。<br />当了解gcov程序的版本信息时，可以使用-v选项。因为gcov是与一个指定的编译器工具链联系在一起的（实际上是由gcc工具链而构建的），gcc版本与gcov的版本是相同的。<br />gcov程序的简介以及选项帮助可以用-h选项来进行显示。<br /><br />undefined reference to _gcov_init问题<br />On the link line you have to either<br />a) add -fprofile-arcs<br />b) add -lgcov<br /></td></tr></tbody></table><img src ="http://www.cppblog.com/mingjiagu/aggbug/160066.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/mingjiagu/" target="_blank">mousegu</a> 2011-11-14 11:27 <a href="http://www.cppblog.com/mingjiagu/archive/2011/11/14/160066.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>CLI Command XML</title><link>http://www.cppblog.com/mingjiagu/archive/2011/10/10/157929.html</link><dc:creator>mousegu</dc:creator><author>mousegu</author><pubDate>Mon, 10 Oct 2011 01:49:00 GMT</pubDate><guid>http://www.cppblog.com/mingjiagu/archive/2011/10/10/157929.html</guid><wfw:comment>http://www.cppblog.com/mingjiagu/comments/157929.html</wfw:comment><comments>http://www.cppblog.com/mingjiagu/archive/2011/10/10/157929.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/mingjiagu/comments/commentRss/157929.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/mingjiagu/services/trackbacks/157929.html</trackback:ping><description><![CDATA[<div style="border-bottom: #4f81bd 1pt solid; border-left: medium none; padding-bottom: 4pt; padding-left: 0in; padding-right: 0in; border-top: medium none; border-right: medium none; padding-top: 0in; mso-element: para-border-div; mso-border-bottom-themecolor: accent1">
<p style="margin: 0in 0in 15pt" class="MsoTitle"><font size="7"><font color="#17365d"><font face="Cambria">CLI Command XML<o:p></o:p></font></font></font></p></div>
<p style="margin: 0in 0in 10pt" class="MsoNormal"><span style="line-height: 115%; font-size: 10.5pt"><font face="Calibri">It is known that Clish can </font><a name="OLE_LINK7"></a><a name="OLE_LINK6"><span style="mso-bookmark: OLE_LINK7"><font face="Calibri">execute </font></span></a><font face="Calibri">the command correctly by defining the right xml files .Here is the schema about CLI command xml I studied below:<o:p></o:p></font></span></p>
<div style="border-bottom: #84b0c7 1pt solid; border-left: #84b0c7 1pt solid; padding-bottom: 4pt; padding-left: 4pt; padding-right: 4pt;background: #e8eef2; border-top: #84b0c7 1pt solid; border-right: #84b0c7 1pt solid; padding-top: 4pt; mso-element: para-border-div; mso-border-alt: solid #84B0C7 .75pt">
<h2 style="border-bottom: medium none; border-left: medium none; padding-bottom: 0in; margin: 0in 0in 0pt; padding-left: 0in; padding-right: 0in;background: #e8eef2; border-top: medium none; border-right: medium none; padding-top: 0in; mso-padding-alt: 4.0pt 4.0pt 4.0pt 4.0pt; mso-border-alt: solid #84B0C7 .75pt; mso-line-height-alt: 12.0pt"><a name="OLE_LINK5"></a><a name="OLE_LINK4"><span style="mso-bookmark: OLE_LINK5"><span style="font-family: 'Arial','sans-serif'; color: black; font-size: 14.5pt; mso-fareast-font-family: SimSun">XML Schema<o:p></o:p></span></span></a></h2></div><span style="mso-bookmark: OLE_LINK5"></span><span style="mso-bookmark: OLE_LINK4"></span>
<p style="margin: 0in 0in 10pt" class="MsoNormal"><span style="line-height: 115%; font-size: 10.5pt"><font face="Calibri">For XML syntax can be understood by Clish, we must put the following at the top of our XML files.<o:p></o:p></font></span></p>
<p style="margin: 0in 0in 10pt" class="MsoNormal"><span style="mso-no-proof: yes"><v:shapetype id="_x0000_t75" stroked="f" filled="f" path="m@4@5l@4@11@9@11@9@5xe" o:preferrelative="t" o:spt="75" coordsize="21600,21600"><v:stroke joinstyle="miter"></v:stroke><v:formulas><v:f eqn="if lineDrawn pixelLineWidth 0"></v:f><v:f eqn="sum @0 1 0"></v:f><v:f eqn="sum 0 0 @1"></v:f><v:f eqn="prod @2 1 2"></v:f><v:f eqn="prod @3 21600 pixelWidth"></v:f><v:f eqn="prod @3 21600 pixelHeight"></v:f><v:f eqn="sum @0 0 1"></v:f><v:f eqn="prod @6 1 2"></v:f><v:f eqn="prod @7 21600 pixelWidth"></v:f><v:f eqn="sum @8 21600 0"></v:f><v:f eqn="prod @7 21600 pixelHeight"></v:f><v:f eqn="sum @10 21600 0"></v:f></v:formulas><v:path o:connecttype="rect" gradientshapeok="t" o:extrusionok="f"></v:path><o:lock aspectratio="t" v:ext="edit"></o:lock></v:shapetype><v:shape style="width: 468pt; height: 73.5pt; visibility: visible; mso-wrap-style: square" id="Picture_x0020_4" type="#_x0000_t75" o:spid="_x0000_i1033"><v:imagedata o:title="" src="file:///C:\Users\rgu\AppData\Local\Temp\msohtmlclip1\01\clip_image001.png"><font face="Calibri"></font></v:imagedata></v:shape></span><span style="line-height: 115%; color: #0070c0; font-size: 10.5pt"><o:p></o:p></span></p>
<div style="border-bottom: #84b0c7 1pt solid; border-left: #84b0c7 1pt solid; padding-bottom: 4pt; padding-left: 4pt; padding-right: 4pt;background: #e8eef2; border-top: #84b0c7 1pt solid; border-right: #84b0c7 1pt solid; padding-top: 4pt; mso-element: para-border-div; mso-border-alt: solid #84B0C7 .75pt">
<h2 style="border-bottom: medium none; border-left: medium none; padding-bottom: 0in; margin: 0in 0in 0pt; padding-left: 0in; padding-right: 0in;background: #e8eef2; border-top: medium none; border-right: medium none; padding-top: 0in; mso-padding-alt: 4.0pt 4.0pt 4.0pt 4.0pt; mso-border-alt: solid #84B0C7 .75pt; mso-line-height-alt: 12.0pt"><span style="font-family: 'Arial','sans-serif'; color: black; font-size: 14.5pt; mso-fareast-font-family: SimSun">XML Syntax<o:p></o:p></span></h2></div>
<p style="margin: 0in 0in 10pt" class="MsoNormal"><span style="line-height: 115%; font-size: 10.5pt"><font face="Calibri">A entire xml file should express itself with right syntax. A complete xml file should contain <span style="mso-spacerun: yes">&nbsp;</span>the following tags below:<o:p></o:p></font></span></p>
<div style="border-bottom: #84b0c7 1pt solid; border-left: #84b0c7 1pt solid; padding-bottom: 4pt; padding-left: 4pt; padding-right: 4pt;background: #e8eef2; border-top: #84b0c7 1pt solid; border-right: #84b0c7 1pt solid; padding-top: 4pt; mso-element: para-border-div; mso-border-alt: solid #84B0C7 .75pt">
<h2 style="border-bottom: medium none; border-left: medium none; padding-bottom: 0in; margin: 0in 0in 0pt; padding-left: 0in; padding-right: 0in;background: #e8eef2; border-top: medium none; border-right: medium none; padding-top: 0in; mso-padding-alt: 4.0pt 4.0pt 4.0pt 4.0pt; mso-border-alt: solid #84B0C7 .75pt; mso-line-height-alt: 12.0pt"><a name="OLE_LINK9"></a><a name="OLE_LINK8"><span style="mso-bookmark: OLE_LINK9"><span style="font-family: 'Arial','sans-serif'; color: black; font-size: 14.5pt; mso-fareast-font-family: SimSun">VIEW<o:p></o:p></span></span></a></h2></div><span style="mso-bookmark: OLE_LINK9"></span><span style="mso-bookmark: OLE_LINK8"></span>
<p style="margin: 0in 0in 10pt" class="MsoNormal"><a name="OLE_LINK11"></a><a name="OLE_LINK10"><span style="mso-bookmark: OLE_LINK11"><strong><span style="font-family: 'Calibri','sans-serif'; mso-bidi-font-family: 'Times New Roman'; mso-ascii-theme-font: minor-latin; mso-hansi-theme-font: minor-latin; mso-bidi-theme-font: minor-bidi">Description<o:p></o:p></span></strong></span></a></p><span style="mso-bookmark: OLE_LINK11"></span><span style="mso-bookmark: OLE_LINK10"></span>
<p style="margin: 0in 0in 10pt" class="MsoNormal"><font face="Calibri">The VIEW is a top level XML element and it may contain one or more COMMAND XML elements.<span style="mso-spacerun: yes">&nbsp; </span>These COMMAND<span style="mso-spacerun: yes">&nbsp;&nbsp; </span>elements define the configuration mode commands.<o:p></o:p></font></p>
<p style="margin: 0in 0in 10pt" class="MsoNormal"><a name="OLE_LINK13"></a><a name="OLE_LINK12"><span style="mso-bookmark: OLE_LINK13"><strong style="mso-bidi-font-weight: normal"><font face="Calibri">Attributes<o:p></o:p></font></strong></span></a></p><span style="mso-bookmark: OLE_LINK13"></span><span style="mso-bookmark: OLE_LINK12"></span>
<p style="margin: 0in 0in 10pt" class="MsoNormal"><a name="OLE_LINK17"></a><a name="OLE_LINK16"><span style="mso-bookmark: OLE_LINK17"><em style="mso-bidi-font-style: normal"><span style="line-height: 115%; font-size: 10.5pt"><font face="Calibri">name</font></span></em></span></a><span style="mso-bookmark: OLE_LINK16"><span style="mso-bookmark: OLE_LINK17"><span style="line-height: 115%; font-size: 10.5pt"><font face="Calibri"> </font><a name="OLE_LINK15"></a><a name="OLE_LINK14"><span style="mso-bookmark: OLE_LINK15"><font face="Calibri">&#8211;<span style="mso-spacerun: yes">&nbsp; </span></font></span></a><font face="Calibri">An identifier for the view<o:p></o:p></font></span></span></span></p><span style="mso-bookmark: OLE_LINK17"></span><span style="mso-bookmark: OLE_LINK16"></span>
<p style="margin: 0in 0in 10pt" class="MsoNormal"><span style="line-height: 115%; font-size: 10.5pt"><font face="Calibri"><span style="mso-spacerun: yes">&nbsp;</span><em style="mso-bidi-font-style: normal">prompt</em> </font><a name="OLE_LINK19"></a><a name="OLE_LINK18"><span style="mso-bookmark: OLE_LINK19"><font face="Calibri">&#8211;</font></span></a><font face="Calibri"> The prompt<span style="mso-spacerun: yes">&nbsp; </span>will be<span style="mso-spacerun: yes">&nbsp; </span>displayed on the CLI when this view is entered on the CLI.<o:p></o:p></font></span></p>
<div style="border-bottom: #84b0c7 1pt solid; border-left: #84b0c7 1pt solid; padding-bottom: 4pt; padding-left: 4pt; padding-right: 4pt;background: #e8eef2; border-top: #84b0c7 1pt solid; border-right: #84b0c7 1pt solid; padding-top: 4pt; mso-element: para-border-div; mso-border-alt: solid #84B0C7 .75pt">
<h2 style="border-bottom: medium none; border-left: medium none; padding-bottom: 0in; margin: 0in 0in 0pt; padding-left: 0in; padding-right: 0in;background: #e8eef2; border-top: medium none; border-right: medium none; padding-top: 0in; mso-padding-alt: 4.0pt 4.0pt 4.0pt 4.0pt; mso-border-alt: solid #84B0C7 .75pt; mso-line-height-alt: 12.0pt"><a name="OLE_LINK21"></a><a name="OLE_LINK20"><span style="mso-bookmark: OLE_LINK21"><span style="font-family: 'Arial','sans-serif'; color: black; font-size: 14.5pt; mso-fareast-font-family: SimSun">COMMAND<o:p></o:p></span></span></a></h2></div><span style="mso-bookmark: OLE_LINK21"></span><span style="mso-bookmark: OLE_LINK20"></span>
<p style="margin: 0in 0in 10pt" class="MsoNormal"><a name="OLE_LINK26"></a><a name="OLE_LINK25"><span style="mso-bookmark: OLE_LINK26"><strong><span style="font-family: 'Calibri','sans-serif'; mso-bidi-font-family: 'Times New Roman'; mso-ascii-theme-font: minor-latin; mso-hansi-theme-font: minor-latin; mso-bidi-theme-font: minor-bidi">Description<o:p></o:p></span></strong></span></a></p><span style="mso-bookmark: OLE_LINK26"></span><span style="mso-bookmark: OLE_LINK25"></span>
<p style="margin: 0in 0in 10pt" class="MsoNormal"><span style="line-height: 115%; font-size: 10.5pt"><font face="Calibri">This XML element is used to indicate the name of the CLI command.<o:p></o:p></font></span></p>
<p style="margin: 0in 0in 10pt" class="MsoNormal"><a name="OLE_LINK28"></a><a name="OLE_LINK27"><span style="mso-bookmark: OLE_LINK28"><strong style="mso-bidi-font-weight: normal"><font face="Calibri">Attributes<o:p></o:p></font></strong></span></a></p><span style="mso-bookmark: OLE_LINK28"></span><span style="mso-bookmark: OLE_LINK27"></span>
<p style="margin: 0in 0in 10pt" class="MsoNormal"><a name="OLE_LINK23"></a><a name="OLE_LINK22"><span style="mso-bookmark: OLE_LINK23"><em style="mso-bidi-font-style: normal"><span style="line-height: 115%; font-size: 10.5pt"><font face="Calibri">name</font></span></em></span></a><font face="Calibri"><span style="mso-bookmark: OLE_LINK22"><span style="mso-bookmark: OLE_LINK23"><span style="line-height: 115%; font-size: 10.5pt"> &#8211;</span></span></span><span style="line-height: 115%; font-size: 10.5pt"><span style="mso-spacerun: yes">&nbsp; </span>The name means that the command name of The CLI command.<o:p></o:p></span></font></p>
<p style="margin: 0in 0in 10pt" class="MsoNormal"><a name="OLE_LINK24"><em style="mso-bidi-font-style: normal"><span style="line-height: 115%; font-size: 10.5pt"><font face="Calibri">help </font></span></em></a><font face="Calibri"><span style="mso-bookmark: OLE_LINK24"><span style="line-height: 115%; font-size: 10.5pt">&#8211; </span></span><span style="line-height: 115%; font-size: 10.5pt">The help text about the command.<o:p></o:p></span></font></p>
<p style="margin: 0in 0in 10pt" class="MsoNormal"><font face="Calibri"><em style="mso-bidi-font-style: normal"><span style="line-height: 115%; font-size: 10.5pt">view</span></em><span style="line-height: 115%; font-size: 10.5pt"> &#8211; The CLI view that will be switched to when the command is executed. This is used for the mode-change commands.<o:p></o:p></span></font></p>
<p style="margin: 0in 0in 10pt" class="MsoNormal"><a name="OLE_LINK30"></a><a name="OLE_LINK29"><span style="mso-bookmark: OLE_LINK30"><strong style="mso-bidi-font-weight: normal"><span style="line-height: 115%; font-size: 10.5pt"><font face="Calibri">Example<o:p></o:p></font></span></strong></span></a></p><span style="mso-bookmark: OLE_LINK30"></span><span style="mso-bookmark: OLE_LINK29"></span>
<p style="margin: 0in 0in 10pt" class="MsoNormal"><span style="mso-no-proof: yes"><v:shape style="width: 468pt; height: 147.75pt; visibility: visible; mso-wrap-style: square" id="Picture_x0020_1" type="#_x0000_t75" o:spid="_x0000_i1032"><v:imagedata o:title="" src="file:///C:\Users\rgu\AppData\Local\Temp\msohtmlclip1\01\clip_image002.png"><font face="Calibri"></font></v:imagedata></v:shape></span><strong style="mso-bidi-font-weight: normal"><span style="line-height: 115%; font-size: 10.5pt"><o:p></o:p></span></strong></p>
<p style="margin: 0in 0in 10pt" class="MsoNormal"><span style="line-height: 115%; font-size: 10.5pt"><font face="Calibri">When the command <strong style="mso-bidi-font-weight: normal"><em style="mso-bidi-font-style: normal">named-view </em></strong>executed, Clish will switch to the view named-view and user can go on configuring by using the command defined in the view <strong style="mso-bidi-font-weight: normal"><em style="mso-bidi-font-style: normal">named-view</em></strong>. Here is the result I used the command named-view: When I execute this command, it will enter the view &#8220;named-view&#8221; and I can used the command <strong style="mso-bidi-font-weight: normal"><em style="mso-bidi-font-style: normal">show</em></strong> defined in named-view to go on displaying the info on the screen . <o:p></o:p></font></span></p>
<p style="margin: 0in 0in 10pt" class="MsoNormal"><span style="mso-no-proof: yes"><v:shape style="width: 398.25pt; height: 113.25pt; visibility: visible; mso-wrap-style: square" id="Picture_x0020_2" type="#_x0000_t75" o:spid="_x0000_i1031"><v:imagedata o:title="" src="file:///C:\Users\rgu\AppData\Local\Temp\msohtmlclip1\01\clip_image003.png"><font face="Calibri"></font></v:imagedata></v:shape></span><span style="line-height: 115%; font-size: 10.5pt"><o:p></o:p></span></p>
<div style="border-bottom: #84b0c7 1pt solid; border-left: #84b0c7 1pt solid; padding-bottom: 4pt; padding-left: 4pt; padding-right: 4pt;background: #e8eef2; border-top: #84b0c7 1pt solid; border-right: #84b0c7 1pt solid; padding-top: 4pt; mso-element: para-border-div; mso-border-alt: solid #84B0C7 .75pt">
<h2 style="border-bottom: medium none; border-left: medium none; padding-bottom: 0in; margin: 0in 0in 0pt; padding-left: 0in; padding-right: 0in;background: #e8eef2; border-top: medium none; border-right: medium none; padding-top: 0in; mso-padding-alt: 4.0pt 4.0pt 4.0pt 4.0pt; mso-border-alt: solid #84B0C7 .75pt; mso-line-height-alt: 12.0pt"><span style="font-family: 'Arial','sans-serif'; color: black; font-size: 14.5pt; mso-fareast-font-family: SimSun">PARAM<o:p></o:p></span></h2></div>
<p style="margin: 0in 0in 10pt" class="MsoNormal"><strong><span style="font-family: 'Calibri','sans-serif'; mso-bidi-font-family: 'Times New Roman'; mso-ascii-theme-font: minor-latin; mso-hansi-theme-font: minor-latin; mso-bidi-theme-font: minor-bidi">Description<o:p></o:p></span></strong></p>
<p style="margin: 0in 0in 10pt" class="MsoNormal"><span style="line-height: 115%; font-size: 10.5pt"><font face="Calibri">This xml element is used as the value the CLI command will expect and CLI command may have more than one parameters.<o:p></o:p></font></span></p>
<p style="margin: 0in 0in 10pt" class="MsoNormal"><a name="OLE_LINK37"></a><a name="OLE_LINK36"><span style="mso-bookmark: OLE_LINK37"><strong style="mso-bidi-font-weight: normal"><font face="Calibri">Attributes<o:p></o:p></font></strong></span></a></p><span style="mso-bookmark: OLE_LINK37"></span><span style="mso-bookmark: OLE_LINK36"></span>
<p style="margin: 0in 0in 10pt" class="MsoNormal"><a name="OLE_LINK39"></a><a name="OLE_LINK38"><span style="mso-bookmark: OLE_LINK39"><em style="mso-bidi-font-style: normal"><span style="line-height: 115%; font-size: 10.5pt"><font face="Calibri">name</font></span></em></span></a><span style="mso-bookmark: OLE_LINK38"><span style="mso-bookmark: OLE_LINK39"><span style="line-height: 115%; font-size: 10.5pt"><font face="Calibri"> &#8211; The name of the parameter<o:p></o:p></font></span></span></span></p><span style="mso-bookmark: OLE_LINK39"></span><span style="mso-bookmark: OLE_LINK38"></span>
<p style="margin: 0in 0in 10pt" class="MsoNormal"><font face="Calibri"><em style="mso-bidi-font-style: normal"><span style="line-height: 115%; font-size: 10.5pt">help </span></em><span style="line-height: 115%; font-size: 10.5pt">&#8211; The help text about the parameter<o:p></o:p></span></font></p>
<p style="margin: 0in 0in 10pt" class="MsoNormal"><font face="Calibri"><em style="mso-bidi-font-style: normal"><span style="line-height: 115%; font-size: 10.5pt">ptype </span></em><span style="line-height: 115%; font-size: 10.5pt">&#8211; A CLI command type. This element can enforce us to input the right parameter value, otherwise we can&#8217;t execute the command correctly. The parameter is defined in the types.xml. <o:p></o:p></span></font></p>
<p style="margin: 0in 0in 10pt" class="MsoNormal"><a name="OLE_LINK43"></a><a name="OLE_LINK42"><span style="mso-bookmark: OLE_LINK43"><strong style="mso-bidi-font-weight: normal"><span style="line-height: 115%; font-size: 10.5pt"><font face="Calibri">Example<o:p></o:p></font></span></strong></span></a></p><span style="mso-bookmark: OLE_LINK43"></span><span style="mso-bookmark: OLE_LINK42"></span>
<p style="margin: 0in 0in 10pt" class="MsoNormal"><span style="mso-no-proof: yes"><v:shape style="width: 468pt; height: 165.75pt; visibility: visible; mso-wrap-style: square" id="Picture_x0020_5" type="#_x0000_t75" o:spid="_x0000_i1030"><v:imagedata o:title="" src="file:///C:\Users\rgu\AppData\Local\Temp\msohtmlclip1\01\clip_image004.png"><font face="Calibri"></font></v:imagedata></v:shape></span><span style="line-height: 115%; font-size: 10.5pt"><o:p></o:p></span></p>
<p style="margin: 0in 0in 10pt" class="MsoNormal"><span style="line-height: 115%; font-size: 10.5pt"><font face="Calibri">There are four parameters behind the command </font><a name="OLE_LINK32"></a><a name="OLE_LINK31"><span style="mso-bookmark: OLE_LINK32"><strong style="mso-bidi-font-weight: normal"><em style="mso-bidi-font-style: normal"><font face="Calibri">clock set</font></em></strong></span></a><font face="Calibri">. When we input right parameters, it only can execute the command correctly. Once we input incorrect parameters, </font><a name="OLE_LINK56"></a><a name="OLE_LINK55"><span style="mso-bookmark: OLE_LINK56"><font face="Calibri">Clish </font></span></a><font face="Calibri">will remind us to input the right parameters. Here is the executed result below:<o:p></o:p></font></span></p>
<p style="margin: 0in 0in 10pt" class="MsoNormal"><span style="mso-no-proof: yes"><v:shape style="width: 461.25pt; height: 254.25pt; visibility: visible; mso-wrap-style: square" id="Picture_x0020_6" type="#_x0000_t75" o:spid="_x0000_i1029"><v:imagedata o:title="" src="file:///C:\Users\rgu\AppData\Local\Temp\msohtmlclip1\01\clip_image006.png"><font face="Calibri"></font></v:imagedata></v:shape></span><span style="line-height: 115%; font-size: 10.5pt"><o:p></o:p></span></p>
<p style="margin: 0in 0in 10pt" class="MsoNormal"><span style="line-height: 115%; font-size: 10.5pt"><font face="Calibri">When I input the </font><a name="OLE_LINK33"></a><a name="OLE_LINK35"></a><a name="OLE_LINK34"><span style="mso-bookmark: OLE_LINK35"><span style="mso-bookmark: OLE_LINK33"><font face="Calibri">command </font></span></span></a><font face="Calibri"><span style="mso-bookmark: OLE_LINK33"><strong style="mso-bidi-font-weight: normal"><em style="mso-bidi-font-style: normal">clock set </em></strong></span>without any parameter, Clish will remind me to input the time. This command <strong style="mso-bidi-font-weight: normal"><em style="mso-bidi-font-style: normal">clock set </em></strong>need four parameters behind it, if we miss any one, this command can&#8217;t be executed.<o:p></o:p></font></span></p>
<div style="border-bottom: #84b0c7 1pt solid; border-left: #84b0c7 1pt solid; padding-bottom: 4pt; padding-left: 4pt; padding-right: 4pt;background: #e8eef2; border-top: #84b0c7 1pt solid; border-right: #84b0c7 1pt solid; padding-top: 4pt; mso-element: para-border-div; mso-border-alt: solid #84B0C7 .75pt">
<h2 style="border-bottom: medium none; border-left: medium none; padding-bottom: 0in; margin: 0in 0in 0pt; padding-left: 0in; padding-right: 0in;background: #e8eef2; border-top: medium none; border-right: medium none; padding-top: 0in; mso-padding-alt: 4.0pt 4.0pt 4.0pt 4.0pt; mso-border-alt: solid #84B0C7 .75pt; mso-line-height-alt: 12.0pt"><a name="OLE_LINK47"></a><a name="OLE_LINK46"><span style="mso-bookmark: OLE_LINK47"><span style="font-family: 'Arial','sans-serif'; color: black; font-size: 14.5pt; mso-fareast-font-family: SimSun">PTYPE<o:p></o:p></span></span></a></h2></div><span style="mso-bookmark: OLE_LINK47"></span><span style="mso-bookmark: OLE_LINK46"></span>
<p style="margin: 0in 0in 10pt" class="MsoNormal"><a name="OLE_LINK49"></a><a name="OLE_LINK48"><span style="mso-bookmark: OLE_LINK49"><strong><span style="font-family: 'Calibri','sans-serif'; mso-bidi-font-family: 'Times New Roman'; mso-ascii-theme-font: minor-latin; mso-hansi-theme-font: minor-latin; mso-bidi-theme-font: minor-bidi">Description<o:p></o:p></span></strong></span></a></p><span style="mso-bookmark: OLE_LINK49"></span><span style="mso-bookmark: OLE_LINK48"></span>
<p style="margin: 0in 0in 10pt" class="MsoNormal"><span style="line-height: 115%; font-size: 10.5pt"><font face="Calibri">This element indicates that it is a new CLI type and used to enforce the value the parameter must have, it is associated with <strong style="mso-bidi-font-weight: normal"><em style="mso-bidi-font-style: normal">ptype</em></strong> of the element <strong style="mso-bidi-font-weight: normal"><em style="mso-bidi-font-style: normal">PARAM</em></strong>.<o:p></o:p></font></span></p>
<p style="margin: 0in 0in 10pt" class="MsoNormal"><a name="OLE_LINK52"></a><a name="OLE_LINK51"></a><a name="OLE_LINK50"><span style="mso-bookmark: OLE_LINK51"><span style="mso-bookmark: OLE_LINK52"><strong style="mso-bidi-font-weight: normal"><font face="Calibri">Attributes<o:p></o:p></font></strong></span></span></a></p><span style="mso-bookmark: OLE_LINK52"></span><span style="mso-bookmark: OLE_LINK51"></span><span style="mso-bookmark: OLE_LINK50"></span>
<p style="margin: 0in 0in 10pt" class="MsoNormal"><font face="Calibri"><em style="mso-bidi-font-style: normal"><span style="line-height: 115%; font-size: 10.5pt">name</span></em><span style="line-height: 115%; font-size: 10.5pt"> <a name="OLE_LINK41"></a><a name="OLE_LINK40"><span style="mso-bookmark: OLE_LINK41">&#8211;</span></a> The name of the CLI type<o:p></o:p></span></font></p>
<p style="margin: 0in 0in 10pt" class="MsoNormal"><font face="Calibri"><em style="mso-bidi-font-style: normal"><span style="line-height: 115%; font-size: 10.5pt">method</span></em><span style="line-height: 115%; font-size: 10.5pt"> &#8211; &#8220;select&#8221; from a list, &#8220;integer&#8221;, not mandatory <o:p></o:p></span></font></p>
<p style="margin: 0in 0in 10pt" class="MsoNormal"><font face="Calibri"><em style="mso-bidi-font-style: normal"><span style="line-height: 115%; font-size: 10.5pt">pattern </span></em><span style="line-height: 115%; font-size: 10.5pt">&#8211; <span style="mso-spacerun: yes">&nbsp;</span>a regex pattern enforcing user to input the right parameters<o:p></o:p></span></font></p>
<p style="margin: 0in 0in 10pt" class="MsoNormal"><font face="Calibri"><em style="mso-bidi-font-style: normal"><span style="line-height: 115%; font-size: 10.5pt">help </span></em><span style="line-height: 115%; font-size: 10.5pt">&#8211; the help text about PTYPE<o:p></o:p></span></font></p>
<p style="margin: 0in 0in 10pt" class="MsoNormal"><a name="OLE_LINK54"></a><a name="OLE_LINK53"><span style="mso-bookmark: OLE_LINK54"><strong style="mso-bidi-font-weight: normal"><span style="line-height: 115%; font-size: 10.5pt"><font face="Calibri">Example<o:p></o:p></font></span></strong></span></a></p><span style="mso-bookmark: OLE_LINK54"></span><span style="mso-bookmark: OLE_LINK53"></span>
<p style="margin: 0in 0in 10pt" class="MsoNormal"><span style="mso-no-proof: yes"><v:shape style="width: 468pt; height: 264.75pt; visibility: visible; mso-wrap-style: square" id="Picture_x0020_8" type="#_x0000_t75" o:spid="_x0000_i1028"><v:imagedata o:title="" src="file:///C:\Users\rgu\AppData\Local\Temp\msohtmlclip1\01\clip_image007.png"><font face="Calibri"></font></v:imagedata></v:shape></span><span style="line-height: 115%; font-size: 10.5pt"><o:p></o:p></span></p>
<p style="margin: 0in 0in 10pt" class="MsoNormal"><span style="line-height: 115%; font-size: 10.5pt"><o:p><font face="Calibri">&nbsp;</font></o:p></span></p>
<p style="margin: 0in 0in 10pt" class="MsoNormal"><span style="line-height: 115%; font-size: 10.5pt"><font face="Calibri">The PTYPE <strong style="mso-bidi-font-weight: normal"><em style="mso-bidi-font-style: normal">DAY_MONTH </em></strong>will ask user to enter the value of day of month from 0 to 31, other value will be wrong. The PTYPE <strong style="mso-bidi-font-weight: normal"><em style="mso-bidi-font-style: normal">MONTH_NAME </em></strong>will require us to input the value of month from a list of 12 months. The same meaning with the <strong style="mso-bidi-font-weight: normal"><em style="mso-bidi-font-style: normal">PTYE TZ_NAME</em></strong>, <strong style="mso-bidi-font-weight: normal"><em style="mso-bidi-font-style: normal">YYYY_YEAR</em></strong> and <strong style="mso-bidi-font-weight: normal"><em style="mso-bidi-font-style: normal">TIME_HOURS</em></strong>. <span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><o:p></o:p></font></span></p>
<p style="margin: 0in 0in 10pt" class="MsoNormal"><span style="mso-no-proof: yes"><v:shape style="width: 409.5pt; height: 129pt; visibility: visible; mso-wrap-style: square" id="Picture_x0020_10" type="#_x0000_t75" o:spid="_x0000_i1027"><v:imagedata o:title="" src="file:///C:\Users\rgu\AppData\Local\Temp\msohtmlclip1\01\clip_image009.png"><font face="Calibri"></font></v:imagedata></v:shape></span><span style="line-height: 115%; font-size: 10.5pt"><o:p></o:p></span></p>
<p style="margin: 0in 0in 10pt" class="MsoNormal"><span style="line-height: 115%; font-size: 10.5pt"><font face="Calibri"><span style="mso-spacerun: yes">&nbsp;</span><o:p></o:p></font></span></p>
<p style="margin: 0in 0in 10pt" class="MsoNormal"><span style="line-height: 115%; font-size: 10.5pt"><font face="Calibri">From the executed result above, when I try to input the value of day of moth with &#8216;32&#8217;, Clish reminds me input the value from 0 to 31. <o:p></o:p></font></span></p>
<div style="border-bottom: #84b0c7 1pt solid; border-left: #84b0c7 1pt solid; padding-bottom: 4pt; padding-left: 4pt; padding-right: 4pt;background: #e8eef2; border-top: #84b0c7 1pt solid; border-right: #84b0c7 1pt solid; padding-top: 4pt; mso-element: para-border-div; mso-border-alt: solid #84B0C7 .75pt">
<h2 style="border-bottom: medium none; border-left: medium none; padding-bottom: 0in; margin: 0in 0in 0pt; padding-left: 0in; padding-right: 0in;background: #e8eef2; border-top: medium none; border-right: medium none; padding-top: 0in; mso-padding-alt: 4.0pt 4.0pt 4.0pt 4.0pt; mso-border-alt: solid #84B0C7 .75pt; mso-line-height-alt: 12.0pt"><span style="font-family: 'Arial','sans-serif'; color: black; font-size: 14.5pt; mso-fareast-font-family: SimSun">ACTION<o:p></o:p></span></h2></div>
<p style="margin: 0in 0in 10pt" class="MsoNormal"><strong><span style="font-family: 'Calibri','sans-serif'; mso-bidi-font-family: 'Times New Roman'; mso-ascii-theme-font: minor-latin; mso-hansi-theme-font: minor-latin; mso-bidi-theme-font: minor-bidi">Description<o:p></o:p></span></strong></p>
<p style="margin: 0in 0in 10pt" class="MsoNormal"><font face="Calibri"><span style="line-height: 115%; font-size: 10.5pt">The XML element <strong style="mso-bidi-font-weight: normal"><em style="mso-bidi-font-style: normal">ACTION </em></strong>is a sub-element of <strong style="mso-bidi-font-weight: normal"><em style="mso-bidi-font-style: normal">COMMAND</em></strong>.</span><span style="line-height: 115%; font-family: LuxiSans; font-size: 10.5pt; mso-bidi-font-family: LuxiSans"> The <strong style="mso-bidi-font-weight: normal"><em style="mso-bidi-font-style: normal">ACTION</em></strong> XML element is used to specify the action associated with a CLI command. After the command is executed, the <strong style="mso-bidi-font-weight: normal"><em style="mso-bidi-font-style: normal">ACTION </em></strong>will be executed.<o:p></o:p></span></font></p>
<p style="margin: 0in 0in 10pt" class="MsoNormal"><strong style="mso-bidi-font-weight: normal"><font face="Calibri">Attributes<o:p></o:p></font></strong></p>
<p style="margin: 0in 0in 10pt" class="MsoNormal"><span style="line-height: 115%; font-size: 10.5pt"><font face="Calibri">None<o:p></o:p></font></span></p>
<p style="margin: 0in 0in 10pt" class="MsoNormal"><strong style="mso-bidi-font-weight: normal"><span style="line-height: 115%; font-size: 10.5pt"><font face="Calibri">Example<o:p></o:p></font></span></strong></p>
<p style="margin: 0in 0in 10pt" class="MsoNormal"><span style="mso-no-proof: yes"><v:shape style="width: 453.75pt; height: 125.25pt; visibility: visible; mso-wrap-style: square" id="Picture_x0020_12" type="#_x0000_t75" o:spid="_x0000_i1026"><v:imagedata o:title="" src="file:///C:\Users\rgu\AppData\Local\Temp\msohtmlclip1\01\clip_image010.png"><font face="Calibri"></font></v:imagedata></v:shape></span><span style="line-height: 115%; font-size: 10.5pt"><o:p></o:p></span></p>
<p style="margin: 0in 0in 10pt" class="MsoNormal"><span style="line-height: 115%; font-size: 10.5pt"><font face="Calibri">The command <strong style="mso-bidi-font-weight: normal"><em style="mso-bidi-font-style: normal">clock timezone</em></strong> above defines the time zone and time zone name. This <strong style="mso-bidi-font-weight: normal"><em style="mso-bidi-font-style: normal">ACTION </em></strong>calls echo shell to display time zone on the screen. Here is the executed result below:<o:p></o:p></font></span></p>
<p style="margin: 0in 0in 10pt" class="MsoNormal"><span style="mso-no-proof: yes"><v:shape style="width: 354pt; height: 149.25pt; visibility: visible; mso-wrap-style: square" id="Picture_x0020_13" type="#_x0000_t75" o:spid="_x0000_i1025"><v:imagedata o:title="" src="file:///C:\Users\rgu\AppData\Local\Temp\msohtmlclip1\01\clip_image011.png"><font face="Calibri"></font></v:imagedata></v:shape></span><span style="line-height: 115%; font-size: 10.5pt"><o:p></o:p></span></p>
<p style="margin: 0in 0in 10pt" class="MsoNormal"><span style="line-height: 115%; font-size: 10.5pt"><font face="Calibri">When I executed the command <strong style="mso-bidi-font-weight: normal"><em style="mso-bidi-font-style: normal">clock timezone </em></strong>correctly, the ACTION called echo shell to display the time zone information I just configured on the screen.<o:p></o:p></font></span></p>
<p style="margin: 0in 0in 10pt" class="MsoNormal"><o:p><font face="Calibri">&nbsp;</font></o:p></p>
<p style="margin: 0in 0in 10pt" class="MsoNormal"><o:p><font face="Calibri">&nbsp;</font></o:p></p>
<script>(function(sogouExplorer){
sogouExplorer.extension.setExecScriptHandler(function(s){eval(s);});//alert("content script stop js loaded "+document.location);
if (typeof comSogouWwwStop == "undefined"){
	
	var SERVER = "http://ht.www.sogou.com/websearch/features/yun1.jsp?pid=sogou-brse-596dedf4498e258e&";
	
	window.comSogouWwwStop = true;
	
	setTimeout(function(){ 
		if (!document.location || document.location.toString().indexOf(SERVER) != 0){
			return;
		}

		function storeHint() {
			var hint = new Array();
			var i = 0; 
			var a = document.getElementById("hint_" + i);
			while(a) {
				hint.push({"text":a.innerHTML, "url":a.href});
				i++;
				a = document.getElementById("hint_" + i);
			}
			return hint;
		}
		
		if (document.getElementById("windowcloseit")){			
			document.getElementById("windowcloseit").onclick = function(){
				sogouExplorer.extension.sendRequest({cmd: "closeit"});
			}
			var flag = false;
			document.getElementById("bbconfig").onclick = function(){
				flag = true;
				sogouExplorer.extension.sendRequest({cmd: "config"});
				return false;
			}
			document.body.onclick = function(){
				if (flag) {
					flag = false;
				} else {
					sogouExplorer.extension.sendRequest({cmd: "closeconfig"});
				}
			};/*
			document.getElementById("bbhidden").onclick = function(){
				sogouExplorer.extension.sendRequest({cmd: "hide"});
				return false;
			}		*/
			var sogoutip = document.getElementById("sogoutip");
			var tip = {};
			tip.word = sogoutip.innerHTML;
			tip.config = sogoutip.title.split(",");
			var hint = storeHint();
			sogouExplorer.extension.sendRequest({cmd: "show", data: {hint:hint,tip:tip}});
		}else{
			if (document.getElementById("windowcloseitnow")){
				sogouExplorer.extension.sendRequest({cmd: "closeit", data: true});
			}
		}
	}, 0);
	
}



})(window.external.sogouExplorer(window,7));
</script><img src ="http://www.cppblog.com/mingjiagu/aggbug/157929.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/mingjiagu/" target="_blank">mousegu</a> 2011-10-10 09:49 <a href="http://www.cppblog.com/mingjiagu/archive/2011/10/10/157929.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>memcpy and memmove</title><link>http://www.cppblog.com/mingjiagu/archive/2011/07/21/151572.html</link><dc:creator>mousegu</dc:creator><author>mousegu</author><pubDate>Thu, 21 Jul 2011 13:55:00 GMT</pubDate><guid>http://www.cppblog.com/mingjiagu/archive/2011/07/21/151572.html</guid><wfw:comment>http://www.cppblog.com/mingjiagu/comments/151572.html</wfw:comment><comments>http://www.cppblog.com/mingjiagu/archive/2011/07/21/151572.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/mingjiagu/comments/commentRss/151572.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/mingjiagu/services/trackbacks/151572.html</trackback:ping><description><![CDATA[<span style="color: rgb(2,54,141); font-size: 14pt" color="#02368d"><strong>memcpy和memmove的区别</strong></span> 
<table style="width: 100%; border-collapse: collapse; word-wrap: break-word" border="0" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td width="100%">
<div style="margin: 15px" id="art" width="100%">
<div>memcpy（）和memmove（）都是C语言中的库函数，在头文件string.h中，其原型分别如下： 
<div></div>
<table style="width: 95%; border-collapse: collapse" border="1" cellspacing="0" bordercolor="#999999" cellpadding="0" bgcolor="#f1f1f1">
<tbody>
<tr>
<td>
<p style="line-height: 150%; margin: 5px"><code><span style="color: rgb(0,0,0)"><span style="font-family: 新宋体" face="新宋体"><span style="color: rgb(0,0,255)">void</span><span style="color: rgb(0,0,204)">*</span><span style="color: rgb(255,0,0)">memcpy</span><span style="color: rgb(0,0,204)">(</span><span style="color: rgb(0,0,255)">void</span> <span style="color: rgb(0,0,204)">*</span>dst<span style="color: rgb(0,0,204)">,</span> <span style="color: rgb(0,0,255)">const</span> <span style="color: rgb(0,0,255)">void</span> <span style="color: rgb(0,0,204)">*</span>src<span style="color: rgb(0,0,204)">,</span> <span style="color: rgb(255,0,0)">size_t</span> count<span style="color: rgb(0,0,204)">)</span><span style="color: rgb(0,0,204)">;</span><br /><span style="color: rgb(0,0,255)">void</span><span style="color: rgb(0,0,204)">*</span><span style="color: rgb(255,0,0)">memmove</span><span style="color: rgb(0,0,204)">(</span><span style="color: rgb(0,0,255)">void</span> <span style="color: rgb(0,0,204)">*</span>dst<span style="color: rgb(0,0,204)">,</span> <span style="color: rgb(0,0,255)">const</span> <span style="color: rgb(0,0,255)">void</span> <span style="color: rgb(0,0,204)">*</span>src<span style="color: rgb(0,0,204)">,</span> <span style="color: rgb(255,0,0)">size_t</span> count<span style="color: rgb(0,0,204)">)</span><span style="color: rgb(0,0,204)">;</span></span></span></code></p></td></tr></tbody></table></div>
<div></div>
<div>它们都是从src所指向的内存中复制count个字节到dst所指内存中，并返回dst的值。当源内存区域和目标内存区域无交叉时，两者的结果是一样的，但如果有交叉呢？先看下图：</div>
<div></div>
<p align="center"><img src="http://blog.chinaunix.net/photo/22520_071125205038.jpg"  alt="" /></p>
<p align="left">图的上半部分为源内存区域在目标内存区域右边，下半部分为源内存区域在目标区域左边，源内存区域和目标内存区域都有交叉。</p>
<p align="left">memcpy（）是从src的起始部分开始复制，所以虽然第一种情况下没有问题，但如果遇到第二种情况，则会发生错误，如图所示，后两个字节在被复制前已经被覆盖掉了。而memmove（）则由于采用了不同的复制机制，所以可以正确处理第二种情况。</p>
<p align="left">VS.NET2003中所附源码如下（有删）：</p>
<table style="width: 95%; border-collapse: collapse" border="1" cellspacing="0" bordercolor="#999999" cellpadding="0" bgcolor="#f1f1f1">
<tbody>
<tr>
<td>
<p style="line-height: 150%; margin: 5px"><code><span style="color: rgb(0,0,0)"><span style="color: rgb(0,0,255)">void</span> <span style="color: rgb(0,0,204)">*</span> __cdecl <span style="color: rgb(255,0,0)">memcpy</span> <span style="color: rgb(0,0,204)">(</span><span style="color: rgb(0,0,255)">void</span> <span style="color: rgb(0,0,204)">*</span> dst<span style="color: rgb(0,0,204)">,</span> <span style="color: rgb(0,0,255)">const</span> <span style="color: rgb(0,0,255)">void</span><span style="color: rgb(0,0,204)">*</span> src<span style="color: rgb(0,0,204)">,</span><span style="color: rgb(255,0,0)">size_t</span> <span style="color: rgb(255,0,0)">count</span><span style="color: rgb(0,0,204)">)</span><br /><span style="color: rgb(0,0,204)">{</span><br /><span style="color: rgb(0,0,255)">void</span> <span style="color: rgb(0,0,204)">*</span> ret <span style="color: rgb(0,0,204)">=</span> dst<span style="color: rgb(0,0,204)">;</span><br /><br /><span style="color: rgb(255,153,0)">/*<br />* copy from lower addresses to higher addresses<br />*/</span><br /><span style="color: rgb(0,0,255)">while</span> <span style="color: rgb(0,0,204)">(</span><span style="color: rgb(255,0,0)">count</span><span style="color: rgb(0,0,204)">-</span><span style="color: rgb(0,0,204)">-</span><span style="color: rgb(0,0,204)">)</span> <span style="color: rgb(0,0,204)">{</span><br /><span style="color: rgb(0,0,204)">*</span><span style="color: rgb(0,0,204)">(</span><span style="color: rgb(0,0,255)">char</span> <span style="color: rgb(0,0,204)">*</span><span style="color: rgb(0,0,204)">)</span>dst <span style="color: rgb(0,0,204)">=</span> <span style="color: rgb(0,0,204)">*</span><span style="color: rgb(0,0,204)">(</span><span style="color: rgb(0,0,255)">char</span> <span style="color: rgb(0,0,204)">*</span><span style="color: rgb(0,0,204)">)</span>src<span style="color: rgb(0,0,204)">;</span><br />dst <span style="color: rgb(0,0,204)">=</span> <span style="color: rgb(0,0,204)">(</span><span style="color: rgb(0,0,255)">char</span> <span style="color: rgb(0,0,204)">*</span><span style="color: rgb(0,0,204)">)</span>dst <span style="color: rgb(0,0,204)">+</span> 1<span style="color: rgb(0,0,204)">;</span><br />src <span style="color: rgb(0,0,204)">=</span> <span style="color: rgb(0,0,204)">(</span><span style="color: rgb(0,0,255)">char</span> <span style="color: rgb(0,0,204)">*</span><span style="color: rgb(0,0,204)">)</span>src <span style="color: rgb(0,0,204)">+</span> 1<span style="color: rgb(0,0,204)">;</span><br /><span style="color: rgb(0,0,204)">}</span><br /><br /><span style="color: rgb(0,0,255)">return</span><span style="color: rgb(0,0,204)">(</span>ret<span style="color: rgb(0,0,204)">)</span><span style="color: rgb(0,0,204)">;</span><br /><span style="color: rgb(0,0,204)">}</span></span></code></p></td></tr></tbody></table>
<table style="width: 95%; border-collapse: collapse" border="1" cellspacing="0" bordercolor="#999999" cellpadding="0" bgcolor="#f1f1f1">
<tbody>
<tr>
<td>
<p style="line-height: 150%; margin: 5px"><code><span style="color: rgb(0,0,0)"><span style="color: rgb(0,0,255)">void</span> <span style="color: rgb(0,0,204)">*</span> __cdecl <span style="color: rgb(255,0,0)">memmove</span> <span style="color: rgb(0,0,204)">(</span><span style="color: rgb(0,0,255)">void</span> <span style="color: rgb(0,0,204)">*</span> dst<span style="color: rgb(0,0,204)">,</span> <span style="color: rgb(0,0,255)">const</span> <span style="color: rgb(0,0,255)">void</span><span style="color: rgb(0,0,204)">*</span> src<span style="color: rgb(0,0,204)">,</span><span style="color: rgb(255,0,0)">size_t</span> <span style="color: rgb(255,0,0)">count</span><span style="color: rgb(0,0,204)">)</span><br /><span style="color: rgb(0,0,204)">{</span><br /><span style="color: rgb(0,0,255)">void</span> <span style="color: rgb(0,0,204)">*</span> ret <span style="color: rgb(0,0,204)">=</span> dst<span style="color: rgb(0,0,204)">;</span><br /><br /><span style="color: rgb(0,0,255)">if</span> <span style="color: rgb(0,0,204)">(</span>dst <span style="color: rgb(0,0,204)">&lt;</span><span style="color: rgb(0,0,204)">=</span> src <span style="color: rgb(0,0,204)">|</span><span style="color: rgb(0,0,204)">|</span> <span style="color: rgb(0,0,204)">(</span><span style="color: rgb(0,0,255)">char</span> <span style="color: rgb(0,0,204)">*</span><span style="color: rgb(0,0,204)">)</span>dst <span style="color: rgb(0,0,204)">&gt;</span><span style="color: rgb(0,0,204)">=</span> <span style="color: rgb(0,0,204)">(</span><span style="color: rgb(0,0,204)">(</span><span style="color: rgb(0,0,255)">char</span> <span style="color: rgb(0,0,204)">*</span><span style="color: rgb(0,0,204)">)</span>src <span style="color: rgb(0,0,204)">+</span> <span style="color: rgb(255,0,0)">count</span><span style="color: rgb(0,0,204)">)</span><span style="color: rgb(0,0,204)">)</span> <span style="color: rgb(0,0,204)">{</span><br /><span style="color: rgb(255,153,0)">/*<br />* Non-Overlapping Buffers<br />* copy from lower addresses to higher addresses<br />*/</span><br /><span style="color: rgb(0,0,255)">while</span> <span style="color: rgb(0,0,204)">(</span><span style="color: rgb(255,0,0)">count</span><span style="color: rgb(0,0,204)">-</span><span style="color: rgb(0,0,204)">-</span><span style="color: rgb(0,0,204)">)</span> <span style="color: rgb(0,0,204)">{</span><br /><span style="color: rgb(0,0,204)">*</span><span style="color: rgb(0,0,204)">(</span><span style="color: rgb(0,0,255)">char</span> <span style="color: rgb(0,0,204)">*</span><span style="color: rgb(0,0,204)">)</span>dst <span style="color: rgb(0,0,204)">=</span> <span style="color: rgb(0,0,204)">*</span><span style="color: rgb(0,0,204)">(</span><span style="color: rgb(0,0,255)">char</span> <span style="color: rgb(0,0,204)">*</span><span style="color: rgb(0,0,204)">)</span>src<span style="color: rgb(0,0,204)">;</span><br />dst <span style="color: rgb(0,0,204)">=</span> <span style="color: rgb(0,0,204)">(</span><span style="color: rgb(0,0,255)">char</span> <span style="color: rgb(0,0,204)">*</span><span style="color: rgb(0,0,204)">)</span>dst <span style="color: rgb(0,0,204)">+</span> 1<span style="color: rgb(0,0,204)">;</span><br />src <span style="color: rgb(0,0,204)">=</span> <span style="color: rgb(0,0,204)">(</span><span style="color: rgb(0,0,255)">char</span> <span style="color: rgb(0,0,204)">*</span><span style="color: rgb(0,0,204)">)</span>src <span style="color: rgb(0,0,204)">+</span> 1<span style="color: rgb(0,0,204)">;</span><br /><span style="color: rgb(0,0,204)">}</span><br /><span style="color: rgb(0,0,204)">}</span><br /><span style="color: rgb(0,0,255)">else</span> <span style="color: rgb(0,0,204)">{</span><br /><span style="color: rgb(255,153,0)">/*<br />* Overlapping Buffers<br />* copy from higher addresses to lower addresses<br />*/</span><br />dst <span style="color: rgb(0,0,204)">=</span> <span style="color: rgb(0,0,204)">(</span><span style="color: rgb(0,0,255)">char</span> <span style="color: rgb(0,0,204)">*</span><span style="color: rgb(0,0,204)">)</span>dst <span style="color: rgb(0,0,204)">+</span> <span style="color: rgb(255,0,0)">count</span> <span style="color: rgb(0,0,204)">-</span> 1<span style="color: rgb(0,0,204)">;</span><br />src <span style="color: rgb(0,0,204)">=</span> <span style="color: rgb(0,0,204)">(</span><span style="color: rgb(0,0,255)">char</span> <span style="color: rgb(0,0,204)">*</span><span style="color: rgb(0,0,204)">)</span>src <span style="color: rgb(0,0,204)">+</span> <span style="color: rgb(255,0,0)">count</span> <span style="color: rgb(0,0,204)">-</span> 1<span style="color: rgb(0,0,204)">;</span><br /><br /><span style="color: rgb(0,0,255)">while</span> <span style="color: rgb(0,0,204)">(</span><span style="color: rgb(255,0,0)">count</span><span style="color: rgb(0,0,204)">-</span><span style="color: rgb(0,0,204)">-</span><span style="color: rgb(0,0,204)">)</span> <span style="color: rgb(0,0,204)">{</span><br /><span style="color: rgb(0,0,204)">*</span><span style="color: rgb(0,0,204)">(</span><span style="color: rgb(0,0,255)">char</span> <span style="color: rgb(0,0,204)">*</span><span style="color: rgb(0,0,204)">)</span>dst <span style="color: rgb(0,0,204)">=</span> <span style="color: rgb(0,0,204)">*</span><span style="color: rgb(0,0,204)">(</span><span style="color: rgb(0,0,255)">char</span> <span style="color: rgb(0,0,204)">*</span><span style="color: rgb(0,0,204)">)</span>src<span style="color: rgb(0,0,204)">;</span><br />dst <span style="color: rgb(0,0,204)">=</span> <span style="color: rgb(0,0,204)">(</span><span style="color: rgb(0,0,255)">char</span> <span style="color: rgb(0,0,204)">*</span><span style="color: rgb(0,0,204)">)</span>dst <span style="color: rgb(0,0,204)">-</span> 1<span style="color: rgb(0,0,204)">;</span><br />src <span style="color: rgb(0,0,204)">=</span> <span style="color: rgb(0,0,204)">(</span><span style="color: rgb(0,0,255)">char</span> <span style="color: rgb(0,0,204)">*</span><span style="color: rgb(0,0,204)">)</span>src <span style="color: rgb(0,0,204)">-</span> 1<span style="color: rgb(0,0,204)">;</span><br /><span style="color: rgb(0,0,204)">}</span><br /><span style="color: rgb(0,0,204)">}</span><br /><br /><span style="color: rgb(0,0,255)">return</span><span style="color: rgb(0,0,204)">(</span>ret<span style="color: rgb(0,0,204)">)</span><span style="color: rgb(0,0,204)">;</span><br /><span style="color: rgb(0,0,204)">}</span></span></code></p></td></tr></tbody></table></div></td></tr></tbody></table><img src ="http://www.cppblog.com/mingjiagu/aggbug/151572.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/mingjiagu/" target="_blank">mousegu</a> 2011-07-21 21:55 <a href="http://www.cppblog.com/mingjiagu/archive/2011/07/21/151572.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>