<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss'><id>tag:blogger.com,1999:blog-2723439789450598995</id><updated>2009-02-20T23:08:14.972-08:00</updated><title type='text'>ice world</title><subtitle type='html'>谢帆的解决方案记录</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://xiefan198877.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2723439789450598995/posts/default'/><link rel='alternate' type='text/html' href='http://xiefan198877.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>neo</name><uri>http://www.blogger.com/profile/13869860806218701712</uri><email>noreply@blogger.com</email></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>17</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-2723439789450598995.post-5925905753644028173</id><published>2008-10-19T02:05:00.000-07:00</published><updated>2008-10-19T02:07:39.762-07:00</updated><title type='text'>operation of gnuplot (from http://www.ibm.com/developerworks/cn/)</title><content type='html'>&lt;table width="100%" border="0" cellpadding="0" cellspacing="0"&gt;&lt;tbody&gt;&lt;tr valign="top"&gt;&lt;td width="100%"&gt;&lt;h1&gt;gnuplot 让您的数据可视化&lt;/h1&gt;&lt;p id="subtitle"&gt;&lt;em&gt;自由控制高级图表和数据绘图&lt;/em&gt;&lt;/p&gt;&lt;img alt="" src="http://www.ibm.com/i/c.gif" class="display-img" width="1" height="6" /&gt;&lt;/td&gt;&lt;td class="no-print" width="192"&gt;&lt;img alt="developerWorks" src="http://www.ibm.com/developerworks/i/dw.gif" width="192" height="18" /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;table width="100%" border="0" cellpadding="0" cellspacing="0"&gt;&lt;tbody&gt;&lt;tr valign="top"&gt;&lt;td width="10"&gt;&lt;img alt="" src="http://www.ibm.com/i/c.gif" width="10" height="1" /&gt;&lt;/td&gt;&lt;td width="100%"&gt;&lt;table class="no-print" width="160" align="right" border="0" cellpadding="0" cellspacing="0"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td width="10"&gt;&lt;img alt="" src="http://www.ibm.com/i/c.gif" width="10" height="1" /&gt;&lt;/td&gt;&lt;td&gt;&lt;table width="150" border="0" cellpadding="0" cellspacing="0"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class="v14-header-1-small"&gt;文档选项&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;table class="v14-gray-table-border" border="0" cellpadding="0" cellspacing="0"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class="no-padding" width="150"&gt;&lt;noscript&gt;&lt;/noscript&gt;&lt;noscript&gt;&lt;tr valign="top"&gt;&lt;td width="8"&gt;&lt;img alt="" height="1" width="8" src="//www.ibm.com/i/c.gif" /&gt;&lt;/td&gt;&lt;td width="16"&gt;&lt;img alt="" width="16" height="16" src="//www.ibm.com/i/c.gif" /&gt;&lt;/td&gt;&lt;td class="small" width="122"&gt;&lt;p&gt;&lt;span class="ast"&gt;未显示需要 JavaScript 的文档选项&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/noscript&gt;&lt;table width="143" border="0" cellpadding="0" cellspacing="0"&gt;&lt;script language="JavaScript" type="text/javascript"&gt; &lt;!-- document.write('&lt;tr valign="top"&gt;&lt;td width="8"&gt;&lt;img src="//www.ibm.com/i/c.gif" width="8" height="1" alt="" /&gt;&lt;/td&gt;&lt;td width="16"&gt;&lt;img alt="将打印机的版面设置成横向打印模式" height="16" src="//www.ibm.com/i/v14/icons/printer.gif" width="16" vspace="3" /&gt;&lt;/td&gt;&lt;td width="122"&gt;&lt;p&gt;&lt;b&gt;&lt;a class="smallplainlink" href="javascript:print()"&gt;打印本页&lt;/a&gt;&lt;/b&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;'); //--&gt; &lt;/script&gt;&lt;tbody&gt;&lt;tr valign="top"&gt;&lt;td width="8"&gt;&lt;img src="http://www.ibm.com/i/c.gif" alt="" width="8" height="1" /&gt;&lt;/td&gt;&lt;td width="16"&gt;&lt;img alt="将打印机的版面设置成横向打印模式" src="http://www.ibm.com/i/v14/icons/printer.gif" vspace="3" width="16" height="16" /&gt;&lt;/td&gt;&lt;td width="122"&gt;&lt;p&gt;&lt;b&gt;&lt;a class="smallplainlink" href="javascript:print()"&gt;打印本页&lt;/a&gt;&lt;/b&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt; &lt;form action="https://www.ibm.com/developerworks/secure/email-it.jsp" name="email"&gt;&lt;/form&gt;&lt;input value="使用 Gnuplot 4.0 将数据和函数转换为专业的图表，Gnuplot 4.0 是一种免费分发的绘图工具。本文是 gnuplot 的实践指南，着重讲述了有效使用此工具的一些惯例。" name="body" type="hidden"&gt;&lt;input value="gnuplot 让您的数据可视化" name="subject" type="hidden"&gt;&lt;input value="cn" name="lang" type="hidden"&gt;&lt;script language="JavaScript" type="text/javascript"&gt; &lt;!-- document.write('&lt;tr valign="top"&gt;&lt;td width="8"&gt;&lt;img src="//www.ibm.com/i/c.gif" width="8" height="1" alt="" /&gt;&lt;/td&gt;&lt;td width="16"&gt;&lt;img src="//www.ibm.com/i/v14/icons/em.gif" height="16" width="16" vspace="3" alt="将此页作为电子邮件发送" /&gt;&lt;/td&gt;&lt;td width="122"&gt;&lt;p&gt;&lt;a class="smallplainlink" href="javascript:document.email.submit();"&gt;&lt;b&gt;将此页作为电子邮件发送&lt;/b&gt;&lt;/a&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;'); //--&gt; &lt;/script&gt;&lt;tr valign="top"&gt;&lt;td width="8"&gt;&lt;img src="http://www.ibm.com/i/c.gif" alt="" width="8" height="1" /&gt;&lt;/td&gt;&lt;td width="16"&gt;&lt;img src="http://www.ibm.com/i/v14/icons/em.gif" alt="将此页作为电子邮件发送" vspace="3" width="16" height="16" /&gt;&lt;/td&gt;&lt;td width="122"&gt;&lt;p&gt;&lt;a class="smallplainlink" href="javascript:document.email.submit();"&gt;&lt;b&gt;将此页作为电子邮件发送&lt;/b&gt;&lt;/a&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr valign="top"&gt;&lt;td width="8"&gt;&lt;img alt="" src="http://www.ibm.com/i/c.gif" width="8" height="1" /&gt;&lt;/td&gt;&lt;td width="16"&gt;&lt;img alt="" src="http://www.ibm.com/i/v14/icons/dn.gif" vspace="3" width="16" border="0" height="16" /&gt;&lt;/td&gt;&lt;td width="122"&gt;&lt;p&gt;&lt;a href="http://www.ibm.com/developerworks/cn/linux/l-gnuplot/index.html#download" class="smallplainlink"&gt;&lt;b&gt;样例代码&lt;/b&gt;&lt;/a&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;!--START RESERVED FOR FUTURE USE INCLUDE FILES--&gt;&lt;!-- this content will be automatically generated across all content areas --&gt;&lt;!--END RESERVED FOR FUTURE USE INCLUDE FILES--&gt;&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p&gt;级别： 初级&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.ibm.com/developerworks/cn/linux/l-gnuplot/index.html#author"&gt;Nishanth Sastry&lt;/a&gt; (&lt;a href="mailto:nishanth_sastry@us.ibm.com?subject=gnuplot%20%E8%AE%A9%E6%82%A8%E7%9A%84%E6%95%B0%E6%8D%AE%E5%8F%AF%E8%A7%86%E5%8C%96&amp;amp;cc=tomyoung@us.ibm.com"&gt;nishanth_sastry@us.ibm.com&lt;/a&gt;), 专职软件工程师, IBM&lt;br /&gt;&lt;/p&gt;&lt;p&gt;2004 年  8 月  01 日&lt;/p&gt;&lt;blockquote&gt;使用 Gnuplot 4.0 将数据和函数转换为专业的图表，Gnuplot 4.0 是一种免费分发的绘图工具。本文是 gnuplot 的实践指南，着重讲述了有效使用此工具的一些惯例。&lt;/blockquote&gt;&lt;!--START RESERVED FOR FUTURE USE INCLUDE FILES--&gt;&lt;!-- include java script once we verify teams wants to use this and it will work on dbcs and cyrillic characters --&gt;  &lt;!--END RESERVED FOR FUTURE USE INCLUDE FILES--&gt;       &lt;p&gt; Gnuplot 是一种免费分发的绘图工具，可以移植到各种主流平台。它可以下列两种模式之一进行操作：当需要调整和修饰图表使其正常显示时，通过在 gnuplot 提示符中发出命令，可以在交互模式下操作该工具。或者，gnuplot 可以从文件中读取命令，以批处理模式生成图表。例如，如果您正在运行一系列的实验，需要每次运行后都查看结果图表；或者当您在图表最初生成很久以后需要返 回图表修改某些内容时，批处理模式能力会特别有用。当在 WYSIWIG 编辑器中很难捕获用于修饰图表的鼠标单击事件时，您可以很容易地将 gnuplot 命令保存在文件中，六个月后将其加载到交互式会话中重新执行。 &lt;/p&gt;       &lt;p&gt;Gnuplot 是在 1986 年由 Colin Kelley 和 Thomas Williams 最初开发的。许多参与者都在为不同的“终端”创建变种方面做出了贡献。在 1989 和 1990 年，这些变种被合并到 gnuplot 2.0 中。2004 年 4 月，发布了 4.0 版本。本教程将适用于 4.0 版本，但是这里介绍的大多数命令应该也适用于其他版本。在适当的地方，我将提及其中的主要区别。 &lt;a href="http://www.ibm.com/developerworks/cn/linux/l-gnuplot/index.html#Resources"&gt;参考资料&lt;/a&gt;中列出了 gnuplot 的官方 Web 站点。       &lt;/p&gt;       &lt;p&gt; 下面，我们为初学者提供了实践指南；但是即使您以前有一些 gnuplot 的经验，您也可能会在 4.0 版本中发现新的惯例和命令。我们从简单的正弦曲线开始，将其定制为我们所希望看到的形状。然后我们将研究如何绘制一组数据点。在本文中，我们仅限于 2D 绘图，因为它们是最常见的。 &lt;/p&gt;       &lt;table width="65%" align="center" border="0" cellpadding="0" cellspacing="0"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td width="10"&gt;&lt;img alt="" src="http://www.ibm.com/i/c.gif" width="10" height="1" /&gt;&lt;/td&gt;&lt;td&gt;&lt;table width="100%" border="1" cellpadding="5" cellspacing="0"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td bgcolor="#eeeeee"&gt;         &lt;a name="N10058"&gt;&lt;b&gt;GNG：Gnuplot 不是 GNU&lt;/b&gt;&lt;/a&gt;&lt;br /&gt;        &lt;p&gt;虽 然它的名称可能意味着其他方面，但 GPL 不包含 gnuplot。对于法律方面，gnuplot FAQ #1.7 指出：“从您不必为其付钱方面来讲，Gnuplot 是免费软件。不过从您不能免费分发 gnuplot 的修改版本方面来讲，它又不是免费软件。请阅读和接受发行版中的版权文件。”&lt;/p&gt;       &lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;       &lt;p&gt; 初学用户时常能够很好地想出他们的图表形状，但是不知道需要使用什么 gnuplot 命令。所以了解 gnuplot 的关键是很好地掌握它的词汇表，其余应该凭足够的直觉。在本教程中，我仅能对您将在 gnuplot 中充分使用的通用选项提供一个了解；本教程并不是毫无遗漏的。所以，例如，我告诉您如何设置 x 范围来限制图表中 x 轴的范围。设置 y 范围与 x 范围相似（在命令中使用 &lt;code&gt;yrange&lt;/code&gt;，而不是          &lt;code&gt;xrange&lt;/code&gt; ），但我将不再讨论。       &lt;/p&gt;       &lt;p&gt;&lt;a name="N1006D"&gt;&lt;span class="atitle"&gt;基础&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;       &lt;p&gt; 通过在 shell 命令提示符中输入          &lt;code&gt;gnuplot&lt;/code&gt; 启动 gnuplot。您首先看到提示符号          &lt;code&gt;&gt;&lt;/code&gt; 。该提示符是进入 gnuplot 的输入点；Linux 用户将习惯于这种方式。例如，您可以使用方向键来查找以前输入的命令历史记录，然后编辑和重新执行这些命令；Home 和 End 键与平时使用没有区别。可以对 gnuplot 进行重新编译以便使用 GNU readline 库在输入提示符上来回移动，但类似于默认函数。 &lt;/p&gt;       &lt;p&gt; Gnuplot 提供了广泛的在线帮助，如果您要做任何有用的事情，则肯定会用到这些在线帮助。语法是统一的：通过输入          &lt;code&gt;help &lt;command&gt;&lt;/code&gt; 可以获得任何命令的帮助。接着启动 gnuplot，尝试命令          &lt;code&gt;help set yrange&lt;/code&gt; 和          &lt;code&gt;help set&lt;/code&gt;（在每个命令之后，使用          &lt;code&gt;q&lt;/code&gt; 退出帮助）。注意          &lt;code&gt;yrange&lt;/code&gt; 是          &lt;code&gt;help set&lt;/code&gt; 下的可用子选项之一。一般来说，gnuplot 帮助为命令的所有可能定制提供进一步的帮助。浏览帮助中的示例部分通常就足可以了解如何使用命令。       &lt;/p&gt;       &lt;p&gt; Gnuplot 还有大量展示其能力的演示，通常位于安装的演示子目录中。为了获得这些能力，在 gnuplot 提示符下进入此目录中（例如，          &lt;code&gt;cd '/opt/gnuplot/demo'&lt;/code&gt; — 注意 gnuplot 要求所有文件名和目录名都用单引号或双引号括起来），然后输入          &lt;code&gt;load 'all.dem'&lt;/code&gt; 。该目录中的各个 .dem 文件演示了各个函数，all.dem 将它们一次全部加载。但您可能想将此操作延迟到本文结束时进行，这样我们可以开始使用 gnuplot ，无需再进行其他操作...       &lt;/p&gt;       &lt;p&gt; 对于那些想要继续的人，可以在提示符中分别输入代码清单中的每行代码。或者，将整个清单保存到一个临时文件中，然后通过在 gnuplot 提示中输入          &lt;code&gt;load 'filename'&lt;/code&gt; （不要忘记引号）来运行代码。       &lt;/p&gt;       &lt;p&gt; 可以预见的是，2D 绘图的命令是          &lt;code&gt;plot&lt;/code&gt; 。在提示符中输入          &lt;code&gt;plot sin(x)&lt;/code&gt; ：您应该在弹出窗口中看到熟悉的正弦曲线。       &lt;/p&gt;               &lt;br /&gt;&lt;a name="N100B8"&gt;&lt;b&gt; 图 1. sin(x) &lt;/b&gt;&lt;/a&gt;&lt;br /&gt;        &lt;img alt="图 1. sin(x)" src="http://www.ibm.com/developerworks/cn/linux/l-gnuplot/figure1.jpg" width="600" height="339" /&gt;      &lt;br /&gt;      &lt;p&gt; 我们刚刚创建了可能是最简单的图。让我们看看如何以不同方法定制该图。假设我们只想看到一个正弦曲线周期。我们通过限制图的默认 x 范围来完成此操作。使用表示法 [min:max] 来指定范围。要仅指定最小值，使用 [min:]；要仅指定最大值，使用 [:max]。数学上称此为所谓的“闭”区间表示法。 &lt;/p&gt;       &lt;p&gt; 这里我们使用 [-pi:pi] 得到一个正弦曲线周期： &lt;/p&gt;      &lt;br /&gt;&lt;a name="N100CB"&gt;&lt;b&gt;清单 1. 从 -pi 到 +pi 的 sin(x)&lt;/b&gt;&lt;/a&gt;&lt;br /&gt;       &lt;table width="100%" border="0" cellpadding="0" cellspacing="0"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class="code-outline"&gt;&lt;pre class="displaycode"&gt;set xrange [-pi:pi]&lt;br /&gt;replot&lt;br /&gt;reset&lt;br /&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;               &lt;br /&gt;&lt;a name="N100D7"&gt;&lt;b&gt;图 2. 重绘正弦曲线图&lt;/b&gt;&lt;/a&gt;&lt;br /&gt;        &lt;img alt="图 2. 重绘正弦曲线图" src="http://www.ibm.com/developerworks/cn/linux/l-gnuplot/figure2.jpg" width="600" height="383" /&gt;      &lt;br /&gt;      &lt;p&gt; 我们刚才使用了          &lt;code&gt;replot&lt;/code&gt; 命令，它执行先前的 plot 命令。当您绘制曲线图且需要不断对该图进行修改以添加想要的特征时，此命令会非常有用。另外，replot 使您可以添加更多的图。尝试输入          &lt;code&gt;replot cos(x)&lt;/code&gt;。依照语法，该命令等同于          &lt;code&gt;plot sin(x), cos(x)&lt;/code&gt; 。Replot 就是获取先前的绘图字符串，添加必要的逗号，然后附加输入给它的其余部分。       &lt;/p&gt;       &lt;p&gt; 使用的最后一个命令          &lt;code&gt;reset&lt;/code&gt; 对于绘制正弦曲线不是必要的。它移除先前所有          &lt;code&gt;set&lt;/code&gt; 命令的效果并恢复默认值。因此，在本例中，它将使用默认 x 范围。       &lt;/p&gt;       &lt;p&gt; 现在让我们尝试一些更奇特的东西：          &lt;code&gt;plot sin(x)/x&lt;/code&gt; 。您应该看到如下所示图形：       &lt;/p&gt;               &lt;br /&gt;&lt;a name="N10107"&gt;&lt;b&gt;图 3. sin(x)/x &lt;/b&gt;&lt;/a&gt;&lt;br /&gt;        &lt;img alt="图 3. sin(x)/x" src="http://www.ibm.com/developerworks/cn/linux/l-gnuplot/figure3.jpg" width="600" height="394" /&gt;      &lt;br /&gt;      &lt;p&gt;从 刚才这三个简单的例子，您可以看到 gnuplot 能够理解 pi 并具有丰富的自带数学函数词汇表。它甚至知道非常有用的管理正态分布的统计函数，以及深奥的特殊函数，如朗伯、贝塞尔、beta 和 gamma 函数（还有更多！），这些函数通常仅在 mathematica 等功能齐全的数学工具中才会有。根据经验，语法与 C 中的语法相似，C 中的语法又与平常数学中使用的语法相似。（一个重要的不同是指数的表示法：为了方便，x 的 y 次幂写为 &lt;code&gt;x**y&lt;/code&gt; ）。       &lt;/p&gt;       &lt;p&gt; 接着，将图命名为（“My First Graph”），并命名轴（x 轴是“angle, in degrees”，y 轴是“sin(angle)”）。 &lt;/p&gt;      &lt;br /&gt;&lt;a name="N1011E"&gt;&lt;b&gt;清单 2. 命名图和轴&lt;/b&gt;&lt;/a&gt;&lt;br /&gt;       &lt;table width="100%" border="0" cellpadding="0" cellspacing="0"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class="code-outline"&gt;&lt;pre class="displaycode"&gt;set title "My first graph"&lt;br /&gt;set xlabel "Angle, \n in degrees"&lt;br /&gt;set ylabel "sin(angle)"&lt;br /&gt;plot sin(x)&lt;br /&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;       &lt;p&gt; 注意 xlabel 中的          &lt;code&gt;\n&lt;/code&gt; 会产生新的一行。一般来说，gnuplot 在双引号内的字符串中进行类似于 C 的反斜杠处理。Windows 用户注意：如果您想文件名使用双引号括起来的字符串表示，则必须使用两个反斜杠：如          &lt;code&gt;"c:\\developerworks"&lt;/code&gt; （或者可以使用一个正斜杠：          &lt;code&gt;"c:/developerworks"&lt;/code&gt; ）。       &lt;/p&gt;       &lt;p&gt; 现在，我们注意到 x 轴实际没有标记为度数，看起来不是很好。要修改此问题，通过调整 x 轴上的 tic 标记，使指定的（主）标记仅以 90 度增加和辅标记以 45 度增加。主 tics 的“级别”为 0，这是默认值；辅 tics 的级别为 1。每个点分别由一个 3 元组指定： &lt;code&gt;"label"&lt;/code&gt; （放在引号中）、          &lt;code&gt;&lt;point-at-which-tic-is-made&gt;&lt;/code&gt; 和          &lt;code&gt;&lt;optional-level&gt;&lt;/code&gt;。       &lt;/p&gt;      &lt;br /&gt;&lt;a name="N10146"&gt;&lt;b&gt;清单 3. 改变轴上 tic 并设置网格&lt;/b&gt;&lt;/a&gt;&lt;br /&gt;       &lt;table width="100%" border="0" cellpadding="0" cellspacing="0"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class="code-outline"&gt;&lt;pre class="displaycode"&gt;set xrange [-pi:pi]                       # we want only one cycle&lt;br /&gt;set xtics ("0" 0, \&lt;br /&gt;         "90" pi/2, "-90" -pi/2, \&lt;br /&gt;   "" pi/4 1, "" -pi/4 1,  \&lt;br /&gt;   "" 3*pi/4 1, "" -3*pi/4 1)&lt;br /&gt;set grid&lt;br /&gt;set xlabel "Angle,\n in degrees"&lt;br /&gt;set ylabel "sin(angle)"&lt;br /&gt;plot sin(x)&lt;br /&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;               &lt;br /&gt;&lt;a name="N10152"&gt;&lt;b&gt;图 4. 带有 tics、标题、网格和标签的轴的 sin(x)&lt;/b&gt;&lt;/a&gt;&lt;br /&gt;        &lt;img alt="图 4. 带有 tics、标题、网格和标签的轴的 sin(x)" src="http://www.ibm.com/developerworks/cn/linux/l-gnuplot/figure5.jpg" width="600" height="394" /&gt;      &lt;br /&gt;      &lt;p&gt; 注意对 +45 度和 -45 度辅标记使用了空标签 ("")。还要注意我们不必以任何顺序列出点。像 gnuplot 中的其他所有项一样，          &lt;code&gt;xtics&lt;/code&gt; 命令功能非常多，具有方便的选项，用于以固定增量创建 tic 标记（在对数标度中为正常倍数），以及用于时间相关数据的特殊格式。查看          &lt;code&gt;help set xtics&lt;/code&gt; 中的例子可以获得更多信息。       &lt;/p&gt;       &lt;p&gt; 作为边注，注意我们使用反斜杠将 xtics 命令扩展成多个输入行。这样可以使比较长或比较复杂的命令更易读懂。 &lt;/p&gt;       &lt;p&gt; 我们还用          &lt;code&gt;set grid&lt;/code&gt; 来设置网格，该命令使您可以从数量上查看图。到现在为止，我们大量地使用了          &lt;code&gt;set&lt;/code&gt; 命令。Gnuplot 有一种撤销设置的统一方法：在 gnuplot 4.0 中，命令是          &lt;code&gt;unset&lt;/code&gt;。例如，如果您不想要网格，使用          &lt;code&gt;unset grid&lt;/code&gt; 。4.0 以前的版本，命令是          &lt;code&gt;set nogrid&lt;/code&gt; 。       &lt;/p&gt;       &lt;p&gt; 顺便说一下，我们提供的所有例子都可以在交互模式或批处理模式下运行。要以交互模式运行，在提示符中输入每个命令。要以批处理模式运行，将命令输入或添加到文本文件中，然后在 gnuplot 提示符中使用          &lt;code&gt;load 'filename'&lt;/code&gt; 读入文件，或者在 shell 提示符下将其作为参数提供给 gnuplot：          &lt;code&gt;$ gnuplot filename&lt;/code&gt; 。使用第二种方法，gnuplot 会在执行输入文件中的所有命令后退出，所以当直接绘图到文件中（请参见下一节）时，采用批处理模式执行特别有效。如果在屏幕上绘图时使用第二种方法，输出 窗口一出现（当 gnuplot 退出时）就会消失，所以您需要使用显式的“pause -1”命令（请参阅 &lt;code&gt;help pause&lt;/code&gt; ）来保持窗口。       &lt;/p&gt;       &lt;p&gt; 批处理模式操作中使用的 Gnuplot 命令文件往往停留一会，从而帮助使用注释来提高可读性。          &lt;code&gt;#&lt;/code&gt; 后面的直到行结束的内容是注释。所以在示例清单 3 中，gnuplot 不处理          &lt;code&gt;we want only one cycle&lt;/code&gt; 。       &lt;/p&gt;      &lt;br /&gt;&lt;table width="100%" border="0" cellpadding="0" cellspacing="0"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;img src="http://www.ibm.com/i/v14/rules/blue_rule.gif" alt="" width="100%" height="1" /&gt;&lt;br /&gt;&lt;img alt="" src="http://www.ibm.com/i/c.gif" width="8" border="0" height="6" /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;table class="no-print" align="right" cellpadding="0" cellspacing="0"&gt;&lt;tbody&gt;&lt;tr align="right"&gt;&lt;td&gt;&lt;img src="http://www.ibm.com/i/c.gif" alt="" width="100%" height="4" /&gt;&lt;br /&gt;&lt;table border="0" cellpadding="0" cellspacing="0"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td valign="middle"&gt;&lt;img src="http://www.ibm.com/i/v14/icons/u_bold.gif" alt="" width="16" border="0" height="16" /&gt;&lt;br /&gt;&lt;/td&gt;&lt;td valign="top" align="right"&gt;&lt;a href="http://www.ibm.com/developerworks/cn/linux/l-gnuplot/index.html#main" class="fbox"&gt;&lt;b&gt;回页首&lt;/b&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;a name="N1019E"&gt;&lt;span class="atitle"&gt;终端设备 —— 题外话&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;       &lt;p&gt; 在启动时，您可能注意到终端类型设置为          &lt;code&gt;X11&lt;/code&gt;。Gnuplot 采用标准设计，可以在多个终端设备上绘图。这包括直接打印到多种打印机中，包括 Epson、HP 和 Imagen 打印机。它甚至可以在伪设备中绘图，如 postscript 和 png。这主要涉及生成输出文件，而不是可查看文件或打印输出。这是将您的图表包含在其他报表中的一种技巧。虽然我还没有发现在 Windows 中与在 Linux 中有什么不同，本文档建议您在设置输出文件名之前先设置终端类型： &lt;/p&gt;      &lt;br /&gt;&lt;a name="N101AB"&gt;&lt;b&gt;清单 4. 设置输出和终端类型&lt;/b&gt;&lt;/a&gt;&lt;br /&gt;       &lt;table width="100%" border="0" cellpadding="0" cellspacing="0"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class="code-outline"&gt;&lt;pre class="displaycode"&gt;set terminal png         # gnuplot recommends setting terminal before output&lt;br /&gt;set output "output.png"  # The output filename; to be set after setting&lt;br /&gt;     # terminal&lt;br /&gt;replot&lt;br /&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;       &lt;p&gt; 现在，文件 output.png 中有了您刚才绘制的图，且可以包含在一个更大的报表中。许多普遍使用的排版和制图程序都有专门的终端，这些程序包括 Adobe Illustrator（          &lt;code&gt;set term aifm&lt;/code&gt; ）、Corel Draw（         &lt;code&gt;set term corel&lt;/code&gt;）、AutoCad（          &lt;code&gt;set term dxf&lt;/code&gt; ）和多种 LaTex 相关的终端（         &lt;code&gt;eepic&lt;/code&gt;、          &lt;code&gt;latex&lt;/code&gt; 、         &lt;code&gt;pstricks&lt;/code&gt;、          &lt;code&gt;texdraw&lt;/code&gt; 、         &lt;code&gt;tpic&lt;/code&gt; 等等）。您还可以得到 PostScript、enhanced PostScript (eps) 或 Adobe PDF 格式的文件。您的 gnuplot 版本可能没有编译所有的终端驱动程序 —— 例如，Windows 用户不需要 Xll 终端，Linux 用户不需要 Windows 终端。类似地，出于法律原因，gnuplot 4.0 移除了对 gif 终端的支持。 &lt;/p&gt;       &lt;p&gt; 所有终端在能力上都不相同。其中的一些（如 LaTeX）可能不支持文本的旋转，所以如果您像我们前面那样设置 ylabel，在不同的终端中可能显示不一样。换句话说，您可以在 LaTeX 的特定终端中使用 LaTex 命令。例如，         &lt;code&gt;set ylabel "$sin(\\theta)$"&lt;/code&gt;（注意我们使用两个反斜杠产生一个 LaTex 所需的反斜杠 —— gnuplot 在将双引号中所括的字符串传送到终端驱动程序之前，先对其进行反斜杠处理）。现在，您可以使用          &lt;code&gt;\input{output.tex}&lt;/code&gt; 将输出文件包含在 LaTeX 文件中。要在 PostScript 终端中获得相同的结果，使用相应的 PostScript 命令：          &lt;code&gt;{/Symbol q}&lt;/code&gt; 。在 enhanced PostScript 和 LaTeX 中，您可以使用表示法          &lt;code&gt;x^{superscript}&lt;/code&gt;和         &lt;code&gt;x_{subscript}&lt;/code&gt; 得到上标文字。还要注意缩写的终端和输出命令：       &lt;/p&gt;      &lt;br /&gt;&lt;a name="N101EF"&gt;&lt;b&gt;清单 5. eps 驱动程序的能力&lt;/b&gt;&lt;/a&gt;&lt;br /&gt;       &lt;table width="100%" border="0" cellpadding="0" cellspacing="0"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class="code-outline"&gt;&lt;pre class="displaycode"&gt;set term post enh     # enhanced PostScript, essentially PostScript&lt;br /&gt;      # with bounding boxes&lt;br /&gt;set out 'gplt.eps'&lt;br /&gt;set xlabel '{/Symbol q_1}&lt;br /&gt;set ylabel 'sin^2({/Symbol q_1})'&lt;br /&gt;plot sin(x)**2&lt;br /&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;       &lt;p&gt;         &lt;a href="http://www.ibm.com/developerworks/cn/linux/l-gnuplot/index.html#Resources"&gt;参考资料&lt;/a&gt;部分的代码补充说明包含具有以上命令的 TeX 文件示例。       &lt;/p&gt;       &lt;p&gt;&lt;a name="N10200"&gt;&lt;span class="smalltitle"&gt;鼠标支持&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;       &lt;p&gt; 版本 4.0 提供了新的功能，Windows 和 X11 终端支持鼠标交互。鼠标支持有两个主要用途：坐标跟踪和缩放。鼠标指针的当前坐标显示在终端窗口的左下角。通过双击第一个鼠标按钮可以将其复制到剪贴板 中。当您需要设置需要直接坐标的标签或箭头时，此操作会非常有用。（使用 &lt;code&gt;help arrow&lt;/code&gt; 和          &lt;code&gt;help label&lt;/code&gt; 可以获得这些命令的更多详细信息。）还可以拖动第二个（或右击）鼠标按钮来选择要放大的矩形区域。在 3D 绘图中，您可以拖动鼠标来旋转图像（按住 Ctrl 键将仅更改轴的视图；所以对于要用很长时间才能呈现的图，可以先更改轴，然后放开 Ctrl 键来重新呈现图）。 &lt;/p&gt;       &lt;p&gt; 鼠标支持还支持一组有用的热键：如果先前对图进行了放大，         &lt;b&gt;u&lt;/b&gt;则取消访大。         &lt;b&gt;g&lt;/b&gt;切换网格，         &lt;b&gt;l&lt;/b&gt;切换坐标轴上的刻度；         &lt;b&gt;L&lt;/b&gt;切换最靠近指针的最标轴上的刻度，         &lt;b&gt;r&lt;/b&gt;切换标尺，标尺会建立任意原点。启用了标尺后，屏幕的底部显示当前坐标指针距离标尺原点的 x 轴距离和 y 轴距离以及距离实际原点的 x 轴和 y 轴距离（与点的坐标相同）。在 3D 中，方向键可以用在鼠标拖拉的地方来旋转图像。空格键激活命令窗口，         &lt;b&gt;q&lt;/b&gt;退出终端窗口。要查看所有选项，在支持鼠标的终端中输入         &lt;b&gt;h&lt;/b&gt;。       &lt;/p&gt;       &lt;p&gt;&lt;a name="N10229"&gt;&lt;span class="smalltitle"&gt;控制比例和长宽比&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;       &lt;p&gt; 默认情况下，gnuplot 对 x 轴和 y 轴都使用比例系数 1，但是它对控制图形的长宽比（y 轴长度与 x 轴长度的比率）不起作用。终端驱动程序使用终端的默认长宽比。比例系数、长宽比或者两者都可以使用          &lt;code&gt;set size&lt;/code&gt; 命令指定，例如：       &lt;/p&gt;       &lt;p&gt;          &lt;code&gt; # square is synonymous to an aspect ratio of 1;           &lt;br /&gt;# scale y-axis by 2, retain x-axis size           &lt;br /&gt;set size ratio square 1,2         &lt;/code&gt;        &lt;/p&gt;       &lt;p&gt; gnuplot 使用给定的长宽比能否成功绘制图可能受到终端能力的限制。          &lt;code&gt;set size&lt;/code&gt; 也是与          &lt;code&gt;multiplot&lt;/code&gt; 命令一起使用才有用，multiplot 命令用于在同一输出屏幕或文件中生成多个图。       &lt;/p&gt;      &lt;br /&gt;&lt;table width="100%" border="0" cellpadding="0" cellspacing="0"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;img src="http://www.ibm.com/i/v14/rules/blue_rule.gif" alt="" width="100%" height="1" /&gt;&lt;br /&gt;&lt;img alt="" src="http://www.ibm.com/i/c.gif" width="8" border="0" height="6" /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;table class="no-print" align="right" cellpadding="0" cellspacing="0"&gt;&lt;tbody&gt;&lt;tr align="right"&gt;&lt;td&gt;&lt;img src="http://www.ibm.com/i/c.gif" alt="" width="100%" height="4" /&gt;&lt;br /&gt;&lt;table border="0" cellpadding="0" cellspacing="0"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td valign="middle"&gt;&lt;img src="http://www.ibm.com/i/v14/icons/u_bold.gif" alt="" width="16" border="0" height="16" /&gt;&lt;br /&gt;&lt;/td&gt;&lt;td valign="top" align="right"&gt;&lt;a href="http://www.ibm.com/developerworks/cn/linux/l-gnuplot/index.html#main" class="fbox"&gt;&lt;b&gt;回页首&lt;/b&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;a name="N1024C"&gt;&lt;span class="atitle"&gt;绘制多条曲线&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;       &lt;p&gt; 正如精明的读者可能已经从上面关于 replot 的注释中推测到的，gnuplot 使您可以同时画多条线。假设我们同时绘制正弦和余弦曲线。简单的 plot 命令为          &lt;code&gt;plot sin(x), cos(x)&lt;/code&gt;； 要画的曲线以逗号分隔。如果不再指定其他项，gnuplot 自动显示两个曲线图，从而它们可以互相区别 —— 在诸如 Windows 和 Xll 的终端中，gnuplot 使用不同的颜色。单色终端使用不同种类的线显示曲线图。通过查看图例（或键），您应该能够知道图中的线分别是何种曲线。gnuplot 还允许您指定绘图的样式，以便获得进一步的控制： &lt;/p&gt;        &lt;code&gt; unset xtics  # keep all other things simple         &lt;br /&gt;plot sin(x) with linespoints pointtype 5, cos(x) w boxes lt 4       &lt;/code&gt;                &lt;br /&gt;&lt;a name="N10261"&gt;&lt;b&gt;图 5. 多条曲线 &lt;/b&gt;&lt;/a&gt;&lt;br /&gt;        &lt;img alt="图 5. 多条曲线" src="http://www.ibm.com/developerworks/cn/linux/l-gnuplot/figure6.jpg" width="600" height="390" /&gt;      &lt;br /&gt;      &lt;p&gt;          &lt;code&gt;with&lt;/code&gt; 子句（请参阅          &lt;code&gt;help plot with&lt;/code&gt; ，如果使用版本 4.0，还有          &lt;code&gt;help plotting styles&lt;/code&gt; ）使您可以详细而精确地指定线的样式。在本例中，我们说明两种有用的样式。第一种样式          &lt;code&gt;linespoints&lt;/code&gt; 通常在对数据绘图时非常有用，它在涉及的每个示例或数据点处标记一个点，并使用线性插值法连接连续的点。这里我们另外指定点类型为          &lt;b&gt;5&lt;/b&gt;，它选择终端允许的第五种点。第二种样式          &lt;code&gt;boxes&lt;/code&gt; 更适合绘制直方图数据。注意我们如何在 cos(x) 曲线中将          &lt;code&gt;with&lt;/code&gt; 缩写成          &lt;code&gt;w&lt;/code&gt; 。类似地，         &lt;code&gt;lt&lt;/code&gt;是 linetype 的缩写，是另一个特定于终端的设置，它选择终端可以绘制的四种线。不必说（什么，您还没有尝试         &lt;code&gt;help plot with&lt;/code&gt;吗？），您可以使用         &lt;code&gt;pt&lt;/code&gt; 代替冗长的 pointtype。如果想在多条线中使用相同的绘图样式（在一个 plot 命令中或在多个 plot 命令中），可以使用 set 命令设置绘图样式。在 gnuplot 4.0 中，使用          &lt;code&gt;set style function linespoints&lt;/code&gt; ；以前的版本使用语法          &lt;code&gt;set function style boxes&lt;/code&gt;。要更改用于绘制与函数相对的数据集合的样式，使用         &lt;code&gt;set style data linespoints&lt;/code&gt;（以前的版本使用          &lt;code&gt;set data style linespoints&lt;/code&gt; ）。       &lt;/p&gt;       &lt;table width="65%" align="center" border="0" cellpadding="0" cellspacing="0"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td width="10"&gt;&lt;img alt="" src="http://www.ibm.com/i/c.gif" width="10" height="1" /&gt;&lt;/td&gt;&lt;td&gt;&lt;table width="100%" border="1" cellpadding="5" cellspacing="0"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td bgcolor="#eeeeee"&gt;         &lt;a name="N102B0"&gt;&lt;b&gt;gnuplot 如何工作&lt;/b&gt;&lt;/a&gt;&lt;br /&gt;        &lt;p&gt;除 了趣味性，本次练习显示了 gnuplot 实际如何对函数绘图 —— 它获取多个样本并在每个样本点绘制值。通常，它会在这些点间平滑地插入值；使用 boxes 样式则强制它使用平面的直方图，linespoints 样式用一个点标记每个样本。要更清楚地观看，显式地将采样比率设为 10（ &lt;code&gt;set samples 10&lt;/code&gt; ）并重新绘图。（然后将其设置会默认值 100）。         &lt;/p&gt;       &lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;       &lt;p&gt;          &lt;code&gt;with&lt;/code&gt; 子句是我们使用除了          &lt;code&gt;set&lt;/code&gt; 之外的其他项来定制图的第一个例子。一些其他普遍使用的选项也可以直接在 plot 命令中设置。例如，还可以设置 xrange：         &lt;code&gt;plot [-pi:pi] sin(x)&lt;/code&gt;。对默认绘图选项的快速而随意的一次性更改则使用此类语法。要在多个图中或在多个 plot 命令中重新使用，需要使用         &lt;code&gt;set&lt;/code&gt; 命令。       &lt;/p&gt;       &lt;p&gt; 当绘制两条或多条曲线时，我们需要关键字或图例来对它们进行区分。默认情况下，关键字在右上角；但是如果它妨碍了图，可以将关键字放到其他位置 —— 如果愿意，甚至可以放到图外。下面的代码片段将关键字放在了左上角，并在它周围设置了一个框。我们还通过在 plot 命令中给定明确的标题来控制图例中为曲线提供的名称。title 可以缩写为 &lt;b&gt;t&lt;/b&gt;，正如我们对余弦曲线的设置。如果不想在图例中命名曲线，使用          &lt;code&gt;notitle&lt;/code&gt; ，而不是          &lt;code&gt;title&lt;/code&gt; 。最后一点，也是新用户经常出错的地方就是如果有标题，标题必须放在          &lt;code&gt;with&lt;/code&gt; 子句的前面：       &lt;/p&gt;      &lt;br /&gt;&lt;a name="N102E3"&gt;&lt;b&gt;清单 6. 定制图的关键字或图例&lt;/b&gt;&lt;/a&gt;&lt;br /&gt;       &lt;table width="100%" border="0" cellpadding="0" cellspacing="0"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class="code-outline"&gt;&lt;pre class="displaycode"&gt;set key top left&lt;br /&gt;set key box&lt;br /&gt;plot [-pi:pi] sin(x) title "sinusoid" with linespoints pointtype 5, \&lt;br /&gt;cos(x) t 'cosine' w boxes lt 4&lt;br /&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;               &lt;br /&gt;&lt;a name="N102EF"&gt;&lt;b&gt;图 6. 定制关键字 &lt;/b&gt;&lt;/a&gt;&lt;br /&gt;        &lt;img alt="图 6. 定制关键字" src="http://www.ibm.com/developerworks/cn/linux/l-gnuplot/figure7.jpg" width="600" height="392" /&gt;      &lt;br /&gt;      &lt;p&gt;&lt;a name="N102FC"&gt;&lt;span class="smalltitle"&gt;在同一屏幕上绘制相关的图&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;       &lt;p&gt; 上面，我们在同一图中绘制了正弦和余弦曲线。Gnuplot 使您还可以绘制多个图，这样它们可以并排显示在同一输出屏幕或文件中。在某些排版系统中，以一个文件的形式包含两个图形比分别包含两个图形要更容易。 &lt;/p&gt;       &lt;p&gt; 下面是简单说明的          &lt;code&gt;multiplot&lt;/code&gt; ，它绘制正弦、余弦及其各自倒数的曲线图。基本方法是将屏幕或图像文件的边框比例设为 1。然后，我们绘制不同的曲线图，从而它们可以每个图占据屏幕的四分之一。我们还通过使用屏幕坐标（请参阅          &lt;code&gt;help coordinates&lt;/code&gt; ，获得关于不同类型坐标系统的讨论）设置原点来控制曲线图显示的位置。另外，注意每个 plot 还自动计算轴、tic 等等的宽度 —— 这样您可能必须调整边距宽度以使不同绘图的轴排成一行。在本例中，我必须将左边距设置为 6 个字符宽度，以便调整 cosec(x) = 1/sin(x) 的科学记数法中的 tics。 &lt;/p&gt;      &lt;br /&gt;&lt;a name="N10310"&gt;&lt;b&gt;清单 7. Multiplot 示例&lt;/b&gt;&lt;/a&gt;&lt;br /&gt;       &lt;table width="100%" border="0" cellpadding="0" cellspacing="0"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class="code-outline"&gt;&lt;pre class="displaycode"&gt;set xrange [-pi:pi]&lt;br /&gt;# Uncomment the following to line up the axes&lt;br /&gt;# set lmargin 6&lt;br /&gt;# Gnuplot recommends setting the size and origin before going to&lt;br /&gt;# multiplot mode&lt;br /&gt;# This sets up bounding boxes and may be required on some terminals&lt;br /&gt;set size 1,1&lt;br /&gt;set origin 0,0&lt;br /&gt;# Done interactively, this takes gnuplot into multiplot mode&lt;br /&gt;# and brings up a new prompt ("multiplot &gt;" instead of "gnuplot &gt;")&lt;br /&gt;set multiplot&lt;br /&gt;# plot the first graph so that it takes a quarter of the screen&lt;br /&gt;set size 0.5,0.5&lt;br /&gt;set origin 0,0.5&lt;br /&gt;plot sin(x)&lt;br /&gt;# plot the second graph so that it takes a quarter of the screen&lt;br /&gt;set size 0.5,0.5&lt;br /&gt;set origin 0,0&lt;br /&gt;plot 1/sin(x)&lt;br /&gt;# plot the third graph so that it takes a quarter of the screen&lt;br /&gt;set size 0.5,0.5&lt;br /&gt;set origin 0.5,0.5&lt;br /&gt;plot cos(x)&lt;br /&gt;# plot the fourth graph so that it takes a quarter of the screen&lt;br /&gt;set size 0.5,0.5&lt;br /&gt;set origin 0.5,0&lt;br /&gt;plot 1/cos(x)&lt;br /&gt;# On some terminals, nothing gets plotted until this command is issued&lt;br /&gt;unset multiplot&lt;br /&gt;# remove all customization&lt;br /&gt;reset&lt;br /&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;               &lt;br /&gt;&lt;a name="N1031C"&gt;&lt;b&gt;图 7. Multiplot 绘图 &lt;/b&gt;&lt;/a&gt;&lt;br /&gt;        &lt;img alt="图 7. Multiplot 绘图" src="http://www.ibm.com/developerworks/cn/linux/l-gnuplot/figure8.jpg" width="600" height="387" /&gt;      &lt;br /&gt;     &lt;br /&gt;&lt;table width="100%" border="0" cellpadding="0" cellspacing="0"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;img src="http://www.ibm.com/i/v14/rules/blue_rule.gif" alt="" width="100%" height="1" /&gt;&lt;br /&gt;&lt;img alt="" src="http://www.ibm.com/i/c.gif" width="8" border="0" height="6" /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;table class="no-print" align="right" cellpadding="0" cellspacing="0"&gt;&lt;tbody&gt;&lt;tr align="right"&gt;&lt;td&gt;&lt;img src="http://www.ibm.com/i/c.gif" alt="" width="100%" height="4" /&gt;&lt;br /&gt;&lt;table border="0" cellpadding="0" cellspacing="0"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td valign="middle"&gt;&lt;img src="http://www.ibm.com/i/v14/icons/u_bold.gif" alt="" width="16" border="0" height="16" /&gt;&lt;br /&gt;&lt;/td&gt;&lt;td valign="top" align="right"&gt;&lt;a href="http://www.ibm.com/developerworks/cn/linux/l-gnuplot/index.html#main" class="fbox"&gt;&lt;b&gt;回页首&lt;/b&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;a name="N10329"&gt;&lt;span class="atitle"&gt;绘制数据图&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;       &lt;p&gt; 虽然本教程只是出于说明目的，大部分内容都集中于绘制正弦曲线，您很可能很想对试验数据、销售数据或其他类似数据绘图。在这一节，我们将使用 IBM 的股票价格作为数据集合说明如何绘制不同的图（本例的原始数据包含在         &lt;a href="http://www.ibm.com/developerworks/cn/linux/l-gnuplot/index.html#Resources"&gt;参考资料&lt;/a&gt;部分中）：       &lt;/p&gt;       &lt;p&gt;&lt;a name="table1"&gt;&lt;span class="smalltitle"&gt;表 1. IBM 股票价格&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;       &lt;p&gt;         &lt;/p&gt;&lt;table width="70%" border="1" cellpadding="3" cellspacing="0"&gt;&lt;tbody&gt;&lt;tr valign="top"&gt;&lt;td&gt;               &lt;b&gt;日期&lt;/b&gt;             &lt;/td&gt;&lt;td&gt;               &lt;b&gt;开盘&lt;/b&gt;             &lt;/td&gt;&lt;td&gt;               &lt;b&gt;最高&lt;/b&gt;             &lt;/td&gt;&lt;td&gt;               &lt;b&gt;最低&lt;/b&gt;             &lt;/td&gt;&lt;td&gt;               &lt;b&gt;收盘&lt;/b&gt;             &lt;/td&gt;&lt;/tr&gt;&lt;tr valign="top"&gt;&lt;td&gt; 10-Jun-04 &lt;/td&gt;&lt;td&gt;90.23&lt;/td&gt;&lt;td&gt;90.75&lt;/td&gt;&lt;td&gt;89.89&lt;/td&gt;&lt;td&gt;90.46&lt;/td&gt;&lt;/tr&gt;&lt;tr valign="top"&gt;&lt;td&gt; 9-Jun-04 &lt;/td&gt;&lt;td&gt;89.90&lt;/td&gt;&lt;td&gt;90.55&lt;/td&gt;&lt;td&gt;89.81&lt;/td&gt;&lt;td&gt;90.09&lt;/td&gt;&lt;/tr&gt;&lt;tr valign="top"&gt;&lt;td&gt; 8-Jun-04 &lt;/td&gt;&lt;td&gt;88.64&lt;/td&gt;&lt;td&gt;90.50&lt;/td&gt;&lt;td&gt;88.40&lt;/td&gt;&lt;td&gt;90.04&lt;/td&gt;&lt;/tr&gt;&lt;tr valign="top"&gt;&lt;td&gt; 7-Jun-04 &lt;/td&gt;&lt;td&gt;88.75&lt;/td&gt;&lt;td&gt;88.99&lt;/td&gt;&lt;td&gt;88.01&lt;/td&gt;&lt;td&gt;88.64&lt;/td&gt;&lt;/tr&gt;&lt;tr valign="top"&gt;&lt;td&gt; 4-Jun-04 &lt;/td&gt;&lt;td&gt;87.95&lt;/td&gt;&lt;td&gt;88.49&lt;/td&gt;&lt;td&gt;87.50&lt;/td&gt;&lt;td&gt;87.56&lt;/td&gt;&lt;/tr&gt;&lt;tr valign="top"&gt;&lt;td&gt; 3-Jun-04 &lt;/td&gt;&lt;td&gt;87.85&lt;/td&gt;&lt;td&gt;88.10&lt;/td&gt;&lt;td&gt;87.35&lt;/td&gt;&lt;td&gt;87.35&lt;/td&gt;&lt;/tr&gt;&lt;tr valign="top"&gt;&lt;td&gt; 2-Jun-04 &lt;/td&gt;&lt;td&gt;88.64&lt;/td&gt;&lt;td&gt;88.64&lt;/td&gt;&lt;td&gt;87.89&lt;/td&gt;&lt;td&gt;87.98&lt;/td&gt;&lt;/tr&gt;&lt;tr valign="top"&gt;&lt;td&gt; 1-Jun 04 &lt;/td&gt;&lt;td&gt;88.00&lt;/td&gt;&lt;td&gt;88.48&lt;/td&gt;&lt;td&gt;87.30&lt;/td&gt;&lt;td&gt;88.12&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;              &lt;p&gt; 大多数数据集合都是数字列，但是这个数据集合有所不同，因为 x 轴是时间数据。下列代码告诉 gnuplot 如何读取和格式化 x 轴上的时间数据（有关详细信息，请参阅          &lt;code&gt;help time/data&lt;/code&gt; 和          &lt;code&gt;help set timefmt&lt;/code&gt; ）：       &lt;/p&gt;      &lt;br /&gt;&lt;a name="N1040B"&gt;&lt;b&gt;清单 8. 设置时序数据&lt;/b&gt;&lt;/a&gt;&lt;br /&gt;       &lt;table width="100%" border="0" cellpadding="0" cellspacing="0"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class="code-outline"&gt;&lt;pre class="displaycode"&gt;set xdata time   # The x axis data is time&lt;br /&gt;set timefmt "%d-%b-%y" # The dates in the file look like 10-Jun-04&lt;br /&gt;set format x "%b %d" # On the x-axis, we want tics like Jun 10&lt;br /&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;       &lt;p&gt; 一旦设置完成，可以使用下列命令对开盘价绘图。我们选择在不同的开盘价之间使用直线插值法，并使用          &lt;code&gt;linespoints&lt;/code&gt;样式，而不只是         &lt;code&gt;points&lt;/code&gt;：       &lt;/p&gt;       &lt;p&gt;          &lt;code&gt; plot ["31-May-04":"11-Jun-04"] 'ibm.dat'  using 1:2 with linespoints &lt;/code&gt;        &lt;/p&gt;               &lt;br /&gt;&lt;a name="N10429"&gt;&lt;b&gt;图 8. 绘制开盘价图&lt;/b&gt;&lt;/a&gt;&lt;br /&gt;        &lt;img alt="图 8. 绘制开盘价图" src="http://www.ibm.com/developerworks/cn/linux/l-gnuplot/figure9a.jpg" width="600" height="389" /&gt;      &lt;br /&gt;      &lt;p&gt; 象往常一样，["31-May-04":"11-Jun-04"] 显式设置了 xrange，但不是完全必要的。注意范围的          &lt;code&gt;min&lt;/code&gt; 和          &lt;code&gt;max&lt;/code&gt; 需要指定为符合          &lt;code&gt;timefmt&lt;/code&gt; 的字符串。       &lt;/p&gt;       &lt;p&gt; 取决于使用的绘图样式，gnuplot 在绘制一个点时最多可以使用六个不同的编号。当读入记录时，列从 1 开始编号。          &lt;code&gt;using 1:2&lt;/code&gt; 告诉 plot 命令使用第一列作为 x 轴，第二列作为 y 轴。所以要绘制收盘价图，我们将使用          &lt;code&gt;using 1:5&lt;/code&gt; 。       &lt;/p&gt;       &lt;p&gt; 每次 gnuplot 看到新的数据分隔符时，列编号就会增加。默认情况下，数据分隔符为空格。所以如果时间格式中间有空格（例如          &lt;code&gt;10 Jun 04&lt;/code&gt; ，而不是          &lt;code&gt;10-Jun-04&lt;/code&gt; ），我们将需要使用          &lt;code&gt;using 1:4&lt;/code&gt; 代替          &lt;code&gt;1:2&lt;/code&gt; 。对于 x 轴，我们仅需要指定数据开始的第一列。Gnuplot 能够智能地使用 timefmt 字符串读取其他列。       &lt;/p&gt;       &lt;p&gt;          &lt;code&gt;using&lt;/code&gt; 使您可以添加两个以上的冒号，用于指定特定绘图样式可能需要的任何其他列。您还可以使用          &lt;code&gt;$n&lt;/code&gt; 表示第 n 列，从而对二进制表达式进行绘图。在一个完全虚构的示例中，我们假设不同的价格表示不同的试验运行，我们要绘制平均价、最高价和最低价。          &lt;code&gt;yerrorbars&lt;/code&gt; 样式使您可以绘制 y-high/y-low 值（我们在          &lt;code&gt;using&lt;/code&gt;修饰符中指定为         &lt;code&gt;x:y:ylow:yhigh&lt;/code&gt;）以及计算 y 轴四个价格的平均值为 ($2+$3+$4+$5)/4：       &lt;/p&gt;       &lt;p&gt;          &lt;code&gt; plot ["31-May-04":"11-Jun-04"] 'ibm.dat'  using 1:($2+$3+$4+$5)/4:4:3 \           &lt;br /&gt;title 'daily prices, IBM' with yerrorbars         &lt;/code&gt;        &lt;/p&gt;               &lt;br /&gt;&lt;a name="N10485"&gt;&lt;b&gt;图 9. 计算平均值&lt;/b&gt;&lt;/a&gt;&lt;br /&gt;        &lt;img alt="图 9. 计算平均值" src="http://www.ibm.com/developerworks/cn/linux/l-gnuplot/figure9b.jpg" width="600" height="408" /&gt;      &lt;br /&gt;      &lt;p&gt; errorlines 样式是相似的，但它还在绘制的 y 轴点之间绘制线段。对于绘制财务条形图，Gnuplot 还有单独的样式，分别是最高价、最低价和 tics 在左边，右边为开盘价和收盘价。我们使用          &lt;code&gt;set bars&lt;/code&gt; 显示开盘价和收盘价的较大 tics）：       &lt;/p&gt;       &lt;p&gt;          &lt;code&gt; set bars 5            &lt;br /&gt;plot ["31-May-04":"11-Jun-04"] 'ibm.dat'  using 1:2:3:4:5 with financebars         &lt;/code&gt;        &lt;/p&gt;               &lt;br /&gt;&lt;a name="N104A4"&gt;&lt;b&gt;图 10. 绘制财务条形图&lt;/b&gt;&lt;/a&gt;&lt;br /&gt;        &lt;img alt="图 10. 绘制财务条形图" src="http://www.ibm.com/developerworks/cn/linux/l-gnuplot/figure9c.jpg" width="600" height="418" /&gt;      &lt;br /&gt;      &lt;p&gt; 您还可以查看          &lt;code&gt;help plotting styles&lt;/code&gt; 获得其他相关样式，如 candlesticks、boxerrorbars 和错误绘图样式。       &lt;/p&gt;       &lt;p&gt;&lt;a name="N104B8"&gt;&lt;span class="smalltitle"&gt;处理真实数据集合&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;       &lt;p&gt; 当然，对于真实的数据集合，事情可能会变得更复杂。最常见的就是数据集合不使用空格字符分隔数据点。gnuplot 4.0 提供了新的功能，您可以使用          &lt;code&gt;set datafile separator &lt;string&gt;&lt;/code&gt; 指定自己的分隔符。同样地，您还可以使用          &lt;code&gt;set datafile commentschar&lt;/code&gt; 指定除了          &lt;code&gt;#&lt;/code&gt; 之外的注释字符。如果需要更多的控制，您可以为          &lt;code&gt;using&lt;/code&gt; 修饰符明确指定格式字符串。Gnuplot 使用 C 标准库的          &lt;code&gt;scanf&lt;/code&gt; 函数以及给定格式字符串（有关详细信息，请参阅          &lt;code&gt;help using&lt;/code&gt; ）读入数据。我讲述此方法仅是为了内容更全面；能够以此方法读入的数据集合也可以使用          &lt;code&gt;set data file separator&lt;/code&gt; 进行处理，或者通过显式指定          &lt;code&gt;using&lt;/code&gt; 修饰符中要使用的列编号来进行处理。例如，如果需要忽略第一列中的字符串，则使用 2:3 进行绘图。为了获得更完全的灵活性，在具有 popen 函数的 Unix 类系统中，在将文件传送给 plot 命令之前，可以使用文本处理实用程序对文件进行预处理。例如：          &lt;code&gt;plot "&lt;&gt; 。不幸的是，该命令不能在所有系统中使用。最后的一个方法是在 gnuplot 中使用输入文件之前对其进行预处理。       &lt;/p&gt;       &lt;p&gt; 有时，真实的数据可能没有包含所有的点 —— 对于要绘图的列，可能有 x 值，但缺少相应的 y 值。Gnuplot 允许您指定字符串，用于表示缺少的数据点。例如： &lt;/p&gt;       &lt;p&gt;          &lt;code&gt; set datafile missing 'NaN' # The IEEE floating point not-a-number &lt;/code&gt;        &lt;/p&gt;       &lt;p&gt; 注意，在 4.0 版本之前，命令是          &lt;code&gt;set missing &lt;string&gt;&lt;/code&gt; 。       &lt;/p&gt;       &lt;p&gt; 不幸的是，处理缺少数据的数据点的方法取决于          &lt;code&gt;using&lt;/code&gt; 说明。如果想了解用法          &lt;code&gt;plot 'file'&lt;/code&gt; 、          &lt;code&gt;plot 'file' using 1:2&lt;/code&gt; 和          &lt;code&gt;plot 'file' using ($1):($2)&lt;/code&gt;之间区别的详细信息，请参阅         &lt;code&gt;help using&lt;/code&gt;。但是为了安全起见，通常指定列使用显式的          &lt;code&gt;using&lt;/code&gt; 格式，如果您想完全清除不合适的数据点，不要使用表达式求值（第三个选项会因为括号而对表达式求值）—— 而是，预处理数据文件并用计算的表达式的结果添加确切的列。       &lt;/p&gt;       &lt;p&gt; 往常，您可能以一些无效的数据点而结束。如果 gnuplot 被告知忽略无效数据点，您仍可以对这样的数据集合绘图。Gnuplot 忽略未定义的点，这样当您遇到不合适的点时，技巧就是使用未定义的 y 值，如1/0。类似于 C 的三元算符可以很容易地表达此信息（如果您不熟悉此函数，请参阅 &lt;code&gt;help ternary&lt;/code&gt; ；在定义分段函数时它也非常有用）。下面是          &lt;code&gt;help using&lt;/code&gt; 中介绍的一个例子，它使您以第二列作为 y 值来绘图，除非第三列大于 10：       &lt;/p&gt;       &lt;p&gt;          &lt;code&gt; plot 'file' using 1:($3&gt;10 ? $2 : 1/0) &lt;/code&gt;        &lt;/p&gt;      &lt;br /&gt;&lt;table width="100%" border="0" cellpadding="0" cellspacing="0"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;img src="http://www.ibm.com/i/v14/rules/blue_rule.gif" alt="" width="100%" height="1" /&gt;&lt;br /&gt;&lt;img alt="" src="http://www.ibm.com/i/c.gif" width="8" border="0" height="6" /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;table class="no-print" align="right" cellpadding="0" cellspacing="0"&gt;&lt;tbody&gt;&lt;tr align="right"&gt;&lt;td&gt;&lt;img src="http://www.ibm.com/i/c.gif" alt="" width="100%" height="4" /&gt;&lt;br /&gt;&lt;table border="0" cellpadding="0" cellspacing="0"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td valign="middle"&gt;&lt;img src="http://www.ibm.com/i/v14/icons/u_bold.gif" alt="" width="16" border="0" height="16" /&gt;&lt;br /&gt;&lt;/td&gt;&lt;td valign="top" align="right"&gt;&lt;a href="http://www.ibm.com/developerworks/cn/linux/l-gnuplot/index.html#main" class="fbox"&gt;&lt;b&gt;回页首&lt;/b&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;a name="N10523"&gt;&lt;span class="atitle"&gt;高级例子&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;       &lt;p&gt; 虽然本文向您展示了会经常使用的大多数命令，但可能有些地方您还需要进一步地研究。在这一节，我们简要讨论其中一些概念，然后提供了其中一个 gnuplot 演示文件（electron.dem）中的脚本，该脚本绘制电子学中常见的幅频响应图，用以说明它们的用法。 &lt;/p&gt;       &lt;ol&gt;&lt;li&gt;           &lt;b&gt;用户定义的函数和变量&lt;/b&gt;          &lt;br /&gt;您可以任意定义自己的复杂函数，如下面的 A(jw)。这些函数可以用参数 (p1, p2) 表示，您可以稍后在            &lt;code&gt;plot&lt;/code&gt; 命令中使用它们之前再定义参数变量。         &lt;/li&gt;&lt;li&gt;           &lt;b&gt;复数&lt;/b&gt;          &lt;br /&gt;Gnuplot 可以识别复数。{a,b} 表示复数 a+bi。您可以使用函数 abs() 和 arg() 获得绝对值和辐角。         &lt;/li&gt;&lt;li&gt;           &lt;b&gt;虚变量&lt;/b&gt;          &lt;br /&gt;当在 plot 命令中使用 sin(x) 时，gnuplot 将 x 用作虚变量，并对它赋不同的值以获得示例。当编写复杂的用户定义的函数时，您可以使用函数定义中使用的传统变量名称，也可以显式设置要使用的虚变量的名称（例如，            &lt;code&gt;set dummy jw&lt;/code&gt; ）。         &lt;/li&gt;&lt;li&gt;           &lt;b&gt;x2 和 y2 轴&lt;/b&gt;          &lt;br /&gt;除了常见的沿着曲线图底部和左边的 x 轴和 y 轴之外，还可以使用曲线图的顶部（x2）和右端（y2）作为单独的轴。这些轴都相互独立，可以单独设置范围、tics、标签和比例（例如对数刻度）。而且，通过使用            &lt;code&gt;axes&lt;/code&gt; 子句，            &lt;code&gt;plot&lt;/code&gt; 命令可以使用不同的轴集合，如 x2y2。默认情况下，            &lt;code&gt;plot&lt;/code&gt; 命令以 x 轴和 y 轴绘图。当您需要同时绘制范围为不同量级或具有不同单位的线时，此高级功能非常有帮助。在下面的示例中，y 轴绘制振幅，最大值为 1，y2 轴绘制相位，最大值为 100。如果对轴的相同集合绘图，振幅曲线几乎看不出来。         &lt;/li&gt;&lt;li&gt;           &lt;b&gt;对数刻度&lt;/b&gt;          &lt;br /&gt;您可以使用            &lt;code&gt;set logscale&lt;/code&gt; 命令以对数刻度绘制任何轴。此命令在轴上绘制以 10 为底的值的对数。您可以显式设置使用的底数（例如，            &lt;code&gt;set logscale 2&lt;/code&gt; ，或如果仅为 x 主轴和 y 主轴设置底数，则可以使用            &lt;code&gt;set logscale xy 2&lt;/code&gt;）。         &lt;/li&gt;&lt;/ol&gt;       &lt;p&gt; 下例摘自与 gnuplot 一起提供的演示文件 electron.dem。此脚本使用了上面讨论的所有高级概念： &lt;/p&gt;      &lt;br /&gt;&lt;a name="N1057A"&gt;&lt;b&gt;清单 9. 幅频响应&lt;/b&gt;&lt;/a&gt;&lt;br /&gt;       &lt;table width="100%" border="0" cellpadding="0" cellspacing="0"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class="code-outline"&gt;&lt;pre class="displaycode"&gt;A(jw) = ({0,1}*jw/({0,1}*jw+p1)) * (1/(1+{0,1}*jw/p2))&lt;br /&gt;p1 = 10&lt;br /&gt;p2 = 10000&lt;br /&gt;set dummy jw&lt;br /&gt;set grid x y2&lt;br /&gt;set key default&lt;br /&gt;set logscale xy&lt;br /&gt;set log x2&lt;br /&gt;unset log y2&lt;br /&gt;set title "Amplitude and Phase Frequency Response"&lt;br /&gt;set xlabel "jw (radians)"&lt;br /&gt;set xrange [1.1 : 90000.0]&lt;br /&gt;set x2range [1.1 : 90000.0]&lt;br /&gt;set ylabel "magnitude of A(jw)"&lt;br /&gt;set y2label "Phase of A(jw) (degrees)"&lt;br /&gt;set ytics nomirror&lt;br /&gt;set y2tics&lt;br /&gt;set tics out&lt;br /&gt;set autoscale  y&lt;br /&gt;set autoscale y2&lt;br /&gt;plot abs(A(jw)), 180/pi*arg(A(jw)) axes x2y2&lt;br /&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;               &lt;br /&gt;&lt;a name="N10586"&gt;&lt;b&gt; 图 11. 振幅和相位频率响应 &lt;/b&gt;&lt;/a&gt;&lt;br /&gt;        &lt;img alt="图 11. 振幅和相位频率响应" src="http://www.ibm.com/developerworks/cn/linux/l-gnuplot/figure10.jpg" width="600" height="400" /&gt;      &lt;br /&gt;     &lt;br /&gt;&lt;table width="100%" border="0" cellpadding="0" cellspacing="0"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;img src="http://www.ibm.com/i/v14/rules/blue_rule.gif" alt="" width="100%" height="1" /&gt;&lt;br /&gt;&lt;img alt="" src="http://www.ibm.com/i/c.gif" width="8" border="0" height="6" /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;table class="no-print" align="right" cellpadding="0" cellspacing="0"&gt;&lt;tbody&gt;&lt;tr align="right"&gt;&lt;td&gt;&lt;img src="http://www.ibm.com/i/c.gif" alt="" width="100%" height="4" /&gt;&lt;br /&gt;&lt;table border="0" cellpadding="0" cellspacing="0"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td valign="middle"&gt;&lt;img src="http://www.ibm.com/i/v14/icons/u_bold.gif" alt="" width="16" border="0" height="16" /&gt;&lt;br /&gt;&lt;/td&gt;&lt;td valign="top" align="right"&gt;&lt;a href="http://www.ibm.com/developerworks/cn/linux/l-gnuplot/index.html#main" class="fbox"&gt;&lt;b&gt;回页首&lt;/b&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;a name="N10593"&gt;&lt;span class="atitle"&gt;结束语&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;       &lt;p&gt; 在本文中，我们讨论了使用新发布的 gnuplot 4.0 绘制 2D 图形的复杂性。虽然我们接触了大多数的关于使用 gunplot 的重要方面，但限于篇幅有限，我们仍有少数主题没有讨论。值得注意的一些省略范围包括从非常简单的参数函数绘图（请参见          &lt;code&gt;help parametric&lt;/code&gt; ）、极坐标（          &lt;code&gt;help polar&lt;/code&gt; ），到曲线拟合（它使用户定义曲线与给定数据集合相匹配）。曲线拟合是一门艺术，需要用一整篇文章来讲述，但是请参阅          &lt;code&gt;help fit&lt;/code&gt; 和          &lt;i&gt;beginners_guide and tips&lt;/i&gt; 来对它获得初步了解。       &lt;/p&gt;       &lt;p&gt;&lt;a name="N105AB"&gt;&lt;span class="smalltitle"&gt;常用技巧&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;       &lt;p&gt; 正如我们所看到的，gnuplot 是高度可定制的。我将以这个最后的技巧来结束本文，它说明如何在多个 gnuplot 会话中重用您的定制。定制的主要命令是          &lt;code&gt;set&lt;/code&gt; 命令。您可以使用          &lt;code&gt;save set 'filename'&lt;/code&gt; 保存当前会话的所有设置。         &lt;code&gt;save var &lt;file&gt;&lt;/code&gt; 和          &lt;code&gt;save func &lt;file&gt;&lt;/code&gt; 分别保存用户定义的变量和函数。但是无法保存传送到单一 plot 命令的定制（例如，         &lt;code&gt;plot [-pi:pi] sin(x)&lt;/code&gt; 中的 x 范围）。这些文件可以使用          &lt;code&gt;load &lt;file&gt;&lt;/code&gt; 读回。Gnuplot 还在开始时查找名为          &lt;code&gt;.gnuplot&lt;/code&gt; 的文件。它首先在当前目录中查找，然后在用户的主目录中查找（Windows 中的 USERPROFILE 目录）。如果找到初始化文件，gnuplot 会执行其中的命令。一些用户将此方法用于设置终端类型和定义经常使用的函数或变量。       &lt;/p&gt;    &lt;br /&gt;&lt;br /&gt;&lt;table width="100%" border="0" cellpadding="0" cellspacing="0"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;img src="http://www.ibm.com/i/v14/rules/blue_rule.gif" alt="" width="100%" height="1" /&gt;&lt;br /&gt;&lt;img alt="" src="http://www.ibm.com/i/c.gif" width="8" border="0" height="6" /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;table class="no-print" align="right" cellpadding="0" cellspacing="0"&gt;&lt;tbody&gt;&lt;tr align="right"&gt;&lt;td&gt;&lt;img src="http://www.ibm.com/i/c.gif" alt="" width="100%" height="4" /&gt;&lt;br /&gt;&lt;table border="0" cellpadding="0" cellspacing="0"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td valign="middle"&gt;&lt;img src="http://www.ibm.com/i/v14/icons/u_bold.gif" alt="" width="16" border="0" height="16" /&gt;&lt;br /&gt;&lt;/td&gt;&lt;td valign="top" align="right"&gt;&lt;a href="http://www.ibm.com/developerworks/cn/linux/l-gnuplot/index.html#main" class="fbox"&gt;&lt;b&gt;回页首&lt;/b&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;span class="atitle"&gt;&lt;a name="download"&gt;下载&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;&lt;table class="data-table-1" width="100%" border="0" cellpadding="0" cellspacing="0"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;th scope="col"&gt;名字&lt;/th&gt;&lt;th scope="col"&gt;大小&lt;/th&gt;&lt;th scope="col"&gt;下载方法&lt;/th&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td nowrap="nowrap"&gt;source.zip&lt;/td&gt;&lt;td nowrap="nowrap"&gt;2KB&lt;/td&gt;&lt;td nowrap="nowrap"&gt;&lt;a class="fbox" href="http://download.boulder.ibm.com/ibmdl/pub/software/dw/library/l-gnuplot/source.zip"&gt;&lt;b&gt;HTTP&lt;/b&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;table border="0" cellpadding="0" cellspacing="0"&gt;&lt;tbody&gt;&lt;tr valign="top"&gt;&lt;td colspan="5"&gt;&lt;img alt="" src="http://www.ibm.com/i/c.gif" width="12" border="0" height="12" /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;img alt="" src="http://www.ibm.com/i/v14/icons/fw.gif" width="16" height="16" /&gt;&lt;/td&gt;&lt;td&gt;&lt;a class="fbox" href="http://www.ibm.com/developerworks/cn/whichmethod.html"&gt;关于下载方法的信息&lt;/a&gt;&lt;/td&gt;&lt;td&gt;&lt;img alt="" src="http://www.ibm.com/i/c.gif" width="50" height="1" /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;a name="resources"&gt;&lt;span class="atitle"&gt;参考资料 &lt;/span&gt;&lt;/a&gt;&lt;/p&gt;       &lt;ul&gt;&lt;li&gt;您可以参阅本文在 developerWorks 全球站点上的           &lt;a href="http://www.ibm.com/developerworks/linux/library/l-gnuplot/index.html?S_TACT=105AGX52&amp;amp;S_CMP=cn-a-l"&gt;英文原文&lt;/a&gt;.        &lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt; 访问            &lt;a href="http://www.gnuplot.info/"&gt;gnuplot 官方站点&lt;/a&gt;并           &lt;a href="http://www.gnuplot.info/download.html"&gt;下载最新版本&lt;/a&gt;。        &lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt; 请一定注意 gnuplot 不包含在 GPL 中，也与            &lt;a href="http://www.gnu.org/"&gt;GNU&lt;/a&gt;或 Free Software Foundation 无关。           &lt;a href="http://www.gnu.org/bulletins/bull19.html"&gt;一份较老的 GNU 公告&lt;/a&gt;解释说：“让人奇怪的是，[gnuplot] 既不是为 GNU Project 编写，也不是因为其而命名的；这个名称纯属巧合。各种 GNU 程序都使用 gnuplot。”        &lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt; 实际上：gnuplot 与            &lt;a href="http://www.gnu.org/software/plotutils/"&gt;GNU plotutils&lt;/a&gt;组合格外好用；另请参阅           &lt;a href="http://www.gnu.org/software/plotutils/manual/html_mono/plotutils.html"&gt;plotutils documentation&lt;/a&gt;。        &lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt; 官方的            &lt;a href="http://www.gnuplot.info/faq/faq.html"&gt;Gnuplot FAQ&lt;/a&gt;非常有用，与非官方           &lt;a href="http://t16web.lanl.gov/Kawano/gnuplot/index-e.html"&gt;not so Frequently Asked Questions&lt;/a&gt; 站点一样（后者有关于在科技文章中使用 gnuplot 的特定信息）。        &lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;           &lt;a href="http://www.google.com/search?hl=en&amp;amp;ie=ISO-8859-1&amp;amp;q=gnuplot+intro"&gt;Google search on "gnuplot introduction"&lt;/a&gt; 或“gnuplot 教程”提供了多篇非常有用的简短 gnuplot 3.7.x 教程，哪怕它们涉及的是以前的版本，不是最新的发行版本。        &lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt; 下载用于数据绘图的            &lt;a href="http://download.boulder.ibm.com/ibmdl/pub/software/dw/library/l-gnuplot/source.zip"&gt;IBM stock price data (ibm.dat)&lt;/a&gt;和           &lt;a href="http://download.boulder.ibm.com/ibmdl/pub/software/dw/library/l-gnuplot/source.zip"&gt;示例 TeX 文件 (input.tex)&lt;/a&gt;，该示例文件说明如何将 gnuplot 绘图包含在 LaTeX 报表中。        &lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;下载本文中使用的           &lt;a href="http://download.boulder.ibm.com/ibmdl/pub/software/dw/library/os-ecemf1/java_model_def.zip"&gt;annotated Java code&lt;/a&gt;。        &lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt; 文章“           &lt;a href="http://www.ibm.com/developerworks/cn/linux/l-datavis/"&gt;用 Perl/Tk 实现数据可视化&lt;/a&gt;”（           &lt;i&gt;developerWorks&lt;/i&gt;，2003）讨论了使用 Perl 绘图。        &lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt; 要大概了解如何从命令行使用 ImageMagick，请阅读“           &lt;a href="http://www.ibm.com/developerworks/cn/linux/l-graf/"&gt;通过命令行处理图形&lt;/a&gt;”（           &lt;i&gt;developerWorks&lt;/i&gt;，2003 年 7 月）。        &lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt; “           &lt;a href="http://www.ibm.com/developerworks/cn/views/xml/tutorials.jsp?cv_doc_id=84896"&gt;可伸缩向量图形介绍&lt;/a&gt;”（           &lt;i&gt;developerWorks&lt;/i&gt;，2004）说明了如何轻松地从数据库信息生成图形（如曲线图和图表），以及如何增加图形的生动性和交互性。        &lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;在           &lt;a href="http://www.ibm.com/developerworks/cn/linux/"&gt;developerWorks Linux 专区&lt;/a&gt;中可以找到更多为 Linux 开发人员准备的资源。        &lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;在 Developer Bookstore 的 Linux 区定购           &lt;a href="http://devworks.krcinfo.com/WebForms/ProductList.aspx?Search=Category&amp;amp;id=300&amp;amp;parent=Linux" target="new"&gt;打折出售的 Linux 书籍&lt;/a&gt;。        &lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;自 developerWorks 的           &lt;a href="http://www.ibm.com/developerworks/cn/linux/linux-speed-start/"&gt;Speed-start your Linux app&lt;/a&gt; 专区下载可以运行于 Linux 之上的经过挑选的 developerWorks Subscription 产品免费测试版本，包括 WebSphere Studio Site Developer、WebSphere SDK for Web services、WebSphere Application Server、DB2 Universal Database Personal Developers Edition、Tivoli Access Manager 和 Lotus Domino Server。要更快速地开始上手，请参阅针对各个产品的 how-to 文章和技术支持。        &lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;    &lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;a name="author"&gt;&lt;span class="atitle"&gt;关于作者&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;&lt;table width="100%" border="0" cellpadding="0" cellspacing="0"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td colspan="3"&gt;&lt;img alt="" src="http://www.ibm.com/i/c.gif" width="100%" height="5" /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr valign="top" align="left"&gt;&lt;td&gt;&lt;br /&gt;&lt;/td&gt;&lt;td&gt;&lt;img alt="" src="http://www.ibm.com/i/c.gif" width="4" height="5" /&gt;&lt;/td&gt;&lt;td width="100%"&gt;&lt;p&gt; Nishanth R. Sastry 在 1999 年获得了计算机科学与工程学士学位，以优异的成绩从印度班加罗尔大学的 R.V. College of Engineering 毕业。2001 年，他获得了得克萨斯大学奥斯汀分校的计算机科学硕士学位。他是 IBM 的人才孵化计划的毕业生，现在是致力于 IBM Lotus Workplace 的专职软件工程师。您可以通过         &lt;a href="mailto:nishanth_sastry@us.ibm.com?cc=tomyoung@us.ibm.com"&gt;nishanth_sastry@us.ibm.com&lt;/a&gt;与他联系。       &lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2723439789450598995-5925905753644028173?l=xiefan198877.blogspot.com'/&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://xiefan198877.blogspot.com/feeds/5925905753644028173/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=2723439789450598995&amp;postID=5925905753644028173' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2723439789450598995/posts/default/5925905753644028173'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2723439789450598995/posts/default/5925905753644028173'/><link rel='alternate' type='text/html' href='http://xiefan198877.blogspot.com/2008/10/operation-of-gnuplot-from.html' title='operation of gnuplot (from http://www.ibm.com/developerworks/cn/)'/><author><name>neo</name><uri>http://www.blogger.com/profile/13869860806218701712</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='06828608963211028445'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2723439789450598995.post-6855612804517345054</id><published>2008-10-17T22:10:00.000-07:00</published><updated>2008-10-17T22:12:48.062-07:00</updated><title type='text'>ubuntu服务器远程登录的配置（转自www.casparant.com）</title><content type='html'>验室的服务器(Ubuntu Linux 7.10 Server)需要远程登录，现在已经实现以下几种登录方式：&lt;br /&gt;1. FTP&lt;br /&gt;安装vsftpd，修改&lt;code&gt;/etc/vsftpd.conf&lt;/code&gt;&lt;br /&gt;取消local_enable=YES行的注释，即可使用FTP工具以服务器上的用户名和密码登录服务器。用户权限为服务器本地用户原有的权限。&lt;br /&gt;要想允许root登录FTP，需要修改&lt;code&gt;/etc/ftpusers&lt;/code&gt;，将root行注释掉 &lt;p&gt;2.ssh&lt;br /&gt;在新立得里安装OpenSSH即可通过ssh远程登录&lt;br /&gt;要想允许root登录，修改&lt;code&gt;/etc/ssh/sshd_config&lt;/code&gt;文件，将&lt;code&gt;PermitRootLogin&lt;/code&gt;的值改为 yes&lt;/p&gt; &lt;p dragover="true"&gt;3.vnc&lt;br /&gt;因为有时候需要进入X界面，所以还需要通过vnc登录服务器。这种方式比较麻烦，不想通过vino登录，因为vino需要服务器上已经有用户登录才行，所以想使用vnc4server，只要服务启动了就可以远程登录。&lt;/p&gt; &lt;p dragover="true"&gt;&lt;span id="more-40"&gt;&lt;/span&gt;在gdmsetup中的“远程“选项卡里点“配置XDMCP“。取消 “遵从非直接请求“的勾选。&lt;br /&gt;修改&lt;code dragover="true"&gt;/etc/gdm/gdm.conf&lt;/code&gt;文件&lt;br /&gt;找到&lt;code&gt;[xdmcp]&lt;/code&gt;&lt;br /&gt;设&lt;code&gt;Enable=true&lt;/code&gt;&lt;br /&gt;找到&lt;code&gt;# RemoteGreeter=/usr/lib/gdm/gdmlogin&lt;/code&gt;行，取消其注释&lt;br /&gt;确保&lt;code&gt;vnc4server,xinetd&lt;/code&gt;已经安装&lt;br /&gt;设定VNC连接密码：&lt;/p&gt; &lt;blockquote&gt;&lt;p&gt;sudo vncpasswd /root/.vncpasswd&lt;br /&gt;sudo chmod 666 /root/.vncpasswd&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;将服务随服务器启动：&lt;/p&gt; &lt;blockquote&gt;&lt;p&gt;sudo vi /etc/xinetd.d/Xvnc&lt;/p&gt;&lt;/blockquote&gt; &lt;blockquote&gt;&lt;p&gt; &lt;code&gt;service Xvnc&lt;br /&gt;{&lt;br /&gt;type = UNLISTED&lt;br /&gt;disable = no&lt;br /&gt;socket_type = stream&lt;br /&gt;protocol = tcp&lt;br /&gt;wait = yes&lt;br /&gt;user = root&lt;br /&gt;server = /usr/bin/Xvnc&lt;br /&gt;server_args = -inetd :1 -query localhost -geometry 1024x768 -depth 16 -once -fp /usr/share/fonts/X11/misc -DisconnectClients=0 -NeverShared passwordFile=/root/.vncpasswd -extension XFIXES&lt;br /&gt;port = 5901&lt;br /&gt;}&lt;br /&gt;&lt;/code&gt;&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;重启后，用VNC客户端通过端口号1就可以服务器了。&lt;/p&gt;    标签：&lt;a href="http://www.casparant.com/tag/ftp" title="ftp" rel="tag"&gt;ftp&lt;/a&gt;, &lt;a href="http://www.casparant.com/tag/remote-login" title="remote login" rel="tag"&gt;remote login&lt;/a&gt;, &lt;a href="http://www.casparant.com/tag/ssh" title="ssh" rel="tag"&gt;ssh&lt;/a&gt;, &lt;a href="http://www.casparant.com/tag/vnc" title="vnc" rel="tag"&gt;vnc&lt;/a&gt;, &lt;a href="http://www.casparant.com/tag/vnc4server" title="vnc4server" rel="tag"&gt;vnc4server&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2723439789450598995-6855612804517345054?l=xiefan198877.blogspot.com'/&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://xiefan198877.blogspot.com/feeds/6855612804517345054/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=2723439789450598995&amp;postID=6855612804517345054' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2723439789450598995/posts/default/6855612804517345054'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2723439789450598995/posts/default/6855612804517345054'/><link rel='alternate' type='text/html' href='http://xiefan198877.blogspot.com/2008/10/ubuntuwwwcasparantcom.html' title='ubuntu服务器远程登录的配置（转自www.casparant.com）'/><author><name>neo</name><uri>http://www.blogger.com/profile/13869860806218701712</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='06828608963211028445'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2723439789450598995.post-7781007376922661129</id><published>2008-10-17T05:09:00.000-07:00</published><updated>2008-10-17T05:23:05.185-07:00</updated><title type='text'>some problen in linking a Java engine to CGOS</title><content type='html'>CGOS is Server for 9X9 Computer GO (also 19X19)&lt;br /&gt;1,to down load a cgos gtpclient on its website&lt;br /&gt;2,to make a config file, you can get an example file by "gtpclient -s"&lt;br /&gt;3,then, in the config file,&lt;br /&gt;    invoke: java -classpath ./:lib/jdom.jar GtpClient&lt;br /&gt;   it will make a mistake, for the output do not work,my solution is to&lt;br /&gt;   write a shell file "start.sh" which contains a command "java -classpath ./:lib   /jdom.jar GtpClient"&lt;br /&gt;   then:&lt;br /&gt;    invoke: ./start.sh&lt;br /&gt;&lt;br /&gt;I'm also confused that why the java command do not work. now I can achive it&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2723439789450598995-7781007376922661129?l=xiefan198877.blogspot.com'/&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://xiefan198877.blogspot.com/feeds/7781007376922661129/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=2723439789450598995&amp;postID=7781007376922661129' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2723439789450598995/posts/default/7781007376922661129'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2723439789450598995/posts/default/7781007376922661129'/><link rel='alternate' type='text/html' href='http://xiefan198877.blogspot.com/2008/10/some-problen-in-linking-java-engine-to.html' title='some problen in linking a Java engine to CGOS'/><author><name>neo</name><uri>http://www.blogger.com/profile/13869860806218701712</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='06828608963211028445'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2723439789450598995.post-8685009394306950149</id><published>2008-10-17T03:44:00.000-07:00</published><updated>2008-10-17T03:56:22.845-07:00</updated><title type='text'>some difference of java in -classpath between Windows and Linux</title><content type='html'>In windows, to run a class with a .jar file , you will need to write a command like this:     java -classpath ./&lt;span style="font-weight: bold; color: rgb(255, 0, 0);"&gt;;&lt;/span&gt;lib/jdom.jar HelloWorld&lt;br /&gt;but in Linux, there is some difference:&lt;br /&gt;            java -classpath ./&lt;span style="color: rgb(255, 0, 0); font-weight: bold;"&gt;:&lt;/span&gt;lib/jdom.jar HelloWorld&lt;br /&gt;&lt;br /&gt;there is a Semicolon in Windows, but a Colon in Linux&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2723439789450598995-8685009394306950149?l=xiefan198877.blogspot.com'/&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://xiefan198877.blogspot.com/feeds/8685009394306950149/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=2723439789450598995&amp;postID=8685009394306950149' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2723439789450598995/posts/default/8685009394306950149'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2723439789450598995/posts/default/8685009394306950149'/><link rel='alternate' type='text/html' href='http://xiefan198877.blogspot.com/2008/10/some-difference-of-java-in-classpath.html' title='some difference of java in -classpath between Windows and Linux'/><author><name>neo</name><uri>http://www.blogger.com/profile/13869860806218701712</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='06828608963211028445'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2723439789450598995.post-7855664024574134759</id><published>2008-10-16T04:33:00.000-07:00</published><updated>2008-10-16T04:36:42.106-07:00</updated><title type='text'>ubuntu to load an .iso file</title><content type='html'>There is no virtual cdrom. the only thing you need to do is to mount.&lt;br /&gt;for example:&lt;br /&gt;    mount   -t   iso9660  -o  loop  /root/unbuntu.iso    /cdrom&lt;br /&gt;"/root/unbuntu.iso" is the iso file&lt;br /&gt;"/cdrom" is where you want to mount&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2723439789450598995-7855664024574134759?l=xiefan198877.blogspot.com'/&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://xiefan198877.blogspot.com/feeds/7855664024574134759/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=2723439789450598995&amp;postID=7855664024574134759' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2723439789450598995/posts/default/7855664024574134759'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2723439789450598995/posts/default/7855664024574134759'/><link rel='alternate' type='text/html' href='http://xiefan198877.blogspot.com/2008/10/ubuntu-to-load-iso-file.html' title='ubuntu to load an .iso file'/><author><name>neo</name><uri>http://www.blogger.com/profile/13869860806218701712</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='06828608963211028445'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2723439789450598995.post-2234222887351759968</id><published>2008-06-28T06:42:00.001-07:00</published><updated>2008-06-28T06:47:11.369-07:00</updated><title type='text'>eclipse导出jar包的一些问题</title><content type='html'>eclipse导出jar包的时候，需要一个manifest.mf这个问题，它的作用是指定jar的main-&lt;br /&gt;class和外部导入的jar包，一下是一个示例：&lt;br /&gt;Manifest-Version: 1.0&lt;br /&gt;Class-Path: lib/bupt2008.jar lib/derby.jar lib/jdom.jar lib/kgsGtp.jar lib/mysql.jar lib/yogo.jar&lt;br /&gt;Main-Class: neo.GameTest&lt;br /&gt;##注意每个冒号之后，有且仅有一个空格&lt;br /&gt;&lt;br /&gt;运行的时候：&lt;br /&gt;java -jar ×.jar&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2723439789450598995-2234222887351759968?l=xiefan198877.blogspot.com'/&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://xiefan198877.blogspot.com/feeds/2234222887351759968/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=2723439789450598995&amp;postID=2234222887351759968' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2723439789450598995/posts/default/2234222887351759968'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2723439789450598995/posts/default/2234222887351759968'/><link rel='alternate' type='text/html' href='http://xiefan198877.blogspot.com/2008/06/eclipsejar.html' title='eclipse导出jar包的一些问题'/><author><name>neo</name><uri>http://www.blogger.com/profile/13869860806218701712</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='06828608963211028445'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2723439789450598995.post-9215330317776459139</id><published>2008-05-24T19:00:00.000-07:00</published><updated>2008-05-24T19:03:07.070-07:00</updated><title type='text'>在windows和linux下观察自己的port</title><content type='html'>windows下进入命令行&lt;br /&gt;natstat -a -n&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;linux下&lt;br /&gt; sudo nmap -sU &lt;host&gt;  //看udp端口&lt;br /&gt; sudo nmap -sT &lt;host&gt;  //看tcp端口&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2723439789450598995-9215330317776459139?l=xiefan198877.blogspot.com'/&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://xiefan198877.blogspot.com/feeds/9215330317776459139/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=2723439789450598995&amp;postID=9215330317776459139' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2723439789450598995/posts/default/9215330317776459139'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2723439789450598995/posts/default/9215330317776459139'/><link rel='alternate' type='text/html' href='http://xiefan198877.blogspot.com/2008/05/windowslinuxport.html' title='在windows和linux下观察自己的port'/><author><name>neo</name><uri>http://www.blogger.com/profile/13869860806218701712</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='06828608963211028445'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2723439789450598995.post-7031844275150131938</id><published>2008-05-20T05:46:00.000-07:00</published><updated>2008-05-20T05:47:48.626-07:00</updated><title type='text'>Linux下如何让时间成为文件名</title><content type='html'>如题，具体做法&lt;br /&gt;&lt;br /&gt;#include&lt;time.h&gt;&lt;br /&gt;........&lt;br /&gt; char* create_filename_by_time()&lt;br /&gt;{ &lt;br /&gt;  time_t t = time(0); &lt;br /&gt;  strftime(file, sizeof(file),"%Y_%m_%d%X.sgf"&lt;br /&gt;                       ,localtime(&amp;amp;t));&lt;br /&gt;  return file;&lt;br /&gt;}&lt;br /&gt;........&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2723439789450598995-7031844275150131938?l=xiefan198877.blogspot.com'/&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://xiefan198877.blogspot.com/feeds/7031844275150131938/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=2723439789450598995&amp;postID=7031844275150131938' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2723439789450598995/posts/default/7031844275150131938'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2723439789450598995/posts/default/7031844275150131938'/><link rel='alternate' type='text/html' href='http://xiefan198877.blogspot.com/2008/05/linux_20.html' title='Linux下如何让时间成为文件名'/><author><name>neo</name><uri>http://www.blogger.com/profile/13869860806218701712</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='06828608963211028445'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2723439789450598995.post-7856929426962088306</id><published>2008-05-20T05:45:00.001-07:00</published><updated>2008-05-20T05:45:58.496-07:00</updated><title type='text'>Linux</title><content type='html'>&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2723439789450598995-7856929426962088306?l=xiefan198877.blogspot.com'/&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://xiefan198877.blogspot.com/feeds/7856929426962088306/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=2723439789450598995&amp;postID=7856929426962088306' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2723439789450598995/posts/default/7856929426962088306'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2723439789450598995/posts/default/7856929426962088306'/><link rel='alternate' type='text/html' href='http://xiefan198877.blogspot.com/2008/05/linux.html' title='Linux'/><author><name>neo</name><uri>http://www.blogger.com/profile/13869860806218701712</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='06828608963211028445'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2723439789450598995.post-1315526002910526465</id><published>2008-05-20T05:08:00.000-07:00</published><updated>2008-05-20T05:23:56.016-07:00</updated><title type='text'>用Java NIO构建异步服务器程序</title><content type='html'>最近常用c++写服务器程序，unix下我用asio轻松的构建了异步io的服务器&lt;br /&gt;并实现了单线程对应多个socket的功能，但是java的tutorial上依旧只有同步&lt;br /&gt;的服务器例子，而且是为每一个客户建立一个线程，后来我发现了java.nio这个&lt;br /&gt;包，专门是用来写异步I/O程序的，以下是一个简单的我写的例子程序：&lt;br /&gt;&lt;br /&gt;××××××××××××××××××××××××&lt;br /&gt;服务器端&lt;br /&gt;××××××××××××××××××××××××&lt;br /&gt;&lt;p&gt;package neo.server;&lt;br /&gt;import java.io.FileInputStream;import java.io.IOException;import java.net.InetSocketAddress;import java.nio.ByteBuffer;import java.nio.CharBuffer;import java.nio.channels.FileChannel;import java.nio.channels.SelectionKey;import java.nio.channels.Selector;import java.nio.channels.ServerSocketChannel;import java.nio.channels.SocketChannel;import java.nio.charset.Charset;import java.nio.charset.CharsetDecoder;import java.util.Iterator;&lt;br /&gt;/** * 测试文件下载的NIOServer *  * @author tenyears.cn */&lt;/p&gt;&lt;p&gt;public class NIOServer {&lt;/p&gt;&lt;p&gt;  static int BLOCK = 4096;&lt;/p&gt;&lt;p&gt;// 处理与客户端的交互 &lt;/p&gt;&lt;p&gt;  public class HandleClient {  &lt;/p&gt;&lt;p&gt;  protected FileChannel channel;  &lt;/p&gt;&lt;p&gt;  protected ByteBuffer buffer;&lt;br /&gt;  public HandleClient() throws IOException &lt;/p&gt;&lt;p&gt;  {   &lt;/p&gt;&lt;p&gt;  this.channel = new FileInputStream(filename).getChannel();   &lt;/p&gt;&lt;p&gt;  this.buffer = ByteBuffer.allocate(BLOCK);  &lt;/p&gt;&lt;p&gt;  }&lt;br /&gt;  public ByteBuffer readBlock() &lt;/p&gt;&lt;p&gt;  {   &lt;/p&gt;&lt;p&gt;  try   {    &lt;/p&gt;&lt;p&gt;            buffer.clear();    &lt;/p&gt;&lt;p&gt;            int count = channel.read(buffer);    &lt;/p&gt;&lt;p&gt;            buffer.flip();    if (count &lt;= 0)     &lt;/p&gt;&lt;p&gt;            return null;   &lt;/p&gt;&lt;p&gt;           } catch (IOException e) {    &lt;/p&gt;&lt;p&gt;            e.printStackTrace();   }   &lt;/p&gt;&lt;p&gt;  return buffer;  &lt;/p&gt;&lt;p&gt;  }&lt;br /&gt;  public void close() {   &lt;/p&gt;&lt;p&gt;  try {    channel.close();   &lt;/p&gt;&lt;p&gt;  } catch (IOException e) {    &lt;/p&gt;&lt;p&gt;    e.printStackTrace();   } &lt;/p&gt;&lt;p&gt;  } &lt;/p&gt;&lt;p&gt;  }&lt;br /&gt; &lt;/p&gt;&lt;p&gt;protected Selector selector; &lt;/p&gt;&lt;p&gt;protected String filename = "d:\\bigfile.dat"; // a big file &lt;/p&gt;&lt;p&gt;protected ByteBuffer clientBuffer = ByteBuffer.allocate(BLOCK); &lt;/p&gt;&lt;p&gt;protected CharsetDecoder decoder;&lt;br /&gt;public NIOServer(int port) throws IOException {  &lt;/p&gt;&lt;p&gt;  selector = this.getSelector(port);  &lt;/p&gt;&lt;p&gt;  Charset charset = Charset.forName("GB2312");  &lt;/p&gt;&lt;p&gt;  decoder = charset.newDecoder(); &lt;/p&gt;&lt;p&gt;}&lt;br /&gt;Selector protected Selector getSelector(int port) throws IOException {  &lt;/p&gt;&lt;p&gt;  ServerSocketChannel server = ServerSocketChannel.open();  &lt;/p&gt;&lt;p&gt;  Selector sel = Selector.open();  &lt;/p&gt;&lt;p&gt;  server.socket().bind(new InetSocketAddress(port));  &lt;/p&gt;&lt;p&gt;  server.configureBlocking(false);  &lt;/p&gt;&lt;p&gt;  server.register(sel, SelectionKey.OP_ACCEPT);  &lt;/p&gt;&lt;p&gt;  return sel; }&lt;br /&gt; &lt;/p&gt;&lt;p&gt;// 监听端口 &lt;/p&gt;&lt;p&gt;  public void listen() {  &lt;/p&gt;&lt;p&gt;    try {   &lt;/p&gt;&lt;p&gt;      for (;;) {    &lt;/p&gt;&lt;p&gt;        selector.select();    &lt;/p&gt;&lt;p&gt;        Iterator iter = selector.selectedKeys().iterator();    &lt;/p&gt;&lt;p&gt;        while (iter.hasNext()) {     &lt;/p&gt;&lt;p&gt;             SelectionKey key = (SelectionKey) iter.next();     &lt;/p&gt;&lt;p&gt;             iter.remove();     &lt;/p&gt;&lt;p&gt;             handleKey(key);    &lt;/p&gt;&lt;p&gt;          }   &lt;/p&gt;&lt;p&gt;        }  &lt;/p&gt;&lt;p&gt;     } catch (IOException e) {   &lt;/p&gt;&lt;p&gt;        e.printStackTrace();  &lt;/p&gt;&lt;p&gt;     } &lt;/p&gt;&lt;p&gt;}&lt;br /&gt; /**  * 处理key所代表的事件  * @param key  * @throws IOException  */ protected void handleKey(SelectionKey key) throws IOException &lt;/p&gt;&lt;p&gt;{  &lt;/p&gt;&lt;p&gt;if (key.isAcceptable()) &lt;/p&gt;&lt;p&gt;  { // 接收请求   &lt;/p&gt;&lt;p&gt;  System.out.println("receive connection....");   &lt;/p&gt;&lt;p&gt;  ServerSocketChannel server = (ServerSocketChannel) key.channel();   &lt;/p&gt;&lt;p&gt;  SocketChannel channel = server.accept();   &lt;/p&gt;&lt;p&gt;  channel.configureBlocking(false);   &lt;/p&gt;&lt;p&gt;  channel.register(selector, SelectionKey.OP_READ);  &lt;/p&gt;&lt;p&gt;  } else if (key.isReadable()) &lt;/p&gt;&lt;p&gt;  { // 读信息   &lt;/p&gt;&lt;p&gt;  System.out.println("begin reading....");   &lt;/p&gt;&lt;p&gt;  SocketChannel channel = (SocketChannel) key.channel();   &lt;/p&gt;&lt;p&gt;  int count = channel.read(clientBuffer);   &lt;/p&gt;&lt;p&gt;  if (count &gt; 0) {    &lt;/p&gt;&lt;p&gt;    clientBuffer.flip();    &lt;/p&gt;&lt;p&gt;    CharBuffer charBuffer = decoder.decode(clientBuffer);    &lt;/p&gt;&lt;p&gt;    System.out.println("Client &gt;&gt;" + charBuffer.toString());    &lt;/p&gt;&lt;p&gt;    SelectionKey wKey = channel.register(selector,      SelectionKey.OP_WRITE);    &lt;/p&gt;&lt;p&gt;    wKey.attach(new HandleClient());   } &lt;/p&gt;&lt;p&gt;  else    &lt;/p&gt;&lt;p&gt;    channel.close();   &lt;/p&gt;&lt;p&gt;   clientBuffer.clear();  } &lt;/p&gt;&lt;p&gt;  else if (key.isWritable()) { // 写事件   &lt;/p&gt;&lt;p&gt;   System.out.println("begin writing");   &lt;/p&gt;&lt;p&gt;   SocketChannel channel = (SocketChannel) key.channel();   &lt;/p&gt;&lt;p&gt;   HandleClient handle = (HandleClient) key.attachment();   &lt;/p&gt;&lt;p&gt;   ByteBuffer block = handle.readBlock();   &lt;/p&gt;&lt;p&gt;   if (block != null)   &lt;/p&gt;&lt;p&gt;     channel.write(block);   &lt;/p&gt;&lt;p&gt;   else {    &lt;/p&gt;&lt;p&gt;      handle.close();    &lt;/p&gt;&lt;p&gt;      channel.close();   &lt;/p&gt;&lt;p&gt;    }  &lt;/p&gt;&lt;p&gt;  } &lt;/p&gt;&lt;p&gt;}&lt;br /&gt; public static void main(String[] args) {  &lt;/p&gt;&lt;p&gt;   int port = 12345;  &lt;/p&gt;&lt;p&gt;    try {   &lt;/p&gt;&lt;p&gt;      NIOServer server = new NIOServer(port);   &lt;/p&gt;&lt;p&gt;      System.out.println("Listernint on " + port);   &lt;/p&gt;&lt;p&gt;      while (true) {    server.listen();   }  } catch (IOException e) {   e.printStackTrace();  } }}&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2723439789450598995-1315526002910526465?l=xiefan198877.blogspot.com'/&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://xiefan198877.blogspot.com/feeds/1315526002910526465/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=2723439789450598995&amp;postID=1315526002910526465' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2723439789450598995/posts/default/1315526002910526465'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2723439789450598995/posts/default/1315526002910526465'/><link rel='alternate' type='text/html' href='http://xiefan198877.blogspot.com/2008/05/java-nio.html' title='用Java NIO构建异步服务器程序'/><author><name>neo</name><uri>http://www.blogger.com/profile/13869860806218701712</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='06828608963211028445'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2723439789450598995.post-6557750696514382611</id><published>2008-05-16T03:44:00.000-07:00</published><updated>2008-05-16T03:45:12.605-07:00</updated><title type='text'>（转）eclipse使用技巧</title><content type='html'>Template：Alt + / 修改处：窗口-&gt;喜好设定-&gt;工作台-&gt;按键-&gt;编辑-&gt;内容辅助。 个人习惯：Shift+SPACE(空白)。 简易说明：编辑程序代码时，打sysout +Template启动键，就 会自动出现：System.out.println(); 。 设定Template的格式：窗口-&gt;喜好设定-&gt;Java-&gt;编辑器-&gt;模板。&lt;br /&gt;程序代码自动排版：Ctrl+Shift+F修改处：窗口-&gt;喜好设定-&gt;工作台-&gt;按键-&gt;程序代码-&gt;格式。 个人习惯：Alt+Z。 自动排版设定：窗口-&gt;喜好设定-&gt;Java-&gt;程序代码格式制作程序。样式页面-&gt;将插入tab(而非空格键)以内缩，该选项取消勾选，下面空格数目填4，这样在自动编排时会以空格4作缩排。&lt;br /&gt;快速执行程序：Ctrl + F11 个人习惯：ALT+X修改处：窗口-&gt;喜好设定-&gt;工作台-&gt;按键-&gt;执行-&gt;启动前一次的启动作业。 简易说明：第一次执行时，它会询问您执行模式， 设置好后，以后只要按这个热键，它就会快速执行。 &lt;alt+z(排版完)、atl+x(执行)&gt;..我觉得很顺手^___^&lt;br /&gt;自动汇入所需要的类别：Ctrl+Shift+O 简易说明： 假设我们没有Import任何类别时，当我们在程序里打入：&lt;br /&gt;BufferedReader buf = new BufferedReader(new InputStreamReader(System.in));&lt;br /&gt;此时Eclipse会警示说没有汇入类别，这时我们只要按下Ctrl+Shift+O，它就会自动帮我们Import类别。&lt;br /&gt;查看使用类别的原始码：Ctrl+鼠标左键点击 简易说明：可以看到您所使用类别的原始码。&lt;br /&gt;将选取的文字批注起来：Ctrl+/简易说明：Debug时很方便。 修改处：窗口-&gt;喜好设定-&gt;工作台-&gt;按键-&gt;程序代码-&gt;批注&lt;br /&gt;视景切换：Ctrl+F8 个人习惯：Alt+S。 修改处：窗口-&gt;喜好设定-&gt;工作台-&gt;按键-&gt;窗口-&gt;下一个视景。 简易说明：可以方便我们快速切换编辑、除错等视景。&lt;br /&gt;密技篇： 一套Eclipse可同时切换，英文、繁体、简体显示： 1.首先要先安装完中文化包。 2.在桌面的快捷方式后面加上参数即可， 英文-&gt; -nl "zh_US"繁体-&gt; -nl "zh_TW" 简体-&gt; -nl "zh_CN"。 (其它语系以此类推) 像我2.1.2中文化后，我在我桌面的Eclipse快捷方式加入参数-n1 "zh_US"。 "C:\Program Files\eclipse\eclipse.exe" -n "zh_US" 接口就会变回英文语系噜。&lt;br /&gt;利用Eclipse，在Word编辑文书时可不必将程序代码重新编排： 将Eclipse程序编辑区的程序代码整个复制下来(Ctrl+C)，直接贴(Ctrl+V)到 Word或WordPad上，您将会发现在Word里的程序代码格式，跟Eclipse 所设定的完全一样，包括字型、缩排、关键词颜色。我曾试过JBuilder 、GEL、NetBeans...使用复制贴上时，只有缩排格式一样，字型、颜 色等都不会改变。&lt;br /&gt;外挂篇： 外挂安装：将外挂包下载回来后，将其解压缩后，您会发现features、 plugins这2个数据夹，将里面的东西都复制或移动到Eclipse的features 、plugins数据夹内后，重新启动Eclipse即可。&lt;br /&gt;让Eclipse可以像JBuilderX一样使用拖拉方式建构GUI的外挂： 1.Jigloo SWT/Swing GUI Builder ： &lt;a href="http://cloudgarden.com/jigloo/index.html"&gt;http://cloudgarden.com/jigloo/index.html&lt;/a&gt; ; 下载此版本：Jigloo plugin for Eclipse (using Java 1.4 or 1.5) 安装后即可由档案-&gt;新建-&gt;其它-&gt;GUI Form选取要建构的GUI类型。&lt;br /&gt;2.Eclipse Visual Editor Project：&lt;a href="http://www.eclipse.org/vep/"&gt;http://www.eclipse.org/vep/&lt;/a&gt; ; 点选下方Download Page，再点选Latest Release 0.5.0进入下载。 除了VE-runtime-0.5.0.zip要下载外，以下这2个也要： EMF build 1.1.1: (build page) (download zip) GEF Build 2.1.2: (build page) (download zip)&lt;br /&gt;3.0 M8版本，请下载：EMF build I200403250631GEF Build I20040330 VE-runtime-1.0M1&lt;br /&gt;安装成功后，便可由File-&gt;New-&gt;Visual Class开始UI设计。 安装成功后，即可由新建-&gt;Java-&gt;AWT与Swing里选择 所要建构的GUI类型开始进行设计。VE必须配合着对应 版本，才能正常使用，否则即使安装成功，使用上仍会 有问题。&lt;br /&gt;使用Eclipse来开发JSP程序： 外挂名称：lomboz(下载页面) &lt;a href="http://forge.objectweb.org/project/showfiles.php?group_id=97"&gt;http://forge.objectweb.org/project/showfiles.php?group_id=97&lt;/a&gt; ; 请选择适合自己版本的lomboz下载，lomboz.212.p1.zip表示2.1.2版， lomboz.3m7.zip表示M7版本....以此类推。 lomboz安装以及设置教学： Eclipse开发JSP-教学文件&lt;br /&gt;Java转exe篇：实现方式：Eclipse搭配JSmooth(免费)。1.先由Eclipse制作包含Manifest的JAR。 制作教程 2.使用JSmooth将做好的JAR包装成EXE。 JSmooth下载页面： &lt;a href="http://jsmooth.sourceforge.net/index.php"&gt;http://jsmooth.sourceforge.net/index.php&lt;/a&gt; ; 3.制作完成的exe文件，可在有装置JRE的Windows上执行。&lt;br /&gt;Eclipse-Java编辑器最佳设定： 编辑器字型设定：工作台-&gt;字型-&gt;Java编辑器文字字型。 (建议设定Courier New -regular 10)&lt;br /&gt;编辑器相关设定：窗口-&gt;喜好设定-&gt;Java-&gt;编辑器&lt;br /&gt;外观：显示行号、强调对称显示的方括号、强调显示现行行、显示打印边距，将其勾选，Tab宽度设4，打印编距字段设80。 程序代码协助：采预设即可。语法：可设定关键词、字符串等等的显示颜色。附注：采预设即可。 输入：全部字段都勾选。 浮动说明：采预设即可。 导览：采预设即可。&lt;br /&gt;使自动排版排出来的效果，最符合Java设计惯例的设定： 自动排版设定：窗口-&gt;喜好设定-&gt;Java-&gt;程序代码制作格式。&lt;br /&gt;换行：全部不勾选。&lt;br /&gt;分行：行长度上限设：80。样式：只将强制转型后插入空白勾选。内缩空格数目：设为4。&lt;br /&gt;Eclipse的教学文件： Eclipse 3.0系列热键表 - 中英对照解说版 (by sungo) ~New~Window+GCC+CDT用Eclipse开发C、C++ (by sungo) ~New~&lt;br /&gt;其它： 扩充Eclipse的Java 开发工具(中文) 使用Eclipse开发J2EE 应用程序(中文) 使用Eclipse平台进行除错(中文) 用Eclipse进行XML 开发(中文)开发Eclipse外挂程序(中文) 国际化您的Eclipse外挂程序(英文) 将Swing编辑器加入Eclipse(英文)如何测试你的Eclipse plug-in符合国际市场需求(英文)&lt;br /&gt;Eclipse的相关网站： &lt;a href="http://eclipse-plugins.2y.net/eclipse/index.jsp"&gt;http://eclipse-plugins.2y.net/eclipse/index.jsp&lt;/a&gt; ; &lt;a href="http://www.eclipseplugincentral.com/"&gt;http://www.eclipseplugincentral.com/&lt;/a&gt; ; Eclipse相关教学[简体]&lt;br /&gt;写程序写到很累了，想休息一下？？玩玩小Game是 不错的选择，下面介绍使用Eclipse玩Game的Plug-in。&lt;br /&gt;补充外挂篇： Eclipse-Games： &lt;a href="http://eclipse-games.sourceforge.net/"&gt;http://eclipse-games.sourceforge.net/&lt;/a&gt; ; 版本选：Latest Release 3.0.1 (Release Notes) Sat, 3 Jan 2004&lt;br /&gt;外挂安装完后，重新开启Eclipse。 窗口-&gt;自订视景-&gt;其它-&gt;勾选Game Actions。 再将Eclipse关闭，重新再启动，就可以开始玩噜。(共有4种：采地雷I、采地雷II、贪食蛇、仓库番。)&lt;br /&gt;(Eclipse 2.1.2 +中文化 玩Game -仓库番)&lt;br /&gt;补充：(于Eclipse使用assertion机制)Eclipse版本：2.1.3 release。&lt;br /&gt;JDK1.4版新加入的assertion机制(关键词：assert)，由于JDK1.4编译器预设是兼容1.3，所以要使用assert必须在编译时加上-source 1.4的参数.&lt;br /&gt;C:\&gt;javac -source 1.4 XXX.java 执行时则必须加-ea 或-enableassertions参数启动。&lt;br /&gt;C:\&gt;java -ea XXX&lt;br /&gt;如要在Eclipse中使用assertion机制，请作以下设定： 设定一：(编译设定)Windows-&gt;Preferance-&gt;Java-&gt;Compiler-&gt;Compliance and Classfiles 页面。将..JDK Compliance level-&gt;Compiler compliance level调成1.4。&lt;br /&gt;设定二：(执行设定) Run-&gt;Run-&gt;(x)=Arguments页面，在VM arguments加入-da参数，按下 Run button便可看到启动assertion后的执行结果。&lt;br /&gt;(Eclipse 2.1.3 release + assertion测试) &lt;assert判别为false，所以show出assertionerror&gt;&lt;br /&gt;新版(m8+)的eclipse可以设vm arguments 另外提供一种设法，是在eclipse启动时加入vm arguments(跟加大eclipse预设内存大小的方式一样) 这样就不用每次run都得需去设vm arguments&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2723439789450598995-6557750696514382611?l=xiefan198877.blogspot.com'/&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://xiefan198877.blogspot.com/feeds/6557750696514382611/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=2723439789450598995&amp;postID=6557750696514382611' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2723439789450598995/posts/default/6557750696514382611'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2723439789450598995/posts/default/6557750696514382611'/><link rel='alternate' type='text/html' href='http://xiefan198877.blogspot.com/2008/05/eclipse.html' title='（转）eclipse使用技巧'/><author><name>neo</name><uri>http://www.blogger.com/profile/13869860806218701712</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='06828608963211028445'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2723439789450598995.post-2881357920220837620</id><published>2008-05-14T05:32:00.000-07:00</published><updated>2008-05-14T05:40:25.227-07:00</updated><title type='text'>mysql导入导出数据库</title><content type='html'>几个常用用例：&lt;br /&gt;1.导出整个数据库&lt;br /&gt;mysqldump -u 用户名 -p 数据库名 &gt; 导出的文件名&lt;br /&gt;mysqldump -u wcnc -p smgp_apps_wcnc &gt; wcnc.sql&lt;br /&gt;&lt;br /&gt;2.导出一个表&lt;br /&gt;mysqldump -u 用户名 -p 数据库名 表名&gt; 导出的文件名&lt;br /&gt;mysqldump -u wcnc -p smgp_apps_wcnc users&gt; wcnc_users.sql&lt;br /&gt;&lt;br /&gt;3.导入数据库&lt;br /&gt;先建一个空的数据库&lt;br /&gt;常用source 命令进入mysql数据库控制台，&lt;br /&gt;如mysql -u root -p&lt;br /&gt;mysql&gt;create DATABASSE database&lt;br /&gt;范例：mysql -uabc_f -p database &lt; abc.sql（导入数据库database从abc.sql文件）&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;4.导入数据库&lt;br /&gt;常用source 命令进入mysql数据库控制台，&lt;br /&gt;如mysql -u root -p&lt;br /&gt;mysql&gt;use 数据库&lt;br /&gt;然后使用source命令，后面参数为脚本文件（如这里用到的.sql）&lt;br /&gt;mysql&gt;source d:wcnc_db.sql&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2723439789450598995-2881357920220837620?l=xiefan198877.blogspot.com'/&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://xiefan198877.blogspot.com/feeds/2881357920220837620/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=2723439789450598995&amp;postID=2881357920220837620' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2723439789450598995/posts/default/2881357920220837620'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2723439789450598995/posts/default/2881357920220837620'/><link rel='alternate' type='text/html' href='http://xiefan198877.blogspot.com/2008/05/mysql.html' title='mysql导入导出数据库'/><author><name>neo</name><uri>http://www.blogger.com/profile/13869860806218701712</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='06828608963211028445'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2723439789450598995.post-1337179662574613464</id><published>2008-05-14T02:24:00.000-07:00</published><updated>2008-05-14T02:30:56.283-07:00</updated><title type='text'>段错误（转载）</title><content type='html'>linux下大家常常会碰到的一种错误是段错误，这里的去除段错误的一种方法叫做分析&lt;br /&gt;core文件，一般情况core文件是默认不生成的，怎样让core文件生成呢？我们先这么做&lt;br /&gt;××××××××××××××××××××××××××××××××&lt;br /&gt;xiaosuo@gentux test $ ulimit -c&lt;br /&gt;0&lt;br /&gt;xiaosuo@gentux test $ ulimit -c 1000&lt;br /&gt;xiaosuo@gentux test $ ulimit -c&lt;br /&gt;1000&lt;br /&gt;xiaosuo@gentux test $ ./a.out&lt;br /&gt;段错误 (core dumped)&lt;br /&gt;xiaosuo@gentux test $ ls&lt;br /&gt;a.out  core  d.c  f.c  g.c  pango.c  test_iconv.c  test_regex.c&lt;br /&gt;××××××××××××××××××××××××××××××××××&lt;br /&gt;然后我们就可以用gdb进行调试&lt;br /&gt;xiaosuo@gentux test $ gdb ./a.out core&lt;br /&gt;&lt;br /&gt;至于gdb的使用，大家可以用man命令看一下&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2723439789450598995-1337179662574613464?l=xiefan198877.blogspot.com'/&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://xiefan198877.blogspot.com/feeds/1337179662574613464/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=2723439789450598995&amp;postID=1337179662574613464' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2723439789450598995/posts/default/1337179662574613464'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2723439789450598995/posts/default/1337179662574613464'/><link rel='alternate' type='text/html' href='http://xiefan198877.blogspot.com/2008/05/blog-post.html' title='段错误（转载）'/><author><name>neo</name><uri>http://www.blogger.com/profile/13869860806218701712</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='06828608963211028445'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2723439789450598995.post-3712039469975540336</id><published>2008-05-14T02:09:00.000-07:00</published><updated>2008-05-14T02:18:06.277-07:00</updated><title type='text'>怎样登陆被封禁的google blog</title><content type='html'>不知道中国政府保护民族企业为什么这么敬业？反正blogspot被封禁多次了。。。。。&lt;br /&gt;贴一下登陆被封blogspot的方法：&lt;br /&gt;1，windows下，在windows/system32/drivers/etc/hosts 里面添加一条&lt;br /&gt;                             72.14.219.190   &lt;你的用户名&gt;.blogspot.com&lt;br /&gt;2，linux下，在/etc/hosts里面添加一条&lt;br /&gt;                             72.14.219.190   &lt;你的用户名&gt;.blogspot.com&lt;br /&gt;这样你就可以登上blogspot了&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2723439789450598995-3712039469975540336?l=xiefan198877.blogspot.com'/&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://xiefan198877.blogspot.com/feeds/3712039469975540336/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=2723439789450598995&amp;postID=3712039469975540336' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2723439789450598995/posts/default/3712039469975540336'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2723439789450598995/posts/default/3712039469975540336'/><link rel='alternate' type='text/html' href='http://xiefan198877.blogspot.com/2008/05/google-blog.html' title='怎样登陆被封禁的google blog'/><author><name>neo</name><uri>http://www.blogger.com/profile/13869860806218701712</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='06828608963211028445'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2723439789450598995.post-6994238931013173570</id><published>2008-05-02T00:07:00.000-07:00</published><updated>2008-05-02T00:19:34.146-07:00</updated><title type='text'>Java和C＋＋的include和import的一些区别</title><content type='html'>一个大的c＋＋系统，你在某个文件里面添加一行&lt;br /&gt;    #include "*****.h"&lt;br /&gt;这是相當危险的一件事情，为什么呢？&lt;br /&gt;因为*****.h里面可能包含了其他的头文件，而这些头文件里面的一些声明&lt;br /&gt;可能在你包含*******.h这个文件里面或者他所包含的文件里面还没有定义，&lt;br /&gt;他会报：invalid use of undefined type ******&lt;br /&gt;也就是说 c＋＋中，你的头文件的包含顺序有可能会使你的程序报错&lt;br /&gt;&lt;br /&gt;在一个大的Java系统中，你在某个文件中添加一行&lt;br /&gt;    import **.**.**;&lt;br /&gt;这是很安全的一件事情，因为你导入的那个类他导入的类不会被你导入&lt;br /&gt;比如说A类导入了Point，B类导入了A，但是当B类要用的Point的时候，他還是&lt;br /&gt;得导入Point类，这是的所有的类有了相对独立性&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2723439789450598995-6994238931013173570?l=xiefan198877.blogspot.com'/&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://xiefan198877.blogspot.com/feeds/6994238931013173570/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=2723439789450598995&amp;postID=6994238931013173570' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2723439789450598995/posts/default/6994238931013173570'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2723439789450598995/posts/default/6994238931013173570'/><link rel='alternate' type='text/html' href='http://xiefan198877.blogspot.com/2008/05/javacincludeimport.html' title='Java和C＋＋的include和import的一些区别'/><author><name>neo</name><uri>http://www.blogger.com/profile/13869860806218701712</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='06828608963211028445'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2723439789450598995.post-3805430995880148747</id><published>2008-04-30T05:11:00.000-07:00</published><updated>2008-04-30T05:22:51.308-07:00</updated><title type='text'>Asio实现线程池绑定多个socket对外部进行响应</title><content type='html'>主要用到几个基本的步骤&lt;br /&gt;1，你要让很多个socket绑定在多个端口上&lt;br /&gt;    service.sin_family = AF_INET;&lt;br /&gt;    service.sin_addr.s_addr = htonl(INADDR_ANY);&lt;br /&gt;    for (int i = 0; i&lt; svnodes_num;) {&lt;br /&gt;        g_bindsocks[i] = socket( AF_INET, SOCK_DGRAM, 0);&lt;br /&gt;        if ((g_bindsocks[i]) &lt; 0)&lt;br /&gt;            return false;&lt;br /&gt;        service.sin_port = htons(nextport);&lt;br /&gt;        if (bind(g_bindsocks[i], (sockaddr*) &amp;amp;service, sizeof(service))&gt;=0) {&lt;br /&gt;            fcntl(g_bindsocks[i], F_SETOWN, getpid());&lt;br /&gt;            ioctl(g_bindsocks[i], FIOASYNC, &amp;amp;on);&lt;br /&gt;            ioctl(g_bindsocks[i], FIONBIO, &amp;amp;on);&lt;br /&gt;            g_bindsocks_ports[i] = nextport;&lt;br /&gt;            i ++;&lt;br /&gt;        } else {&lt;br /&gt;            close(g_bindsocks[i]);&lt;br /&gt;        }&lt;br /&gt;        nextport++;&lt;br /&gt;        if (nextport &gt;=0x10000)&lt;br /&gt;            return false;&lt;br /&gt;    }&lt;br /&gt;2，你要忽略所有的sigio信号同时跑起asio的udp多线程的server端&lt;br /&gt;    void* dg_echo(void* param)&lt;br /&gt;{&lt;br /&gt;    signal(SIGIO, SIG_IGN); ／／忽略所有的sigio信号&lt;br /&gt;    AsioFrame(); //Use the asioframe to handle this&lt;br /&gt;}&lt;br /&gt;3，udp_server的代码在asio的tutorial里面&lt;br /&gt;    我现在把怎样绑定写出来&lt;br /&gt;    void AsioFrame() {&lt;br /&gt;    try&lt;br /&gt;    {&lt;br /&gt;        #ifdef DEBUG&lt;br /&gt;        std::cout&lt;&lt;"asioframe run!"&lt;&lt;std::endl;&lt;br /&gt;        #endif&lt;br /&gt;        boost::asio::io_service io_service;&lt;br /&gt;        uint32 numsocks = Util::GetNumOfVirtualNodes();&lt;br /&gt;        int* sockptr = (int *)Util::GetBindSocksPtr();&lt;br /&gt;        udp_server* serverpool[100];&lt;br /&gt;        if (numsocks&gt; 100)&lt;br /&gt;        numsocks = 100;&lt;br /&gt;        for (uint32 id = 0; id &lt; numsocks; id ++)&lt;br /&gt;        {&lt;br /&gt;            serverpool[id] = new udp_server(io_service, id, sockptr[id]);&lt;br /&gt;        }&lt;br /&gt;        io_service.run();&lt;br /&gt;&lt;br /&gt;        /*for (uint32 id = 0; id &lt; numsocks; id ++)&lt;br /&gt;         {&lt;br /&gt;         delete serverpool[id];&lt;br /&gt;         }*/&lt;br /&gt;        }&lt;br /&gt;        catch (std::exception&amp;amp; e)&lt;br /&gt;        {&lt;br /&gt;        std::cerr &lt;&lt; e.what() &lt;&lt; std::endl;&lt;br /&gt;        }&lt;br /&gt;    }&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2723439789450598995-3805430995880148747?l=xiefan198877.blogspot.com'/&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://xiefan198877.blogspot.com/feeds/3805430995880148747/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=2723439789450598995&amp;postID=3805430995880148747' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2723439789450598995/posts/default/3805430995880148747'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2723439789450598995/posts/default/3805430995880148747'/><link rel='alternate' type='text/html' href='http://xiefan198877.blogspot.com/2008/04/asiosocket.html' title='Asio实现线程池绑定多个socket对外部进行响应'/><author><name>neo</name><uri>http://www.blogger.com/profile/13869860806218701712</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='06828608963211028445'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2723439789450598995.post-6116180518284683102</id><published>2008-04-30T01:36:00.000-07:00</published><updated>2008-04-30T02:04:34.057-07:00</updated><title type='text'>eclipse链接boost库的情况</title><content type='html'>最近在做一个项目在linux用到boost的库，以下是我遇到的一些问题和解决方案&lt;br /&gt;最新出的boost 1.35库里面已经包含了asio的库了!&lt;br /&gt;大家都知道boost和asio的库都是头文件的库（不用编译），但是新版本的boost里面，&lt;br /&gt;最起码有一个库是必须编译的 即Boost.System，如果在编译的时候不添加这个库的话，&lt;br /&gt;用到asio的时候（或者其他，我没试过），就会报一个undefined bind::system::get_system_proxy()等等错误。处理方法是在编译的时候加入libboost_system_gc41_mt.so&lt;br /&gt;&lt;br /&gt;这个库编译方法有两种：&lt;br /&gt;1，在boost1.35目录下面&lt;br /&gt;    #./configure&lt;br /&gt;    #make install    &lt;br /&gt;    这样会把所有的库添加到你的/usr/local/lib下面&lt;br /&gt;    然后，你试一下還是不行，这是因为你还没有装在到cash里面，接下来要这么处理&lt;br /&gt;    #sudo gedit /etc/ld.so.conf (里面可能包含了其他的conf文件) 里面是动态库的地址&lt;br /&gt;    一般来说，地址应该已经在里面了   &lt;br /&gt;    #sudo ldconfig  重新刷一边cash&lt;br /&gt;2，第二个方法不用全部编译，先&lt;br /&gt;    ＃./configure&lt;br /&gt;    然后在boost_1_35_0/tools/jam/src/bin.linuxx86 把bjam考到&lt;br /&gt;    boost_1_35_0/libs/system/build下&lt;br /&gt;    然后到该目录下＃sudo bjam&lt;br /&gt;    libboost_system_gc41_mt.so会产生在boost1_35的根目录的bin.v2里面&lt;br /&gt;    其他操作和方法一一样&lt;br /&gt;&lt;br /&gt;还有一个注意是，动态库和静态库一样需要在linker里面写上        &lt;br /&gt;&lt;br /&gt;boost_1_35_0/libs/system/build&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2723439789450598995-6116180518284683102?l=xiefan198877.blogspot.com'/&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://xiefan198877.blogspot.com/feeds/6116180518284683102/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=2723439789450598995&amp;postID=6116180518284683102' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2723439789450598995/posts/default/6116180518284683102'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2723439789450598995/posts/default/6116180518284683102'/><link rel='alternate' type='text/html' href='http://xiefan198877.blogspot.com/2008/04/eclipseboost.html' title='eclipse链接boost库的情况'/><author><name>neo</name><uri>http://www.blogger.com/profile/13869860806218701712</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='06828608963211028445'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry></feed>