﻿<?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/cc/</link><description>半亩方塘 天光云影</description><language>zh-cn</language><lastBuildDate>Thu, 23 Apr 2026 04:11:13 GMT</lastBuildDate><pubDate>Thu, 23 Apr 2026 04:11:13 GMT</pubDate><ttl>60</ttl><item><title>在windows环境中配置go语言开发环境</title><link>http://www.cppblog.com/cc/archive/2013/02/07/197762.html</link><dc:creator>北风之神007</dc:creator><author>北风之神007</author><pubDate>Thu, 07 Feb 2013 02:13:00 GMT</pubDate><guid>http://www.cppblog.com/cc/archive/2013/02/07/197762.html</guid><wfw:comment>http://www.cppblog.com/cc/comments/197762.html</wfw:comment><comments>http://www.cppblog.com/cc/archive/2013/02/07/197762.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cppblog.com/cc/comments/commentRss/197762.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/cc/services/trackbacks/197762.html</trackback:ping><description><![CDATA[<br />  <p style="line-height:150%"><span style="font-size:12.0pt; line-height:150%;font-family:宋体;">参考</span><span style="font-size:12.0pt;line-height:150%"><a href="http://www.cnblogs.com/MikeZhang/archive/2012/02/10/nppRunGo.html">http://www.cnblogs.com/MikeZhang/archive/2012/02/10/nppRunGo.html</a></span></p>  <p style="line-height:150%"><span style="font-size:12.0pt; line-height:150%;font-family:宋体;">最近</span><span style="font-size:12.0pt;line-height:150%">google</span><span style="font-size:12.0pt;line-height:150%;font-family:宋体;">的</span><span style="font-size:12.0pt;line-height:150%">go</span><span style="font-size:12.0pt; line-height:150%;font-family:宋体;">语言流行程度越来越大了，学着别人写的内容自己在</span><span style="font-size:12.0pt; line-height:150%">windows</span><span style="font-size:12.0pt;line-height:150%; font-family:宋体;">下搭建了一个简单的开发环境，记录在这里，如果需要参考的可以借鉴。</span></p>  <p style="margin-left:21.0pt;text-indent:-21.0pt;"><strong><span style="font-size:14.0pt;">一、<span style="font-weight: normal; font-size: 7pt; line-height: normal; font-family: 'Times New Roman';">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></strong><strong><span style="font-size:14.0pt;font-family:宋体;">下载编译器</span></strong><strong></strong></p>  <p style="line-height:150%"><span style="font-family:宋体;">下载</span>go<span style="font-family:宋体;">语言的开发工具可以到</span><a href="http://code.google.com/p/gomingw/downloads/list">http://code.google.com/p/gomingw/downloads/list</a><span style="font-family:宋体;">去下载，这里列出了当前最新的版本。</span></p>  <p style="line-height:150%"><span style="font-family:宋体;">我选择下载</span><span style="font-size:10.0pt;line-height:150%;font-family:&quot;Arial&quot;,&quot;sans-serif&quot;; background:white"><a href="http://gomingw.googlecode.com/files/gowin386_release.r60.3.zip">http://gomingw.googlecode.com/files/gowin386_release.r60.3.zip</a></span></p>  <p>&nbsp;</p>  <p><span style="font-family:宋体;">下载完毕之后，就是一个压缩包，我们把它解压缩，最终解压缩后的目录以</span><strong><span style="font-size:16.0pt; color:#124AE8">go</span></strong><span style="font-family:宋体;">命名。</span></p>  <p style="margin-left:21.0pt;text-indent:-21.0pt;"><strong><span style="font-size:14.0pt;">二、<span style="font-weight: normal; font-size: 7pt; line-height: normal; font-family: 'Times New Roman';">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></strong><strong><span style="font-size:14.0pt;font-family:宋体;">配置环境变量</span></strong><strong></strong></p>  <p style="line-height:150%;"><span style="font-size:12.0pt;line-height:150%;font-family:宋体;">编译工具下载之后解压缩，就是一个目录，后期我们需要在命令行或者工具中调用编译程序，所以需要把编译工具的路径以及相关属性配置进系统环境变量。</span></p>  <p style="line-height:150%;">&nbsp;</p>  <p style="line-height:150%;"><span style="font-size:12.0pt;line-height:150%;font-family:宋体;">需要设定的环境变量如下：</span></p>  <table border="1" cellspacing="0" cellpadding="0" style="border-collapse: collapse; border: none;">  <tbody><tr>   <td width="568" valign="top" style="width: 426.1pt; border: 1pt solid windowtext; padding: 0cm 5.4pt;">   <div style="border:none;border-left:solid #6CE26C 2.25pt;   padding:0cm 0cm 0cm 0cm;background:white;margin-left:18.0pt;margin-right:   0cm">   <p align="left" style="margin-left: 18pt; text-indent: -18pt; line-height: 13.5pt; border: none; padding: 0cm; background-position: initial initial; background-repeat: initial initial;"><span style="font-size:9.0pt;font-family:Consolas;color:#5C5C5C;">1.&nbsp;</span><span style="font-size: 9pt; font-family: Consolas; border: 1pt none windowtext; padding: 0cm;">set&nbsp;</span><span style="font-size:9.0pt;   font-family:Consolas;color:red;border:none windowtext 1.0pt;padding:0cm;">goroot</span><span style="font-size: 9pt; font-family: Consolas; border: 1pt none windowtext; padding: 0cm;">=</span><span style="font-size:9.0pt;   font-family:Consolas;color:blue;border:none windowtext 1.0pt;padding:0cm;">go</span><span style="font-size:9.0pt;font-family:宋体;color:blue;   border:none windowtext 1.0pt;padding:0cm;">编译程序主目录全路径</span><span style="font-size: 9pt; font-family: Consolas; border: 1pt none windowtext; padding: 0cm;">&nbsp;&nbsp;&nbsp;   &nbsp;&nbsp;</span></p>   <p align="left" style="margin-left: 18pt; text-indent: -18pt; line-height: 13.5pt; background-color: #f8f8f8; border: none; padding: 0cm; background-position: initial initial; background-repeat: initial initial;"><span style="font-size:9.0pt;font-family:Consolas;color:#5C5C5C;">2.&nbsp;</span><span style="font-size: 9pt; font-family: Consolas; border: 1pt none windowtext; padding: 0cm;">set&nbsp;</span><span style="font-size:9.0pt;   font-family:Consolas;color:red;border:none windowtext 1.0pt;padding:0cm;">goarch</span><span style="font-size: 9pt; font-family: Consolas; border: 1pt none windowtext; padding: 0cm;">=</span><span style="font-size:9.0pt;   font-family:Consolas;color:blue;border:none windowtext 1.0pt;padding:0cm;">386</span><span style="font-size: 9pt; font-family: Consolas; border: 1pt none windowtext; padding: 0cm;">&nbsp;&nbsp; &nbsp;&nbsp;</span></p>   <p align="left" style="margin-left: 18pt; text-indent: -18pt; line-height: 13.5pt; border: none; padding: 0cm; background-position: initial initial; background-repeat: initial initial;"><span style="font-size:9.0pt;font-family:Consolas;color:#5C5C5C;">3.&nbsp;</span><span style="font-size: 9pt; font-family: Consolas; border: 1pt none windowtext; padding: 0cm;">set&nbsp;</span><span style="font-size:9.0pt;   font-family:Consolas;color:red;border:none windowtext 1.0pt;padding:0cm;">path</span><span style="font-size: 9pt; font-family: Consolas; border: 1pt none windowtext; padding: 0cm;">=</span><span style="font-size:9.0pt;   font-family:Consolas;color:blue;border:none windowtext 1.0pt;padding:0cm;">%goroot%</span><span style="font-size: 9pt; font-family: Consolas; border: 1pt none windowtext; padding: 0cm;">/bin &nbsp;&nbsp;</span></p>   <p align="left" style="margin-left: 18pt; text-indent: -18pt; line-height: 13.5pt; background-color: #f8f8f8; border: none; padding: 0cm; background-position: initial initial; background-repeat: initial initial;"><span style="font-size:9.0pt;font-family:Consolas;color:#5C5C5C;">4.&nbsp;</span><span style="font-size: 9pt; font-family: Consolas; border: 1pt none windowtext; padding: 0cm;">set&nbsp;</span><span style="font-size:9.0pt;   font-family:Consolas;color:red;border:none windowtext 1.0pt;padding:0cm;">goos</span><span style="font-size: 9pt; font-family: Consolas; border: 1pt none windowtext; padding: 0cm;">=</span><span style="font-size:9.0pt;   font-family:Consolas;color:blue;border:none windowtext 1.0pt;padding:0cm;">windows</span></p>   </div>   </td>  </tr> </tbody></table>  <p style="line-height:150%;"><span style="font-size:12.0pt;line-height:150%;font-family:宋体;">其中</span><span style="font-size:12.0pt;line-height:150%">go</span><span style="font-size:12.0pt; line-height:150%;font-family:宋体;">目录全路径是我们前面解压缩后的以</span><strong><span style="font-size:16.0pt;line-height:150%;color:#124AE8">go</span></strong><span style="font-size:12.0pt;line-height:150%;font-family:宋体;">命名的目录，我们这里假设为</span><strong><em><span style="font-size:14.0pt;line-height:150%;color:#124AE8">c:\go</span></em></strong></p>  <p style="line-height:150%"><strong><span style="font-size:12.0pt;line-height:150%">1</span></strong><strong><span style="font-size:12.0pt;line-height: 150%;font-family:宋体;">、在</span></strong><strong><span style="font-size:12.0pt; line-height:150%">xp</span></strong><strong><span style="font-size:12.0pt;line-height:150%;font-family:宋体;">环境下：</span></strong><strong></strong></p>  <p style="line-height:150%"><span style="font-size:12.0pt; line-height:150%;font-family:宋体;">在桌面<strong><span style="color:#124AE8">我的电脑</span></strong>右键，查看属性，弹出系统属性对话框，如下：<br /></span></p>  <p style="line-height:150%"><img border="0" width="348" height="407" src="http://www.cppblog.com/images/cppblog_com/cc/201302/1.png" v:shapes="图片_x0020_1" alt="" /></p>  <p style="line-height:150%"><span style="font-family:宋体;">新建环境变量：</span></p>  <p style="line-height:150%"><img border="0" width="417" height="168" src="http://www.cppblog.com/images/cppblog_com/cc/201302/2.png" v:shapes="_x0000_i1026" alt="" /></p>  <p style="line-height:150%"><span style="font-size:12.0pt; line-height:150%;font-family:宋体;">在</span><span style="font-size:12.0pt;line-height:150%">vista</span><span style="font-size:12.0pt;line-height:150%;font-family:宋体;">和</span><span style="font-size:12.0pt;line-height:150%">win</span><span style="font-size: 12.0pt;line-height:150%;font-family:宋体;">环境下：</span></p>  <p style="line-height:150%"><span style="font-size:12.0pt; line-height:150%;font-family:宋体;">在桌面<strong><span style="color:#124AE8">计算机</span></strong>右键，查看属性，打开系统信息窗口，再点击&#8220;高级系统设置&#8221;，弹出系统属性对话框，对话框与</span><span style="font-size:12.0pt;line-height:150%">XP</span><span style="font-size:12.0pt;line-height:150%;font-family:宋体;">类似，具体设置参考</span><span style="font-size:12.0pt;line-height:150%">XP</span><span style="font-size:12.0pt; line-height:150%;font-family:宋体;">系统设置部分。</span> </p>  <p style="line-height:150%">&nbsp;</p>  <p style="margin-left:21.0pt;text-indent:-21.0pt;"><strong><span style="font-size:14.0pt;">三、<span style="font-weight: normal; font-size: 7pt; line-height: normal; font-family: 'Times New Roman';">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></strong><strong><span style="font-size:14.0pt;font-family:宋体;">配置开发工具</span></strong><strong></strong></p>  <p style="line-height:150%"><span style="font-size:12.0pt; line-height:150%;font-family:宋体;">开发工具，我这里推荐两张，一种是</span><span style="font-size:12.0pt; line-height:150%">Notepad++</span><span style="font-size:12.0pt;line-height: 150%;font-family:宋体;">，一种是集成开发环境</span><span style="font-size:12.0pt;line-height:150%">LiteIDE</span><span style="font-size:12.0pt;line-height:150%;font-family:宋体;">。</span></p>  <p style="margin-left:18.0pt;text-indent:-18.0pt;line-height: 150%;"><span style="font-size:12.0pt;line-height:150%;">1．</span><span style="font-size:12.0pt;line-height:150%">Notepad++ </span></p>  <p style="margin-left:18.0pt;line-height:150%"><span style="font-size:12.0pt;line-height:150%">Notepad++</span><span style="font-size:12.0pt;line-height:150%;font-family:宋体;">的主页为</span><span style="font-size:12.0pt;line-height:150%"><a href="http://notepad-plus-plus.org/">http://notepad-plus-plus.org/</a></span><span style="font-size:12.0pt;line-height:150%;font-family:宋体;">，大家可以上去自己下最新的版本。</span></p>  <p style="margin-left:18.0pt;line-height:150%"><span style="font-size:12.0pt;line-height:150%;font-family:宋体;">程序的安装与普通程序没有区别，安装完毕之后就可以打开</span><span style="font-size:12.0pt;line-height:150%">notepad++</span><span style="font-size:12.0pt;line-height:150%;font-family:宋体;">。</span></p>  <p style="margin-left:18.0pt;line-height:150%"><span style="font-size:12.0pt;line-height:150%;font-family:宋体;">默认情况下，</span><span style="font-size:12.0pt;line-height:150%">notepad</span><span style="font-size: 12.0pt;line-height:150%;font-family:宋体;">是不带</span><span style="font-size: 12.0pt;line-height:150%">go</span><span style="font-size:12.0pt;line-height: 150%;font-family:宋体;">语言的代码解释器的，也不带便捷编译功能。所以我们需要下载安装</span><span style="font-size:12.0pt;line-height:150%">go</span><span style="font-size:12.0pt;line-height:150%;font-family:宋体;">语言的代码解释器，并进行适当配置。</span></p>  <p style="margin-left:18.0pt;text-indent:18.0pt;line-height:150%"><span style="font-size:12.0pt;line-height:150%; font-family:宋体;">操作步骤如下：</span></p>  <p style="text-indent:30.0pt; line-height:150%"><span style="font-size:12.0pt;line-height:150%;font-family: 宋体;">（</span><span style="font-size:12.0pt;line-height:150%">1</span><span style="font-size:12.0pt;line-height:150%;font-family:宋体;">）下载语言解析模板</span></p>  <p style="margin-left:59.25pt;line-height:150%"><strong><span style="font-size:16.0pt; line-height:150%;color:#124AE8">go</span></strong><span style="font-family:宋体;">语言解析模板：</span><a href="http://notepad-plus.sourceforge.net/commun/userDefinedLang/go.zip" target="_blank">http://notepad-plus.sourceforge.net/commun/userDefinedLang/go.zip</a>&nbsp;&nbsp;&nbsp; </p>  <p style="margin-left:18.0pt;line-height:150%"><span style="font-size:12.0pt;line-height:150%;font-family:宋体;">下载之后，解压缩，里面有&#8220;</span><span style="font-size:12.0pt;line-height:150%">go.xml</span><span style="font-size: 12.0pt;line-height:150%;font-family:宋体;">&#8221;，&#8220;</span><span style="font-size: 12.0pt;line-height:150%">userDefineLang_Go.xml</span><span style="font-size: 12.0pt;line-height:150%;font-family:宋体;">&#8221;，&#8220;</span><span style="font-size: 12.0pt;line-height:150%">README</span><span style="font-size:12.0pt;line-height: 150%;font-family:宋体;">&#8221;三个文件，我们重点关注前面两个文件。</span></p>  <p style="margin-left:18.0pt;text-indent:18.0pt;line-height:150%"><span style="font-size:12.0pt;line-height:150%; font-family:宋体;">（</span><span style="font-size:12.0pt;line-height:150%">2</span><span style="font-size:12.0pt;line-height:150%;font-family:宋体;">）将文件</span><span style="font-size:12.0pt;line-height:150%">userDefineLang_Go.xml</span><span style="font-size:12.0pt;line-height:150%;font-family:宋体;">内容</span><span style="font-size:12.0pt;line-height:150%">copy</span><span style="font-size: 12.0pt;line-height:150%;font-family:宋体;">至</span><span style="font-size:12.0pt; line-height:150%">Application Data</span><span style="font-size:12.0pt; line-height:150%;font-family:宋体;">下</span><span style="font-size:12.0pt;line-height:150%">Notepad++</span><span style="font-size:12.0pt;line-height:150%;font-family:宋体;">目录的</span><span style="font-size:12.0pt;line-height:150%">userDefineLang.xml</span><span style="font-size:12.0pt;line-height:150%;font-family:宋体;">中，如果没有该文件，则直接</span><span style="font-size:12.0pt;line-height:150%">userDefineLang_Go.xml</span><span style="font-size:12.0pt;line-height:150%;font-family:宋体;">文件名改成</span><span style="font-size:12.0pt;line-height:150%">userDefineLang.xml</span><span style="font-size:12.0pt;line-height:150%;font-family:宋体;">复制过去。</span><span style="font-size:12.0pt;line-height:150%"><br /> </span><span style="font-family:宋体;">　　</span><strong><span style="font-size:14.0pt;line-height:150%;color:#124AE8">XP:</span></strong> C:\Documents and Settings\<strong><span style="color:#124AE8">[username]</span></strong>\Application Data\Notepad++<br /> <span style="font-family:宋体;">　</span><strong><span style="font-size: 14.0pt;line-height:150%;font-family:宋体;color:#124AE8">　</span></strong><strong><span style="font-size:14.0pt;line-height:150%;color:#124AE8">Vista/Win7 : </span></strong>C:\Users\<strong><span style="color:#124AE8">[username]</span></strong>\AppData\Roaming\Notepad++</p>  <p style="line-height:150%">&nbsp;<span style="font-size:12.0pt;line-height:150%;font-family:宋体;">拷贝过去之后，打开</span><span style="font-size:12.0pt;line-height:150%">userDefineLang.xml</span><span style="font-size:12.0pt;line-height:150%;font-family:宋体;">文件，把文件前面与最后的&#8220;</span><span style="font-size:12.0pt;line-height:150%">&lt;!-- &lt;NotepadPlus&gt; --&gt;</span><span style="font-size:12.0pt;line-height:150%;font-family:宋体;">&#8221;和&#8220;</span><span style="font-size:12.0pt;line-height:150%">&lt;!-- &lt;/NotepadPlus&gt; --&gt;</span><span style="font-size:12.0pt;line-height:150%;font-family:宋体;">&#8221;分别改成&#8220;</span><span style="font-size:12.0pt;line-height:150%">&lt;NotepadPlus&gt;</span><span style="font-size:12.0pt;line-height:150%;font-family:宋体;">&#8221;和&#8220;</span><span style="font-size:12.0pt;line-height:150%">&lt;/NotepadPlus&gt;</span><span style="font-size:12.0pt;line-height:150%;font-family:宋体;">&#8221;</span><span style="font-size:12.0pt;line-height:150%">,</span><span style="font-size:12.0pt; line-height:150%;font-family:宋体;">改完保存之后</span></p>  <p style="text-indent:24.0pt; line-height:150%"><span style="font-size:12.0pt;line-height:150%;font-family: 宋体;">（</span><span style="font-size:12.0pt;line-height:150%">3</span><span style="font-size:12.0pt;line-height:150%;font-family:宋体;">）将</span><span style="font-size:12.0pt;line-height:150%">go.xml</span><span style="font-size: 12.0pt;line-height:150%;font-family:宋体;">文件</span><span style="font-size:12.0pt; line-height:150%">copy</span><span style="font-size:12.0pt;line-height:150%; font-family:宋体;">至</span><span style="font-size:12.0pt;line-height:150%">notepad++</span><span style="font-size:12.0pt;line-height:150%;font-family:宋体;">安装目录下的</span><span style="font-size:12.0pt;line-height:150%">plugins\APIs</span><span style="font-size:12.0pt;line-height:150%;font-family:宋体;">目录（例如：</span><span style="font-size:12.0pt;line-height:150%">D:\Program Files\Notepad++\plugins\APIs</span><span style="font-size:12.0pt;line-height: 150%;font-family:宋体;">）；</span></p>  <p style="text-indent:24.0pt; line-height:150%"><span style="font-size:12.0pt;line-height:150%;font-family: 宋体;">（</span><span style="font-size:12.0pt;line-height:150%">4</span><span style="font-size:12.0pt;line-height:150%;font-family:宋体;">）重启</span><span style="font-size:12.0pt;line-height:150%">notepad++</span><span style="font-size:12.0pt;line-height:150%;font-family:宋体;">程序，在语言菜单下可以看见</span><strong><span style="font-size:12.0pt;line-height:150%;color:#124AE8">go</span></strong><span style="font-size:12.0pt;line-height:150%;font-family:宋体;">。</span></p>  <p style="text-indent:24.0pt; line-height:150%"><span style="font-size:12.0pt;line-height:150%;font-family: 宋体;">（</span><span style="font-size:12.0pt;line-height:150%">5</span><span style="font-size:12.0pt;line-height:150%;font-family:宋体;">）设定快捷编译命令。</span></p>  <p style="text-indent:36.0pt;"><span style="font-size:12.0pt;font-family:宋体;">打开</span><span style="font-size:12.0pt">Notepad++</span><span style="font-size:12.0pt;font-family:宋体;">程序之后，运行</span><span style="font-size: 12.0pt">F5</span><span style="font-size:12.0pt;font-family:宋体;">命令</span></p>  <p style="text-indent:30.0pt;"><span style="font-size:12.0pt;font-family:宋体;">在弹出的对话框中输入以下内容：&#8220;</span><span style="font-size:12.0pt">cmd /k 8g.exe -o tmp.8 "$(FULL_CURRENT_PATH)" &amp; 8l.exe -o tmp.exe tmp.8 &amp; del tmp.8 &amp; tmp.exe &amp; PAUSE &amp; del tmp.exe &amp; EXIT</span><span style="font-size:12.0pt;font-family:宋体;">&#8221;。</span><span style="font-size:12.0pt"><br /> &nbsp;&nbsp; </span><span style="font-size:12.0pt; font-family:宋体;">保存为</span><span style="font-size:12.0pt">"Run Go"</span><span style="font-size:12.0pt;font-family:宋体;">，并设置</span><span style="font-size: 12.0pt">Ctrl+F6</span><span style="font-size:12.0pt;font-family:宋体;">为快捷键。</span></p>  <p style="text-indent:30.0pt;"><span style="font-size:12.0pt;font-family:宋体;">（</span><span style="font-size:12.0pt">6</span><span style="font-size:12.0pt;font-family:宋体;">）测试编译</span></p>  <p style="text-indent:6.0pt;"><span style="font-size:12.0pt;font-family:宋体;">我们使用</span><span style="font-size: 12.0pt">notepad++</span><span style="font-size:12.0pt;font-family:宋体;">新建一个</span><span style="font-size:12.0pt">hello.go</span><span style="font-size:12.0pt; font-family:宋体;">文件，在其中输入以下代码。</span></p>  <table border="1" cellspacing="0" cellpadding="0" style="border-collapse: collapse; border: none;">  <tbody><tr>   <td width="568" valign="top" style="width: 426.1pt; border: 1pt solid windowtext; padding: 0cm 5.4pt;">   <p align="left" style="line-height: 11.25pt; background-color: #f5f5f5; background-position: initial initial; background-repeat: initial initial;"><span style="font-size:9.0pt;font-family:   &quot;Courier New&quot;;color:#333333;">package main<br />   <br />   import "fmt"<br />   <br />   func main() {<br />   &nbsp;&nbsp;&nbsp; fmt.Println("Hello World</span><span style="font-size:9.0pt;font-family:宋体;Courier New&quot;;Courier New&quot;;Courier New&quot;;   color:#333333;">！</span><span style="font-size:9.0pt;font-family:&quot;Courier New&quot;;color:#333333;">")<br />   }</span></p>   <p>&nbsp;</p>   </td>  </tr> </tbody></table>  <p><span style="font-size:12.0pt;font-family:宋体;">再按&#8220;</span><span style="font-size:12.0pt">Ctrl+F6</span><span style="font-size:12.0pt; font-family:宋体;">&#8221;快捷键。</span></p>  <p><span style="font-size:12.0pt;font-family:宋体;">弹出窗口显示</span><span style="font-size:12.0pt"><img border="0" width="165" height="74" src="http://www.cppblog.com/images/cppblog_com/cc/201302/3.png" v:shapes="_x0000_i1027" alt="" /></span><span style="font-size:12.0pt; font-family:宋体;">，证明环境配置完毕。</span></p>  <p><span style="font-size:12.0pt;font-family:宋体;">我们也可以在</span><span style="font-size:12.0pt">dos</span><span style="font-size:12.0pt;font-family: 宋体;">命令窗口中执行编译运行命令。</span></p>  <table border="1" cellspacing="0" cellpadding="0" style="border-collapse: collapse; border: none;">  <tbody><tr>   <td width="568" valign="top" style="width: 426.1pt; border: 1pt solid windowtext; padding: 0cm 5.4pt;">   <p><span style="font-size:12.0pt;font-family:宋体;">编译：</span><span style="font-size:12.0pt">8g -o hello.8 hello.go<br />   </span><span style="font-size:12.0pt;font-family:宋体;">链接：</span><span style="font-size:12.0pt">8l -o hello.exe hello.8<br />   </span><span style="font-size:12.0pt;font-family:宋体;">运行：</span><span style="font-size:12.0pt">hello.exe</span></p>   </td>  </tr> </tbody></table>  <p>&nbsp;</p>  <p style="margin-left:18.0pt;text-indent:-18.0pt;line-height: 150%;"><span style="font-size:12.0pt;line-height:150%;">2．</span><span style="font-size:12.0pt;line-height:150%">LiteIDE</span></p>  <p style="line-height:150%"><span style="font-size: 12.0pt;line-height:150%;">LiteIDE</span><span style="font-size: 12.0pt;line-height:150%;font-family:宋体;">是</span><span style="font-size:12.0pt;line-height:150%;">go</span><span style="font-size:12.0pt;line-height:150%;font-family:宋体;">语言开发一个集成环境，可以到</span></p>  <p style="line-height:150%"><span style="font-size: 12.0pt;line-height:150%"><a href="http://code.google.com/p/golangide/downloads/list">http://code.google.com/p/golangide/downloads/list</a></span><span style="font-size:12.0pt;line-height:150%;font-family:宋体;">去查看最新版本。</span></p>  <p style="line-height:150%"><span style="font-size:12.0pt; line-height:150%;font-family:宋体;">我们这里下载</span><span style="font-size:12.0pt;line-height: 150%"><a href="http://golangide.googlecode.com/files/liteidex12.2.windows.hg586.7z">LiteIDE12.2_windows<span style="font-family:宋体;">版本</span></a></span><span style="font-size: 12.0pt;line-height:150%;font-family:宋体;">。</span><span style="font-size:12.0pt; line-height:150%"> </span></p>  <p style="line-height:150%"><span style="font-size:12.0pt; line-height:150%;font-family:宋体;">这个工具的配置在下载处有文档说明，这里就不详细介绍了。</span></p>  <p style="line-height:150%">&nbsp;</p>  <p style="line-height:150%"><span style="font-size:12.0pt; line-height:150%;font-family:宋体;">希望写的内容对大家有帮助。</span></p><img src ="http://www.cppblog.com/cc/aggbug/197762.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/cc/" target="_blank">北风之神007</a> 2013-02-07 10:13 <a href="http://www.cppblog.com/cc/archive/2013/02/07/197762.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Qt程序Release模式编译</title><link>http://www.cppblog.com/cc/archive/2012/11/12/195075.html</link><dc:creator>北风之神007</dc:creator><author>北风之神007</author><pubDate>Mon, 12 Nov 2012 06:01:00 GMT</pubDate><guid>http://www.cppblog.com/cc/archive/2012/11/12/195075.html</guid><wfw:comment>http://www.cppblog.com/cc/comments/195075.html</wfw:comment><comments>http://www.cppblog.com/cc/archive/2012/11/12/195075.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/cc/comments/commentRss/195075.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/cc/services/trackbacks/195075.html</trackback:ping><description><![CDATA[<span style="font-size: 12pt; ">&nbsp; &nbsp;在Linux下用Qt开发了一些界面的程序，编译出来结果比较大，有的都上百兆，查了之后才知道编译出来的程序不是release模式的，我们需要在pro文件中增加编译指令，用release模式编译，效率方面没有做测试，不过程序体积只是之前的十分之一，正常了很多。<br /><br />其实我们要做的不多，只要在pro文件中增加以下的选项即可，这样就可以release模式编译了。<br /><br /></span><div style="font-size: 12pt; "><strong style="font-family: 'Times New Roman'; font-size: 18pt; color: #0000ff; ">CONFIG+= &nbsp;release</strong></div><img src ="http://www.cppblog.com/cc/aggbug/195075.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/cc/" target="_blank">北风之神007</a> 2012-11-12 14:01 <a href="http://www.cppblog.com/cc/archive/2012/11/12/195075.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>使用jpeglib库实现bmp转jpg (转)</title><link>http://www.cppblog.com/cc/archive/2012/02/22/166217.html</link><dc:creator>北风之神007</dc:creator><author>北风之神007</author><pubDate>Wed, 22 Feb 2012 03:04:00 GMT</pubDate><guid>http://www.cppblog.com/cc/archive/2012/02/22/166217.html</guid><wfw:comment>http://www.cppblog.com/cc/comments/166217.html</wfw:comment><comments>http://www.cppblog.com/cc/archive/2012/02/22/166217.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/cc/comments/commentRss/166217.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/cc/services/trackbacks/166217.html</trackback:ping><description><![CDATA[<div><h3><div><h1><span style="color:#3354AE">一、</span><span style="color:#3354AE">vc</span>编译jpeglib库</h1>  <h2><span style="font-family:&quot;Cambria&quot;,&quot;serif&quot;; color:#3354AE">1</span>、下载源代码</h2>  <p><span style="font-family:宋体;">下载地址：</span>http://www.ijg.org/<span style="font-family:宋体;">。注意：一定要下载</span>win32&nbsp;<span style="font-family:宋体;">版本</span></p>  <h2><span style="font-family:&quot;Cambria&quot;,&quot;serif&quot;; color:#3354AE">2</span><span style="color:#3354AE">、编译源代码</span><span style="font-family:&quot;Cambria&quot;,&quot;serif&quot;;color:#3354AE">.</span></h2>  <p>&nbsp;&nbsp;&nbsp;&nbsp;A<span style="font-family:宋体;">、解压源代码，修改源代码中</span>jconfig.vc<span style="font-family:宋体;">为</span>jconfig.h<span style="font-family:宋体;">；</span></p>  <p>&nbsp;&nbsp;&nbsp;&nbsp;B<span style="font-family:宋体;">、添加环境变量</span>PATH<span style="font-family:宋体;">，</span>C:/Program Files/Microsoft Visual Studio/VC98/Bin&nbsp;<span style="font-family:宋体;">；</span></p>  <p>&nbsp;&nbsp;&nbsp;&nbsp;C<span style="font-family:宋体;">、修改</span>makefile.vc<span style="font-family:宋体;">，将</span>&nbsp;Pull in standard variable definitions<span style="font-family:宋体;">下面的一行换为：</span>!include &lt;C:/Program Files/Microsoft Visual Studio/VC98/Include/win32.mak&gt;&nbsp;<span style="font-family:宋体;">；</span></p>  <p>&nbsp;&nbsp;&nbsp;&nbsp;D<span style="font-family:宋体;">、进入命令提示环境下，输入：</span>vcvars32&nbsp;<span style="font-family:宋体;">回车，这是一个用来设置</span>VC<span style="font-family:宋体;">路径环境的批处理；</span></p>  <p>&nbsp;&nbsp;&nbsp;&nbsp;E<span style="font-family:宋体;">、编译生成库文件</span>&nbsp;<span style="font-family:宋体;">命令：</span>nmake /f makefile.vc nodebug=1<span style="font-family:宋体;">；</span></p>  <p><span style="font-family:宋体;">这样就</span>OK<span style="font-family:宋体;">了</span></p>  <h2><span style="font-family:&quot;Cambria&quot;,&quot;serif&quot;; color:#3354AE">3</span><span style="color:#3354AE">、</span><span style="font-family:&quot;Cambria&quot;,&quot;serif&quot;;color:#3354AE">jpeglib</span><span style="color:#3354AE">库</span><span style="font-family:&quot;Cambria&quot;,&quot;serif&quot;;color:#3354AE">VC</span><span style="color:#3354AE">下使用</span></h2>  <p><span style="font-family:宋体;">对于库的使用只需要有相应的</span>.lib<span style="font-family:宋体;">文件和头文件就可以了。</span>Vc<span style="font-family:宋体;">中要添加</span>libjpeg.lib<span style="font-family:宋体;">库的连接</span></p>  <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="font-family:宋体;">将这几个文件拷贝到你的项目中：</span>libjpeg.lib<span style="font-family:宋体;">，</span>jconfig.h<span style="font-family:宋体;">，</span>jmorecfg.h<span style="font-family:宋体;">，</span>jpeglib.h<span style="font-family:宋体;">，在你需要进行压缩的文件中加入</span></p>  <p>extern "C" {</p>  <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#include "jpeglib.h"</p>  <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#include "jmorecfg.h"</p>  <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#include "jconfig.h"</p>  <p>}</p>  <p><span style="font-family:宋体;">参考：</span></p>  <p><span style=" font-family:&quot;Arial&quot;,&quot;sans-serif&quot;;Times New Roman&quot;;"><a href="http://blog.csdn.net/xingyu19871124/archive/2009/06/30/4310800.aspx"><span style="font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;color:purple">http://blog.csdn.net/xingyu19871124/archive/2009/06/30/4310800.aspx</span></a></span></p>  <p><span style="font-family: 宋体; ">小知识：</span>bmp<span style="font-family: 宋体; ">文件的前</span>54<span style="font-family: 宋体; ">个字节是头，后面才是像素值。</span></p>  <h1><span style="color:#3354AE">二、使用jpeg</span><span style=" color:#3354AE">库压缩</span></h1>  <p><span style="font-family:宋体;">在源代码的文件夹下面有一个</span>example.c<span style="font-family:宋体;">的文件和</span>libjpeg.txt<span style="font-family:宋体;">，很有参考价值。</span></p>  <h2><span style="font-family:&quot;Cambria&quot;,&quot;serif&quot;; color:#3354AE">1</span><span style="color:#3354AE">、基本思路</span></h2>  <p><span style="font-family:宋体;">首先调用截屏程序，将屏幕的位图信息存放在一个</span>buffer<span style="font-family:宋体;">里面，然后调用</span>jpg<span style="font-family:宋体;">压缩函数，在当前的目录下生成一个</span>ok.jpg<span style="font-family:宋体;">的文件。</span></p>  <h2><span style="font-family:&quot;Cambria&quot;,&quot;serif&quot;; color:#3354AE">2</span>、出现的问题：</h2>  <p>A<span style="font-family:宋体;">、运行是总是报错：</span></p>  <p><span style="font-family: 宋体; ">我参考源代码的例子，也用</span>JSAMPLE * image_buffer;<span style="font-family: 宋体; ">来指向位图的像素的首地址，编译可以通过但是运行时就会报错，后来我用</span>BYTE *image_buffer;<span style="font-family: 宋体; ">来定义就可以正常运行了。</span></p>  <p>B<span style="font-family:宋体;">、生成的</span>jpg<span style="font-family:宋体;">图像失真：</span></p>  <p><span style="font-family: 宋体; ">由于</span>window<span style="font-family: 宋体; ">的位图的像素格式是：</span>BGRA<span style="font-family: 宋体; ">，</span>4<span style="font-family: 宋体; ">个字节，</span>jpeglib<span style="font-family: 宋体; ">库使用的是</span>RGB<span style="font-family: 宋体; ">，</span>3<span style="font-family: 宋体; ">个字节的格式，所以需要将源像素去掉其透明字节，同时改变</span>RGB<span style="font-family: 宋体; ">的顺序。代码如下：</span></p>  <p>//RGB<span style="font-family: 宋体; ">顺序调整</span></p>  <p>for (int i=0, int j=0; j &lt; 1440*900*4; i+=3, j+=4)</p>  <p>{</p>  <p>&nbsp;&nbsp;&nbsp;&nbsp;*(image_buffer+i)=*(image_buffer+j+2);</p>  <p>&nbsp;&nbsp;&nbsp;&nbsp;*(image_buffer+i+1)=*(image_buffer+j+1);</p>  <p>&nbsp;&nbsp;&nbsp;&nbsp;*(image_buffer+i+2)=*(image_buffer+j);</p>  <p>}</p>  <p>C<span style="font-family:宋体;">、生成的</span>jpg<span style="font-family:宋体;">文件图像是倒的：</span></p>  <p><span style="font-family: 宋体; ">原因没有找到，后来修改了压缩函数的代码，生成了正确的</span>jpg<span style="font-family: 宋体; ">文件</span></p>  <p>while (cinfo.next_scanline &lt; cinfo.image_height) {</p>  <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//<span style="font-family: 宋体; ">这里我做过修改，由于</span>jpg<span style="font-family: 宋体; ">文件的图像是倒的，所以改了一下读的顺序</span></p>  <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//<span style="font-family: 宋体; ">这是原代码：</span>row_pointer[0] = &amp; bits[cinfo.next_scanline * row_stride];</p>  <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;row_pointer[0] = &amp; bits[(cinfo.image_height - cinfo.next_scanline - 1) * row_stride];</p>  <p>&nbsp;&nbsp;&nbsp;&nbsp;(void) jpeg_write_scanlines(&amp;cinfo, row_pointer, 1);</p>  <p>}</p>  <h2><span style="font-family:&quot;Cambria&quot;,&quot;serif&quot;; color:#3354AE">3</span>、测试结果：</h2>  <p><span style="font-family:宋体;">我编写了测试代码，连续截屏并生成</span>jpg<span style="font-family:宋体;">文件</span>100<span style="font-family:宋体;">次，大约花费</span>7<span style="font-family:宋体;">秒左右，也就是说</span>1<span style="font-family:宋体;">秒可以截屏</span>13<span style="font-family:宋体;">次左右。同时生成的</span>jpg<span style="font-family:宋体;">文件有</span>100<span style="font-family:宋体;">多</span>K<span style="font-family:宋体;">的样子。</span></p>  <h1>三、代码：</h1>  <p>&nbsp;</p><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->#include&nbsp;"stdafx.h"<br />#include&nbsp;&lt;atlbase.h&gt;<br />#include&nbsp;&lt;afxwin.h&gt;<br />#include&nbsp;&lt;WINDOWSX.H&gt;<br />&nbsp;<br /><span style="color: #0000FF; ">#define</span>&nbsp;JPEG_QUALITY&nbsp;50&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">它的大小决定jpg的质量好坏</span><br />&nbsp;<br /><span style="color: #0000FF; ">extern</span>&nbsp;"C"&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;#include&nbsp;"jpeglib.h"<br />&nbsp;&nbsp;&nbsp;&nbsp;#include&nbsp;"jmorecfg.h"<br />&nbsp;&nbsp;&nbsp;&nbsp;#include&nbsp;"jconfig.h"<br />}<br />&nbsp;<br /><span style="color: #0000FF; ">int</span>&nbsp;savejpeg(<span style="color: #0000FF; ">char</span>&nbsp;*filename,&nbsp;unsigned&nbsp;<span style="color: #0000FF; ">char</span>&nbsp;*bits,&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;width,&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;height,&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;depth);<br /><span style="color: #0000FF; ">void</span>&nbsp;CapScreen(<span style="color: #0000FF; ">char</span>&nbsp;filename[]);<br />&nbsp;<br />BYTE&nbsp;*image_buffer;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">指向位图buffer的全局指针，window下像素格式:&nbsp;BGRA(4个字节)</span><span style="color: #008000; "><br /></span>&nbsp;<br /><span style="color: #0000FF; ">int</span>&nbsp;main(<span style="color: #0000FF; ">int</span>&nbsp;argc,&nbsp;<span style="color: #0000FF; ">char</span>*&nbsp;argv[])<br />{<br />&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;image_buffer&nbsp;=&nbsp;(BYTE&nbsp;*)malloc(1440&nbsp;*&nbsp;900&nbsp;*&nbsp;4);<br />&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>(<span style="color: #0000FF; ">int</span>&nbsp;i&nbsp;=&nbsp;0;&nbsp;i&nbsp;&lt;&nbsp;100;&nbsp;i++){<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CapScreen("ok.bmp");&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">RGB顺序调整</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>&nbsp;(<span style="color: #0000FF; ">int</span>&nbsp;i=0,&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;j=0;&nbsp;j&nbsp;&lt;&nbsp;1440*900*4;&nbsp;i+=3,&nbsp;j+=4)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*(image_buffer+i)=*(image_buffer+j+2);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*(image_buffer+i+1)=*(image_buffer+j+1);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*(image_buffer+i+2)=*(image_buffer+j);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;savejpeg("ok.jpg",&nbsp;image_buffer,&nbsp;1440,&nbsp;900,&nbsp;3);<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;delete&nbsp;[]&nbsp;image_buffer;<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;0;<br />}<br />&nbsp;<br />&nbsp;<br /><span style="color: #008000; ">/*</span><span style="color: #008000; ">===================================================================================<br />function:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;jpeg压缩<br />input:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1:生成的文件名,2:bmp的指针,3:位图宽度,4:位图高度,5:颜色深度<br />return:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int<br />description:&nbsp;&nbsp;&nbsp;&nbsp;bmp的像素格式为(RGB)<br />===================================================================================</span><span style="color: #008000; ">*/</span><br /><span style="color: #0000FF; ">int</span>&nbsp;savejpeg(<span style="color: #0000FF; ">char</span>&nbsp;*filename,&nbsp;unsigned&nbsp;<span style="color: #0000FF; ">char</span>&nbsp;*bits,&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;width,&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;height,&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;depth)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">struct</span>&nbsp;jpeg_compress_struct&nbsp;cinfo;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">struct</span>&nbsp;jpeg_error_mgr&nbsp;jerr;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FILE&nbsp;*&nbsp;outfile;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">/*</span><span style="color: #008000; ">&nbsp;target&nbsp;file&nbsp;</span><span style="color: #008000; ">*/</span><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;JSAMPROW&nbsp;row_pointer[1];&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">/*</span><span style="color: #008000; ">&nbsp;pointer&nbsp;to&nbsp;JSAMPLE&nbsp;row[s]&nbsp;</span><span style="color: #008000; ">*/</span><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;row_stride;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">/*</span><span style="color: #008000; ">&nbsp;physical&nbsp;row&nbsp;width&nbsp;in&nbsp;image&nbsp;buffer&nbsp;</span><span style="color: #008000; ">*/</span><br />&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cinfo.err&nbsp;=&nbsp;jpeg_std_error(&amp;jerr);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;jpeg_create_compress(&amp;cinfo);<br />&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;((outfile&nbsp;=&nbsp;fopen(filename,&nbsp;"wb"))&nbsp;==&nbsp;NULL)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fprintf(stderr,&nbsp;"can't&nbsp;open&nbsp;%s/n",&nbsp;filename);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;-1;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;jpeg_stdio_dest(&amp;cinfo,&nbsp;outfile);<br />&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cinfo.image_width&nbsp;=&nbsp;width;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">/*</span><span style="color: #008000; ">&nbsp;image&nbsp;width&nbsp;and&nbsp;height,&nbsp;in&nbsp;pixels&nbsp;</span><span style="color: #008000; ">*/</span><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cinfo.image_height&nbsp;=&nbsp;height;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cinfo.input_components&nbsp;=&nbsp;3;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">/*</span><span style="color: #008000; ">&nbsp;#&nbsp;of&nbsp;color&nbsp;components&nbsp;per&nbsp;pixel&nbsp;</span><span style="color: #008000; ">*/</span><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cinfo.in_color_space&nbsp;=&nbsp;JCS_RGB;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">/*</span><span style="color: #008000; ">&nbsp;colorspace&nbsp;of&nbsp;input&nbsp;image&nbsp;</span><span style="color: #008000; ">*/</span><br />&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;jpeg_set_defaults(&amp;cinfo);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;jpeg_set_quality(&amp;cinfo,&nbsp;JPEG_QUALITY,&nbsp;TRUE&nbsp;<span style="color: #008000; ">/*</span><span style="color: #008000; ">&nbsp;limit&nbsp;to&nbsp;baseline-JPEG&nbsp;values&nbsp;</span><span style="color: #008000; ">*/</span>);<br />&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;jpeg_start_compress(&amp;cinfo,&nbsp;TRUE);<br />&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;row_stride&nbsp;=&nbsp;width&nbsp;*&nbsp;depth;&nbsp;<span style="color: #008000; ">/*</span><span style="color: #008000; ">&nbsp;JSAMPLEs&nbsp;per&nbsp;row&nbsp;in&nbsp;image_buffer&nbsp;</span><span style="color: #008000; ">*/</span><br />&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">while</span>&nbsp;(cinfo.next_scanline&nbsp;&lt;&nbsp;cinfo.image_height)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">这里我做过修改，由于jpg文件的图像是倒的，所以改了一下读的顺序<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">这是原代码：row_pointer[0]&nbsp;=&nbsp;&amp;&nbsp;bits[cinfo.next_scanline&nbsp;*&nbsp;row_stride];</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;row_pointer[0]&nbsp;=&nbsp;&amp;&nbsp;bits[(cinfo.image_height&nbsp;-&nbsp;cinfo.next_scanline&nbsp;-&nbsp;1)&nbsp;*&nbsp;row_stride];<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(<span style="color: #0000FF; ">void</span>)&nbsp;jpeg_write_scanlines(&amp;cinfo,&nbsp;row_pointer,&nbsp;1);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;jpeg_finish_compress(&amp;cinfo);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fclose(outfile);<br />&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;jpeg_destroy_compress(&amp;cinfo);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;0;<br />}<br />&nbsp;<br />&nbsp;<br /><span style="color: #0000FF; ">void</span>&nbsp;CapScreen(<span style="color: #0000FF; ">char</span>&nbsp;filename[])<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;CDC&nbsp;*pDC;<br />&nbsp;&nbsp;&nbsp;&nbsp;pDC&nbsp;=&nbsp;CDC::FromHandle(GetDC(GetDesktopWindow()));<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(pDC&nbsp;==&nbsp;NULL)&nbsp;<span style="color: #0000FF; ">return</span>;<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;BitPerPixel&nbsp;=&nbsp;pDC-&gt;GetDeviceCaps(BITSPIXEL);<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;Width&nbsp;=&nbsp;pDC-&gt;GetDeviceCaps(HORZRES);<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;Height&nbsp;=&nbsp;pDC-&gt;GetDeviceCaps(VERTRES);<br />&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;CDC&nbsp;memDC;<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(memDC.CreateCompatibleDC(pDC)&nbsp;==&nbsp;0)&nbsp;<span style="color: #0000FF; ">return</span>;<br />&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;CBitmap&nbsp;memBitmap,&nbsp;*oldmemBitmap;<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(memBitmap.CreateCompatibleBitmap(pDC,&nbsp;Width,&nbsp;Height)&nbsp;==&nbsp;NULL)&nbsp;<span style="color: #0000FF; ">return</span>;<br />&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;oldmemBitmap&nbsp;=&nbsp;memDC.SelectObject(&amp;memBitmap);<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(oldmemBitmap&nbsp;==&nbsp;NULL)&nbsp;<span style="color: #0000FF; ">return</span>;<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(memDC.BitBlt(0,&nbsp;0,&nbsp;Width,&nbsp;Height,&nbsp;pDC,&nbsp;0,&nbsp;0,&nbsp;SRCCOPY)&nbsp;==&nbsp;0)&nbsp;<span style="color: #0000FF; ">return</span>;<br />&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;BITMAP&nbsp;bmp;<br />&nbsp;&nbsp;&nbsp;&nbsp;memBitmap.GetBitmap(&amp;bmp);<br />&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">fp&nbsp;=&nbsp;fopen(filename,&nbsp;"w+b");</span><span style="color: #008000; "><br /></span>&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;BITMAPINFOHEADER&nbsp;bih&nbsp;=&nbsp;{0};<br />&nbsp;&nbsp;&nbsp;&nbsp;bih.biBitCount&nbsp;=&nbsp;bmp.bmBitsPixel;<br />&nbsp;&nbsp;&nbsp;&nbsp;bih.biCompression&nbsp;=&nbsp;BI_RGB;<br />&nbsp;&nbsp;&nbsp;&nbsp;bih.biHeight&nbsp;=&nbsp;bmp.bmHeight;<br />&nbsp;&nbsp;&nbsp;&nbsp;bih.biPlanes&nbsp;=&nbsp;1;<br />&nbsp;&nbsp;&nbsp;&nbsp;bih.biSize&nbsp;=&nbsp;<span style="color: #0000FF; ">sizeof</span>(BITMAPINFOHEADER);<br />&nbsp;&nbsp;&nbsp;&nbsp;bih.biSizeImage&nbsp;=&nbsp;bmp.bmWidthBytes&nbsp;*&nbsp;bmp.bmHeight;<br />&nbsp;&nbsp;&nbsp;&nbsp;bih.biWidth&nbsp;=&nbsp;bmp.bmWidth;<br />&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;BITMAPFILEHEADER&nbsp;bfh&nbsp;=&nbsp;{0};<br />&nbsp;&nbsp;&nbsp;&nbsp;bfh.bfOffBits&nbsp;=&nbsp;<span style="color: #0000FF; ">sizeof</span>(BITMAPFILEHEADER)&nbsp;+&nbsp;<span style="color: #0000FF; ">sizeof</span>(BITMAPINFOHEADER);<br />&nbsp;&nbsp;&nbsp;&nbsp;bfh.bfSize&nbsp;=&nbsp;bfh.bfOffBits&nbsp;+&nbsp;bmp.bmWidthBytes&nbsp;*&nbsp;bmp.bmHeight;<br />&nbsp;&nbsp;&nbsp;&nbsp;bfh.bfType&nbsp;=&nbsp;(WORD)0x4d42;<br />&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">fwrite(&amp;bfh,&nbsp;1,&nbsp;sizeof(BITMAPFILEHEADER),&nbsp;fp);<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">fwrite(&amp;bih,&nbsp;1,&nbsp;sizeof(BITMAPINFOHEADER),&nbsp;fp);</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;image_buffer&nbsp;=&nbsp;<span style="color: #0000FF; ">new</span>&nbsp;BYTE[bmp.bmWidthBytes&nbsp;*&nbsp;bmp.bmHeight];<br />&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;GetDIBits(memDC.m_hDC,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(HBITMAP)&nbsp;memBitmap.m_hObject,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Height,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;image_buffer,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(LPBITMAPINFO)&nbsp;&amp;bih,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DIB_RGB_COLORS);<br />&nbsp;&nbsp;&nbsp;&nbsp;memDC.SelectObject(oldmemBitmap);<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">fwrite(p,&nbsp;1,&nbsp;1280&nbsp;*&nbsp;800&nbsp;*&nbsp;4,&nbsp;fp);<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">fclose(fp);</span><span style="color: #008000; "><br /></span>}<br />&nbsp;</div><p>&nbsp;</p></div><div><div></div></div></h3></div><img src ="http://www.cppblog.com/cc/aggbug/166217.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/cc/" target="_blank">北风之神007</a> 2012-02-22 11:04 <a href="http://www.cppblog.com/cc/archive/2012/02/22/166217.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>VC6.0下的GDI+配置(转)</title><link>http://www.cppblog.com/cc/archive/2012/02/21/166167.html</link><dc:creator>北风之神007</dc:creator><author>北风之神007</author><pubDate>Tue, 21 Feb 2012 12:23:00 GMT</pubDate><guid>http://www.cppblog.com/cc/archive/2012/02/21/166167.html</guid><wfw:comment>http://www.cppblog.com/cc/comments/166167.html</wfw:comment><comments>http://www.cppblog.com/cc/archive/2012/02/21/166167.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/cc/comments/commentRss/166167.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/cc/services/trackbacks/166167.html</trackback:ping><description><![CDATA[<div><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; color: #6d6d6d; line-height: 26px; font-family: arial; font-size: 12px; background-color: #ffffff; "><strong style="font-size: 12pt; ">GDI Plus 描述：</strong></p><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; color: #6d6d6d; line-height: 26px; font-family: arial; font-size: 12px; background-color: #ffffff; "><span style="font-size: 12pt; ">&nbsp;&nbsp;&nbsp;</span><span style="font-size: 12pt; "> GDIPlus是微软出的一个C++面向对象库，它为windows的图形设备接口提供了更好的访问。与标准的windows GDI相比，二维绘图和图片使用得到很大改进。使用GDIPlus你可以绘制定制的对象，打开各种图片并以各种格式存储它们，使用多种字体和文本绘制轨迹 和各种调色板功能。</span></p><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; color: #6d6d6d; line-height: 26px; font-family: arial; font-size: 12px; background-color: #ffffff; "><strong style="font-size: 12pt; ">GDI Plus兼容性：</strong></p><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; color: #6d6d6d; line-height: 26px; font-family: arial; font-size: 12px; background-color: #ffffff; "><span style="font-size: 12pt; ">&nbsp;&nbsp;&nbsp; GDIPlus最初是为MS Visual Studio 7开发的，但是因为这个产品的发布推迟了，所以微软就为Visual Studio 6发行了这个库的版本。如果你使用Visual Studio 6，可以从这里下载MFC GDI Plus库文件。</span><a target="_blank" style="color: #1463c4; text-decoration: none; "><span style="font-size: 12pt; ">http://www.codersource.net/samples/mfcgdiplus.zip</span></a></p><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; color: #6d6d6d; line-height: 26px; font-family: arial; font-size: 12px; background-color: #ffffff; "><span style="font-size: 12pt; ">a）Visual Studio 7或者更新版本使用这个类库，只需要在你的工程里面包含&lt;gdiplus.h&gt;</span></p><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; color: #6d6d6d; line-height: 26px; font-family: arial; font-size: 12px; background-color: #ffffff; "><span style="font-size: 12pt; ">b）早期版本的MSVS要使用这个类库，需要将下载的zip文件解压到一个文件夹，设其路径为your_path，然后将目录your_path\ gdiplus\includes加入到开发环境的包含路径中（Tools-&gt;Options-&gt;Directories-&gt; Include files），然后在你的工程中你必须包含文件&lt;gdiplus&gt;，但是在那之前你必须定义define ULONG_PTR（这是GDIPlus中的一个定义，在老版本的VS中没有定义过）。也就是说，在StdAfx.h中你需要添加如下代码：</span></p><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; color: #6d6d6d; line-height: 26px; font-family: arial; font-size: 12px; background-color: #ffffff; "><span style="font-size: 12pt; ">#define ULONG_PTR ULONG</span><br /><span style="font-size: 12pt; ">include &lt;gdiplus.h&gt;</span></p><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; color: #6d6d6d; line-height: 26px; font-family: arial; font-size: 12px; background-color: #ffffff; "><span style="font-size: 12pt; ">然后将目录your_path\gdiplus\lib包含到你的工程（Tools-&gt;Options-&gt;Directories-&gt;Library files），以使它们可以链接到你的程序。</span></p><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; color: #6d6d6d; line-height: 26px; font-family: arial; font-size: 12px; background-color: #ffffff; "><span style="font-size: 12pt; ">【efivol补充：还必须在StdAfx.h中#include &lt;gdiplus.h&gt;之后加入这两句，不然有错。</span></p><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; color: #6d6d6d; line-height: 26px; font-family: arial; font-size: 12px; background-color: #ffffff; "><span style="font-size: 12pt; ">using namespace Gdiplus;</span><br /><span style="font-size: 12pt; ">#pragma comment(lib, "gdiplus.lib")</span></p><span style="color: #9a9a9a; font-family: arial; line-height: 18px; background-color: #ffffff; font-size: 12pt; ">补充完毕】</span><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; color: #6d6d6d; line-height: 26px; font-family: arial; font-size: 12px; background-color: #ffffff; "><span style="font-size: 12pt; ">在编译完你的工程之后，将your_path\gdiplus\gdiplus.dll拷贝到生成的执行文件所在的文件夹（\Debug或者\Release）</span></p><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; color: #6d6d6d; line-height: 26px; font-family: arial; font-size: 12px; background-color: #ffffff; "></p><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; color: #6d6d6d; line-height: 26px; font-family: arial; font-size: 12px; background-color: #ffffff; "><strong style="font-size: 12pt; ">使用GDI Plus类库：</strong></p><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; color: #6d6d6d; line-height: 26px; font-family: arial; font-size: 12px; background-color: #ffffff; "><span style="font-size: 12pt; ">要使用GDI Plus类库，你必须首先初始化类库。初始化是一个调用两个参数的函数，这两个参数是必须在整个GDIPlus会话中都存在的变量。在使用完GDIPlus之后，必须调用一个函数来关闭会话。</span></p><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; color: #6d6d6d; line-height: 26px; font-family: arial; font-size: 12px; background-color: #ffffff; "><span style="font-size: 12pt; ">如果你使用MFC，一个好的方法是在你的CWinApp派生的类中（比如CYourProjectApp）添加变量：</span></p><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; color: #6d6d6d; line-height: 26px; font-family: arial; font-size: 12px; background-color: #ffffff; "><span style="font-size: 12pt; ">private：</span><br /><span style="font-size: 12pt; ">GdiplusStartupInput m_gdiplusStartupInput;</span><br /><span style="font-size: 12pt; ">ULONG_PTR m_pGdiToken;</span></p><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; color: #6d6d6d; line-height: 26px; font-family: arial; font-size: 12px; background-color: #ffffff; "><span style="font-size: 12pt; ">然后在app的InitInstance函数中的开始添加一行代码：</span></p><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; color: #6d6d6d; line-height: 26px; font-family: arial; font-size: 12px; background-color: #ffffff; "><span style="font-size: 12pt; ">GdiplusStartup(&amp;m_pGdiToken,&amp;m_gdiplusStartupInput,NULL); //gdi+ init</span></p><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; color: #6d6d6d; line-height: 26px; font-family: arial; font-size: 12px; background-color: #ffffff; "><span style="font-size: 12pt; ">然后重载ExitInstance函数（如果没有的话），在其中添加一行代码：</span></p><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; color: #6d6d6d; line-height: 26px; font-family: arial; font-size: 12px; background-color: #ffffff; "><span style="font-size: 12pt; ">GdiplusShutdown(m_pGdiToken); //gdi+ end session</span></p><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; color: #6d6d6d; line-height: 26px; font-family: arial; font-size: 12px; background-color: #ffffff; "><span style="font-size: 12pt; ">这些操作之后你就可以在你的程序中使用类库的功能了。</span></p><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; color: #6d6d6d; line-height: 26px; font-family: arial; font-size: 12px; background-color: #ffffff; "><span style="font-size: 12pt; ">可以使用了么？不可以。我们新建一个单文档的工程，按上面的步骤做完，然后在View类的OnDraw（）函数里添加如下代码：</span></p><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; color: #6d6d6d; line-height: 26px; font-family: arial; font-size: 12px; background-color: #ffffff; "><span style="font-size: 12pt; ">Graphics graphics(pDC-&gt;m_hDC);</span><br /><span style="font-size: 12pt; ">Pen pen(Color(255, 0, 255));</span><br /><span style="font-size: 12pt; ">graphics.DrawLine(&amp;pen, 0, 0, 200, 100);</span></p><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; color: #6d6d6d; line-height: 26px; font-family: arial; font-size: 12px; background-color: #ffffff; "><span style="font-size: 12pt; ">编译，出错。就这样还是被很多人转载，可恶吧。</span></p><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; color: #6d6d6d; line-height: 26px; font-family: arial; font-size: 12px; background-color: #ffffff; "><span style="font-size: 12pt; ">错误提示为：</span><br /><span style="font-size: 12pt; ">f:\includes\gdiplusenums.h(29) : error C2146: syntax error : missing ';' before identifier 'GraphicsState'</span><br /><span style="font-size: 12pt; ">f:\includes\gdiplusenums.h(29) : fatal error C1004: unexpected end of file found</span></p><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; color: #6d6d6d; line-height: 26px; font-family: arial; font-size: 12px; background-color: #ffffff; "><span style="font-size: 12pt; ">这个错误在网上百度一下有很多，问的人多，回答的人也多，但就是几乎没有人答对。解决方法是</span></p><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; color: #6d6d6d; line-height: 26px; font-family: arial; font-size: 12px; background-color: #ffffff; "><span style="font-size: 12pt; ">在#include &lt;gdiplus.h&gt;之前加上#include &lt;afxdtctl.h&gt;</span></p><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; color: #6d6d6d; line-height: 26px; font-family: arial; font-size: 12px; background-color: #ffffff; "><span style="font-size: 12pt; ">好了，一条线画出来了。为什么啊，这就不知道了，据说这个文件的作用是为IE4公共控件提供MFC支持。</span></p><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; color: #6d6d6d; line-height: 26px; font-family: arial; font-size: 12px; background-color: #ffffff; "><span style="font-size: 12pt; ">柳暗花明之后，才发现这里有篇文章&nbsp;</span><a target="_blank" style="color: #1463c4; text-decoration: none; "><span style="font-size: 12pt; ">Hints to get GDI+ running</span></a><span style="font-size: 12pt; ">，是一个人写的建议。</span></p><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; color: #6d6d6d; line-height: 26px; font-family: arial; font-size: 12px; background-color: #ffffff; "><span style="font-size: 12pt; ">里面说，要防止编译错误和问题，需要在#include &lt;gdiplus.h&gt;之前加上#include &lt;afxwin.h&gt;、&lt;afxext.h&gt;、&lt;afxdisp.h&gt;和&lt;afxdtctl.h&gt;。</span></p></div><img src ="http://www.cppblog.com/cc/aggbug/166167.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/cc/" target="_blank">北风之神007</a> 2012-02-21 20:23 <a href="http://www.cppblog.com/cc/archive/2012/02/21/166167.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Linux下QT程序字体设定错误造成程序中文乱码</title><link>http://www.cppblog.com/cc/archive/2010/09/25/127673.html</link><dc:creator>北风之神007</dc:creator><author>北风之神007</author><pubDate>Sat, 25 Sep 2010 14:37:00 GMT</pubDate><guid>http://www.cppblog.com/cc/archive/2010/09/25/127673.html</guid><wfw:comment>http://www.cppblog.com/cc/comments/127673.html</wfw:comment><comments>http://www.cppblog.com/cc/archive/2010/09/25/127673.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/cc/comments/commentRss/127673.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/cc/services/trackbacks/127673.html</trackback:ping><description><![CDATA[<br><span style="FONT-FAMILY: 微软雅黑">&nbsp;&nbsp;<span style="FONT-SIZE: 18pt"> 最近在Linux环境下写QT的程序，在我的测试机器上面QT程序，在启动的时候设定了字符集为GBK，中文都是显示正常的，没有任何问题，然后同学在他的虚拟机上面也写了QT程序，可以怎么弄中文都是乱码，什么GBK，UTF-8等等的编码都设定了，可是依然乱码，分析这种情况应该不是程序的问题，很可能是QT字体的问题，于是在命令行输入<span style="COLOR: #0000ff">qtconfig</span>，其他了qt配置程序，在其中设定了其他的字体，发现程序的中文就能正常显示了。<br><br>&nbsp; 因此，有时候程序没有问题了，但是QT的字体设定错误也会造成中文乱码现象，我们可以不通过qtconfig程序改变默认qt程序的字体，还可以在程序中强制设定程序本身所用的默认字体，这样也是可以的，这里只介绍这样的思路，代码就不贴了，希望大家碰见的时候有个参考。</span></span><img src ="http://www.cppblog.com/cc/aggbug/127673.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/cc/" target="_blank">北风之神007</a> 2010-09-25 22:37 <a href="http://www.cppblog.com/cc/archive/2010/09/25/127673.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>C 代码优化（转）</title><link>http://www.cppblog.com/cc/archive/2010/05/24/116216.html</link><dc:creator>北风之神007</dc:creator><author>北风之神007</author><pubDate>Mon, 24 May 2010 06:04:00 GMT</pubDate><guid>http://www.cppblog.com/cc/archive/2010/05/24/116216.html</guid><wfw:comment>http://www.cppblog.com/cc/comments/116216.html</wfw:comment><comments>http://www.cppblog.com/cc/archive/2010/05/24/116216.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/cc/comments/commentRss/116216.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/cc/services/trackbacks/116216.html</trackback:ping><description><![CDATA[<span  style="font-family: sans-serif; font-size: 14px; line-height: 25px; -webkit-border-horizontal-spacing: 2px; -webkit-border-vertical-spacing: 2px; ">谈到优化，很多人都会直接想到汇编。难道优化只能在汇编层次吗？当然不是，C++层次一样可以作代码优化，其中有些常常是意想不到的。在C++层次进行优化，比在汇编层次优化具有更好的移植性，应该是优化中的首选做法。&nbsp;<br>1.确定浮点型变量和表达式是 float 型&nbsp;<br>&nbsp;&nbsp;&nbsp; 为了让编译器产生更好的代码(比如说产生3DNow! 或SSE指令的代码)，必须确定浮点型变量和表达式是 float 型的。要特别注意的是，以 "；F"； 或 "；f"； 为后缀（比如：3.14f）的浮点常量才是 float 型，否则默认是 double 型。为了避免 float 型参数自动转化为 double，请在函数声明时使用 float。&nbsp;<br>2.使用32位的数据类型&nbsp;<br>　　编译器有很多种，但它们都包含的典型的32位类型是：int，signed，signed int，unsigned，unsigned int，long，signed long，long int，signed long int，unsigned long，unsigned long int。尽量使用32位的数据类型，因为它们比16位的数据甚至8位的数据更有效率。&nbsp;<br>3.明智使用有符号整型变量&nbsp;<br>　　在很多情况下，你需要考虑整型变量是有符号还是无符号类型的。比如，保存一个人的体重数据时不可能出现负数，所以不需要使用有符号类型。但是，如果是要保存温度数据，就必须使用到有符号的变量。&nbsp;<br>　　在许多地方，考虑是否使用有符号的变量是必要的。在一些情况下，有符号的运算比较快；但在一些情况下却相反。&nbsp;<br>　　比如：整型到浮点转化时，使用大于16位的有符号整型比较快。因为x86构架中提供了从有符号整型转化到浮点型的指令，但没有提供从无符号整型转化到浮点的指令。看看编译器产生的汇编代码：&nbsp;<br>　　不好的代码：&nbsp;<br>编译前 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;编译后&nbsp;<br>double x；&nbsp;&nbsp;&nbsp;&nbsp;mov [foo + 4], 0&nbsp;<br>unsigned int i；&nbsp;&nbsp;&nbsp;mov eax, i&nbsp;<br>x = i；&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mov [foo], eax&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;flid qword ptr [foo]&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fstp qword ptr [x]&nbsp;<br>　　上面的代码比较慢。不仅因为指令数目比较多，而且由于指令不能配对造成的FLID指令被延迟执行。最好用以下代码代替：&nbsp;<br>&nbsp;&nbsp;&nbsp; 推荐的代码：&nbsp;<br>编译前&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;编译后&nbsp;<br>double x；&nbsp;&nbsp;&nbsp;&nbsp;fild dword ptr&nbsp;<br>int i；&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fstp qword ptr [x]&nbsp;<br>x = i；&nbsp;<br>　　在整数运算中计算商和余数时，使用无符号类型比较快。以下这段典型的代码是编译器产生的32位整型数除以4的代码：&nbsp;<br>　　不好的代码&nbsp;&nbsp;<br>编译前 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;编译后&nbsp;<br>int i；&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mov eax, i&nbsp;<br>i = i / 4； &nbsp;&nbsp;&nbsp;&nbsp;cdq&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;and edx, 3&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;add eax, edx&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sar eax, 2&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mov i, eax&nbsp;<br>&nbsp;&nbsp;&nbsp; 推荐的代码<br>编译前 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;编译后&nbsp;<br>unsigned int i； &nbsp;&nbsp;&nbsp;shr i, 2&nbsp;<br>i = i / 4；&nbsp;<br>　总结：<br>　无符号类型用于：除法和余数,循环计数,数组下标<br>&nbsp; 有符号类型用于：整型到浮点的转化<br>4.while VS. for&nbsp;<br>　　在编程中，我们常常需要用到无限循环，常用的两种方法是while (1) 和 for (；；)。这两种方法效果完全一样，但那一种更好呢？然我们看看它们编译后的代码：&nbsp;<br>编译前 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;编译后&nbsp;<br>while (1)； &nbsp;&nbsp;&nbsp;&nbsp;mov eax,1&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;test eax,eax&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;je foo+23h&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;jmp foo+18h&nbsp;<br>编译前 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;编译后&nbsp;&nbsp;<br>for (；；)； &nbsp;&nbsp;&nbsp;&nbsp;jmp foo+23h&nbsp;<br>　　一目了然，for (；；)指令少，不占用寄存器，而且没有判断跳转，比while (1)好。&nbsp;<br>5.使用数组型代替指针型&nbsp;<br>　　使用指针会使编译器很难优化它。因为缺乏有效的指针代码优化的方法，编译器总是假设指针可以访问内存的任意地方，包括分配给其他变量的储存空间。所以为了编译器产生优化得更好的代码，要避免在不必要的地方使用指针。一个典型的例子是访问存放在数组中的数据。C++ 允许使用操作符 [] 或指针来访问数组，使用数组型代码会让优化器减少产生不安全代码的可能性。比如，x[0] 和x[2] 不可能是同一个内存地址，但 *p 和 *q 可能。强烈建议使用数组型，因为这样可能会有意料之外的性能提升。&nbsp;<br>&nbsp;&nbsp;&nbsp; 不好的代码<br>typedef struct<br>{<br>　　float x,y,z,w；<br>} VERTEX；<br>typedef struct<p>{<br>　　float m[4][4]；<br>} MATRIX；<br>void XForm(float* res, const float* v, const float* m, int nNumVerts)<br>{<br>　　float dp；<br>　　int i；<br>　　　const VERTEX* vv = (VERTEX *)v；<br>　　　for (i = 0； i &lt;； nNumVerts； i++)<br>　　{<br>　　　　dp = vv-&gt;；x * *m ++；<br>　　　　dp += vv-&gt;；y * *m ++；<br>　　　　dp += vv-&gt;；z * *m ++；<br>　　　　dp += vv-&gt;；w * *m ++；<br>　　　　*res ++ = dp；　　　　　　// 写入转换了的 x<br>　　　　dp = vv-&gt;；x * *m ++；<br>　　　　dp += vv-&gt;；y * *m ++；<br>　　　　dp += vv-&gt;；z * *m ++；<br>　　　　dp += vv-&gt;；w * *m ++；<br>　　　　*res ++ = dp；　　　　　// 写入转换了的 y<br>　　　　dp = vv-&gt;；x * *m ++；<br>　　　　dp += vv-&gt;；y * *m ++；<br>　　　　dp += vv-&gt;；z * *m ++；<br>　　　　dp += vv-&gt;；w * *m ++；<br>　　　　*res ++ = dp；　　　　// 写入转换了的 z<br>　　　　dp = vv-&gt;；x * *m ++；<br>　　　　dp += vv-&gt;；y * *m ++；<br>　　　　dp += vv-&gt;；z * *m ++；<br>　　　　dp += vv-&gt;；w * *m ++；<br>　　　　*res ++ = dp；　　　　// 写入转换了的 w<br>　　　　vv ++；　　　　　　　 // 下一个矢量<br>　　　　m -= 16；<br>　　}<br>}<br>&nbsp;&nbsp;&nbsp; 推荐的代码&nbsp;<br>typedef struct<br>{<br>　　float x,y,z,w；<br>} VERTEX；<br>typedef struct<br>{<br>　　float m[4][4]；<br>} MATRIX；<br>void XForm (float* res, const float* v, const float* m, int nNumVerts)<br>{<br>　　int i；<br>　　const VERTEX* vv = (VERTEX*)v；<br>　　const MATRIX* mm = (MATRIX*)m；<br>　　VERTEX* rr = (VERTEX*)res；<br>　　for (i = 0； i &lt;； nNumVerts； i++)<br>　　{<br>　　　　rr-&gt;；x = vv-&gt;；x * mm-&gt;；m[0][0] + vv-&gt;；y * mm-&gt;；m[0][1]<br>　　　　　　　　+ vv-&gt;；z * mm-&gt;；m[0][2] + vv-&gt;；w * mm-&gt;；m[0][3]；<br>　　　　rr-&gt;；y = vv-&gt;；x * mm-&gt;；m[1][0] + vv-&gt;；y * mm-&gt;；m[1][1]<br>　　　　　　　　+ vv-&gt;；z * mm-&gt;；m[1][2] + vv-&gt;；w * mm-&gt;；m[1][3]；<br>　　　　rr-&gt;；z = vv-&gt;；x * mm-&gt;；m[2][0] + vv-&gt;；y * mm-&gt;；m[2][1]<br>　　　　　　　　+ vv-&gt;；z * mm-&gt;；m[2][2] + vv-&gt;；w * mm-&gt;；m[2][3]；<br>　　　　rr-&gt;；w = vv-&gt;；x * mm-&gt;；m[3][0] + vv-&gt;；y * mm-&gt;；m[3][1]<br>　　　　　　　　+ vv-&gt;；z * mm-&gt;；m[3][2] + vv-&gt;；w * mm-&gt;；m[3][3]；<br>　　}<br>}&nbsp;<br>　　注意: 源代码的转化是与编译器的代码发生器相结合的。从源代码层次很难控制产生的机器码。依靠编译器和特殊的源代码，有可能指针型代码编译成的机器码比同等条件下的数组型代码运行速度更快。明智的做法是在源代码转化后检查性能是否真正提高了，再选择使用指针型还是数组型。&nbsp;<br>6.充分分解小的循环&nbsp;<br>　　要充分利用CPU的指令缓存，就要充分分解小的循环。特别是当循环体本身很小的时候，分解循环可以提高性能。BTW:很多编译器并不能自动分解循环。&nbsp;<br>不好的代码 推荐的代码&nbsp;<br>// 3D转化：把矢量 V 和 4x4 矩阵 M 相乘<br>for (i = 0； i &lt;； 4； i ++)<br>{<br>　　r = 0；<br>　　for (j = 0； j &lt;； 4； j ++)<br>　　{<br>　　　　r += M[j]*V[j]；<br>　　}<br>}<br>r[0] = M[0][0]*V[0] + M[1][0]*V[1] + M[2][0]*V[2] + M[3][0]*V[3]；<br>r[1] = M[0][1]*V[0] + M[1][1]*V[1] + M[2][1]*V[2] + M[3][1]*V[3]；<br>r[2] = M[0][2]*V[0] + M[1][2]*V[1] + M[2][2]*V[2] + M[3][2]*V[3]；<br>r[3] = M[0][3]*V[0] + M[1][3]*V[1] + M[2][3]*V[2] + M[3][3]*v[3]；&nbsp;<br>7.避免没有必要的读写依赖&nbsp;<br>　　当数据保存到内存时存在读写依赖，即数据必须在正确写入后才能再次读取。虽然AMD Athlon等CPU有加速读写依赖延迟的硬件，允许在要保存的数据被写入内存前读取出来，但是，如果避免了读写依赖并把数据保存在内部寄存器中，速度会更快。在一段很长的又互相依赖的代码链中，避免读写依赖显得尤其重要。如果读写依赖发生在操作数组时，许多编译器不能自动优化代码以避免读写依赖。所以推荐程序员手动去消除读写依赖，举例来说，引进一个可以保存在寄存器中的临时变量。这样可以有很大的性能提升。下面一段代码是一个例子：&nbsp;<br>&nbsp;&nbsp;&nbsp; 不好的代码<br>float x[VECLEN], y[VECLEN], z[VECLEN]；<br>......&nbsp;<br>for (unsigned int k = 1； k &lt;； VECLEN； k ++)<br>{<br>　　x[k] = x[k-1] + y[k]；<br>}<br>for (k = 1； k &lt;； VECLEN； k++)<br>{<br>　　x[k] = z[k] * (y[k] - x[k-1])；<br>}<br>　　 推荐的代码&nbsp;<br>float x[VECLEN], y[VECLEN], z[VECLEN]；<br>......&nbsp;<br>float t(x[0])；<br>for (unsigned int k = 1； k &lt;； VECLEN； k ++)<br>{<br>　　t = t + y[k]；<br>　　x[k] = t；<br>}<br>t = x[0]；<br>for (k = 1； k &lt;； VECLEN； k ++)<br>{<br>　　t = z[k] * (y[k] - t)；<br>　　x[k] = t；<br>}&nbsp;<br>8.Switch 的用法&nbsp;<br>　　Switch 可能转化成多种不同算法的代码。其中最常见的是跳转表和比较链/树。推荐对case的值依照发生的可能性进行排序，把最有可能的放在第一个，当switch用比较链的方式转化时，这样可以提高性能。此外，在case中推荐使用小的连续的整数，因为在这种情况下，所有的编译器都可以把switch 转化成跳转表。&nbsp;<br>&nbsp;&nbsp;&nbsp; 不好的代码<br>int days_in_month, short_months, normal_months, long_months；<br>......&nbsp;<br>switch (days_in_month)<br>{<br>　　case 28:<br>　　case 29:<br>　　　　short_months ++；<br>　　　　break；<br>　　case 30:<br>　　　　normal_months ++；<br>　　　　break；<br>　　case 31:<br>　　　　long_months ++；<br>　　　　break；<br>　　default:<br>　　　　cout &lt;；&lt;； "；month has fewer than 28 or more than 31 days"； &lt;；&lt;； endl；<br>　　　　break；<br>}<br>&nbsp;&nbsp;&nbsp; 推荐的代码&nbsp;<br>int days_in_month, short_months, normal_months, long_months；<br>......&nbsp;<br>switch (days_in_month)<br>{<br>　　case 31:<br>　　　　long_months ++；<br>　　　　break；<br>　　case 30:<br>　　　　normal_months ++；<br>　　　　break；<br>　　case 28:<br>　　case 29:<br>　　　　short_months ++；&nbsp;<br>　　　　break；<br>　　default:<br>　　　　cout &lt;；&lt;； "；month has fewer than 28 or more than 31 days"； &lt;；&lt;； endl；<br>　　　　break；<br>}&nbsp;<br>9.所有函数都应该有原型定义&nbsp;<br>　　一般来说，所有函数都应该有原型定义。原型定义可以传达给编译器更多的可能用于优化的信息。&nbsp;<br>　　尽可能使用常量(const)。C++ 标准规定，如果一个const声明的对象的地址不被获取，允许编译器不对它分配储存空间。这样可以使代码更有效率，而且可以生成更好的代码。&nbsp;<br>10.提升循环的性能<br>　　要提升循环的性能，减少多余的常量计算非常有用（比如，不随循环变化的计算）。&nbsp;<br>　　不好的代码(在for()中包含不变的if()) 推荐的代码&nbsp;<br>for( i ... )<br>{<br>　　if( CONSTANT0 )<br>　　{<br>　　　　DoWork0( i )； // 假设这里不改变CONSTANT0的值<br>　　}<br>　　else<br>　　{<br>　　　　DoWork1( i )； // 假设这里不改变CONSTANT0的值<br>　　}<br>}<br>if( CONSTANT0 )<br>{<br>　　for( i ... )<br>　　{<br>　　　　DoWork0( i )；<br>　　}<br>}<br>else<br>{<br>　　for( i ... )<br>　　{<br>　　　　DoWork1( i )；<br>　　}<br>}&nbsp;<br>　　如果已经知道if()的值，这样可以避免重复计算。虽然不好的代码中的分支可以简单地预测，但是由于推荐的代码在进入循环前分支已经确定，就可以减少对分支预测的依赖。 　　把本地函数声明为静态的(static)&nbsp;<br>　　如果一个函数在实现它的文件外未被使用的话，把它声明为静态的(static)以强制使用内部连接。否则，默认的情况下会把函数定义为外部连接。这样可能会影响某些编译器的优化——比如，自动内联。&nbsp;<br>11.考虑动态内存分配&nbsp;<br>　　动态内存分配（C++中的"；new"；）可能总是为长的基本类型（四字对齐）返回一个已经对齐的指针。但是如果不能保证对齐，使用以下代码来实现四字对齐。这段代码假设指针可以映射到 long 型。&nbsp;<br>　　例子&nbsp;<br>　　double* p = (double*)new BYTE[sizeof(double) * number_of_doubles+7L]；<br>&nbsp;&nbsp;&nbsp; double* np = (double*)((long(p) + 7L) &amp;； &#8211;8L)；&nbsp;<br>　　现在，你可以使用 np 代替 p 来访问数据。注意：释放储存空间时仍然应该用delete p。&nbsp;<br>12.使用显式的并行代码&nbsp;<br>　　尽可能把长的有依赖的代码链分解成几个可以在流水线执行单元中并行执行的没有依赖的代码链。因为浮点操作有很长的潜伏期，所以不管它被映射成 x87 或 3DNow! 指令，这都很重要。很多高级语言，包括C++，并不对产生的浮点表达式重新排序，因为那是一个相当复杂的过程。需要注意的是，重排序的代码和原来的代码在代数上一致并不等价于计算结果一致，因为浮点操作缺乏精确度。在一些情况下，这些优化可能导致意料之外的结果。幸运的是，在大部分情况下，最后结果可能只有最不重要的位（即最低位）是错误的。&nbsp;<br>　　不好的代码<br>double a[100], sum；<br>int i；<br>sum = 0.0f；<br>for (i=0； i&lt;；100； i++)<br>　　sum += a；&nbsp;<br>&nbsp;&nbsp;&nbsp; 推荐的代码&nbsp;<br>double a[100], sum1, sum2, sum3, sum4, sum；<br>int i；<br>sum1 = sum2 = sum3 = sum4 = 0.0；<br>for (i = 0； i &lt;； 100； i += 4)<br>{<br>　　sum1 += a；<br>　　sum2 += a[i+1]；<br>　　sum3 += a[i+2]；<br>　　sum4 += a[i+3]；<br>}<br>sum = (sum4+sum3)+(sum1+sum2)；&nbsp;<br>　　要注意的是：使用4 路分解是因为这样使用了4阶段流水线浮点加法，浮点加法的每一个阶段占用一个时钟周期，保证了最大的资源利用率。&nbsp;<br>13.提出公共子表达式&nbsp;<br>　　在某些情况下，C++编译器不能从浮点表达式中提出公共的子表达式，因为这意味着相当于对表达式重新排序。需要特别指出的是，编译器在提取公共子表达式前不能按照代数的等价关系重新安排表达式。这时，程序员要手动地提出公共的子表达式（在VC.net里有一项&#8220;全局优化&#8221;选项可以完成此工作，但效果就不得而知了）。&nbsp;<br>推荐的代码&nbsp;<br>float a, b, c, d, e, f；<br>...<br>e = b * c / d；<br>f = b / d * a；<br>float a, b, c, d, e, f；<br>...<br>const float t(b / d)；<br>e = c * t；<br>f = a * t；&nbsp;<br>推荐的代码&nbsp;<br>float a, b, c, e, f；<br>...<br>e = a / c；<br>f = b / c；<br>float a, b, c, e, f；<br>...<br>const float t(1.0f / c)；<br>e = a * t；<br>f = b * t；&nbsp;<br>14.结构体成员的布局&nbsp;<br>　　很多编译器有&#8220;使结构体字，双字或四字对齐&#8221;的选项。但是，还是需要改善结构体成员的对齐，有些编译器可能分配给结构体成员空间的顺序与他们声明的不同。但是，有些编译器并不提供这些功能，或者效果不好。所以，要在付出最少代价的情况下实现最好的结构体和结构体成员对齐，建议采取这些方法：&nbsp;<br>　　A按类型长度排序&nbsp;<br>　　把结构体的成员按照它们的类型长度排序，声明成员时把长的类型放在短的前面。&nbsp;<br>　　把结构体填充成最长类型长度的整倍数&nbsp;<br>　　把结构体填充成最长类型长度的整倍数。照这样，如果结构体的第一个成员对齐了，所有整个结构体自然也就对齐了。下面的例子演示了如何对结构体成员进行重新排序：&nbsp;<br>　　不好的代码，普通顺序 推荐的代码，新的顺序并手动填充了几个字节<br>struct<br>{<br>　　char a[5]；<br>　　long k；<br>　　double x；<br>} baz；<br>struct<br>{<br>　　double x；<br>　　long k；<br>　　char a[5]；<br>char pad[7]；<br>} baz；</p><p>　　这个规则同样适用于类的成员的布局。&nbsp;<br>　　B按数据类型的长度排序本地变量&nbsp;<br>　　当编译器分配给本地变量空间时，它们的顺序和它们在源代码中声明的顺序一样，和上一条规则一样，应该把长的变量放在短的变量前面。如果第一个变量对齐了，其它变量就会连续的存放，而且不用填充字节自然就会对齐。有些编译器在分配变量时不会自动改变变量顺序，有些编译器不能产生4字节对齐的栈，所以4字节可能不对齐。下面这个例子演示了本地变量声明的重新排序：&nbsp;<br>　　不好的代码，普通顺序 推荐的代码，改进的顺序&nbsp;<br>short ga, gu, gi；<br>long foo, bar；<br>double x, y, z[3]；<br>char a, b；<br>float baz；<br>double z[3]；<br>double x, y；<br>long foo, bar；<br>float baz；<br>short ga, gu, gi；&nbsp;<br>14.避免不必要的整数除法&nbsp;<br>　　整数除法是整数运算中最慢的，所以应该尽可能避免。一种可能减少整数除法的地方是连除，这里除法可以由乘法代替。这个替换的副作用是有可能在算乘积时会溢出，所以只能在一定范围的除法中使用。&nbsp;<br>　　不好的代码 推荐的代码&nbsp;<br>int i, j, k, m；<br>m = i / j / k；<br>int i, j, k, m；<br>m = i / (j * k)；&nbsp;<br>15.把频繁使用的指针型参数拷贝到本地变量&nbsp;<br>　　避免在函数中频繁使用指针型参数指向的值。因为编译器不知道指针之间是否存在冲突，所以指针型参数往往不能被编译器优化。这样是数据不能被存放在寄存器中，而且明显地占用了内存带宽。注意，很多编译器有&#8220;假设不冲突&#8221;优化开关（在VC里必须手动添加编译器命令行/Oa或/Ow），这允许编译器假设两个不同的指针总是有不同的内容，这样就不用把指针型参数保存到本地变量。否则，请在函数一开始把指针指向的数据保存到本地变量。如果需要的话，在函数结束前拷贝回去。 　　<br>&nbsp;&nbsp;&nbsp; 不好的代码&nbsp;<br>// 假设 q != r<br>void isqrt(unsigned long a, unsigned long* q, unsigned long* r)<br>{<br>　　*q = a；<br>　　if (a &gt;； 0)<br>　　{<br>　　　　while (*q &gt;； (*r = a / *q))<br>　　　　{<br>　　　　　　*q = (*q + *r) &gt;；&gt;； 1；<br>　　　　}<br>　　}<br>　　*r = a - *q * *q；<br>}<br>&nbsp;&nbsp;&nbsp; 推荐的代码<br>// 假设 q != r<br>void isqrt(unsigned long a, unsigned long* q, unsigned long* r)<br>{<br>　　unsigned long qq, rr；<br>　　qq = a；<br>　　if (a &gt;； 0)<br>　　{<br>　　　　while (qq &gt;； (rr = a / qq))<br>　　　　{<br>　　　　　　qq = (qq + rr) &gt;；&gt;； 1；<br>　　　　}<br>　　}<br>　　rr = a - qq * qq；<br>　　*q = qq；<br>　　*r = rr；<br>}&nbsp;<br>16.赋值与初始化<br>先看看以下代码：&nbsp;<br>class CInt<br>{<br>　　int m_i；&nbsp;<br>public:<br>　　CInt(int a = 0):m_i(a) { cout &lt;；&lt;； "；CInt"； &lt;；&lt;； endl； }<br>　　~CInt() { cout &lt;；&lt;； "；~CInt"； &lt;；&lt;； endl； }&nbsp;<br>　　CInt operator + (const CInt&amp;； a) { return CInt(m_i + a.GetInt())； }&nbsp;<br>　　void SetInt(const int i)　　{ m_i = i； }<br>　　int GetInt() const　　　　　　{ return m_i； }<br>}；<br>&nbsp;&nbsp;&nbsp; 不好的代码&nbsp;<br>void main()<br>{<br>　　CInt a, b, c；<br>　　a.SetInt(1)；<br>　　b.SetInt(2)；<br>　　c = a + b；<br>}<br>&nbsp;&nbsp;&nbsp; 推荐的代码<br>void main()<br>{<br>　　CInt a(1), b(2)；<br>　　CInt c(a + b)；<br>}&nbsp;<br>　　这两段代码所作的事都一样，但那一个更好呢？看看输出结果就会发现，不好的代码输出了四个"；CInt"；和四个"；~CInt"；，而推荐的代码只输出三个。也就是说，第二个例子比第一个例子少生成一次临时对象。Why? 请注意，第一个中的c用的是先声明再赋值的方法，第二个用的是初始化的方法，它们有本质的区别。第一个例子的"；c = a + b"；先生成一个临时对象用来保存a + b的值，再把该临时对象用位拷贝的方法给c赋值，然后临时对象被销毁。这个临时对象就是那个多出来的对象。第二个例子直接用拷贝构造函数的方法对c初始化，不产生临时对象。所以，尽量在需要使用一个对象时才声明，并用初始化的方法赋初值。&nbsp;<br>17.尽量使用成员初始化列表&nbsp;<br>　　在初始化类的成员时，尽量使用成员初始化列表而不是传统的赋值方式。&nbsp;<br>　　不好的代码&nbsp;<br>class CMyClass<br>{<br>　　string strName；&nbsp;<br>public:<br>　　CMyClass(const string&amp;； str)；<br>}；&nbsp;<br>CMyClass::CMyClass(const string&amp;； str)<br>{<br>　　strName = str；<br>}<br>&nbsp;&nbsp;&nbsp; 推荐的代码<br>class CMyClass<br>{<br>　　string strName；<br>　　int i；<br>public:<br>　　CMyClass(const string&amp;； str)；<br>}；&nbsp;<br>CMyClass::CMyClass(const string&amp;；str)<br>&nbsp;&nbsp; :strName(str)<br>{</p><p>}&nbsp;<br>　　不好的例子用的是赋值的方式。这样，strName会先被建立（调用了string的默认构造函数），再由参数str赋值。而推荐的例子用的是成员初始化列表，strName直接构造为str，少调用一次默认构造函数，还少了一些安全隐患。zhuan</p></span><img src ="http://www.cppblog.com/cc/aggbug/116216.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/cc/" target="_blank">北风之神007</a> 2010-05-24 14:04 <a href="http://www.cppblog.com/cc/archive/2010/05/24/116216.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>C 高效编程忠告（转）</title><link>http://www.cppblog.com/cc/archive/2010/05/24/116212.html</link><dc:creator>北风之神007</dc:creator><author>北风之神007</author><pubDate>Mon, 24 May 2010 05:09:00 GMT</pubDate><guid>http://www.cppblog.com/cc/archive/2010/05/24/116212.html</guid><wfw:comment>http://www.cppblog.com/cc/comments/116212.html</wfw:comment><comments>http://www.cppblog.com/cc/archive/2010/05/24/116212.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cppblog.com/cc/comments/commentRss/116212.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/cc/services/trackbacks/116212.html</trackback:ping><description><![CDATA[<font  color="#B20000" face="sans-serif" size="6"><span  style="font-size: 20px;"><strong><span  style="color: rgb(0, 0, 0); font-weight: normal; font-size: 14px; line-height: 25px; -webkit-border-horizontal-spacing: 2px; -webkit-border-vertical-spacing: 2px; "><strong><span style="color: red; ">一、#include &#8220;filename.h&#8221;和#include &lt;filename.h&gt;的区别</span></strong><br>#include &#8220;filename.h&#8221;是指编译器将从当前工作目录上开始查找此文件<br>#include &lt;filename.h&gt;是指编译器将从标准库目录中开始查找此文件<br><br><strong><span style="color: red; ">二、头文件的作用</span></strong><br>加强安全检测<br>通过头文件可能方便地调用库功能，而不必关心其实现方式<br><br><strong><span style="color: red; ">三、* , &amp;修饰符的位置<br></span></strong>int *i,j; // better for read<br>&nbsp;i = new int(0);<br>&nbsp;j = 0;<br>&nbsp;int *&amp;y = i; // pointer's reference<br>对于*和&amp;修饰符，为了避免误解，最好将修饰符紧靠变量名<br><br><strong><span style="color: red; ">四、if语句</span></strong><br>不要将布尔变量与任何值进行比较，那会很容易出错的。<br>整形变量必须要有类型相同的值进行比较<br>浮点变量最好少比相等，可以通过求差与较小的数比较<br>指针变量要和NULL进行比较，不要和布尔型和整形比较<br><br><strong><span style="color: red; ">五、const和#define的比较</span></strong><br>const有数据类型，#define没有数据类型<br>个别编译器中const可以进行调试，#define不可以进行调试<br>在类中定义常量有两种方式<br>1、 在类在声明常量，但不赋值，在构造函数初始化表中进行赋值；（常量和引用类型的成员变量必须通过初始化列表来初始化赋值）<br>2、 用枚举代替const常量。<br><br><strong><span style="color: red; ">六、C++函数中值的传递方式</span></strong><br>有三种方式：值传递(Pass by value)、指针传递(Pass by pointer)、引用传递(Pass by reference)<br>void fun(char c) //pass by value<br>void fun(char *str) //pass by pointer<br>void fun(char &amp;str) //pass by reference<br>如果输入参数是以值传递的话，最好使用引用传递代替，因为引用传递省去了临时对象的构造和析构<br>函数的返回类型不能省略，就算没有也要加个void<br><br><strong><span style="color: red; ">七、函数体中的指针或引用常量不能被返回</span></strong><div class="code">Char *func(void)<br>{<br>&nbsp;char str[]=&#8221;Hello Word&#8221;;<br>&nbsp;//这个是不能被返回的，因为str是个指定变量，不是一般的值，函数结束后会被注销掉<br>&nbsp;return str;&nbsp;<br>}</div>函数体内的指针变量并不会随着函数的消亡而自动释放<br><br><strong><span style="color: red; ">八、一个内存拷贝函数的实现体</span></strong><div class="code">void *memcpy(void *pvTo,const void *pvFrom,size_t size)<br><br>{<br><br>&nbsp;assert((pvTo!=NULL)&amp;&amp;(pvFrom!=NULL));<br><br>&nbsp;byte *pbTo=(byte*)pvTo; //防止地址被改变<br><br>&nbsp;byte *pbFrom=(byte*)pvFrom;<br><br>&nbsp;while (size-- &gt;0)<br><br>&nbsp;pbTo++ = pbForm++;<br><br>&nbsp;return pvTo;<br><br>}&nbsp;<br></div><br><strong><span style="color: red; ">九、内存的分配方式</span></strong><br>分配方式有三种，请记住，说不定那天去面试的时候就会有人问你这问题<br>1、 静态存储区，是在程序编译时就已经分配好的，在整个运行期间都存在，如全局变量、常量。（程序编译后运行时包含code和data两部分，其中data即为静态存储区分配，程序一开始运行便分配整个data的东东）<br>2、 栈上分配，函数内的局部变量就是从这分配的，但分配的内存容易有限。<br>3、 堆上分配，也称动态分配，如我们用new,malloc分配内存，用delete,free来释放的内存。<br><br><strong><span style="color: red; ">十、内存分配的注意事项</span></strong><br>用new或malloc分配内存时，必须要对此指针赋初值。<br>用delete 或free释放内存后，必须要将指针指向NULL<br>不能修改指向常量的指针数据<br><br><strong><span style="color: red; ">十一、内容复制与比较</span></strong><div class="code">//数组&#8230;&#8230;<br>char a[]=&#8221;Hello Word!&#8221;;<br>char b[10];<br>strcpy(b,a);<br>if (strcmp(a,b)==0)<br>{}</div><div class="code">//指针&#8230;&#8230;<br>char a[]=&#8221;Hello Word!&#8221;;<br>char *p;<br>p=new char[strlen(a)+1];<br>strcpy(p,a);<br>if (strcmp(p,a)==0)<br>{}</div><br><strong><span style="color: red; ">十二、sizeof的问题</span></strong><br>记住一点，C++无法知道指针所指对象的大小，指针的大小永远为4字节<div class="code">char a[]=&#8221;Hello World!&#8221;<br>char *p=a;<br>count&lt;&lt;sizeof(a)&lt;&lt;end; //12字节<br>count&lt;&lt;sizeof(p)&lt;&lt;endl; //4字节</div>而且，在函数中，数组参数退化为指针，所以下面的内容永远输出为4<div class="code">void fun(char a[1000])<br>{<br>count&lt;&lt;sizeof(a)&lt;&lt;endl; //输出4而不是1000<br>}</div><br><strong><span style="color: red; ">十三、关于指针</span></strong><br>1、 指针创建时必须被初始化<br>2、 指针在free 或delete后必须置为NULL<br>3、 指针的长度都为4字节<br>4、释放内存时，如果是数组指针，必须要释放掉所有的内存，如<div class="code">char *p=new char[100];<br>strcpy(p,&#8221;Hello World&#8221;);<br>delete []p; //注意前面的［］号<br>p=NULL;</div>5、数组指针的内容不能超过数组指针的最大容易。<br>如:<div class="code">char *p=new char[5];<br>strcpy(p,&#8221;Hello World&#8221;); //报错 目标容易不够大<br>delete []p; //注意前面的［］号<br>p=NULL;</div><br><strong><span style="color: red; ">十四、关于malloc/free 和new /delete</span></strong><br>malloc/free 是C/C+的内存分配符，new /delete是C++的内存分配符。<br>注意：malloc/free是库函数，new/delete是运算符<br>malloc/free不能执行构造函数与析构函数，而new/delete可以<br>new/delete不能在C上运行，所以malloc/free不能被淘汰<br>两者都必须要成对使用<br>C++中可以使用_set_new_hander函数来定义内存分配异常的处理<br><br><strong><span style="color: red; ">十五、Ｃ++的特性</span></strong><br>Ｃ++新增加有重载(overload)，内联（inline），Const，Virtual四种机制<br>重载和内联：即可用于全局函数，也可用于类的成员函数；<br>Const和Virtual：只可用于类的成员函数；<br>重载：在同一类中，函数名相同的函数。由不同的参数决定调用那个函数。函数可要不可要Virtual关键字。和全局函数同名的函数不叫重载。如果在类中调用同名的全局函数，必须用全局引用符号::引用。<br>覆盖是指派生类函数覆盖基类函数：函数名相同；参数相同；基类函数必须有Virtual关键字；不同的范围(派生类和基类)。<br>隐藏是指派生类屏蔽了基类的同名函数相同<br>1、 函数名相同，但参数不同，此时不论基类有无Virtual关键字，基类函数将被隐藏。<br>2、 函数名相同，参数也相同，但基类无Virtual关键字(有就是覆盖)，基类函数将被隐藏。<br>内联：inline关键字必须与定义体放在一起，而不是单单放在声明中。<br>Const：const是constant的缩写，&#8220;恒定不变&#8221;的意思。被const修饰的东西都受到强制保护，可以预防意外的变动，能提高程序的健壮性。<br>1、 参数做输入用的指针型参数，加上const可防止被意外改动。<br>2、 按值引用的用户类型做输入参数时，最好将按值传递的改为引用传递，并加上const关键字，目的是为了提高效率。数据类型为内部类型的就没必要做这件事情；如：<br>将void Func(A a) 改为void Func(const A &amp;a)。<br>而void func(int a)就没必要改成void func(const int &amp;a);<br>3、 给返回值为指针类型的函数加上const，会使函数返回值不能被修改，赋给的变量也只能是const型变量。如：函数const char*GetString(void); char *str=GetString()将会出错。而const char *str=GetString()将是正确的。<br>4、 Const成员函数是指此函数体内只能调用Const成员变量，提高程序的键壮性。如声明函数 int GetCount(void) const;此函数体内就只能调用Const成员变量。<br>Virtual：虚函数：派生类可以覆盖掉的函数，纯虚函数：只是个空函数，没有函数实现体；<br><br><strong><span style="color: red; ">十六、extern&#8220;C&#8221;有什么作用？</span></strong><br>Extern &#8220;C&#8221;是由Ｃ＋＋提供的一个连接交换指定符号，用于告诉Ｃ＋＋这段代码是Ｃ函数。这是因为C++编译后库中函数名会变得很长，与C生成的不一致，造成Ｃ＋＋不能直接调用C函数，加上extren &#8220;c&#8221;后，C++就能直接调用C函数了。<br>Extern &#8220;C&#8221;主要使用正规DLL函数的引用和导出 和 在C++包含C函数或C头文件时使用。使用时在前面加上extern &#8220;c&#8221; 关键字即可。<br><br><strong><span style="color: red; ">十七、构造函数与析构函数</span></strong><br>派生类的构造函数应在初始化表里调用基类的构造函数；<br>派生类和基类的析构函数应加Virtual关键字。<br>不要小看构造函数和析构函数，其实编起来还是不容易。<div class="code">#include &lt;iostream.h&gt;<br>class Base<br>{<br>public:&nbsp;<br>virtual ~Base() { cout&lt;&lt; "~Base" &lt;&lt; endl ; }<br>};<br><br>class Derived : public Base<br>{<br>public:&nbsp;<br>virtual ~Derived() { cout&lt;&lt; "~Derived" &lt;&lt; endl ; }<br>};<br><br>void main(void)<br>{<br>Base * pB = new Derived; // upcast<br>delete pB;<br>}</div>输出结果为：<br>~Derived<br>~Base<br><br>如果析构函数不为虚，那么输出结果为<br>~Base<br><br><strong><span style="color: red; ">十八、#IFNDEF/#DEFINE/#ENDIF有什么作用</span></strong><br>仿止该头文件被重复引用&nbsp;</span></strong></span></font><img src ="http://www.cppblog.com/cc/aggbug/116212.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/cc/" target="_blank">北风之神007</a> 2010-05-24 13:09 <a href="http://www.cppblog.com/cc/archive/2010/05/24/116212.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>UNIX下编译SQLite3.3.6 </title><link>http://www.cppblog.com/cc/archive/2009/09/18/96655.html</link><dc:creator>北风之神007</dc:creator><author>北风之神007</author><pubDate>Fri, 18 Sep 2009 09:41:00 GMT</pubDate><guid>http://www.cppblog.com/cc/archive/2009/09/18/96655.html</guid><wfw:comment>http://www.cppblog.com/cc/comments/96655.html</wfw:comment><comments>http://www.cppblog.com/cc/archive/2009/09/18/96655.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cppblog.com/cc/comments/commentRss/96655.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/cc/services/trackbacks/96655.html</trackback:ping><description><![CDATA[<span style="FONT-SIZE: 14pt">&nbsp; 虽然现在最新的版本已经新了不少，不过这个功能也可以了，刚好需要在HPUX，AIX以及Solaris都使用它，Redhat下面自带，所以在UNIX下面要编译了一下，这里把Makefile文件做了一些调整，编译通过了。<br><br>解压缩之后不需要再执行 Configure命令了，直接make就可以了，最后会在当前目录下的<strong style="COLOR: #3366ff">.libs</strong>中生成相关的库，连接程序的时候加上这些库就可以了。<br><br>&nbsp;&nbsp;&nbsp;<u>&nbsp;</u><a href="http://www.cppblog.com/Files/cc/sqlite-3.3.6_aix.tar.gz.zip"><u>SQLite3.3.6 下载</u>&nbsp;</a> （<strong style="COLOR: #ff0000">AIX 5.2</strong> &nbsp;XLC++V7测试通过）<br>&nbsp;&nbsp;&nbsp; <a href="http://www.cppblog.com/Files/cc/sqlite-3.3.6_HPUX.tar.gz.zip"><u>SQLite3.3.6 下载</u>&nbsp;</a> （<strong style="COLOR: #ff0000">HPUX 11.23</strong>&nbsp; aCC测试通过）</span><img src ="http://www.cppblog.com/cc/aggbug/96655.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/cc/" target="_blank">北风之神007</a> 2009-09-18 17:41 <a href="http://www.cppblog.com/cc/archive/2009/09/18/96655.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>*.bff文件的安装</title><link>http://www.cppblog.com/cc/archive/2009/09/17/96509.html</link><dc:creator>北风之神007</dc:creator><author>北风之神007</author><pubDate>Thu, 17 Sep 2009 03:51:00 GMT</pubDate><guid>http://www.cppblog.com/cc/archive/2009/09/17/96509.html</guid><wfw:comment>http://www.cppblog.com/cc/comments/96509.html</wfw:comment><comments>http://www.cppblog.com/cc/archive/2009/09/17/96509.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/cc/comments/commentRss/96509.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/cc/services/trackbacks/96509.html</trackback:ping><description><![CDATA[<span style="FONT-SIZE: 14pt">&nbsp;&nbsp;&nbsp; 今天装了一台AIX5.2的环境，还要装编译器，不过手里只有XLC++.V7版本的，以前在AIX5.2跟5.3的系统上都装过很多遍了，直接使用simt工具，选好程序路径就可以了，基本上以为不会有什么问题，但是今天在装的过程中却遇到了一些意想不到的问题。<br>&nbsp;&nbsp; <br>&nbsp;&nbsp; 系统装好之后，先打了补丁，然后开始装编译器，但是在装的过程中，提示xlmass.lib 4.3.0.0找不到，安装程序目录下面只有xlmass.lib 4.1.0.0的版本，由此造成后面几个关键包也安装不成功，最终导致安装失败。我不停的在光盘里面找啊找，希望能找到4.3.0.0版本的，可是还是没有找到，问题好像进入了死胡同了。<br><br>安装过程实际需要的是下面的版本<br>
<div align=center src_cetemp="/images/cppblog_com/cc/2009_9/xlmass.jpg"><img height=132 alt="" src="http://www.cppblog.com/images/cppblog_com/cc/2009_9/xlmass.jpg" width=676 border=0><br></div>
<br>怎么搞呢，有事情问baidu，google，查了半天，终于找到了IBM的XLC++的网页<br><a href="http://www-01.ibm.com/support/docview.wss?rs=0&amp;uid=swg24019560">http://www-01.ibm.com/support/docview.wss?rs=0&amp;uid=swg24019560</a>，是XLC++V7在AIX5.2上面的运行库，里面就有xlmass相关的包，而且是4.4.0.0版本的，比要求的要高了，不知道行不行，不管了，下来再说。tar.Z文件，先用uncompress解压缩，然后再tar xvf就可以了，出来一堆*.bff文件，还真没有用过这个东西，继续baidu，原来在smit工具里面打开就可以了。<br>超级用户模式下，smit installp-&gt;安装软件，选择bff文件所在的路径即可，然后就是安装了，安装过程中提示有错误，但是我要的这几个包好像提交成功了，所以也不管了，装过之后再正常安装XLC++，装完运行xlc命令，大功告成阿。</span><img src ="http://www.cppblog.com/cc/aggbug/96509.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/cc/" target="_blank">北风之神007</a> 2009-09-17 11:51 <a href="http://www.cppblog.com/cc/archive/2009/09/17/96509.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>重装系统后ORACLE的恢复的几种方法(转载)</title><link>http://www.cppblog.com/cc/archive/2009/08/19/93812.html</link><dc:creator>北风之神007</dc:creator><author>北风之神007</author><pubDate>Wed, 19 Aug 2009 04:48:00 GMT</pubDate><guid>http://www.cppblog.com/cc/archive/2009/08/19/93812.html</guid><wfw:comment>http://www.cppblog.com/cc/comments/93812.html</wfw:comment><comments>http://www.cppblog.com/cc/archive/2009/08/19/93812.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/cc/comments/commentRss/93812.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/cc/services/trackbacks/93812.html</trackback:ping><description><![CDATA[文章出自：http://www.goceanedu.com.cn/Read_1861.htm <br><br>我的电脑突然挂了，不得不重装系统，不过我的ORACLE装在了D盘，所有的文件都还在，我相信一定能够恢复，直到搞定工作，我才开始整我的数据库，花了两天时间，终于恢复了，庆祝一下，同时总结一下，希望有遇到同样问题的朋友能够快速搞定此类问题 <br><br>第一种： <br>首先，备份数据库(X:\oracle\oradata)下的数据文件，重新命名即可(否则装数据库的时候会提示sid已存在)。重新安装数据库，当然数据库的名字就是你要恢复的名字。安装完成后，打开控制面板，停止oracle的服务。把(X:\oracle\oradata)下新生成的文件改名，把原先目录下的文件恢复名字。再重新启动oracle服务和监听。用sys/as dba 登陆数据库，可能会提示权限不够（ora-01031）修改（X:\oracle\ora92\network\admin )文件夹下的sqlnet.ora文件，添加SQLNET.AUTHENTICATION_SERVICES= (NTS)，增加权限。登陆进去后，打开table提示不能打开。打开common页，执行命令alert database open；这时再刷新table，发现原先的表可以打开了。恢复成功了。再用原先数据库的普通用户进入。发现一切正常。至此，大功告成。 <br><br>第二种：1、首先，将原来的ORACLE文件夹改名，原来的路径是D:/oracle。我暂时改成D:/oracle_old。找来ORACLE（我用的是ORACLE 9I）安装光盘，将ORACLE安装在原来安装的目录下，这样恢复起来更加方便，主要是注册表的内容不用修改。 2、安装完了之后，系统中又有一个可以使用的ORACLE了。这个时候要做的就是将原来的文件和数据恢复过来。第一步，先关闭ORACLE的所有已经启动的项目，在&#8220;服务&#8221;里面逐一关闭。然后，将安装目录改名。我现在用的是D:/oracle。改成D:/oracle_new。再将D:/oracle_old改成D:/oracle。 这样理论上说从物理层面恢复了ORACLE了。但是我们发现，现在还不能启动ORACLE的监听程序和服务程序。我们还要从逻辑上解决。 <br>3、在dos环境下执行一个删除命令：oradim -delete -sid mm，其中mm为创建oracle时候创建的实例 建议执行这个命令后重新启动机器，重启后就可以建立和原来实例名相同的实例。当然你懒，不重新启动也可以，但是你的实例名就不能和原来的一样了。 <br>4、在dos环境下执行命令 oradim -new -sid mm -startmode a -pfile "D:\oracle\admin\mm\pfile\initmm.ora "创建一个新的实例，其中 &#8220;mm&#8220;为新数据库的名称。 <br>5、启动服务，先打开数据库，然后可以用以前的用户名和密码登陆进去。 要补充的是，一般的ORACLE数据库的监听程序都是用电脑的名称来识别地址的，而不是127.0.0.1或者localhost。所以，如果我们安装系统的时候用的是不同的电脑名称（比如我原来用的是wm_mm。重新安装后用的是wenming_mm），那么我们还有一个工作要做，就是修改文件 listener.ora。将里面的相关的东西改过来就可以了。 <br>需要耐心、细心，可能在一步里有一个细小的差别就会出些古怪的错误提示，有时需要根据错误提示采取策略，总之原理是，先装一个一模一样的ORACLE，安装目录、数据库名称都一样，这样保证注册表里不用更改；再覆盖物理文件，最后重新实例化，打开数据库就可以进去了。 <br><br>注：恢复必须要有以下文件 a、初始化参数文件INIT.ORA b、所有数据文件 .dbf c、所有重做日志文件（联机日志、归档日志）redo d、所有控制文件 crtl e、internal密码文件 <br><br><img src ="http://www.cppblog.com/cc/aggbug/93812.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/cc/" target="_blank">北风之神007</a> 2009-08-19 12:48 <a href="http://www.cppblog.com/cc/archive/2009/08/19/93812.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Solaris环境下编译头文件的注意事项</title><link>http://www.cppblog.com/cc/archive/2009/07/29/91597.html</link><dc:creator>北风之神007</dc:creator><author>北风之神007</author><pubDate>Wed, 29 Jul 2009 07:45:00 GMT</pubDate><guid>http://www.cppblog.com/cc/archive/2009/07/29/91597.html</guid><wfw:comment>http://www.cppblog.com/cc/comments/91597.html</wfw:comment><comments>http://www.cppblog.com/cc/archive/2009/07/29/91597.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/cc/comments/commentRss/91597.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/cc/services/trackbacks/91597.html</trackback:ping><description><![CDATA[<span style="FONT-SIZE: 18pt">&nbsp;&nbsp;&nbsp;最近在Solaris上编译程序的时候，发现它的编译器有个奇怪的习惯，就是头文件的最后一行要加上一行回车行，不知道是什么回事，否则就会产生警告，在Solaris上装的就是sun公司自己的sunstudio开发工具，在HPUX跟AIX上都没有这个问题，应该是编译器的事情吧。<br>下面截个图给大家看看，<br></span><br>
<div align=center src_cetemp="/images/cppblog_com/cc/2009_7/error.jpg"><img height=111 alt="" src="http://www.cppblog.com/images/cppblog_com/cc/2009_7/error.jpg" width=906 border=0></div><img src ="http://www.cppblog.com/cc/aggbug/91597.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/cc/" target="_blank">北风之神007</a> 2009-07-29 15:45 <a href="http://www.cppblog.com/cc/archive/2009/07/29/91597.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>简单介绍UNIX下编写定时器程序</title><link>http://www.cppblog.com/cc/archive/2009/06/02/86548.html</link><dc:creator>北风之神007</dc:creator><author>北风之神007</author><pubDate>Tue, 02 Jun 2009 07:46:00 GMT</pubDate><guid>http://www.cppblog.com/cc/archive/2009/06/02/86548.html</guid><wfw:comment>http://www.cppblog.com/cc/comments/86548.html</wfw:comment><comments>http://www.cppblog.com/cc/archive/2009/06/02/86548.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cppblog.com/cc/comments/commentRss/86548.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/cc/services/trackbacks/86548.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 刚好写程序的时候要使用定时器，就是定时的做一些操作，网上查了一下，自己也学着写了写，网上倒是说的好多种，我在这里就不做过多介绍了，就说我用的这个，使用<span lang=EN-US style="FONT-SIZE: 10.5pt; COLOR: black; FONT-FAMILY: ˎ̥; mso-fareast-font-family: 宋体; mso-bidi-font-family: 宋体; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA"><font face=宋体><strong style="COLOR: #0000ff">setitimer</strong>函数。<br><br><strong>函数原型</strong><br></font><span lang=EN-US style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA">&nbsp;int setitimer(int which, const struct itimerval *value, struct itimerval *ovalue);<br></span><br><font face=宋体><strong>参数说明</strong><br><br>&nbsp;&nbsp;<em style="COLOR: red">&nbsp;参数which</em><br><em>&nbsp; 参数 which是定时器类型</em><br></font>
<table class=MsoNormalTable style="BORDER-RIGHT: medium none; BORDER-TOP: medium none; BORDER-LEFT: medium none; WIDTH: 100%; BORDER-BOTTOM: medium none; BORDER-COLLAPSE: collapse; mso-border-alt: solid black 1.5pt; mso-yfti-tbllook: 32; mso-padding-alt: 0cm 5.4pt 0cm 5.4pt; mso-border-insideh: 1.5pt solid black; mso-border-insidev: 1.5pt solid black" cellSpacing=0 cellPadding=0 width="100%" border=1>
    <tbody>
        <tr style="mso-yfti-irow: 0; mso-yfti-firstrow: yes">
            <td style="BORDER-RIGHT: #ece9d8 1pt inset; PADDING-RIGHT: 5.4pt; BORDER-TOP: black 1.5pt solid; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: #ece9d8 1pt inset; WIDTH: 26.4%; PADDING-TOP: 0cm; BORDER-BOTTOM: black 1pt solid; BACKGROUND-COLOR: transparent; mso-border-top-alt: solid black 1.5pt; mso-border-left-alt: inset #ECE9D8 .75pt; mso-border-bottom-alt: solid black .25pt; mso-border-right-alt: inset #ECE9D8 .75pt" vAlign=top width="26%">
            <p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt; TEXT-ALIGN: left; mso-pagination: widow-orphan" align=left><strong style="mso-bidi-font-weight: normal"><span style="BORDER-RIGHT: windowtext 1pt; PADDING-RIGHT: 0cm; BORDER-TOP: windowtext 1pt; PADDING-LEFT: 0cm; FONT-SIZE: 12pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: windowtext 1pt; COLOR: black; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt; FONT-FAMILY: 宋体; mso-bidi-font-family: Arial; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt; mso-border-alt: none windowtext 0cm; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial">取值</span></strong><strong style="mso-bidi-font-weight: normal"><span lang=EN-US style="BORDER-RIGHT: windowtext 1pt; PADDING-RIGHT: 0cm; BORDER-TOP: windowtext 1pt; PADDING-LEFT: 0cm; FONT-SIZE: 12pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: windowtext 1pt; COLOR: black; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt; FONT-FAMILY: Arial; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt; mso-border-alt: none windowtext 0cm"><o:p></o:p></span></strong></p>
            </td>
            <td style="BORDER-RIGHT: #ece9d8 1pt inset; PADDING-RIGHT: 5.4pt; BORDER-TOP: black 1.5pt solid; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: #ffffff; WIDTH: 49.86%; PADDING-TOP: 0cm; BORDER-BOTTOM: black 1pt solid; BACKGROUND-COLOR: transparent; mso-border-top-alt: solid black 1.5pt; mso-border-left-alt: inset #ECE9D8 .75pt; mso-border-bottom-alt: solid black .25pt; mso-border-right-alt: inset #ECE9D8 .75pt" vAlign=top width="49%">
            <p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 18pt; TEXT-ALIGN: left; mso-pagination: widow-orphan" align=left><strong style="mso-bidi-font-weight: normal"><span style="BORDER-RIGHT: windowtext 1pt; PADDING-RIGHT: 0cm; BORDER-TOP: windowtext 1pt; PADDING-LEFT: 0cm; FONT-SIZE: 12pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: windowtext 1pt; COLOR: black; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt; FONT-FAMILY: 宋体; mso-bidi-font-family: Arial; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt; mso-border-alt: none windowtext 0cm; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial">含义</span></strong><strong style="mso-bidi-font-weight: normal"><span lang=EN-US style="BORDER-RIGHT: windowtext 1pt; PADDING-RIGHT: 0cm; BORDER-TOP: windowtext 1pt; PADDING-LEFT: 0cm; FONT-SIZE: 12pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: windowtext 1pt; COLOR: black; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt; FONT-FAMILY: Arial; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt; mso-border-alt: none windowtext 0cm"><o:p></o:p></span></strong></p>
            </td>
            <td style="BORDER-RIGHT: #ece9d8 1pt inset; PADDING-RIGHT: 5.4pt; BORDER-TOP: black 1.5pt solid; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: #ffffff; WIDTH: 23.74%; PADDING-TOP: 0cm; BORDER-BOTTOM: black 1pt solid; BACKGROUND-COLOR: transparent; mso-border-top-alt: solid black 1.5pt; mso-border-left-alt: inset #ECE9D8 .75pt; mso-border-bottom-alt: solid black .25pt; mso-border-right-alt: inset #ECE9D8 .75pt" vAlign=top width="23%">
            <p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt; TEXT-ALIGN: left; mso-pagination: widow-orphan" align=left><strong style="mso-bidi-font-weight: normal"><span style="BORDER-RIGHT: windowtext 1pt; PADDING-RIGHT: 0cm; BORDER-TOP: windowtext 1pt; PADDING-LEFT: 0cm; FONT-SIZE: 12pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: windowtext 1pt; COLOR: black; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt; FONT-FAMILY: 宋体; mso-bidi-font-family: Arial; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt; mso-border-alt: none windowtext 0cm; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial">信号发送</span></strong><strong style="mso-bidi-font-weight: normal"><span lang=EN-US style="BORDER-RIGHT: windowtext 1pt; PADDING-RIGHT: 0cm; BORDER-TOP: windowtext 1pt; PADDING-LEFT: 0cm; FONT-SIZE: 12pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: windowtext 1pt; COLOR: black; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt; FONT-FAMILY: Arial; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt; mso-border-alt: none windowtext 0cm"><o:p></o:p></span></strong></p>
            </td>
        </tr>
        <tr style="mso-yfti-irow: 1">
            <td style="BORDER-RIGHT: black 1.5pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #ffffff; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: black 1.5pt solid; WIDTH: 26.4%; PADDING-TOP: 0cm; BORDER-BOTTOM: black 1.5pt solid; BACKGROUND-COLOR: transparent; mso-border-top-alt: solid black 1.5pt" vAlign=top width="26%">
            <p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt; TEXT-ALIGN: left; mso-pagination: widow-orphan" align=left><span lang=EN-US style="BORDER-RIGHT: windowtext 1pt; PADDING-RIGHT: 0cm; BORDER-TOP: windowtext 1pt; PADDING-LEFT: 0cm; FONT-SIZE: 12pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: windowtext 1pt; COLOR: black; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt; FONT-FAMILY: Arial; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt; mso-border-alt: none windowtext 0cm"><font face=宋体>ITIMER_REAL<o:p></o:p></font></span></p>
            </td>
            <td style="BORDER-RIGHT: black 1.5pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #ffffff; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: #ffffff; WIDTH: 49.86%; PADDING-TOP: 0cm; BORDER-BOTTOM: black 1.5pt solid; BACKGROUND-COLOR: transparent; mso-border-top-alt: solid black 1.5pt; mso-border-left-alt: solid black 1.5pt" vAlign=top width="49%">
            <p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt; TEXT-ALIGN: left; mso-pagination: widow-orphan" align=left><span style="BORDER-RIGHT: windowtext 1pt; PADDING-RIGHT: 0cm; BORDER-TOP: windowtext 1pt; PADDING-LEFT: 0cm; FONT-SIZE: 12pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: windowtext 1pt; COLOR: black; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt; FONT-FAMILY: 宋体; mso-bidi-font-family: Arial; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt; mso-border-alt: none windowtext 0cm; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial">定时真实时间，与</span><font face=宋体><span lang=EN-US style="BORDER-RIGHT: windowtext 1pt; PADDING-RIGHT: 0cm; BORDER-TOP: windowtext 1pt; PADDING-LEFT: 0cm; FONT-SIZE: 12pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: windowtext 1pt; COLOR: black; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt; FONT-FAMILY: Arial; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt; mso-border-alt: none windowtext 0cm">alarm</span><span style="BORDER-RIGHT: windowtext 1pt; PADDING-RIGHT: 0cm; BORDER-TOP: windowtext 1pt; PADDING-LEFT: 0cm; FONT-SIZE: 12pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: windowtext 1pt; COLOR: black; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt; FONT-FAMILY: 宋体; mso-bidi-font-family: Arial; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt; mso-border-alt: none windowtext 0cm; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial">类型相同。</span><span lang=EN-US style="BORDER-RIGHT: windowtext 1pt; PADDING-RIGHT: 0cm; BORDER-TOP: windowtext 1pt; PADDING-LEFT: 0cm; FONT-SIZE: 12pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: windowtext 1pt; COLOR: black; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt; FONT-FAMILY: Arial; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt; mso-border-alt: none windowtext 0cm"><o:p></o:p></span></font></p>
            </td>
            <td style="BORDER-RIGHT: black 1.5pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #ffffff; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: #ffffff; WIDTH: 23.74%; PADDING-TOP: 0cm; BORDER-BOTTOM: black 1.5pt solid; BACKGROUND-COLOR: transparent; mso-border-top-alt: solid black 1.5pt; mso-border-left-alt: solid black 1.5pt" vAlign=top width="23%">
            <p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt; TEXT-ALIGN: left; mso-pagination: widow-orphan" align=left><span lang=EN-US style="BORDER-RIGHT: windowtext 1pt; PADDING-RIGHT: 0cm; BORDER-TOP: windowtext 1pt; PADDING-LEFT: 0cm; FONT-SIZE: 12pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: windowtext 1pt; COLOR: black; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt; FONT-FAMILY: Arial; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt; mso-border-alt: none windowtext 0cm"><font face=宋体>SIGALRM<o:p></o:p></font></span></p>
            </td>
        </tr>
        <tr style="mso-yfti-irow: 2">
            <td style="BORDER-RIGHT: black 1.5pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #ffffff; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: black 1.5pt solid; WIDTH: 26.4%; PADDING-TOP: 0cm; BORDER-BOTTOM: black 1.5pt solid; BACKGROUND-COLOR: transparent; mso-border-top-alt: solid black 1.5pt" vAlign=top width="26%">
            <p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt; TEXT-ALIGN: left; mso-pagination: widow-orphan" align=left><span lang=EN-US style="BORDER-RIGHT: windowtext 1pt; PADDING-RIGHT: 0cm; BORDER-TOP: windowtext 1pt; PADDING-LEFT: 0cm; FONT-SIZE: 12pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: windowtext 1pt; COLOR: black; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt; FONT-FAMILY: Arial; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt; mso-border-alt: none windowtext 0cm"><font face=宋体>ITIMER_VIRT<o:p></o:p></font></span></p>
            </td>
            <td style="BORDER-RIGHT: black 1.5pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #ffffff; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: #ffffff; WIDTH: 49.86%; PADDING-TOP: 0cm; BORDER-BOTTOM: black 1.5pt solid; BACKGROUND-COLOR: transparent; mso-border-top-alt: solid black 1.5pt; mso-border-left-alt: solid black 1.5pt" vAlign=top width="49%">
            <p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt; TEXT-ALIGN: left; mso-pagination: widow-orphan" align=left><span style="BORDER-RIGHT: windowtext 1pt; PADDING-RIGHT: 0cm; BORDER-TOP: windowtext 1pt; PADDING-LEFT: 0cm; FONT-SIZE: 12pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: windowtext 1pt; COLOR: black; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt; FONT-FAMILY: 宋体; mso-bidi-font-family: Arial; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt; mso-border-alt: none windowtext 0cm; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial">定时进程在用户态下的实际执行时间。</span><span lang=EN-US style="BORDER-RIGHT: windowtext 1pt; PADDING-RIGHT: 0cm; BORDER-TOP: windowtext 1pt; PADDING-LEFT: 0cm; FONT-SIZE: 12pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: windowtext 1pt; COLOR: black; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt; FONT-FAMILY: Arial; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt; mso-border-alt: none windowtext 0cm"><o:p></o:p></span></p>
            </td>
            <td style="BORDER-RIGHT: black 1.5pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #ffffff; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: #ffffff; WIDTH: 23.74%; PADDING-TOP: 0cm; BORDER-BOTTOM: black 1.5pt solid; BACKGROUND-COLOR: transparent; mso-border-top-alt: solid black 1.5pt; mso-border-left-alt: solid black 1.5pt" vAlign=top width="23%">
            <p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt; TEXT-ALIGN: left; mso-pagination: widow-orphan" align=left><span lang=EN-US style="BORDER-RIGHT: windowtext 1pt; PADDING-RIGHT: 0cm; BORDER-TOP: windowtext 1pt; PADDING-LEFT: 0cm; FONT-SIZE: 12pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: windowtext 1pt; COLOR: black; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt; FONT-FAMILY: Arial; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt; mso-border-alt: none windowtext 0cm"><font face=宋体>SIGVTALRM<o:p></o:p></font></span></p>
            </td>
        </tr>
        <tr style="mso-yfti-irow: 3; mso-yfti-lastrow: yes">
            <td style="BORDER-RIGHT: black 1.5pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #ffffff; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: black 1.5pt solid; WIDTH: 26.4%; PADDING-TOP: 0cm; BORDER-BOTTOM: black 1.5pt solid; BACKGROUND-COLOR: transparent; mso-border-top-alt: solid black 1.5pt" vAlign=top width="26%">
            <p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt; TEXT-ALIGN: left; mso-pagination: widow-orphan" align=left><span lang=EN-US style="BORDER-RIGHT: windowtext 1pt; PADDING-RIGHT: 0cm; BORDER-TOP: windowtext 1pt; PADDING-LEFT: 0cm; FONT-SIZE: 12pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: windowtext 1pt; COLOR: black; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt; FONT-FAMILY: Arial; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt; mso-border-alt: none windowtext 0cm"><font face=宋体>ITIMER_PROF<o:p></o:p></font></span></p>
            </td>
            <td style="BORDER-RIGHT: black 1.5pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #ffffff; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: #ffffff; WIDTH: 49.86%; PADDING-TOP: 0cm; BORDER-BOTTOM: black 1.5pt solid; BACKGROUND-COLOR: transparent; mso-border-top-alt: solid black 1.5pt; mso-border-left-alt: solid black 1.5pt" vAlign=top width="49%">
            <p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt; TEXT-ALIGN: left; mso-pagination: widow-orphan" align=left><span style="BORDER-RIGHT: windowtext 1pt; PADDING-RIGHT: 0cm; BORDER-TOP: windowtext 1pt; PADDING-LEFT: 0cm; FONT-SIZE: 12pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: windowtext 1pt; COLOR: black; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt; FONT-FAMILY: 宋体; mso-bidi-font-family: Arial; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt; mso-border-alt: none windowtext 0cm; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial">定时进程在用户态和核心态下</span><span lang=EN-US style="BORDER-RIGHT: windowtext 1pt; PADDING-RIGHT: 0cm; BORDER-TOP: windowtext 1pt; PADDING-LEFT: 0cm; FONT-SIZE: 12pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: windowtext 1pt; COLOR: black; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt; FONT-FAMILY: Arial; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt; mso-border-alt: none windowtext 0cm"><br></span><span style="BORDER-RIGHT: windowtext 1pt; PADDING-RIGHT: 0cm; BORDER-TOP: windowtext 1pt; PADDING-LEFT: 0cm; FONT-SIZE: 12pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: windowtext 1pt; COLOR: black; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt; FONT-FAMILY: 宋体; mso-bidi-font-family: Arial; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt; mso-border-alt: none windowtext 0cm; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial">的实际执行时间。</span><span lang=EN-US style="BORDER-RIGHT: windowtext 1pt; PADDING-RIGHT: 0cm; BORDER-TOP: windowtext 1pt; PADDING-LEFT: 0cm; FONT-SIZE: 12pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: windowtext 1pt; COLOR: black; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt; FONT-FAMILY: Arial; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt; mso-border-alt: none windowtext 0cm"><o:p></o:p></span></p>
            </td>
            <td style="BORDER-RIGHT: black 1.5pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #ffffff; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: #ffffff; WIDTH: 23.74%; PADDING-TOP: 0cm; BORDER-BOTTOM: black 1.5pt solid; BACKGROUND-COLOR: transparent; mso-border-top-alt: solid black 1.5pt; mso-border-left-alt: solid black 1.5pt" vAlign=top width="23%">
            <p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt; TEXT-ALIGN: left; mso-pagination: widow-orphan" align=left><span lang=EN-US style="BORDER-RIGHT: windowtext 1pt; PADDING-RIGHT: 0cm; BORDER-TOP: windowtext 1pt; PADDING-LEFT: 0cm; FONT-SIZE: 12pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: windowtext 1pt; COLOR: black; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt; FONT-FAMILY: Arial; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt; mso-border-alt: none windowtext 0cm"><font face=宋体>SIGPROF<o:p></o:p></font></span></p>
            </td>
        </tr>
    </tbody>
</table>
<br><font face=宋体>&nbsp;</font>
<p align=left><span style="FONT-SIZE: 12pt"><font face=宋体>&nbsp;&nbsp; </font>这三种定时器定时完成时给进程发送的信号各不相同，其中ITIMER_REAL类定时器发送SIGALRM信号，ITIMER_VIRT类定时器发送SIGVTALRM信号，<span lang=EN-US style="BORDER-RIGHT: windowtext 1pt; PADDING-RIGHT: 0cm; BORDER-TOP: windowtext 1pt; PADDING-LEFT: 0cm; FONT-SIZE: 12pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: windowtext 1pt; COLOR: black; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt; FONT-FAMILY: Arial; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt; mso-border-alt: none windowtext 0cm">ITIMER_PROF</span>类定时器发送SIGPROF信号。</span></p>
<font face="宋体, MS Song">&nbsp;&nbsp;<span style="FONT-SIZE: 14pt"><em style="COLOR: red">&nbsp;参数 value</em><br>&nbsp;&nbsp;&nbsp;结构itimerval描述了定时器的组成。<br></span>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #008080">1</span>&nbsp;<span style="COLOR: #0000ff">struct</span><span style="COLOR: #000000">&nbsp;itimerval&nbsp;<br></span><span style="COLOR: #008080">2</span>&nbsp;<span style="COLOR: #000000">{<br></span><span style="COLOR: #008080">3</span>&nbsp;<span style="COLOR: #000000"></span><span style="COLOR: #0000ff">struct</span><span style="COLOR: #000000">&nbsp;timeval&nbsp;&nbsp;it_interval;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">/*</span><span style="COLOR: #008000">&nbsp;下次定时取值&nbsp;</span><span style="COLOR: #008000">*/</span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">4</span>&nbsp;<span style="COLOR: #000000"></span><span style="COLOR: #0000ff">struct</span><span style="COLOR: #000000">&nbsp;timeval&nbsp;&nbsp;it_value;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">/*</span><span style="COLOR: #008000">&nbsp;本次定时设置值&nbsp;</span><span style="COLOR: #008000">*/</span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">5</span>&nbsp;<span style="COLOR: #000000">}<br></span><span style="COLOR: #008080">6</span>&nbsp;<span style="COLOR: #000000"></span></div>
</font></span><span style="FONT-SIZE: 14pt">&nbsp;&nbsp;&nbsp; <span style="FONT-SIZE: 12pt">结构timeval描述的是精确到微秒的结构。<br>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #008080">1</span>&nbsp;<span style="COLOR: #0000ff">struct</span><span style="COLOR: #000000">&nbsp;timeval&nbsp;<br></span><span style="COLOR: #008080">2</span>&nbsp;<span style="COLOR: #000000">{<br></span><span style="COLOR: #008080">3</span>&nbsp;<span style="COLOR: #000000"></span><span style="COLOR: #0000ff">long</span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;tv_sec;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">/*</span><span style="COLOR: #008000">&nbsp;秒（1000000微秒）&nbsp;</span><span style="COLOR: #008000">*/</span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">4</span>&nbsp;<span style="COLOR: #000000"></span><span style="COLOR: #0000ff">long</span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;tv_usec;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">/*</span><span style="COLOR: #008000">&nbsp;微妙&nbsp;</span><span style="COLOR: #008000">*/</span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">5</span>&nbsp;<span style="COLOR: #000000">}<br></span><span style="COLOR: #008080">6</span>&nbsp;<span style="COLOR: #000000"></span></div>
</span></span><font style="FONT-SIZE: 12pt" face=宋体 size=5><br>&nbsp;&nbsp; itimerval结构中的it_value是代表首次定时的时间，而it_interval代表下一次定时的时间，执行完第一次之后，it_interval中的时间会赋值给it_value，周而复始。如果it_value值被设置为0，则定时器停止定时；如果it_value值不为0但it_interval值为0，则定时器在一次定时后终止。<br>&nbsp;&nbsp;&nbsp;setitimer执行成功返回0，否则返回-1<br><br><em>参数ovalue<br></em>&nbsp; 该参数可以使用空值NULL，如果不为空的话，返回的是上一个时刻的定时器状态。<br><br>下面写的一个简单的例子程序。<br><br>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><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">stdio.h</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">stdlib.h</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">unistd.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">#include&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">signal.h</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">&nbsp;5</span>&nbsp;<span style="COLOR: #000000">#include&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">time.h</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">&nbsp;6</span>&nbsp;<span style="COLOR: #000000">#include&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">sys</span><span style="COLOR: #000000">/</span><span style="COLOR: #000000">time.h</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">&nbsp;7</span>&nbsp;<span style="COLOR: #000000"><br></span><span style="COLOR: #008080">&nbsp;8</span>&nbsp;<span style="COLOR: #000000"></span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;n</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;<br></span><span style="COLOR: #008080">&nbsp;9</span>&nbsp;<span style="COLOR: #000000"></span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;doAction(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;sig)</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">你要做的事情</span><span style="COLOR: #008000"><br></span><span style="COLOR: #008080">10</span>&nbsp;<span style="COLOR: #008000"></span><span style="COLOR: #000000">{<br></span><span style="COLOR: #008080">11</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;printf(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">让一切痛苦随风而去&nbsp;%d\n</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,n</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">);<br></span><span style="COLOR: #008080">12</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;signal(SIGALRM,doAction);<br></span><span style="COLOR: #008080">13</span>&nbsp;<span style="COLOR: #000000">}<br></span><span style="COLOR: #008080">14</span>&nbsp;<span style="COLOR: #000000"></span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;setMyTimer(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;val)<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;</span><span style="COLOR: #0000ff">struct</span><span style="COLOR: #000000">&nbsp;itimerval&nbsp;value;<br></span><span style="COLOR: #008080">17</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;value.it_value.tv_sec</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">val;<br></span><span style="COLOR: #008080">18</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;value.it_value.tv_usec</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;<br></span><span style="COLOR: #008080">19</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;value.it_interval.tv_sec</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">val;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">val秒</span><span style="COLOR: #008000"><br></span><span style="COLOR: #008080">20</span>&nbsp;<span style="COLOR: #008000"></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;value.it_interval.tv_usec</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;<br></span><span style="COLOR: #008080">21</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;signal(SIGALRM,&nbsp;doAction);<br></span><span style="COLOR: #008080">22</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;setitimer(ITIMER_REAL,</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">value,NULL);<br></span><span style="COLOR: #008080">23</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">while</span><span style="COLOR: #000000">(</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">);<br></span><span style="COLOR: #008080">24</span>&nbsp;<span style="COLOR: #000000">}<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"></span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;main(&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;argc,&nbsp;</span><span style="COLOR: #0000ff">char</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">**</span><span style="COLOR: #000000">argv&nbsp;)<br></span><span style="COLOR: #008080">27</span>&nbsp;<span style="COLOR: #000000">{<br></span><span style="COLOR: #008080">28</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(argc</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">2</span><span style="COLOR: #000000">)<br></span><span style="COLOR: #008080">29</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;{<br></span><span style="COLOR: #008080">30</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">请您输入参数:\n</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">第二个参数是定时器的时长的，单位是秒</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;&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">32</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;}<br></span><span style="COLOR: #008080">33</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;val</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">atoi(argv[</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">]);<br></span><span style="COLOR: #008080">34</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;printf(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">%d\n</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,val);<br></span><span style="COLOR: #008080">35</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;setMyTimer(val);<br></span><span style="COLOR: #008080">36</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">37</span>&nbsp;<span style="COLOR: #000000">}</span></div>
</font><br>代码就不解释了，就是启动的时候获得第二个参数，用作定时器的时间，然后打印出&#8220;让一切痛苦随风去 0&#8221;，如此循环。<br>在AIX5.2下，使用XLC++V7.0编译通过。<br><br>运行效果如下<br><img height=225 alt="" src="http://www.cppblog.com/images/cppblog_com/cc/2009_6/tk.jpg" width=234 border=0><br><img src ="http://www.cppblog.com/cc/aggbug/86548.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/cc/" target="_blank">北风之神007</a> 2009-06-02 15:46 <a href="http://www.cppblog.com/cc/archive/2009/06/02/86548.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>主流UNIX命令对比表</title><link>http://www.cppblog.com/cc/archive/2009/04/18/80396.html</link><dc:creator>北风之神007</dc:creator><author>北风之神007</author><pubDate>Sat, 18 Apr 2009 13:43:00 GMT</pubDate><guid>http://www.cppblog.com/cc/archive/2009/04/18/80396.html</guid><wfw:comment>http://www.cppblog.com/cc/comments/80396.html</wfw:comment><comments>http://www.cppblog.com/cc/archive/2009/04/18/80396.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/cc/comments/commentRss/80396.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/cc/services/trackbacks/80396.html</trackback:ping><description><![CDATA[<p style="FONT-SIZE: 18pt" align=center><br><br><a href="http://www.cppblog.com/Files/cc/unix_os.rar"><u>主流UNIX命令对比表下载</u></a></p><img src ="http://www.cppblog.com/cc/aggbug/80396.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/cc/" target="_blank">北风之神007</a> 2009-04-18 21:43 <a href="http://www.cppblog.com/cc/archive/2009/04/18/80396.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>XMananger不能登录AIX的问题分析</title><link>http://www.cppblog.com/cc/archive/2009/04/13/79538.html</link><dc:creator>北风之神007</dc:creator><author>北风之神007</author><pubDate>Mon, 13 Apr 2009 13:33:00 GMT</pubDate><guid>http://www.cppblog.com/cc/archive/2009/04/13/79538.html</guid><wfw:comment>http://www.cppblog.com/cc/comments/79538.html</wfw:comment><comments>http://www.cppblog.com/cc/archive/2009/04/13/79538.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/cc/comments/commentRss/79538.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/cc/services/trackbacks/79538.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 我在使用AIX的过程中，有时候会遇到机器在正常运转，能ping通，telnet也可以上去，但是使用XMananger的时候却上不去，下面总结了我遇到的几种情况，附带一些解决方法，仅供参考。<br>&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;第一种：磁盘满<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;我们在写程序的时候，经常会出现一些程序死掉的问题，在Windows系统中，程序死掉就死掉了，重启一下就行了，但是在UNIX环境下，默认情况下程序死掉了都会产生一个core文件，core文件中是程序的内存映射部分，该文件的主要作用是用来帮我们查找问题的故障原因，调试用的。&nbsp;&nbsp;&nbsp;具体的调试需要使用dbx工具，这里不作介绍。在这种情况下，可以设定系统只生成一个core文件，后来生成的core文件会覆盖前面的，这里就需要修改.cshrc文件中的参数，这里使用的是cshell，&nbsp;&nbsp;打开.cshrc文件之后，我们找到如下几行，如果没有的话，自己可以手工填入。<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#setenv CORE_NAMING true<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;setenv CORE_COMPRESS true<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;setenv CORE_PATH true<br>&nbsp;前面加一个<span style="COLOR: #0000ff">#</span>号代表是注释掉，所以这一行就不起作用了，生成的core文件都叫core，而不再带有日期标记，所以默认就会只生成一个core文件了，但是这种情况下以前的core文件会被覆盖，所以调试以前的程序就不方便了，可能也不知道以前有哪些程序死掉了。<br><br>&nbsp;&nbsp; &nbsp;第二种：hosts文件缺少内容 <br>一般来说，/etc/hosts文件中会有本地主机的IP信息，就算少，也应该有<span style="COLOR: #0000ff"> 127.0.0.1 localhost</span>这样的条目信息，如果没有的话，远程登录上来的时候，可能会进入登录界面，但是输入用户名密码登录之后，界面就会停止，或者问题对话框，点击确定之后就退出系统了，这种情况下要检查hosts文件是否有对应的 IP 与主机名信息，如果没有，需要手工加入。<br><br>&nbsp;&nbsp; 第三种：CDE桌面进程未启动<br>&nbsp; 在系统运行过程中，CDE桌面进程可能死机会宕掉，或者由于其他原因没有启动，所以需要telnet上主机，然后手工启动。<br>启动命令如下：<br><strong>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # /etc/rc.dt<br>&nbsp;</strong><img src ="http://www.cppblog.com/cc/aggbug/79538.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/cc/" target="_blank">北风之神007</a> 2009-04-13 21:33 <a href="http://www.cppblog.com/cc/archive/2009/04/13/79538.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>AIX中的inittab 文件（转）</title><link>http://www.cppblog.com/cc/archive/2008/09/08/61305.html</link><dc:creator>北风之神007</dc:creator><author>北风之神007</author><pubDate>Mon, 08 Sep 2008 06:32:00 GMT</pubDate><guid>http://www.cppblog.com/cc/archive/2008/09/08/61305.html</guid><wfw:comment>http://www.cppblog.com/cc/comments/61305.html</wfw:comment><comments>http://www.cppblog.com/cc/archive/2008/09/08/61305.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/cc/comments/commentRss/61305.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/cc/services/trackbacks/61305.html</trackback:ping><description><![CDATA[<div id=art style="MARGIN: 15px" width="100%">
<div><font color=#ff0000 size=3><strong>AIX中的inittab 文件（转）原文地址<a href="http://blog.chinaunix.net/u/20198/showart_437679.html">http://blog.chinaunix.net/u/20198/showart_437679.html</a></strong></font></div>
<div><strong><font color=#ff0000 size=3></font></strong></div>
<div><font size=2>/etc/inittab 文件控制着初始化过程。</font></div>
<div style="FONT-SIZE: 12pt"><font size=2>/etc/inittab 文件为 init 命令提供脚本作为一个普通进程调度程序。构成 init 命令进程调度活动的主要（多数）进程是 /etc/getty 线进程（line process），发起（启动）专用线进程。被 init 命令特别调度的其他进程为后台进程（Daemon）和shell。</font></div>
<div style="FONT-SIZE: 12pt"><font size=2>/etc/inittab 文件由 位置相关［position-dependent ］的条目组成，格式如下：</font></div>
<div style="FONT-SIZE: 12pt"><font size=2></font>&nbsp;</div>
<div style="FONT-SIZE: 12pt"><font color=#0000ff size=2>Identifier:RunLevel:Action:Command</font></div>
<div style="FONT-SIZE: 12pt">&nbsp;</div>
<div style="FONT-SIZE: 12pt"><font size=2>每一个条目都被一个换行字符分隔。一个换行字符前面一个反斜杠 (\) 表示一个条目的延续。/etc/inittab 文件中的条目数目没有限制（而不是指条目的最大长度）。条目的最大长度是 1024 个字符。</font></div>
<div style="FONT-SIZE: 12pt"><font size=2>条目字段有：<br><strong>Identifier</strong>： 标识唯一对象的一个 1-4 位字符的字段。<br><strong>RunLevel</strong>： 该条目运行的级别。<br>运行级别有下列属性：<br>&nbsp;&nbsp; - 运行级别有效地符合系统进程的配置。<br>&nbsp;&nbsp; - 由 init 命令启动的每一个进程都被分配一个或多个该进程可存在于之的运行级别。<br>&nbsp;&nbsp; - 运行级别由 0-9 的数字来表示。例如，如果系统运行于级别 1，只有在运行级别字段有 1 的那些条目被启动。<br>&nbsp;&nbsp; - 请求 init 命令改变运行级别时，条目中运行级别字段与目标运行级别不匹配的所有进程都会收到一条警告信号 (SIGTERM)，在进程被删除符号［kill signal (SIGKILL)］强行终止前，有20秒的宽限期。<br>&nbsp;&nbsp; -&nbsp;运行级别字段可为一个进程定义多个运行级别，可以0-9的任意组合。如果没有指定运行级别，进程假定在所有的运行级别有效。<br>&nbsp;&nbsp; - 还有其他四个值会出现在运行级别字段，即使他们并不是真正的运行级别：a, b, c 和 h。在运行级别字段有这些字符的条目仅仅在telinit 命令请求时才运行（与当前的系统运行级别无关）。他们不同于init命令的运行级别，init命令永远不能进入a, b, c, h 运行级别。并且，所有这些进程的运行请求都不改变当前的运行级别。此外，init 命令改变级别时，由a, b, c 命令启动的进程并不断开（killed）。只有当 /etc/inittab 文件中他们的行在action字段标记为 off，他们的行从 /etc/inittab 文件中完全删除，或者init 命令进入单用户模式，这些进程才会被中断（killed）。<br><strong>Action</strong>: 告知 init 命令如何处理在 process 字段指定的进程。init 命令可识别的 actions 如下：<br>&nbsp; <strong>respawn</strong>： 如果进程不存在，则启动进程。却不等待进程终止（继续扫描 /etc/inittab 文件）。如进程死掉，则重启该进程。如进程存在，继续扫描 /etc/inittab 文件。<br>&nbsp; <strong>wait</strong>： 当 init 命令进入匹配某条目的运行级别时，启动该进程并等待该进程的终止。当init命令处于同样的运行级别时，所有对 /etc/inittab 文件随后的读取都会导致 init 命令忽略该条目。<br>&nbsp; <strong>once</strong>： 当 init 命令进入匹配某条目的运行级别时，启动该进程，并且不等待终止。当进程死掉时，也不重启该进程。当系统进入一个新的运行级别时，该进程仍然从之前运行级别的变化运行，程序也不重启。<br>&nbsp; <strong>boot</strong>： 只在系统引导过程中运行的条目，这些进程是系统启动过程中，init 命令从 /etc/inittab 文件中读取的。启动该进程，不等待进程终止，并且进程死掉时，也不重启进程。有意义的指导依次为，运行级别应为默认，或者必须与系统引导时 init 命令的运行级别匹配。此 action 对于系统硬件重启后的初始化功能非常有用。<br>&nbsp;<strong> bootwait</strong>： 系统引导后，init 命令从单用户到多用户状态，第一次运行的条目。启动该进程，并等其终止，进程死时，不重启该进程。如果 initdefault为 2 ，则系统引导后直接运行该进程。<br>&nbsp; <strong>powerfail</strong>： 只有当 init 命令收到一个电源故障信号(SIGPWR)的时候，才执行与此条目相关的进程。<br>&nbsp; <strong>powerwait</strong>： 只有当 init 命令收到一个电源故障信号(SIGPWR)的时候，才执行与此条目相关的进程。并等该进程终止，才继续处理 /etc/inittab 文件。<br>&nbsp; <strong>off</strong>： 如果与该条目相关的进程当前正在运行，发送一个警告信号(SIGTERM)，然后等待 20 秒才用 kill 信号（SIGKILL）终止该进程。如果进程不在运行，忽略该条目。<br>&nbsp; <strong>ondemand</strong>： 功能上与 respawn 相同，不过，此 action 应用 a, b, 或 c 值，而不用运行级别。<br>&nbsp; <strong>initdefault</strong>： init 命令只在 最初调用时才扫描与此 action 相关的条目。如果存在，init 命令使用该条目来决定初始进入的运行级别。一般情况下，使用run-level 字段中指定的最高运行级别来作为初始状态。如果运行级别字段为空，则认作0123456789；因此，init 命令进入运行级别 9 。另外，如果 init 命令在 /etc/inittab 文件中找不到initdefault 条目，则在引导时向用户请求一个初始的运行级别。<br>&nbsp;&nbsp;<strong>sysinit</strong>： 此类型的条目在登录前 init 命令正要访问控制台之前被执行。该条目只被用来初始化设备，init 命令可能会针对这些设备询问运行级别。这些条目被执行，并等待完成后才继续。</font></div>
<div style="FONT-SIZE: 12pt"><font size=2><br><strong>Command</strong>： 可执行的壳（shell）命令。整个 command 字段以 exec 为前缀，并传给一个 forked sh成为 sh -c exec 命令。任何合法的 sh 命令语法都可出现在该字段。并可用 # 插入注释。</font></div>
<div style="FONT-SIZE: 12pt"><font size=2>&nbsp;</font></div>
<div style="FONT-SIZE: 12pt"><font size=2>getty 命令覆写 /etc/inittab 文件中出现在它之前所有命令的输出。要在引导日志中记录这些命令的输出，可输送这些输出到 alog -tboot 命令。</font></div>
<div style="FONT-SIZE: 12pt"><font size=2>当 init 命令正在处理 inittab 条目时，stdin, stdout, 和 stderr 这些文件描述符（file descriptors）可能是不可用的。所有写入 stdout 或 stderr 的条目不起作用，除非把输出重定向到一个文件或者到 /dev/console。</font></div>
<div style="FONT-SIZE: 12pt"><font size=2></font>&nbsp;</div>
<div style="FONT-SIZE: 12pt"><font color=#0000ff size=2>下列命令是唯一支持在 /etc/inittab 文件中修改记录的方法：<br>mkitab： 把记录添加到 /etc/inittab 文件。<br>lsitab： 列出 /etc/inittab 文件中的记录。<br>chitab： 修改 /etc/inittab 文件中的记录。<br>rmitab： 从 /etc/inittab 文件中删除记录。</font></div>
<div style="FONT-SIZE: 12pt"><font size=2></font>&nbsp;</div>
<div style="FONT-SIZE: 12pt"><font size=2>例如，想在 /etc/inittab 文件中添加一条记录，以运行级别2（run level 2）运行 find 命令并使之一旦完成就再次启动。<br>1. 运行 ps 命令，只显示包含 find 的进程：<br># ps -ef | grep find<br>root 19750 13964 0 10:47:23 pts/0 0:00 grep find<br>#<br>2. 使用 mkitab 命令，在 /etc/inittab 文件中添加一个名为 xcmd 的记录：<br># mkitab "xcmd:2:respawn:find / -type f &gt; /dev/null 2&gt;&amp;1"<br>3. 使用 lsitab 命令显示新记录：<br># lsitab xcmd<br>xcmd:2:respawn:find / -type f &gt; /dev/null 2&gt;&amp;1<br>#<br>4. 查看进程：<br># ps -ef | grep find<br>root 25462 1 6 10:56:58 - 0:00 find / -type f<br>root 28002 13964 0 10:57:00 pts/0 0:00 grep find<br>#<br>5. 取消 find 命令进程：<br># kill 25462<br>6. 查看进程：<br># ps -ef | grep find<br>root 23538 13964 0 10:58:24 pts/0 0:00 grep find<br>root 28966 1 4 10:58:21 - 0:00 find / -type f<br>#</font></div>
<div style="FONT-SIZE: 12pt"><font size=2>本例中，由于 action 字段被配置 respawn，故而每一次该命令一完成，一个新进程就会启动。</font></div>
<div style="FONT-SIZE: 12pt"><font size=2>该进程将继续再生 （re-spawning），除非修改 action 字段，例如：<br>1. 把记录 xcmd 的 action 字段由 respawn 修改为 once：<br># chitab "xcmd:2:once:find / -type f &gt; /dev/null 2&gt;&amp;1"<br>2. 查看进程：<br># ps -ef | grep find<br>root 20378 13964 0 11:07:20 pts/0 0:00 grep find<br>root 28970 1 4 11:05:46 - 0:03 find / -type f<br>3. 取消 find 命令进程：<br># kill 28970<br>4. 查看进程：<br># ps -ef | grep find<br>root 28972 13964 0 11:07:33 pts/0 0:00 grep find<br>#</font></div>
<div style="FONT-SIZE: 12pt"><font size=2>要从 /etc/inittab 文件中删除该记录，可使用 rmitab 命令。例如：<br># rmitab xcmd<br># lsitab xcmd<br>#</font></div>
<div style="FONT-SIZE: 12pt"><font color=#0000ff size=2>/etc/inittab 条目的次序</font></div>
<div style="FONT-SIZE: 12pt"><font color=#0000ff size=2>/etc/inittab 文件中的基本进程条目次序安装如下：<br>1. initdefault<br>2. sysinit<br>3. Powerfailure Detection (powerfail)<br>4. Multiuser check (rc)<br>5. /etc/firstboot (fbcheck)<br>6. System Resource Controller (srcmstr)<br>7. Start TCP/IP daemons (rctcpip)<br>8. Start NFS daemons (rcnfs)<br>9. cron<br>10.pb cleanup (piobe)<br>11.getty for the console (cons)</font></div>
<div style="FONT-SIZE: 12pt"><font color=#0000ff size=2></font>&nbsp;</div>
<div style="FONT-SIZE: 12pt"><font size=2>系统资源控制器 (SRC)必须在 /etc/inittab 文件的开头附近就被启动，因为启动其他的进程需要SRC进程（Daemon）。<br>由于NFS需要TCP/IP进程（Daemon）才能正常运行，所以TCP/IP进程必须在NFS进程之前被启动。<br>/etc/inittab 文件中的条目按相互依赖性排序，就是说，如果一个进程（process2）需要另外一个进程（process1）存在才能正常运行，那么在 /etc/inittab文件中，process1的条目应该在process2的条目之前。</font></div>
</div><img src ="http://www.cppblog.com/cc/aggbug/61305.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/cc/" target="_blank">北风之神007</a> 2008-09-08 14:32 <a href="http://www.cppblog.com/cc/archive/2008/09/08/61305.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>crontab命令详解（转帖）</title><link>http://www.cppblog.com/cc/archive/2008/09/08/61304.html</link><dc:creator>北风之神007</dc:creator><author>北风之神007</author><pubDate>Mon, 08 Sep 2008 06:18:00 GMT</pubDate><guid>http://www.cppblog.com/cc/archive/2008/09/08/61304.html</guid><wfw:comment>http://www.cppblog.com/cc/comments/61304.html</wfw:comment><comments>http://www.cppblog.com/cc/archive/2008/09/08/61304.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/cc/comments/commentRss/61304.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/cc/services/trackbacks/61304.html</trackback:ping><description><![CDATA[crontab命令的功能是在一定的时间间隔调度一些命令的执行。在/etc目录下有一个crontab文件，这里存放有系统运行的一些调度程序。每个用户可以建立自己的调度crontab。 <br><br>crontab命令有三种形式的命令行结构： <br><br>crontab&nbsp;[-u&nbsp;user]&nbsp;[file] <br><br>crontab&nbsp;[-u&nbsp;user]&nbsp;[-e|-l|-r] <br><br>crontab&nbsp;-l&nbsp;-u&nbsp;[-e|-l|-r]&nbsp;第一个命令行中，file是命令文件的名字。如果在命令行中指定了这个文件，那么执行crontab命令，则将这个文件拷贝到crontabs目录下；如果在命令行中没有制定这个文件，crontab命令将接受标准输入（键盘）上键入的命令，并将他们也存放在crontab目录下。 <br><br>命令行中-r选项的作用是从/usr/spool/cron/crontabs目录下删除用户定义的文件crontab； <br><br>命令行中-l选项的作用是显示用户crontab文件的内容。 <br><br>使用命令crontab&nbsp;-u&nbsp;user&nbsp;-e命令编辑用户user的cron(c)作业。用户通过编辑文件来增加或修改任何作业请求。 <br><br>执行命令crontab&nbsp;-u&nbsp;user&nbsp;-r即可删除当前用户的所有的cron作业。 <br><br>作业与它们预定的时间储存在文件/usr/spool/cron/crontabs/username里。username使用户名，在相应的文件中存放着该用户所要运行的命令。命令执行的结果，无论是标准输出还是错误输出，都将以邮件形式发给用户。文件里的每一个请求必须包含以spaces和tabs分割的六个域。前五个字段可以取整数值，指定何时开始工作，第六个域是字符串，称为命令字段，其中包括了crontab调度执行的命令。 <br><br>第一道第五个字段的整数取值范围及意义是： <br><br>0～59&nbsp;表示分 <br><br>1～23&nbsp;表示小时 <br><br>1～31&nbsp;表示日 <br><br>1～12&nbsp;表示月份 <br><br>0～6&nbsp;表示星期（其中0表示星期日） <br><br>/usr/lib/cron/cron.allow表示谁能使用crontab命令。如果它是一个空文件表明没有一个用户能安排作业。如果这个文件不存在，而有另外一个文件/usr/lib/cron/cron.deny,则只有不包括在这个文件中的用户才可以使用crontab命令。如果它是一个空文件表明任何用户都可安排作业。两个文件同时存在时cron.allow优先，如果都不存在，只有超级用户可以安排作业。<br><img src ="http://www.cppblog.com/cc/aggbug/61304.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/cc/" target="_blank">北风之神007</a> 2008-09-08 14:18 <a href="http://www.cppblog.com/cc/archive/2008/09/08/61304.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>QT Designer中安装QWT插件</title><link>http://www.cppblog.com/cc/archive/2008/09/05/60987.html</link><dc:creator>北风之神007</dc:creator><author>北风之神007</author><pubDate>Fri, 05 Sep 2008 04:54:00 GMT</pubDate><guid>http://www.cppblog.com/cc/archive/2008/09/05/60987.html</guid><wfw:comment>http://www.cppblog.com/cc/comments/60987.html</wfw:comment><comments>http://www.cppblog.com/cc/archive/2008/09/05/60987.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/cc/comments/commentRss/60987.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/cc/services/trackbacks/60987.html</trackback:ping><description><![CDATA[<span style="FONT-SIZE: 14pt">&nbsp; QWT是一套非常不错的开发库，它能结合QT开发，做出非常好的<font style="FONT-SIZE: 14pt" size=2>曲线，刻度，表盘等效果来。<br><br>&nbsp; qwt的下载以及动态链接库的编译等这里就不做介绍了。在源码目录下可以找到designer目录，其中有插件的源码，编译完之后就会生成qwtplugin.dll和qwtplugin.lib，把他们拷贝到<font face=Arial>$(QTDIR)\plugins\designer目录下，重新启动QT Designer，就会看到ToolBox面板中多出了Qwt类，如下图所示。以上在QT3.3.4下测试通过，<a style="COLOR: red" href="http://www.cppblog.com/Files/cc/qwtplugin.rar"><u>qwtplugin.dll和qwtplugin.lib下载<br></u></a>
<div align=center src_cetemp="/images/cppblog_com/cc/2008_9/qwt.jpg"><img height=648 alt="" src="http://www.cppblog.com/images/cppblog_com/cc/2008_9/qwt.jpg" width=843 border=0></div>
</font></font></span><img src ="http://www.cppblog.com/cc/aggbug/60987.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/cc/" target="_blank">北风之神007</a> 2008-09-05 12:54 <a href="http://www.cppblog.com/cc/archive/2008/09/05/60987.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>C实现转动的短棒</title><link>http://www.cppblog.com/cc/archive/2008/08/29/60340.html</link><dc:creator>北风之神007</dc:creator><author>北风之神007</author><pubDate>Fri, 29 Aug 2008 03:18:00 GMT</pubDate><guid>http://www.cppblog.com/cc/archive/2008/08/29/60340.html</guid><wfw:comment>http://www.cppblog.com/cc/comments/60340.html</wfw:comment><comments>http://www.cppblog.com/cc/archive/2008/08/29/60340.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/cc/comments/commentRss/60340.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/cc/services/trackbacks/60340.html</trackback:ping><description><![CDATA[<p><font style="FONT-SIZE: 14pt; BACKGROUND-COLOR: #c7edcc">&nbsp;&nbsp;&nbsp;在UNIX环境下的文字界面工作时，如过程序在运行等待，可能就会看到转动的短棒，表示程序正在执行中，今天刚好看到资料，上面说了一下，我就按照意思写了一个，不知道别的是怎么实现的，反正下面的代码看似能工作了，不过正式使用可能还需要改进吧。<br><br></p>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><span style="COLOR: #000000">#include</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">stdio.h</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;main()<br><img id=Codehighlighter1_30_309_Open_Image onclick="this.style.display='none'; Codehighlighter1_30_309_Open_Text.style.display='none'; Codehighlighter1_30_309_Closed_Image.style.display='inline'; Codehighlighter1_30_309_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_30_309_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_30_309_Closed_Text.style.display='none'; Codehighlighter1_30_309_Open_Image.style.display='inline'; Codehighlighter1_30_309_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span id=Codehighlighter1_30_309_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_30_309_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;i</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">char</span><span style="COLOR: #000000">&nbsp;c;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">while</span><span style="COLOR: #000000">(</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">)<br><img id=Codehighlighter1_74_276_Open_Image onclick="this.style.display='none'; Codehighlighter1_74_276_Open_Text.style.display='none'; Codehighlighter1_74_276_Closed_Image.style.display='inline'; Codehighlighter1_74_276_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_74_276_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_74_276_Closed_Text.style.display='none'; Codehighlighter1_74_276_Open_Image.style.display='inline'; Codehighlighter1_74_276_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span id=Codehighlighter1_74_276_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_74_276_Open_Text><span style="COLOR: #000000">{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;i</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(i</span><span style="COLOR: #000000">%</span><span style="COLOR: #000000">4</span><span style="COLOR: #000000">==</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">)<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;c</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">else</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(i</span><span style="COLOR: #000000">%</span><span style="COLOR: #000000">4</span><span style="COLOR: #000000">==</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">)<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;c</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">\\</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">else</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(i</span><span style="COLOR: #000000">%</span><span style="COLOR: #000000">4</span><span style="COLOR: #000000">==</span><span style="COLOR: #000000">2</span><span style="COLOR: #000000">)<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;c</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">|</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">else</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(i</span><span style="COLOR: #000000">%</span><span style="COLOR: #000000">4</span><span style="COLOR: #000000">==</span><span style="COLOR: #000000">3</span><span style="COLOR: #000000">)<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;c</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">/</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;printf(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">%c\b</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,c);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;sleep(</span><span style="COLOR: #000000">300</span><span style="COLOR: #000000">);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;system(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">pause</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</span></span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span></div>
</font><br><br>以上代码在DEV-CPP 4.9.9.2中测试通过<br><img src ="http://www.cppblog.com/cc/aggbug/60340.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/cc/" target="_blank">北风之神007</a> 2008-08-29 11:18 <a href="http://www.cppblog.com/cc/archive/2008/08/29/60340.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>C语言获取目录中文件名</title><link>http://www.cppblog.com/cc/archive/2008/08/28/60292.html</link><dc:creator>北风之神007</dc:creator><author>北风之神007</author><pubDate>Thu, 28 Aug 2008 10:10:00 GMT</pubDate><guid>http://www.cppblog.com/cc/archive/2008/08/28/60292.html</guid><wfw:comment>http://www.cppblog.com/cc/comments/60292.html</wfw:comment><comments>http://www.cppblog.com/cc/archive/2008/08/28/60292.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.cppblog.com/cc/comments/commentRss/60292.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/cc/services/trackbacks/60292.html</trackback:ping><description><![CDATA[<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><span style="COLOR: #000000">#include&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">stdio.h</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000">&nbsp;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>#include&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">dirent.h</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000">&nbsp;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>#include&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #0000ff">string</span><span style="COLOR: #000000">.h</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000">&nbsp;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;typedef&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">struct</span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;FileList&nbsp;<br><img id=Codehighlighter1_103_176_Open_Image onclick="this.style.display='none'; Codehighlighter1_103_176_Open_Text.style.display='none'; Codehighlighter1_103_176_Closed_Image.style.display='inline'; Codehighlighter1_103_176_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_103_176_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_103_176_Closed_Text.style.display='none'; Codehighlighter1_103_176_Open_Image.style.display='inline'; Codehighlighter1_103_176_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span id=Codehighlighter1_103_176_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_103_176_Open_Text><span style="COLOR: #000000">{&nbsp;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">char</span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;filename[</span><span style="COLOR: #000000">64</span><span style="COLOR: #000000">];&nbsp;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">struct</span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;FileList&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">next;&nbsp;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000">FILENODE;&nbsp;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br><img id=Codehighlighter1_218_224_Open_Image onclick="this.style.display='none'; Codehighlighter1_218_224_Open_Text.style.display='none'; Codehighlighter1_218_224_Closed_Image.style.display='inline'; Codehighlighter1_218_224_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_218_224_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_218_224_Closed_Text.style.display='none'; Codehighlighter1_218_224_Open_Image.style.display='inline'; Codehighlighter1_218_224_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top>FILENODE</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">&nbsp;&nbsp;getFiles(</span><span style="COLOR: #0000ff">char</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">dir</span><span id=Codehighlighter1_218_224_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">/**/</span><span id=Codehighlighter1_218_224_Open_Text><span style="COLOR: #008000">/*</span><span style="COLOR: #008000">文目录</span><span style="COLOR: #008000">*/</span></span><span style="COLOR: #000000">)<br><img id=Codehighlighter1_227_838_Open_Image onclick="this.style.display='none'; Codehighlighter1_227_838_Open_Text.style.display='none'; Codehighlighter1_227_838_Closed_Image.style.display='inline'; Codehighlighter1_227_838_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_227_838_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_227_838_Closed_Text.style.display='none'; Codehighlighter1_227_838_Open_Image.style.display='inline'; Codehighlighter1_227_838_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span id=Codehighlighter1_227_838_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_227_838_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;DIR&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">directory_pointer;&nbsp;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">struct</span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;dirent&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">entry;&nbsp;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;directory_pointer</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">opendir(dir);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">struct</span><span style="COLOR: #000000">&nbsp;FileList&nbsp;start;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">struct</span><span style="COLOR: #000000">&nbsp;FileList&nbsp;</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">filesNode;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;start.next</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">NULL;&nbsp;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;filesNode</span><span style="COLOR: #000000">=&amp;</span><span style="COLOR: #000000">start;&nbsp;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">while</span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;((entry</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">readdir(directory_pointer))</span><span style="COLOR: #000000">!=</span><span style="COLOR: #000000">NULL)&nbsp;<br><img id=Codehighlighter1_498_732_Open_Image onclick="this.style.display='none'; Codehighlighter1_498_732_Open_Text.style.display='none'; Codehighlighter1_498_732_Closed_Image.style.display='inline'; Codehighlighter1_498_732_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_498_732_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_498_732_Closed_Text.style.display='none'; Codehighlighter1_498_732_Open_Image.style.display='inline'; Codehighlighter1_498_732_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id=Codehighlighter1_498_732_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_498_732_Open_Text><span style="COLOR: #000000">{&nbsp;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;filesNode</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #000000">&nbsp;next</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">(</span><span style="COLOR: #0000ff">struct</span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;FileList&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">)malloc(</span><span style="COLOR: #0000ff">sizeof</span><span style="COLOR: #000000">(</span><span style="COLOR: #0000ff">struct</span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;FileList));&nbsp;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;filesNode</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">filesNode</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #000000">&nbsp;next;&nbsp;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;strcpy(filesNode</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #000000">&nbsp;filename,entry</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #000000">&nbsp;d_name);&nbsp;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;filesNode</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #000000">&nbsp;next</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">NULL;&nbsp;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000">&nbsp;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;closedir(directory_pointer);&nbsp;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;filesNode</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">start.next;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;filesNode;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</span></span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;main()&nbsp;<br><img id=Codehighlighter1_855_1186_Open_Image onclick="this.style.display='none'; Codehighlighter1_855_1186_Open_Text.style.display='none'; Codehighlighter1_855_1186_Closed_Image.style.display='inline'; Codehighlighter1_855_1186_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_855_1186_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_855_1186_Closed_Text.style.display='none'; Codehighlighter1_855_1186_Open_Image.style.display='inline'; Codehighlighter1_855_1186_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span id=Codehighlighter1_855_1186_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_855_1186_Open_Text><span style="COLOR: #000000">{&nbsp;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">struct</span><span style="COLOR: #000000">&nbsp;FileList&nbsp;</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">filesNode;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">char</span><span style="COLOR: #000000">&nbsp;dir[</span><span style="COLOR: #000000">100</span><span style="COLOR: #000000">]</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">D:\\down</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">;&nbsp;&nbsp;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;filesNode</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">getFiles(dir);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(filesNode</span><span style="COLOR: #000000">==</span><span style="COLOR: #000000">NULL)<br><img id=Codehighlighter1_991_1031_Open_Image onclick="this.style.display='none'; Codehighlighter1_991_1031_Open_Text.style.display='none'; Codehighlighter1_991_1031_Closed_Image.style.display='inline'; Codehighlighter1_991_1031_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_991_1031_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_991_1031_Closed_Text.style.display='none'; Codehighlighter1_991_1031_Open_Image.style.display='inline'; Codehighlighter1_991_1031_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span id=Codehighlighter1_991_1031_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_991_1031_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;printf(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">没有成功</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">while</span><span style="COLOR: #000000">(filesNode)&nbsp;<br><img id=Codehighlighter1_1059_1144_Open_Image onclick="this.style.display='none'; Codehighlighter1_1059_1144_Open_Text.style.display='none'; Codehighlighter1_1059_1144_Closed_Image.style.display='inline'; Codehighlighter1_1059_1144_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_1059_1144_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_1059_1144_Closed_Text.style.display='none'; Codehighlighter1_1059_1144_Open_Image.style.display='inline'; Codehighlighter1_1059_1144_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span id=Codehighlighter1_1059_1144_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_1059_1144_Open_Text><span style="COLOR: #000000">{&nbsp;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;printf(&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">%s\n&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,filesNode</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #000000">&nbsp;filename);&nbsp;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;filesNode</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">filesNode</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #000000">&nbsp;next;&nbsp;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000">&nbsp;&nbsp;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;system(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">pause</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</span></span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span></div><img src ="http://www.cppblog.com/cc/aggbug/60292.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/cc/" target="_blank">北风之神007</a> 2008-08-28 18:10 <a href="http://www.cppblog.com/cc/archive/2008/08/28/60292.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Broadcom NetXtrem II网卡Linux安装指南（转载）</title><link>http://www.cppblog.com/cc/archive/2008/05/29/51494.html</link><dc:creator>北风之神007</dc:creator><author>北风之神007</author><pubDate>Thu, 29 May 2008 09:01:00 GMT</pubDate><guid>http://www.cppblog.com/cc/archive/2008/05/29/51494.html</guid><wfw:comment>http://www.cppblog.com/cc/comments/51494.html</wfw:comment><comments>http://www.cppblog.com/cc/archive/2008/05/29/51494.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/cc/comments/commentRss/51494.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/cc/services/trackbacks/51494.html</trackback:ping><description><![CDATA[<div class=postText>
<p align=center><strong><font face=宋体 color=#000080 size=4>Broadcom NetXtrem II网卡Linux安装指南<br></font></strong></p>
<p>&nbsp;
<table cellSpacing=0 cellPadding=0 width="100%" border=0>
    <tbody>
        <tr vAlign=top>
            <td width="100%" bgColor=#ffffff colSpan=2><strong><font face=宋体></font></strong><strong><font face=宋体>适用机型:</font></strong></td>
        </tr>
        <tr vAlign=top>
            <td width="100%" colSpan=2><strong><font face=宋体 color=#000080>所有BladeCenter HS21; 所有BladeCenter LS21; 所有BladeCenter LS41; 所有System x3550; 所有System x3650; 所有System x3655; 所有System x3755</font></strong></td>
        </tr>
    </tbody>
</table>
<br>
<table cellSpacing=0 cellPadding=0 width="100%" border=0>
    <tbody>
        <tr vAlign=top>
            <td width="100%" bgColor=#ffffff colSpan=2><strong><font face=宋体>文档内容：</font></strong></td>
        </tr>
    </tbody>
</table>
<br><font face=宋体>Broadcom NetXtreme II GbE网卡驱动有两种格式：source RPM 和tar格式。文件名分别为bnx2-&lt;version&gt;.src.rpm 和 bnx2-&lt;version&gt;.tar.gz</font><br><font face=宋体>下载地址：http://www-1.ibm.com/support/docview.wss?uid=psg1MIGR-64538</font><br><br><strong><font face=宋体>Source RPM 驱动包的安装步骤</font></strong><br><font face=宋体>=============================</font><br><font face=宋体>1. 安装source RPM包：</font><br><font face=宋体>rpm -ivh bnx2-&lt;version&gt;.src.rpm</font><br><br><font face=宋体>2. 进入/usr/src路径并编译</font><br><font face=宋体>cd /usr/src/{redhat,OpenLinux,turbo,packages,rpm ..}</font><br><font face=宋体>rpm -bb SPECS/bnx2.spec</font><br><font face=宋体>或者</font><br><font face=宋体>rpmbuild -bb SPECS/bnx2.spec (针对RPM version 4.x.x)</font><br><font face=宋体>注意：不同内核的linux版本，其rpm路径不同</font><br><br><font face=宋体>3. 安装刚刚编译好的包</font><br><font face=宋体>rpm -ivh RPMS/i386/bnx2-&lt;version&gt;.i386.rpm</font><br><font face=宋体>驱动被安装到如下路径</font><br><br><font face=宋体>对于2.4.x kernels:</font><br><font face=宋体>/lib/modules/&lt;kernel_version&gt;/kernel/drivers/net/bnx2.o</font><br><font face=宋体>对于2.6.0 kernels:</font><br><font face=宋体>/lib/modules/&lt;kernel_version&gt;/kernel/drivers/net/bnx2.ko</font><br><br><font face=宋体>4. 加载驱动:</font><br><font face=宋体>insmod bnx2.o</font><br><font face=宋体>或</font><br><font face=宋体>insmod bnx2.ko (在 2.6.x kernels)</font><br><font face=宋体>或</font><br><font face=宋体>modprobe bnx2</font><br><font face=宋体>5. 配置网卡地址、网关等等</font><br><br><strong><font face=宋体>TAR驱动包的安装步骤</font></strong><br><font face=宋体>=============================</font><br><font face=宋体>1. 创建一个目录并将文件解包</font><br><font face=宋体>tar xvzf bnx2-&lt;version&gt;.tar.gz</font><br><br><font face=宋体>2. 编译驱动bnx2.o (或bnx2.ko)，生成可加载的模块</font><br><font face=宋体>cd src</font><br><font face=宋体>make</font><br><br><font face=宋体>3. 通过加载模块对其进行测试</font><br><font face=宋体>insmod bnx2.o</font><br><font face=宋体>或</font><br><font face=宋体>insmod bnx2.ko (在2.6.x kernels)</font><br><font face=宋体>或</font><br><font face=宋体>insmod bnx2</font><br><br><font face=宋体>4. 安装驱动</font><br><font face=宋体>make install</font><br><font face=宋体>驱动被安装的位置与RPM方式安装的位置一样</font><br><br><font face=宋体>5. 配置网卡地址、网关等等</font> </p>
</div><img src ="http://www.cppblog.com/cc/aggbug/51494.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/cc/" target="_blank">北风之神007</a> 2008-05-29 17:01 <a href="http://www.cppblog.com/cc/archive/2008/05/29/51494.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>