﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>C++博客-blueskiner</title><link>http://www.cppblog.com/blueskiner/</link><description /><language>zh-cn</language><lastBuildDate>Tue, 14 Apr 2026 23:08:39 GMT</lastBuildDate><pubDate>Tue, 14 Apr 2026 23:08:39 GMT</pubDate><ttl>60</ttl><item><title>网上转的一篇关于boost asio网络引擎开发的文章</title><link>http://www.cppblog.com/blueskiner/archive/2014/07/24/207768.html</link><dc:creator>卡洛shll</dc:creator><author>卡洛shll</author><pubDate>Thu, 24 Jul 2014 00:21:00 GMT</pubDate><guid>http://www.cppblog.com/blueskiner/archive/2014/07/24/207768.html</guid><wfw:comment>http://www.cppblog.com/blueskiner/comments/207768.html</wfw:comment><comments>http://www.cppblog.com/blueskiner/archive/2014/07/24/207768.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/blueskiner/comments/commentRss/207768.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/blueskiner/services/trackbacks/207768.html</trackback:ping><description><![CDATA[<span style="color: #454545; font-family: tahoma, helvetica, arial; background-color: #ffffff;">今天找到了贵论坛，发现坛主的很多想法和本人不谋而合，本人近1年主要精力都致力于开发一个大型多人在线游戏的基本架构和相关的技术模组。而我欣喜的发现我与坛主的研究方向正好相反：我是先从服务器端开始研究入手的，目前服务器端告一段落，正准备开始客户端的研发，在寻找客户端引擎的时候碰巧找到了这里。</span><br style="color: #454545; font-family: tahoma, helvetica, arial; background-color: #ffffff;" /><span style="color: #454545; font-family: tahoma, helvetica, arial; background-color: #ffffff;">我看到坛主的这个板块，了解到Orz正需要一些服务器方面的资料，在此我先奉上个人的服务器端的一些成果，希望能有所帮助。</span><br style="color: #454545; font-family: tahoma, helvetica, arial; background-color: #ffffff;" /><span style="color: #454545; font-family: tahoma, helvetica, arial; background-color: #ffffff;">（一）自己开发的一个基于boost::asio的网络引擎</span><br style="color: #454545; font-family: tahoma, helvetica, arial; background-color: #ffffff;" /><span style="color: #454545; font-family: tahoma, helvetica, arial; background-color: #ffffff;">首先这个网络引擎是基于boost::asio的一个封装，网络部分功能非常底层，API只有基本的listen、connect、send、kick等（均为异步，目前只实现了TCP协议），而其他方面提供的是基于mysql的db接口和log接口，还有一个自己开发的对象池，用于使用FreeList的概念来事先分配内存，降低运行时期内存的分配时间；</span><br style="color: #454545; font-family: tahoma, helvetica, arial; background-color: #ffffff;" /><span style="color: #454545; font-family: tahoma, helvetica, arial; background-color: #ffffff;">另外就是开发了一个多线程下的数据结构，一个线程安全的map，这个map可以让无限个线程同时读和写（包括添加元素、删除元素、修改元素）而无需任何因为互斥锁定带来的线程等待等开销。即是说1000个线程和1个线程操作这个map的效率是相同的。</span><br style="color: #454545; font-family: tahoma, helvetica, arial; background-color: #ffffff;" /><span style="color: #454545; font-family: tahoma, helvetica, arial; background-color: #ffffff;">发布形式：win32（64位未测试，但是开发考虑了相关的定制，例如指针和long在64位下从4字节提高到8字节，引擎底层做了数据类型的typedef）下 dll+lib+include；linux（Redhat、CentOS5.x，gcc3.4以上，需要安装boost1.37和mysql5.0）so+include；source code，yes，of course！</span><br style="color: #454545; font-family: tahoma, helvetica, arial; background-color: #ffffff;" /><span style="color: #454545; font-family: tahoma, helvetica, arial; background-color: #ffffff;">网络部分的基本结构是这样的：</span><br style="color: #454545; font-family: tahoma, helvetica, arial; background-color: #ffffff;" /><span style="color: #454545; font-family: tahoma, helvetica, arial; background-color: #ffffff;">#1 io部分设计。一个线程池负责处理io，这个实际上就是一组boost::asio::io_service::run，每个boost::asio::io_service下有一组私有线程，负责处理异步io事件，这里，boost::asio::io_service得数量和其下私有线程的数量是可以根据配置文件自由设置的，如果你了解boost::asio，那么一定知道它推荐一个cpu对应一个boost::asio::io_service对象（或者一个boost::asio::io_service，但是每个boost::asio::io_service下的私有线程对应每个cpu），这样在多处理器（或者多核处理器）下效率可以达到最高；</span><br style="color: #454545; font-family: tahoma, helvetica, arial; background-color: #ffffff;" /><span style="color: #454545; font-family: tahoma, helvetica, arial; background-color: #ffffff;">#2 complete handler设计。另一个线程池负责处理封装好的complete handler，即对应io事件的用户定义的逻辑处理，例如io recv事件，对应一个用户实现邦定的（使用boost::bind和boost::function）handler来处理当接受到socket消息的时候调用对应的handler（函数、仿函数对象、成员函数等）。#1和#2中的线程池之间使用一组线程安全的队列来传递消息（传递使用直接的值拷贝，不使用动态内存，因为动态内存的申请和释放太消耗时间，即便使用内存池也一样。1k以下的值拷贝的时间损耗都远远小于对应的动态内存申请的时间；另外使用值拷贝也有线程安全的考虑）；</span><br style="color: #454545; font-family: tahoma, helvetica, arial; background-color: #ffffff;" /><span style="color: #454545; font-family: tahoma, helvetica, arial; background-color: #ffffff;">#3 封包的设计。head+body，head中有固定4字节的body长度信息（int32）和4字节的封包类型信息（int32），如果愿意，可以修改代码进行扩展（packet部分是独立于引擎的模块，也是一组dll,lib,include或者so,include），接受和发送由于是tcp，所以按照head中的body长度来控制一个封包的完整性。</span><br style="color: #454545; font-family: tahoma, helvetica, arial; background-color: #ffffff;" /><span style="color: #454545; font-family: tahoma, helvetica, arial; background-color: #ffffff;">#4 多线程模型。boss-worker模型，主要用于广播消息、查找、和db、log的实现上；生产者、消费者模型，主要用于#1和#2 的两个线程池之间的事件传递（io线程池产生completehandler，用户的线程池负责处理、消费）</span><br style="color: #454545; font-family: tahoma, helvetica, arial; background-color: #ffffff;" /><span style="color: #454545; font-family: tahoma, helvetica, arial; background-color: #ffffff;">#5 session的设计。一个session就是一个成功连接进来的客户端socket代理，出于线程安全和效率的考虑，session的存储容器不使用任何stl和boost的容器，而是使用&#8212;&#8212;C的数组（当然不是静态数组，而是：new char[n]这样的），来实现。而且是二维数组，这样配合对象池（指与先分配好一组&#8220;空&#8221;的session），我们无需任何互斥变量就能够毫无阻碍的访问和修改数组中的每个元素（session），并发性能达到最大。至于二维数组的设计，第二维的值对应io线程池和用户线程池中的线程数量，即一个线程唯一邦定一组session，这是为了分配session id时候效率和安全的考虑。（例如id 0~9对应一组session，10~19是第二组，而每组id和session都唯一绑定一个线程）</span><br style="color: #454545; font-family: tahoma, helvetica, arial; background-color: #ffffff;" /><span style="color: #454545; font-family: tahoma, helvetica, arial; background-color: #ffffff;">#6 线程之间数据传递的设计。线程安全的queue，使用了boost::thread::locks中的mutex、shared_mutex、condition_variable_any等概念，当queue空闲时，使用条件变量等待特定的事件（例如新的元素push进来，或者程序退出等）；</span><br style="color: #454545; font-family: tahoma, helvetica, arial; background-color: #ffffff;" /><span style="color: #454545; font-family: tahoma, helvetica, arial; background-color: #ffffff;">#7 异步下session的唯一性。由于整体是异步的，所以不可避免的会出现当一个session的某个处理还未结束的时候，这个session已经消失了，甚至换了一个新的session（指id的分配），那么这个时候如果没有任何防范处理，之前的那个未完成的处理很可能会作用到这个新的session上，就不可避免的出现一些错误和未知情况，我们如何防范呢？使用valid_code，设计一个64位的无符号整型变量，给每个session按照事先给定的session总量（这个引擎使用预先分配内存方法，所以开始前必须手动指定session的最大数量&#8212;&#8212;通过配置文件），分配一个唯一的数据段（例如1~10000000，10000001~2000000等），每次这个session发现有新连接进来的socket使用了自己，则将自己的valid_code +1，当加到最大值的时候（例如刚才举例的10000000等），自动变为最小值（例如刚才的1等）。每个session的valid_code在引擎的初始化阶段是随机生成的（在事先指定好的数据段中随机）。再加上每个session的数据段时唯一的，所以不会产生重复的valid_code，这样鉴别某个时间段内唯一的session就成了可能；</span><br style="color: #454545; font-family: tahoma, helvetica, arial; background-color: #ffffff;" /><span style="color: #454545; font-family: tahoma, helvetica, arial; background-color: #ffffff;">#8 agent基类的设计。这个其实就是封装了boost::thread类，即&#8220;带私有线程的类&#8221;，主要用于作为一些相对独立的工作，例如log记录、db访问处理、定期ping某个ip等，引擎中的logger和db接口都是继承自它；</span><br style="color: #454545; font-family: tahoma, helvetica, arial; background-color: #ffffff;" /><span style="color: #454545; font-family: tahoma, helvetica, arial; background-color: #ffffff;">#9 db接口设计。一个数据库对应一个database对象，每个database对象拥有一个自己私有的线程池，其中线程的数量可以根据配置文件自由设定（例如和mysql的连接数量等，处理query的线程数量等）</span><br style="color: #454545; font-family: tahoma, helvetica, arial; background-color: #ffffff;" /><span style="color: #454545; font-family: tahoma, helvetica, arial; background-color: #ffffff;">#10 一些零碎。BIG_ENDIAN问题，封包内部自动进行了处理，无须用户单独设置；跨平台以及不同编译器的预编译设置，以及不同cpu的针对处理（x86，powerpc等）</span><br style="color: #454545; font-family: tahoma, helvetica, arial; background-color: #ffffff;" /><span style="color: #454545; font-family: tahoma, helvetica, arial; background-color: #ffffff;">目前的不足之处：</span><br style="color: #454545; font-family: tahoma, helvetica, arial; background-color: #ffffff;" /><span style="color: #454545; font-family: tahoma, helvetica, arial; background-color: #ffffff;">#1 并未开发完全。udp没有实现封装，当然boost::asio完全支持。logger目前只支持printf功能，对于写file和传递到专门的log服务器方面只留下了接口；封包加密以及安全方面是一个空白，目前的版本并未添加。</span><br style="color: #454545; font-family: tahoma, helvetica, arial; background-color: #ffffff;" /><span style="color: #454545; font-family: tahoma, helvetica, arial; background-color: #ffffff;">#2 面向底层，并不提供高层功能，所以很多开发都需要自己进行；（对，这并不是一个&#8220;网游引擎&#8221;）</span><br style="color: #454545; font-family: tahoma, helvetica, arial; background-color: #ffffff;" /><span style="color: #454545; font-family: tahoma, helvetica, arial; background-color: #ffffff;">#3 性能方面并未经过大量测试，由于本人工作较忙，这些都是业余时间搞得，所以只是初步测了一下连接并发部分：使用某个不知道配置的笔记本测得3秒并发连接1500。再多的并发连接并没有尝试过。</span><br style="color: #454545; font-family: tahoma, helvetica, arial; background-color: #ffffff;" /><span style="color: #454545; font-family: tahoma, helvetica, arial; background-color: #ffffff;">PS 由于本人工作较忙，故只能提供源代码（只提供windows版，便于查看，linux可以直接使用源代码编译，gcc3.4以上boost1.37即可），文档方面一直没有时间整理，这篇文章都是中午抽空写的（零零散散修改到现在），所以暂时就写这么多把。</span><br style="color: #454545; font-family: tahoma, helvetica, arial; background-color: #ffffff;" /><span style="color: #454545; font-family: tahoma, helvetica, arial; background-color: #ffffff;">PS2 提供的源代码是vs2005sln，只包含source code、配置和工程文件。</span><br style="color: #454545; font-family: tahoma, helvetica, arial; background-color: #ffffff;" /><span style="color: #454545; font-family: tahoma, helvetica, arial; background-color: #ffffff;">PS3 我看到贵论坛在研究RakNet，据我的一个前同事说，他认为RakNet并不好，网络底层用的是select，而且不是异步，代码质量不高，建议我不要使用它的网络层。我感觉RakNet的一些高层功能还是可以参考的，例如安全加密、大厅分流等，至于网络底层，我建议还是用boost::asio，跨平台、性能和扩展性都很优秀，而且被C++标准委员会所支持，很被看好。</span><br style="color: #454545; font-family: tahoma, helvetica, arial; background-color: #ffffff;" /><span style="color: #454545; font-family: tahoma, helvetica, arial; background-color: #ffffff;">作者：Nouness</span><img src ="http://www.cppblog.com/blueskiner/aggbug/207768.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/blueskiner/" target="_blank">卡洛shll</a> 2014-07-24 08:21 <a href="http://www.cppblog.com/blueskiner/archive/2014/07/24/207768.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>ld: 0711-736 XCOFF64 object files are not allowed in 32-bit mode</title><link>http://www.cppblog.com/blueskiner/archive/2012/10/12/193216.html</link><dc:creator>卡洛shll</dc:creator><author>卡洛shll</author><pubDate>Fri, 12 Oct 2012 07:47:00 GMT</pubDate><guid>http://www.cppblog.com/blueskiner/archive/2012/10/12/193216.html</guid><wfw:comment>http://www.cppblog.com/blueskiner/comments/193216.html</wfw:comment><comments>http://www.cppblog.com/blueskiner/archive/2012/10/12/193216.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/blueskiner/comments/commentRss/193216.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/blueskiner/services/trackbacks/193216.html</trackback:ping><description><![CDATA[编译BDB报错： 
<p>&#8230;&#8230;</p>
<p>Stop.<br />ld: 0711-736 ERROR: Input file jjkz_rcv.o:<br />&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> XCOFF64 object files are not allowed in 32-bit mode.</p>
<p>&nbsp;<wbr></p>
<p>查了link，解决方法为在系统变量里加个参数：</p>
<p>export OBJECT_MODE=64<br /><br />编译过去了，可执行文件生成了。</p>
<p>还有报错，估计是程序的通用性问题。</p>
<p>记下来，便于以后查找。</p><img src ="http://www.cppblog.com/blueskiner/aggbug/193216.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/blueskiner/" target="_blank">卡洛shll</a> 2012-10-12 15:47 <a href="http://www.cppblog.com/blueskiner/archive/2012/10/12/193216.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>xlC的64编译模式</title><link>http://www.cppblog.com/blueskiner/archive/2012/10/12/193215.html</link><dc:creator>卡洛shll</dc:creator><author>卡洛shll</author><pubDate>Fri, 12 Oct 2012 07:46:00 GMT</pubDate><guid>http://www.cppblog.com/blueskiner/archive/2012/10/12/193215.html</guid><wfw:comment>http://www.cppblog.com/blueskiner/comments/193215.html</wfw:comment><comments>http://www.cppblog.com/blueskiner/archive/2012/10/12/193215.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/blueskiner/comments/commentRss/193215.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/blueskiner/services/trackbacks/193215.html</trackback:ping><description><![CDATA[<span style="font-size: 10px">&nbsp; 
<h3 id="ruopt64b"><a name="t0"></a><span style="font-weight: normal">在AIX上编译64位的库基本上有两个方法一个是设置OBJECT_MODE环境变量，另一个是使用-q64的编译选项。</span><span style="font-weight: normal"><span style="font-size: 8px"></h3>
<p><strong style="font-size: 12pt">关于OBJECT_MODE环境变量：</strong></p>
<p><span style="font-size: 12pt">The&nbsp;</span><span style="font-size: 12pt">AIX</span><span style="font-size: 12pt">&nbsp;operating system provides support for the&nbsp;</span><span class="pk"><span style="font-size: 12pt">OBJECT_MODE</span></span><span style="font-size: 12pt">&nbsp;environment variable to enable the user to obtain a 64-bit development environment.&nbsp;</span><span style="font-size: 12pt">AIX</span><span style="font-size: 12pt">&nbsp;tools use the setting of&nbsp;</span><span class="pk"><span style="font-size: 12pt">OBJECT_MODE</span></span><span style="font-size: 12pt">&nbsp;to determine the type of object to be used or created. The&nbsp;</span><span class="pk"><span style="font-size: 12pt">OBJECT_MODE</span></span><span style="font-size: 12pt">&nbsp;environment variable has three recognized settings:</span></p>
<dl>
<dt class="bold"><span class="pk"><span style="font-size: 12pt">OBJECT_MODE</span></span><span style="font-size: 12pt" class="pk">=32</span></dt>
<dd><span style="font-size: 12pt">Works with 32-bit objects</span></dd>
<dt class="bold"><span class="pk"><span style="font-size: 12pt">OBJECT_MODE</span></span><span style="font-size: 12pt" class="pk">=64</span></dt>
<dd><span style="font-size: 12pt">Works with 64-bit objects</span></dd>
<dt class="bold"><span class="pk"><span style="font-size: 12pt">OBJECT_MODE</span></span><span style="font-size: 12pt" class="pk">=32_64</span></dt>
<dd><span style="font-size: 12pt">Works with either 32-bit or 64-bit objects</span></dd></dl></span></span>
<p>&nbsp;</p>
<h3><a name="t1"></a>&nbsp;</h3>
<h3><a name="t2"></a>关于-q64:</h3>
<h3><a name="t3"></a>-q32, -q64</h3><a name="wq273"></a>
<h4 id="wq273"><a name="t4"></a>Description</h4>
<p><span style="font-size: 12pt">Selects either 32-bit or 64-bit compiler mode.</span></p><a id="skipsyn-15" name="skipsyn-15"></a><a name="wq275"></a>
<h4 id="wq275"><a name="t5"></a>Notes</h4>
<p><span style="font-size: 12pt">The&nbsp;<span style="font-size: 12pt" class="bold">-q32</span></span><span style="font-size: 12pt">&nbsp;and&nbsp;<span style="font-size: 12pt" class="bold">-q64</span></span><span style="font-size: 12pt">&nbsp;options override the compiler mode set by the value of the OBJECT_MODE environment variable, if it exists.</span><span style="font-size: 12pt">&nbsp;If this option is not explicitly specified on the command line,&nbsp;</span><span style="font-size: 12pt">and the OBJECT_MODE environment variable is not set,</span><span style="font-size: 12pt">&nbsp;the compiler will default to 32-bit output mode.</span></p>
<p><span style="font-size: 12pt">If the compiler is invoked in 64-bit mode, the&nbsp;</span><span style="font-size: 12pt">__<span style="font-size: 12pt">64BIT</span></span><span style="font-size: 12pt">__</span><span style="font-size: 12pt">&nbsp;preprocessor macro is defined.</span></p></span><img src ="http://www.cppblog.com/blueskiner/aggbug/193215.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/blueskiner/" target="_blank">卡洛shll</a> 2012-10-12 15:46 <a href="http://www.cppblog.com/blueskiner/archive/2012/10/12/193215.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Linux下生成动态链接库是否必须使用 -fPIC 的问题</title><link>http://www.cppblog.com/blueskiner/archive/2012/09/28/192224.html</link><dc:creator>卡洛shll</dc:creator><author>卡洛shll</author><pubDate>Fri, 28 Sep 2012 03:04:00 GMT</pubDate><guid>http://www.cppblog.com/blueskiner/archive/2012/09/28/192224.html</guid><wfw:comment>http://www.cppblog.com/blueskiner/comments/192224.html</wfw:comment><comments>http://www.cppblog.com/blueskiner/archive/2012/09/28/192224.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/blueskiner/comments/commentRss/192224.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/blueskiner/services/trackbacks/192224.html</trackback:ping><description><![CDATA[<p><span style="font-family: 宋体">在</span> Linux <span style="font-family: 宋体">下制作动态链接库，&#8220;标准&#8221;</span> <span style="font-family: 宋体">的做法是编译成位置无关代码（</span>Position Independent Code<span style="font-family: 宋体">，</span>PIC<span style="font-family: 宋体">），然后链接成一个动态链接库。经常遇到的一个问题是</span> -fPIC <span style="font-family: 宋体">是不是必需，因为好像不加经常也能正常运行，只是创建</span> .so <span style="font-family: 宋体">的时候会有一个警告。</span></p>
<p>&nbsp;</p>
<p><span style="font-family: 宋体">搜索、试验了一下，答案似乎是这样：</span></p>
<p>&nbsp;</p>
<p>(1) <span style="font-family: 宋体">通常的建议是始终加上</span> -fPIC <span style="font-family: 宋体">生成位置无关代码；</span></p>
<p>(2) AMD64 <span style="font-family: 宋体">下，必须使用位置无关代码，否则连接失败：</span></p>
<p>&nbsp;</p>
<p>relocation R_X86_64_32S against `a local symbol' can not be used when making a shared object; recompile with -fPIC</p>
<p>&nbsp;</p>
<p>(3) IA32 <span style="font-family: 宋体">下，连接成功，但有警告：</span></p>
<p>&nbsp;</p>
<p>warning: creating a DT_TEXTREL in object.</p>
<p>&nbsp;</p>
<p><span style="font-family: 宋体">这样的</span> .so <span style="font-family: 宋体">文件可以完全正常工作。</span></p>
<p>&nbsp;</p>
<p><span style="font-family: 宋体">可执行文件在链接时就知道每一行代码、每一个变量会被放到线性地址空间的什么位置，因此这些地址可以都作为常数写到代码里面。对动态库，这就不行了，这要等到加载时才知道。无非下面两种方法：</span></p>
<p>&nbsp;</p>
<p>(1) <span style="font-family: 宋体">可重定位代码（</span>relocatable code<span style="font-family: 宋体">）：</span>Windows DLL <span style="font-family: 宋体">以及不使用</span> -fPIC <span style="font-family: 宋体">的</span> Linux SO<span style="font-family: 宋体">。</span></p>
<p>&nbsp;</p>
<p><span style="font-family: 宋体">生成动态库时假定它被加载在地址</span> 0 <span style="font-family: 宋体">处。加载时它会被加载到一个地址（</span>base<span style="font-family: 宋体">），这时要进行一次重定位（</span>relocation<span style="font-family: 宋体">），把代码、数据段中所有的地址加上这个</span> base <span style="font-family: 宋体">的值。这样代码运行时就能使用正确的地址了。</span></p>
<p>&nbsp;</p>
<p>(2) <span style="font-family: 宋体">位置无关代码（</span>position independent code<span style="font-family: 宋体">）：使用</span> -fPIC <span style="font-family: 宋体">的</span> Linux SO<span style="font-family: 宋体">。</span></p>
<p>&nbsp;</p>
<p><span style="font-family: 宋体">这样的代码本身就能被放到线性地址空间的任意位置，无需修改就能正确执行。通常的方法是获取指令指针（如</span> IA32 <span style="font-family: 宋体">的</span> EIP <span style="font-family: 宋体">寄存器）的值，加上一个偏移得到全局变量</span>/<span style="font-family: 宋体">函数的地址。</span></p>
<p>&nbsp;</p>
<p>PIC vs. relocatable<span style="font-family: 宋体">：</span></p>
<p>&nbsp;</p>
<p>(1) PIC <span style="font-family: 宋体">的缺点主要就是代码有可能长一些。例如</span> IA32<span style="font-family: 宋体">，由于不能直接使用</span> [EIP+constant] <span style="font-family: 宋体">这样的寻址方式，甚至不能直接将</span> EIP <span style="font-family: 宋体">的值交给其他寄存器，要用到</span> GOT<span style="font-family: 宋体">（</span>global offset table<span style="font-family: 宋体">）来定位全局变量和函数。这样导致代码的效率略低。</span></p>
<p>&nbsp;</p>
<p>(2) PIC <span style="font-family: 宋体">的加载速度稍快，因为不需要做重定位。</span></p>
<p>&nbsp;</p>
<p>(3) <span style="font-family: 宋体">多个进程引用同一个</span> PIC <span style="font-family: 宋体">动态库时，可以共用内存。这一个库在不同进程中的虚拟地址不同，但操作系统显然会把它们映射到同一块物理内存上。对于可重定位代码，则必须为每个库都在物理内存中复制一份副本，因为需要修改其中的地址。当然，主流现代操作系统都启用了分页内存机制，这使得重定位时可以使用</span> COW<span style="font-family: 宋体">（</span>copy on write<span style="font-family: 宋体">）来节省内存（</span>32 <span style="font-family: 宋体">位</span> Windows <span style="font-family: 宋体">就是这样做的）；然而，页面的粒度还是比较大的（例如</span> IA32 <span style="font-family: 宋体">上是</span> 4KiB<span style="font-family: 宋体">），至少对于代码段来说能节省的相当有限。</span></p>
<p>&nbsp;</p>
<p><span style="font-family: 宋体">注：对于</span> AMD64<span style="font-family: 宋体">，由于</span> AMD64 <span style="font-family: 宋体">实现了</span> [RIP+constant] <span style="font-family: 宋体">的寻址方式，第</span> (1) <span style="font-family: 宋体">点不成立。</span></p>
<p>&nbsp;</p><span style="font-family: 宋体; font-size: 10.5pt">这样，把动态库编译成</span><span style="font-family: 'Times New Roman'; font-size: 10.5pt"> PIC </span><span style="font-family: 宋体; font-size: 10.5pt">只有好处没有坏处，因而</span><span style="font-family: 'Times New Roman'; font-size: 10.5pt"> Linux AMD64 </span><span style="font-family: 宋体; font-size: 10.5pt">要求用于生成动态库的目标文件必须使用</span><span style="font-family: 'Times New Roman'; font-size: 10.5pt"> -fPIC </span><span style="font-family: 宋体; font-size: 10.5pt">编译也合情合理了。</span><img src ="http://www.cppblog.com/blueskiner/aggbug/192224.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/blueskiner/" target="_blank">卡洛shll</a> 2012-09-28 11:04 <a href="http://www.cppblog.com/blueskiner/archive/2012/09/28/192224.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Berkeley DB在Queue模式下的使用</title><link>http://www.cppblog.com/blueskiner/archive/2012/09/06/189707.html</link><dc:creator>卡洛shll</dc:creator><author>卡洛shll</author><pubDate>Thu, 06 Sep 2012 07:13:00 GMT</pubDate><guid>http://www.cppblog.com/blueskiner/archive/2012/09/06/189707.html</guid><wfw:comment>http://www.cppblog.com/blueskiner/comments/189707.html</wfw:comment><comments>http://www.cppblog.com/blueskiner/archive/2012/09/06/189707.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/blueskiner/comments/commentRss/189707.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/blueskiner/services/trackbacks/189707.html</trackback:ping><description><![CDATA[Berkeley DB在Queue模式下的使用<br /><br />&nbsp;&nbsp;&nbsp;Queue模式下仅能存储定长的记录，即value的长度为定长。Queue的key是一个逻辑增长的数，一般就是int。<br />不需要开发者去改变这个类型。<br /><br />&nbsp;&nbsp;&nbsp;Queue模式下只能存储定长的记录。所以一定要调用Db的set_re_len函数来设定数据库中记录的长度。<br />如果没有设定，默认的为0。这样当存储记录时一定会报异常。程序出错。<br />在读取记录时，当记录的长度小于设定的长度时，会填充字符达到设定长度。<br />默认的字符为0x02（ASCII中的）。可以设定自己的填充字符。调用DB的set_re_pad。<br /><br />一个简单的示例<br /><br />#include &lt;time.h&gt;<br />#include &lt;iostream&gt;<br />#include &lt;db_cxx.h&gt;<br /><br />struct ValueType<br />{<br />&nbsp;&nbsp; &nbsp;int _int;<br />&nbsp;&nbsp; &nbsp;char _char;<br />&nbsp;&nbsp; &nbsp;char _array[256];<br />};<br /><br />void writeDB( void )<br />{<br />&nbsp;&nbsp; &nbsp;Db bdb(0, 0);<br /><br />&nbsp;&nbsp; &nbsp;bdb.set_re_len(sizeof(ValueType)); //用Queue模式一定要调用，而且一定要在open前调用<br />&nbsp;&nbsp; &nbsp;bdb.set_re_pad(0x00); //填充字符串为0。<br /><br />&nbsp;&nbsp; &nbsp;bdb.open(0, "SaveRecodeDB.db", 0, DB_QUEUE, DB_CREATE, 0);<br /><br />&nbsp;&nbsp; &nbsp;size_t k;<br />&nbsp;&nbsp; &nbsp;ValueType v;<br />&nbsp;&nbsp; &nbsp;Dbt key&amp;k, sizeof(size_t));<br />&nbsp;&nbsp; &nbsp;Dbt value(&amp;v, sizeof(ValueType));<br /><br />&nbsp;&nbsp; &nbsp;//直接用数据库的写函数<br />&nbsp;&nbsp; &nbsp;for (int i=0; i&lt;1000000; ++i) {<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;bdb.put(0, &amp;key, &amp;value, DB_APPEND);<br />&nbsp;&nbsp; &nbsp;}<br /><br />&nbsp;&nbsp; &nbsp;bdb.close(0);<br />}<br /><br />int main( int argc, char* argv[] )<br />{<br />&nbsp;&nbsp; &nbsp;clock_t et1 = clock();<br />&nbsp;&nbsp; &nbsp;writeDB();<br />&nbsp;&nbsp; &nbsp;clock_t et2 = clock();<br /><br />&nbsp;&nbsp; &nbsp;std::cout &lt;&lt; "work is fine, " &lt;&lt; "have times : " &lt;&lt; et2 - et1 &lt;&lt; std::endl;<br />&nbsp;&nbsp; &nbsp;return 0;<br />} <br /><br />在Queue模式下不能用游标进行数据的插入。只能进行数据的修改。<br /><br />Queue模式读数据的一个简单的示例<br />在Queue模式下读数据，记录（Dbt）要调用set_ulen函数和set_flags函数<br /><br />#include &lt;time.h&gt;<br />#include &lt;iostream&gt;<br />#include &lt;bdb/db_cxx.h&gt;<br /><br />struct ValueType<br />{<br />&nbsp;&nbsp;&nbsp; int _int;<br />&nbsp;&nbsp;&nbsp; char _char;<br />&nbsp;&nbsp;&nbsp; char _array[256];<br />};<br /><br />void readDB( void )<br />{<br />&nbsp;&nbsp; &nbsp;Db bdb(0, 0);<br /><br />&nbsp;&nbsp; &nbsp;bdb.set_re_len(sizeof(ValueType)); //用Queue模式一定要调用，而且一定要在open前调用<br />&nbsp;&nbsp; &nbsp;bdb.set_re_pad(0x00); //字符串的填充为0。<br /><br />&nbsp;&nbsp; &nbsp;bdb.open(0, "SaveRecodeDB.db", 0, DB_QUEUE, DB_CREATE, 0);<br /><br />&nbsp;&nbsp; &nbsp;size_t k;<br />&nbsp;&nbsp; &nbsp;ValueType v;<br />&nbsp;&nbsp; &nbsp;Dbt key( &amp;k, sizeof( size_t ) );<br />&nbsp;&nbsp; &nbsp;key.set_ulen( sizeof( size_t ) );<br /><br />&nbsp;&nbsp; &nbsp;Dbt value( &amp;v, sizeof( ValueType ) );<br />&nbsp;&nbsp; &nbsp;value.set_ulen( sizeof( ValueType ) );<br />&nbsp;&nbsp; &nbsp;value.set_flags( DB_DBT_USERMEM );<br /><br />&nbsp;&nbsp; &nbsp;//直接用数据库的读函数<br />&nbsp;&nbsp; &nbsp;for( int i=0; i&lt;1000000; ++i )<br />&nbsp;&nbsp; &nbsp;{<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;bdb.get( 0, &amp;key, &amp;value, DB_CONSUME );<br />&nbsp;&nbsp; &nbsp;}<br /><br />&nbsp;&nbsp; &nbsp;bdb.close( 0 );<br />}<br /><br />int main( int argc, char* argv[] )<br />{<br />&nbsp;&nbsp;&nbsp; clock_t et1 = clock();<br />&nbsp;&nbsp;&nbsp; readDB();<br />&nbsp;&nbsp;&nbsp; clock_t et2 = clock();<br /><br />&nbsp;&nbsp;&nbsp; std::cout &lt;&lt; "work is fine, " &lt;&lt; "have times : " &lt;&lt; et2 - et1 &lt;&lt; std::endl;<br />&nbsp;&nbsp;&nbsp; return 0;<br />} <img src ="http://www.cppblog.com/blueskiner/aggbug/189707.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/blueskiner/" target="_blank">卡洛shll</a> 2012-09-06 15:13 <a href="http://www.cppblog.com/blueskiner/archive/2012/09/06/189707.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>oracle清除数据库表空间</title><link>http://www.cppblog.com/blueskiner/archive/2012/08/30/188710.html</link><dc:creator>卡洛shll</dc:creator><author>卡洛shll</author><pubDate>Thu, 30 Aug 2012 02:20:00 GMT</pubDate><guid>http://www.cppblog.com/blueskiner/archive/2012/08/30/188710.html</guid><wfw:comment>http://www.cppblog.com/blueskiner/comments/188710.html</wfw:comment><comments>http://www.cppblog.com/blueskiner/archive/2012/08/30/188710.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/blueskiner/comments/commentRss/188710.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/blueskiner/services/trackbacks/188710.html</trackback:ping><description><![CDATA[在<a onclick="javascript:tagshow(event, '%CA%FD%BE%DD%BF%E2');" href="javascript:;" target="_self">数据库</a>表空间满后，直接执行drop，delete，truncate等删除数据的操作，都不会释放数据库表空间，释放os的空间，用df -lh 查看都还是满的。虽然<a onclick="javascript:tagshow(event, 'oracle');" href="javascript:;" target="_self">oracle</a>的表空间即便不被回收，也是可以利用的，但会引起问题，释放os的空间是最放心的。 
<div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 在这种情况下，如果要释放os的空间，解决办法如下：</div>
<div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1.exp<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2.drop tablespace<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 3.create tablespace<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 4.imp</div>
<div>1.exp 导出表空间中所需的数据。</div>
<div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 在这之前，如果日志数据不是很必要，非保留不可，可以先truncate table tablename;然后导出数据已满的表空间。cd $ORACLE_HOME/bin目录下，</div>
<div>./exp<a href="&#109;&#97;&#105;&#108;&#116;&#111;&#58;&#110;&#97;&#109;&#101;&#47;&#112;&#97;&#115;&#115;&#64;&#116;&#101;&#115;&#116;&#100;&#98;">name/pass@testdb</a>file=/tmp/bak/tabelspace.dmp tablespaces=TBS_TEST</div>
<div>2.drop tablespace 删除数据库表空间</div>
<div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;命令drop tablespace TBS_TEST INCLUDING CONTENTS;然后进入到表空间的物理存储目录，执行rm -f *，这是空间利用率下来了。如果想直接删除文件，可以用drop tablespace TBS_TEST INCLUDING CONTENTS and datafiles;，这是会发现时间的物理数据文件已经没有了，但df -lh空间使用率并没有变化，需要重启数据库。删除表空间和删除物理文件的顺序不能改变，如果反了，请参考上一篇文章。</div>
<div>3.create tablespace 重新创建数据库表空间</div>
<div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;使用创建命令，直接创建即可。create bigfile tablespace tbs_test datafile '/usr/data/test/tbs_test.DBF' size 2000M autoextend on next 100M;</div>
<div>4.imp 导入数据文件</div>
<div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ./imp<a href="&#109;&#97;&#105;&#108;&#116;&#111;&#58;&#110;&#97;&#109;&#101;&#47;&#112;&#97;&#115;&#115;&#64;&#116;&#101;&#115;&#116;&#100;&#98;">name/pass@testdb</a>file=/tmp/bakloginfo.dmp full=y tablespaces=TBS_TEST</div>
<div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;如果不想做导入导出，比如索引表空间，可以直接删除表空间，删除物理文件，然后创建表空间，重建索引。</div><img src ="http://www.cppblog.com/blueskiner/aggbug/188710.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/blueskiner/" target="_blank">卡洛shll</a> 2012-08-30 10:20 <a href="http://www.cppblog.com/blueskiner/archive/2012/08/30/188710.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>ORACLE的TNS配置</title><link>http://www.cppblog.com/blueskiner/archive/2012/08/27/188442.html</link><dc:creator>卡洛shll</dc:creator><author>卡洛shll</author><pubDate>Mon, 27 Aug 2012 10:50:00 GMT</pubDate><guid>http://www.cppblog.com/blueskiner/archive/2012/08/27/188442.html</guid><wfw:comment>http://www.cppblog.com/blueskiner/comments/188442.html</wfw:comment><comments>http://www.cppblog.com/blueskiner/archive/2012/08/27/188442.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/blueskiner/comments/commentRss/188442.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/blueskiner/services/trackbacks/188442.html</trackback:ping><description><![CDATA[<p style="text-indent: 2em">在ORACLE当中，如果想访问某个服务器，必需要设置TNS，它不想SQLSERVER那样，客户端会自动列举出在局域网内所有的在线服务器，只需在客户端选择需要的服务器，然后使用帐号与密码登录即可。而ORCAL是不会自动列举出网内的服务器的，需要通过读取TNS配置文件才能列出经过配置的服务器名。</p>
<p style="text-indent: 2em">ORACLE的配置文件名：tnsnames.ora</p>
<p style="text-indent: 2em">文件所在路径：安装ORACLE所在的目录\oracle\ora92\network\admin\tnsnames.ora</p>
<p style="text-indent: 2em">配置的一个实例：</p>
<p style="text-indent: 2em"># TNSNAMES.ORA Network Configuration File: D:\Oracle\network\admin\tnsnames.ora</p>
<p style="text-indent: 2em"># Generated by Oracle configuration tools.</p>
<p style="text-indent: 2em">ODS =</p>
<p style="text-indent: 2em">&nbsp; (description =</p>
<p style="text-indent: 2em">&nbsp;&nbsp;&nbsp; (address = (protocol = tcp)(host = 10.201.64.12)(port = 1521))</p>
<p style="text-indent: 2em">&nbsp;&nbsp;&nbsp; (connect_data =</p>
<p style="text-indent: 2em">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (sid = ods)</p>
<p style="text-indent: 2em">&nbsp;&nbsp;&nbsp; )</p>
<p style="text-indent: 2em">&nbsp; )</p>
<p style="text-indent: 2em">AUTOCLM_10.210.4.11 =</p>
<p style="text-indent: 2em">&nbsp; (DESCRIPTION =</p>
<p style="text-indent: 2em">&nbsp;&nbsp;&nbsp; (ADDRESS_LIST =</p>
<p style="text-indent: 2em">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (ADDRESS = (PROTOCOL = TCP)(HOST = 10.210.4.11)(PORT = 1521))</p>
<p style="text-indent: 2em">&nbsp;&nbsp;&nbsp; )</p>
<p style="text-indent: 2em">&nbsp;&nbsp;&nbsp; (CONNECT_DATA =</p>
<p style="text-indent: 2em">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (SID = autoclm)</p>
<p style="text-indent: 2em">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (SERVER = DEDICATED)</p>
<p style="text-indent: 2em">&nbsp;&nbsp;&nbsp; )</p>
<p style="text-indent: 2em">&nbsp; )</p>
<p style="text-indent: 2em">PROPTEST_10.210.4.30 =</p>
<p style="text-indent: 2em">&nbsp; (DESCRIPTION =</p>
<p style="text-indent: 2em">&nbsp;&nbsp;&nbsp; (ADDRESS_LIST =</p>
<p style="text-indent: 2em">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (ADDRESS = (PROTOCOL = TCP)(HOST = 10.210.4.30)(PORT = 1521))</p>
<p style="text-indent: 2em">&nbsp;&nbsp;&nbsp; )</p>
<p style="text-indent: 2em">&nbsp;&nbsp;&nbsp; (CONNECT_DATA =</p>
<p style="text-indent: 2em">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (SID = proptest)</p>
<p style="text-indent: 2em">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (SERVER = DEDICATED)</p>
<p style="text-indent: 2em">&nbsp;&nbsp;&nbsp; )</p>
<p style="text-indent: 2em">&nbsp; )</p>
<p style="text-indent: 2em">p05 =</p>
<p style="text-indent: 2em">&nbsp; (DESCRIPTION =</p>
<p style="text-indent: 2em">&nbsp;&nbsp;&nbsp; (ADDRESS_LIST =</p>
<p style="text-indent: 2em">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (ADDRESS = (PROTOCOL = TCP)(HOST = 10.201.64.14)(PORT = 1521))</p>
<p style="text-indent: 2em">&nbsp;&nbsp;&nbsp; )</p>
<p style="text-indent: 2em">&nbsp;&nbsp;&nbsp; (CONNECT_DATA =</p>
<p style="text-indent: 2em">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (SID = p05)</p>
<p style="text-indent: 2em">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (SERVER = DEDICATED)</p>
<p style="text-indent: 2em">&nbsp;&nbsp;&nbsp; )</p>
<p style="text-indent: 2em">&nbsp; )</p>
<p style="text-indent: 2em">p05_8 =</p>
<p style="text-indent: 2em">&nbsp; (DESCRIPTION =</p>
<p style="text-indent: 2em">&nbsp;&nbsp;&nbsp; (ADDRESS_LIST =</p>
<p style="text-indent: 2em">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (ADDRESS = (PROTOCOL = TCP)(HOST = 10.201.64.8)(PORT = 1521))</p>
<p style="text-indent: 2em">&nbsp;&nbsp;&nbsp; )</p>
<p style="text-indent: 2em">&nbsp;&nbsp;&nbsp; (CONNECT_DATA =</p>
<p style="text-indent: 2em">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (SID = p05)</p>
<p style="text-indent: 2em">&nbsp;&nbsp;&nbsp; )</p>
<p style="text-indent: 2em">&nbsp; )</p>
<p style="text-indent: 2em">&nbsp; </p>
<p style="text-indent: 2em">ODS =</p>
<p style="text-indent: 2em">&nbsp; (description =</p>
<p style="text-indent: 2em">&nbsp;&nbsp;&nbsp; (address = (protocol = tcp)(host = 10.201.64.8)(port = 1521))</p>
<p style="text-indent: 2em">&nbsp;&nbsp;&nbsp; (connect_data =</p>
<p style="text-indent: 2em">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (sid = p05)</p>
<p style="text-indent: 2em">&nbsp;&nbsp;&nbsp; )</p>
<p style="text-indent: 2em">&nbsp; )</p>
<p style="text-indent: 2em">test_14 =</p>
<p style="text-indent: 2em">&nbsp; (DESCRIPTION =</p>
<p style="text-indent: 2em">&nbsp;&nbsp;&nbsp; (ADDRESS_LIST =</p>
<p style="text-indent: 2em">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (ADDRESS = (PROTOCOL = TCP)(HOST = 10.201.64.14)(PORT = 1521))</p>
<p style="text-indent: 2em">&nbsp;&nbsp;&nbsp; )</p>
<p style="text-indent: 2em">&nbsp;&nbsp;&nbsp; (CONNECT_DATA =</p>
<p style="text-indent: 2em">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (SERVICE_NAME = p05test)</p>
<p style="text-indent: 2em">&nbsp;&nbsp;&nbsp; )</p>
<p style="text-indent: 2em">&nbsp; )&nbsp;&nbsp;&nbsp; </p>
<p style="text-indent: 2em">&nbsp; </p>
<p style="text-indent: 2em">CIBS =</p>
<p style="text-indent: 2em">&nbsp; (DESCRIPTION =</p>
<p style="text-indent: 2em">&nbsp;&nbsp;&nbsp; (ADDRESS_LIST =</p>
<p style="text-indent: 2em">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (ADDRESS = (PROTOCOL = TCP)(HOST = 10.203.68.71)(PORT = 1521))</p>
<p style="text-indent: 2em">&nbsp;&nbsp;&nbsp; )</p>
<p style="text-indent: 2em">&nbsp;&nbsp;&nbsp; (CONNECT_DATA =</p>
<p style="text-indent: 2em">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (SERVICE_NAME = cibs)</p>
<p style="text-indent: 2em">&nbsp;&nbsp;&nbsp; )</p>
<p style="text-indent: 2em">&nbsp; )</p>
<p style="text-indent: 2em">&nbsp; </p>
<p style="text-indent: 2em">&nbsp; ORA10 =</p>
<p style="text-indent: 2em">&nbsp; (DESCRIPTION =</p>
<p style="text-indent: 2em">&nbsp;&nbsp;&nbsp; (ADDRESS_LIST =</p>
<p style="text-indent: 2em">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (ADDRESS = (PROTOCOL = TCP)(HOST = 10.202.1.77)(PORT = 1521))</p>
<p style="text-indent: 2em">&nbsp;&nbsp;&nbsp; )</p>
<p style="text-indent: 2em">&nbsp;&nbsp;&nbsp; (CONNECT_DATA =</p>
<p style="text-indent: 2em">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (SERVICE_NAME = ORA10)</p>
<p style="text-indent: 2em">&nbsp;&nbsp;&nbsp; )</p>
<p style="text-indent: 2em">&nbsp; )</p>
<p style="text-indent: 2em">CIBS =</p>
<p style="text-indent: 2em">&nbsp; (DESCRIPTION =</p>
<p style="text-indent: 2em">&nbsp;&nbsp;&nbsp; (ADDRESS_LIST =</p>
<p style="text-indent: 2em">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (ADDRESS = (PROTOCOL = TCP)(HOST = 10.203.68.71)(PORT = 1521))</p>
<p style="text-indent: 2em">&nbsp;&nbsp;&nbsp; )</p>
<p style="text-indent: 2em">&nbsp;&nbsp;&nbsp; (CONNECT_DATA =</p>
<p style="text-indent: 2em">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (SERVICE_NAME = cibs)</p>
<p style="text-indent: 2em">&nbsp;&nbsp;&nbsp; )</p>
<p style="text-indent: 2em">&nbsp; )&nbsp; </p>
<p style="text-indent: 2em">&nbsp; </p>
<p style="text-indent: 2em">CAI =</p>
<p style="text-indent: 2em">&nbsp; (DESCRIPTION =</p>
<p style="text-indent: 2em">&nbsp;&nbsp;&nbsp; (ADDRESS_LIST =</p>
<p style="text-indent: 2em">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (ADDRESS = (PROTOCOL = TCP)(HOST = 10.203.68.80)(PORT = 1521))</p>
<p style="text-indent: 2em">&nbsp;&nbsp;&nbsp; )</p>
<p style="text-indent: 2em">&nbsp;&nbsp;&nbsp; (CONNECT_DATA =</p>
<p style="text-indent: 2em">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (SERVICE_NAME = proplh)</p>
<p style="text-indent: 2em">&nbsp;&nbsp;&nbsp; )</p>
<p style="text-indent: 2em">&nbsp; )&nbsp; </p>
<p style="text-indent: 2em">&nbsp; </p>
<p style="text-indent: 2em">CHELP =</p>
<p style="text-indent: 2em">&nbsp; (DESCRIPTION =</p>
<p style="text-indent: 2em">&nbsp;&nbsp;&nbsp; (ADDRESS_LIST =</p>
<p style="text-indent: 2em">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (ADDRESS = (PROTOCOL = TCP)(HOST = 10.203.68.137)(PORT = 1521))</p>
<p style="text-indent: 2em">&nbsp;&nbsp;&nbsp; )</p>
<p style="text-indent: 2em">&nbsp;&nbsp;&nbsp; (CONNECT_DATA =</p>
<p style="text-indent: 2em">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (SERVICE_NAME = autoclm)</p>
<p style="text-indent: 2em">&nbsp;&nbsp;&nbsp; )</p>
<p style="text-indent: 2em">&nbsp; )&nbsp; </p>
<p style="text-indent: 2em">配置完毕后，客户端就可以列举出&#8220;CAI&#8221;，&#8220;CHELP&#8221;，&#8220;CIBS&#8221;等的服务器名出来。</p><img src ="http://www.cppblog.com/blueskiner/aggbug/188442.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/blueskiner/" target="_blank">卡洛shll</a> 2012-08-27 18:50 <a href="http://www.cppblog.com/blueskiner/archive/2012/08/27/188442.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>ORA-01034:ORACLE not available问题的解决方法</title><link>http://www.cppblog.com/blueskiner/archive/2012/08/27/188428.html</link><dc:creator>卡洛shll</dc:creator><author>卡洛shll</author><pubDate>Mon, 27 Aug 2012 08:07:00 GMT</pubDate><guid>http://www.cppblog.com/blueskiner/archive/2012/08/27/188428.html</guid><wfw:comment>http://www.cppblog.com/blueskiner/comments/188428.html</wfw:comment><comments>http://www.cppblog.com/blueskiner/archive/2012/08/27/188428.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/blueskiner/comments/commentRss/188428.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/blueskiner/services/trackbacks/188428.html</trackback:ping><description><![CDATA[<p>[mailz@/cdr2/home/mailz]$ su - oracle<br />oracle's Password: <br />-bash-3.00$ sqlplus /as sysdba</p>
<p>SQL*Plus: Release 10.2.0.1.0 - Production</p>
<p>Copyright (c) 1982, 2005, Oracle.&nbsp; All rights reserved.</p>
<p>Usage 1: sqlplus -H | -V</p>
<p>&nbsp;&nbsp;&nbsp; -H&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Displays the SQL*Plus version and the<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; usage help.<br />&nbsp;&nbsp;&nbsp; -V&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Displays the SQL*Plus version.</p>
<p>Usage 2: sqlplus [ [&lt;option&gt;] [&lt;logon&gt;] [&lt;start&gt;] ]</p>
<p>&nbsp; &lt;option&gt; is: [-C &lt;version&gt;] [-L] [-M "&lt;options&gt;"] [-R &lt;level&gt;] [-S]</p>
<p>&nbsp;&nbsp;&nbsp; -C &lt;version&gt;&nbsp;&nbsp; Sets the compatibility of affected commands to the<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; version specified by &lt;version&gt;.&nbsp; The version has<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; the form "x.y[.z]".&nbsp; For example, -C 10.2.0<br />&nbsp;&nbsp;&nbsp; -L&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Attempts to log on just once, instead of<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; reprompting on error.<br />&nbsp;&nbsp;&nbsp; -M "&lt;options&gt;" Sets automatic HTML markup of output.&nbsp; The options<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; have the form:<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; HTML [ON|OFF] [HEAD text] [BODY text] [TABLE text]<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; [ENTMAP {ON|OFF}] [SPOOL {ON|OFF}] [PRE[FORMAT] {ON|OFF}]<br />&nbsp;&nbsp;&nbsp; -R &lt;level&gt;&nbsp;&nbsp;&nbsp;&nbsp; Sets restricted mode to disable SQL*Plus commands<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; that interact with the file system.&nbsp; The level can<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; be 1, 2 or 3.&nbsp; The most restrictive is -R 3 which<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; disables all user commands interacting with the<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; file system.<br />&nbsp;&nbsp;&nbsp; -S&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Sets silent mode which suppresses the display of<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; the SQL*Plus banner, prompts, and echoing of<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; commands.</p>
<p>&nbsp; &lt;logon&gt; is: (&lt;username&gt;[/&lt;password&gt;][@&lt;connect_identifier&gt;] | /)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; [AS SYSDBA | AS SYSOPER] | /NOLOG</p>
<p>&nbsp;&nbsp;&nbsp; Specifies the database account username, password and connect<br />&nbsp;&nbsp;&nbsp; identifier for the database connection.&nbsp; Without a connect<br />&nbsp;&nbsp;&nbsp; identifier, SQL*Plus connects to the default database.</p>
<p>&nbsp;&nbsp;&nbsp; The AS SYSDBA and AS SYSOPER options are database administration<br />&nbsp;&nbsp;&nbsp; privileges.</p>
<p>&nbsp;&nbsp;&nbsp; The /NOLOG option starts SQL*Plus without connecting to a<br />&nbsp;&nbsp;&nbsp; database.</p>
<p>&nbsp; &lt;start&gt; is: @&lt;URL&gt;|&lt;filename&gt;[.&lt;ext&gt;] [&lt;parameter&gt; ...]</p>
<p>&nbsp;&nbsp;&nbsp; Runs the specified SQL*Plus script from a web server (URL) or the<br />&nbsp;&nbsp;&nbsp; local file system (filename.ext) with specified parameters that<br />&nbsp;&nbsp;&nbsp; will be assigned to substitution variables in the script.</p>
<p>When SQL*Plus starts, and after CONNECT commands, the site profile<br />(e.g. $ORACLE_HOME/sqlplus/admin/glogin.sql) and the user profile<br />(e.g. login.sql in the working directory) are run.&nbsp; The files may<br />contain SQL*Plus commands.</p>
<p>Refer to the SQL*Plus User's Guide and Reference for more information.<br />-bash-3.00$ sqlplus / as sysdba</p>
<p>SQL*Plus: Release 10.2.0.1.0 - Production on Mon Aug 27 15:54:53 2012</p>
<p>Copyright (c) 1982, 2005, Oracle.&nbsp; All rights reserved.</p>
<p>Connected to an idle instance.</p>
<p>SQL&gt; alter user sys identified by 123;<br />alter user sys identified by 123<br />*<br />ERROR at line 1:<br />ORA-01034: ORACLE not available</p>
<p><br />SQL&gt; select username from dba_users;<br />select username from dba_users<br />*<br />ERROR at line 1:<br />ORA-01034: ORACLE not available</p>
<p><br />SQL&gt; quit<br />Disconnected<br />-bash-3.00$ id oracle<br />uid=205(oracle) gid=203(oinstall) groups=204(dba)<br />-bash-3.00$ lsnrctl start</p>
<p>LSNRCTL for IBM/AIX RISC System/6000: Version 10.2.0.1.0 - Production on 27-AUG-2012 15:57:24</p>
<p>Copyright (c) 1991, 2005, Oracle.&nbsp; All rights reserved.</p>
<p>Starting /cdr2/app/oracle/product/10gr2/bin/tnslsnr: please wait...</p>
<p>TNSLSNR for IBM/AIX RISC System/6000: Version 10.2.0.1.0 - Production<br />System parameter file is /cdr2/app/oracle/product/10gr2/network/admin/listener.ora<br />Log messages written to /cdr2/app/oracle/product/10gr2/network/log/listener.log<br />Listening on: (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC1)))<br />Listening on: (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=cdr2)(PORT=1521)))</p>
<p>Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC1)))<br />STATUS of the LISTENER<br />------------------------<br />Alias&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; LISTENER<br />Version&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; TNSLSNR for IBM/AIX RISC System/6000: Version 10.2.0.1.0 - Production<br />Start Date&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 27-AUG-2012 15:57:27<br />Uptime&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0 days 0 hr. 0 min. 2 sec<br />Trace Level&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; off<br />Security&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ON: Local OS Authentication<br />SNMP&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ON<br />Listener Parameter File&nbsp;&nbsp; /cdr2/app/oracle/product/10gr2/network/admin/listener.ora<br />Listener Log File&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /cdr2/app/oracle/product/10gr2/network/log/listener.log<br />Listening Endpoints Summary...<br />&nbsp; (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC1)))<br />&nbsp; (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=cdr2)(PORT=1521)))<br />Services Summary...<br />Service "PLSExtProc" has 1 instance(s).<br />&nbsp; Instance "PLSExtProc", status UNKNOWN, has 1 handler(s) for this service...<br />Service "ocstest" has 1 instance(s).<br />&nbsp; Instance "ocstest", status UNKNOWN, has 1 handler(s) for this service...<br />Service "test62" has 1 instance(s).<br />&nbsp; Instance "test62", status UNKNOWN, has 1 handler(s) for this service...<br />The command completed successfully<br />-bash-3.00$ id<br />uid=205(oracle) gid=203(oinstall) groups=204(dba)<br />-bash-3.00$ lsnrctl status</p>
<p>LSNRCTL for IBM/AIX RISC System/6000: Version 10.2.0.1.0 - Production on 27-AUG-2012 15:58:31</p>
<p>Copyright (c) 1991, 2005, Oracle.&nbsp; All rights reserved.</p>
<p>Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC1)))<br />STATUS of the LISTENER<br />------------------------<br />Alias&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; LISTENER<br />Version&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; TNSLSNR for IBM/AIX RISC System/6000: Version 10.2.0.1.0 - Production<br />Start Date&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 27-AUG-2012 15:57:27<br />Uptime&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0 days 0 hr. 1 min. 5 sec<br />Trace Level&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; off<br />Security&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ON: Local OS Authentication<br />SNMP&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ON<br />Listener Parameter File&nbsp;&nbsp; /cdr2/app/oracle/product/10gr2/network/admin/listener.ora<br />Listener Log File&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /cdr2/app/oracle/product/10gr2/network/log/listener.log<br />Listening Endpoints Summary...<br />&nbsp; (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC1)))<br />&nbsp; (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=cdr2)(PORT=1521)))<br />Services Summary...<br />Service "PLSExtProc" has 1 instance(s).<br />&nbsp; Instance "PLSExtProc", status UNKNOWN, has 1 handler(s) for this service...<br />Service "ocstest" has 1 instance(s).<br />&nbsp; Instance "ocstest", status UNKNOWN, has 1 handler(s) for this service...<br />Service "test62" has 1 instance(s).<br />&nbsp; Instance "test62", status UNKNOWN, has 1 handler(s) for this service...<br />The command completed successfully<br />-bash-3.00$ sqlplus /nolog</p>
<p>SQL*Plus: Release 10.2.0.1.0 - Production on Mon Aug 27 15:59:00 2012</p>
<p>Copyright (c) 1982, 2005, Oracle.&nbsp; All rights reserved.</p>
<p>SQL&gt; connect /as sysdba<br />Connected to an idle instance.<br />SQL&gt; startup<br />ORACLE instance started.</p>
<p>Total System Global Area 1610612736 bytes<br />Fixed Size&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2021224 bytes<br />Variable Size&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 318769304 bytes<br />Database Buffers&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1275068416 bytes<br />Redo Buffers&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 14753792 bytes<br />Database mounted.<br />Database opened.<br />SQL&gt; quit<br />Disconnected from Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - 64bit Production<br />With the Partitioning, OLAP and Data Mining options<br />-bash-3.00$ env|grep ORACLE<br />ORACLE_SID=ocstest<br />ORACLE_BASE=/cdr2/app/oracle<br />ORACLE_HOME=/cdr2/app/oracle/product/10gr2<br />-bash-3.00$ sqlplus /nolog</p>
<p>SQL*Plus: Release 10.2.0.1.0 - Production on Mon Aug 27 16:00:36 2012</p>
<p>Copyright (c) 1982, 2005, Oracle.&nbsp; All rights reserved.</p>
<p>SQL&gt; connect /as sysdba<br />Connected.<br />SQL&gt; select username from dba_users;</p><img src ="http://www.cppblog.com/blueskiner/aggbug/188428.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/blueskiner/" target="_blank">卡洛shll</a> 2012-08-27 16:07 <a href="http://www.cppblog.com/blueskiner/archive/2012/08/27/188428.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>undefined reference boost::system::get_system_category</title><link>http://www.cppblog.com/blueskiner/archive/2012/08/05/186377.html</link><dc:creator>卡洛shll</dc:creator><author>卡洛shll</author><pubDate>Sun, 05 Aug 2012 11:47:00 GMT</pubDate><guid>http://www.cppblog.com/blueskiner/archive/2012/08/05/186377.html</guid><wfw:comment>http://www.cppblog.com/blueskiner/comments/186377.html</wfw:comment><comments>http://www.cppblog.com/blueskiner/archive/2012/08/05/186377.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/blueskiner/comments/commentRss/186377.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/blueskiner/services/trackbacks/186377.html</trackback:ping><description><![CDATA[<p>这个问题是在从1.82升级到2.0的时候出的连接问题，自己用了很长时间才解决掉，总算解决了，分享下原因吧。主要是因为从官网上下载的C++ Mongo驱动有问题。必须自己编译，可以通过命令查看：<br /></p>
<p>&nbsp;</p>
<div class="dp-highlighter" sizset="66" sizcache06808750399006669="3">
<div class="bar" sizset="66" sizcache06808750399006669="3">
<div class="tools" sizset="66" sizcache06808750399006669="3"><a href="http://my.oschina.net/chen106106/blog/51093#"><u><font color="#4466bb">源码</font></u></a><a href="http://my.oschina.net/chen106106/blog/51093#"><u><font color="#4466bb">copy to clipboard</font></u></a><a href="http://my.oschina.net/chen106106/blog/51093#"><u><font color="#4466bb">打印</font></u></a><a href="http://my.oschina.net/chen106106/blog/51093#"><u><font color="#4466bb">？</font></u></a></div></div>
<ol class="dp-cpp"><li class="alt"><span>&gt;&gt;nm&nbsp;libmongoclient.a&nbsp;|&nbsp;grep&nbsp;get_system_category&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span></li><li><span>U&nbsp;_ZN5boost6system19get_system_categoryEv &nbsp;&nbsp;</span></li><li class="alt"><span>U&nbsp;_ZN5boost6system19get_system_categoryEv &nbsp;&nbsp;</span></li><li><span>U&nbsp;_ZN5boost6system19get_system_categoryEv &nbsp;&nbsp;</span></li><li class="alt"><span>U&nbsp;_ZN5boost6system19get_system_categoryEv &nbsp;&nbsp;</span></li><li><span>U&nbsp;_ZN5boost6system19get_system_categoryE&nbsp;&nbsp;</span></li></ol></div><pre style="display: none" class="cpp" readonly="" name="code">&gt;&gt;nm libmongoclient.a | grep get_system_category                                                                              
U _ZN5boost6system19get_system_categoryEv
U _ZN5boost6system19get_system_categoryEv
U _ZN5boost6system19get_system_categoryEv
U _ZN5boost6system19get_system_categoryEv
U _ZN5boost6system19get_system_categoryE</pre>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>会发现这个在boost库中根本就没有这个函数。可能官网提供的lib编译参数不一样。 只能自己编译了。 另外如果boost还有其它问题，你需要。</p>1.删除boost /usr/include/ 和/usr/lib/下的 所有关于boost的文件 还有系统自带的 一般在 /usr/lib64 下 可以通过 locate boost | grep usr 来查找 <br />
<p>2.重新安装boost:<br /></p>
<p>&nbsp;</p>
<div class="dp-highlighter" sizset="70" sizcache06808750399006669="3">
<div class="bar" sizset="70" sizcache06808750399006669="3">
<div class="tools" sizset="70" sizcache06808750399006669="3"><a href="http://my.oschina.net/chen106106/blog/51093#"><u><font color="#4466bb">源码</font></u></a><a href="http://my.oschina.net/chen106106/blog/51093#"><u><font color="#4466bb">copy to clipboard</font></u></a><a href="http://my.oschina.net/chen106106/blog/51093#"><u><font color="#4466bb">打印</font></u></a><a href="http://my.oschina.net/chen106106/blog/51093#"><u><font color="#4466bb">？</font></u></a></div></div>
<ol class="dp-cpp"><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;./bootstrap.sh &nbsp;&nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;./bjam&nbsp;install&nbsp; &nbsp;&nbsp;</span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;默认会安装到/usr/local&nbsp;下&nbsp;&nbsp;</span></li></ol></div><pre style="display: none" class="cpp" readonly="" name="code">    ./bootstrap.sh
    ./bjam install 
&nbsp;  &nbsp;默认会安装到/usr/local 下
</pre><br /><img src ="http://www.cppblog.com/blueskiner/aggbug/186377.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/blueskiner/" target="_blank">卡洛shll</a> 2012-08-05 19:47 <a href="http://www.cppblog.com/blueskiner/archive/2012/08/05/186377.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Linux命令行修改IP、网关、DNS的方法</title><link>http://www.cppblog.com/blueskiner/archive/2012/08/05/186309.html</link><dc:creator>卡洛shll</dc:creator><author>卡洛shll</author><pubDate>Sat, 04 Aug 2012 18:06:00 GMT</pubDate><guid>http://www.cppblog.com/blueskiner/archive/2012/08/05/186309.html</guid><wfw:comment>http://www.cppblog.com/blueskiner/comments/186309.html</wfw:comment><comments>http://www.cppblog.com/blueskiner/archive/2012/08/05/186309.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/blueskiner/comments/commentRss/186309.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/blueskiner/services/trackbacks/186309.html</trackback:ping><description><![CDATA[<p><span>Linux命令行修改IP、网关、DNS的方法</span></p>
<p><span>方式一：</span></p>
<p><span>ifconfig eth0 192.168.1.18 netmask 255.255.255.0</span></p>
<p><span>说明：该种方式可以使改变即时生效，重启后会恢复为原来的IP</span></p>
<p><span>方式二：</span></p>
<p><span>vi /etc/sysconfig/network-scripts/ifcfg-eth0</span></p>
<p><span>说明：该方式要重启后生效，且是永久的</span></p>
<p><span>如果要立即更改且永久生效，就只能以上两种方式同时使用了。</span></p>
<p><span>以上是通过linux命令行修改IP的方法。</span></p>
<p>&nbsp;</p>
<p><span>网卡eth0&nbsp;&nbsp;&nbsp; IP修改为 102.168.0.1&nbsp;&nbsp;&nbsp;</span></p>
<p><span>ifconfig eth0 102.168.0.1 netmask 255.255.255.0</span></p>
<p><span>网关修改为 102.168.0.254</span></p>
<p><span>route add default gw 102.168.0.254</span></p>
<p><span>Linux命令行修改dns</span></p>
<p><span>echo "nameserver 202.202.202.20 "&gt;&gt; /etc/resolv.conf</span></p>
<p><span>重启网络服务</span></p>
<p>&nbsp;</p>
<p><span>例子：由原来的DHCP改固定IP<br />DEVICE=eth0<br />HWADDR=00:0C:29:F7:EF:BF<br />ONBOOT=yes<br />TYPE=Ethernet<br />NETMASK=255.255.255.0<br />IPADDR=192.168.0.68<br />GATEWAY=192.168.0.1<br />加上红色即可<br /><br />重启网卡：<br />/etc/init.d/network restart</span></p>
<p><span class="w_deepbrown"><span>ifconfig eth0 新ip<br />然后编辑/etc/sysconfig/network-scripts/ifcfg-eth0，修改ip<br /><br />[aeolus@db1 network-scripts]$ vi ifcfg-eth0 <br /><br />DEVICE=eth0<br />ONBOOT=yes<br />BOOTPROTO=static<br />IPADDR=219.136.241.211<br />NETMASK=255.255.255.128<br />GATEWAY=219.136.241.254<br /><br />[aeolus@db1 etc]$ vi resolv.conf <br /><br />nameserver 202.96.128.68<br />nameserver 219.136.241.206<br /><br />－－－－－－－－－－－－－－－－－－－－－－－<br />Linux下修改网卡IP和网关<br /><br /><br />建议通过终端字符方式下来修改<br />一修改IP地址<br />vi /etc/sysconfig/network-scripts/ifcfg-eth0<br />DEVICE=eth0<br />BOOTPROTO=none<br />BROADCAST=192.168.1.255<br />IPADDR=192.168.1.33<br />NETMASK=255.255.255.0<br />NETWORK=192.168.1.0<br />ONBOOT=yes<br />USERCTL=no<br />PEERDNS=no<br />TYPE=Ethernet<br />~<br /><br />vi /etc/sysconfig/network-scripts/ifcfg-eth1<br /><br />DEVICE=eth1<br />ONBOOT=yes<br />BOOTPROTO=none<br />IPADDR=192.168.2.34<br />NETMASK=255.255.255.0<br />USERCTL=no<br />PEERDNS=no<br />TYPE=Ethernet<br />NETWORK=192.168.2.0<br />BROADCAST=192.168.2.255<br />二修改网关<br />vi /etc/sysconfig/network<br /><br />NETWORKING=yes<br />HOSTNAME=Aaron<br />GATEWAY=192.168.1.1<br /><br />三重新启动网络配置<br />/etc/init.d/network restart<br /><br /><br /><br />-----------------------------------------------------------------------------------<br /><br />修改配置文件<br /><br />/etc/sysconfig/network-scripts/ 下有配置文件<br /><br />比如文件：ifcfg-eth0 代表是以太网实际网卡0的配置文件<br /><br />比如文件：ifcfg-eth0:1 代表是以太网实际网卡0的配置文件<br /><br />域名服务器配置文件：/etc/ resolv.conf<br /><br />修改ip地址<br />即时生效:<br /># ifconfig eth0 192.168.0.20 netmask 255.255.255.0<br />启动生效:<br />修改/etc/sysconfig/network-scripts/ifcfg-eth0<br /><br />修改default gateway<br />即时生效:<br /># route add default gw 192.168.0.254<br />启动生效:<br />修改/etc/sysconfig/network-scripts/ifcfg-eth0<br /><br />修改dns<br />修改/etc/resolv.conf<br />修改后可即时生效，启动同样有效<br /><br />修改host name<br />即时生效:<br /># hostname fc2<br />启动生效:<br />修改/etc/sysconfig/network<br /></span></span></p>
<p>&nbsp;</p>
<p><span class="w_deepbrown"><span style="color: #274e13"><span># Realtek Semiconductor Co., Ltd. RTL-8139/8139C/8139C+<br />DEVICE=eth0 接口名称<br />BOOTPROTO=none&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 静态配置，若该值为&#8220;dhcp&#8221;则为动态获得，另外 static也是表示静态ip地址<br />BROADCAST=192.168.10.255 广播地址，通过IP地址和子网掩码自动计算得到<br />HWADDR=00:13:D3:27:9F:80 <br />IPADDR=192.168.10.238<br />IPV6INIT=yes<br />IPV6_AUTOCONF=yes<br />NETMASK=255.255.255.0<br />NETWORK=192.168.10.0&nbsp;&nbsp;&nbsp; 指定网络，通过IP地址和子网掩码自动计算得到<br />ONBOOT=yes &nbsp;&nbsp; 开机时自动加载<br />GATEWAY=192.168.10.1<br />TYPE=Ethernet<br />PEERDNS=yes<br />USERCTL=no<br /><br />ifdown eth0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 关闭网络<br />ifconfig eth0 down&nbsp;&nbsp;&nbsp; 关闭网络<br /><br />ifup eth0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 开启网络<br />ifconfig eth0 up&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 开启网络<br /></span><br /><strong><span>设置dns</span></strong></span><span style="color: #274e13"><font size="2"><span style="font-size: small"><strong> /etc/resolv.conf</strong><br /><br />nameserver 61.144.56.101<br />nameserver 202.96.128.166<br /><br />[yeger@yeger ~]$ cat /etc/resolv.conf <br /># Generated by NetworkManager<br />nameserver 202.96.128.86<br />nameserver 202.96.128.166<br /><br /><strong>其他方面</strong><br />service network start&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //启动网络服务<br />service network stop&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //停止网络服务<br />service network restart&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //重启网络服务<br />service network status&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //查看网络服务状态<br /><br />ifconfig eth0 192.168.10.222 netmask 255.255.255.0 //临时修改接口IP地址（无需重启接口）<br /><br />[yeger@yeger ~]$ sudo ifconfig wlan0 192.168.21.199 netmask 255.255.255.0<br />[yeger@yeger ~]$ ifconfig wlan0<br />wlan0 Link encap:Ethernet HWaddr 00:02:72:77:BB:D1 <br />inet addr:192.168.21.199 Bcast:192.168.21.255 Mask:255.255.255.0<br />inet6 addr: fe80::202:72ff:fe77:bbd1/64 Scope:Link<br />UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1<br />RX packets:3246 errors:0 dropped:0 overruns:0 frame:0<br />TX packets:1947 errors:0 dropped:0 overruns:0 carrier:0<br />collisions:0 txqueuelen:1000 <br />RX bytes:4514869 (4.3 MiB) TX bytes:177732 (173.5 KiB)<br />wlan0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 表示第一块无线以太网卡</span><br /><span style="font-size: small">Link encap&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="font-size: small">表示该网卡位于OSI物理层(Physical Layer）的名称</span><br /><span style="font-size: small">HWaddr&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="font-size: small">表示网卡的MAC地址（Hardware Address）</span><br /><span style="font-size: small">inet addr&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="font-size: small">表示该网卡在TCP/IP网络中的IP地址</span><br /><span style="font-size: small">Bcast&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="font-size: small">表示广播地址（Broad Address）</span><br /><span style="font-size: small">Mask&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="font-size: small">表示子网掩码（Subnet Mask）</span><br /><span style="font-size: small">MTU&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="font-size: small">表示最大传送单元，不同局域网 MTU值不一定相同，对以太网来说，MTU的默认设置是1500个字节</span><br /><span style="font-size: small">Metric&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="font-size: small">表示度量值，通常用于计算路由成本</span><br /><span style="font-size: small">RX&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="font-size: small">表示接收的数据包</span><br /><span style="font-size: small">TX&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; </span><span style="font-size: small">表示发送的数据包</span><br /><span style="font-size: small">collisions&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; </span><span style="font-size: small">表示数据包冲突的次数</span><br /><span style="font-size: small">txqueuelen &nbsp;&nbsp; </span><span style="font-size: small">表示传送列队（Transfer Queue）长度</span><br /><span style="font-size: small">interrupt&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="font-size: small">表示该网卡的IRQ中断号</span><br /><span style="font-size: small">Base address&nbsp;&nbsp;&nbsp;&nbsp; </span></font></span><span>表示I/O地址<br /><br /></span></span></p>
<p style="margin-bottom: 0cm"><span style="font-size: small"><span style="color: #274e13"><font size="2"><strong>配置虚拟网卡</strong><strong>IP</strong><strong>地址</strong>:网卡需要拥有多个IP地址</font></span></span></p>
<p style="margin-bottom: 0cm"><span>命令格式： ifconfig 网卡名：虚拟网卡ID IP地址 netmask 子网掩码</span></p>
<p><span>[yeger@yeger ~]$ sudo ifconfig wlan0:1 192.168.21.188 netmask 255.255.255.0</span></p>
<p style="margin-bottom: 0cm"><span style="font-size: small"><span style="color: #274e13"><font size="2"><strong>更改网卡</strong><strong>MAC</strong></font></span></span><strong><span style="color: #274e13"><span>地址</span><br /></span></strong></p>
<p style="margin-bottom: 0cm"><span>ifconfig 网卡名 hw ether MAC地址<br /></span></p>
<p style="margin-bottom: 0cm"><span>[yeger@yeger ~]$ ifconfig wlan0 hw ether 00:11:22:33:44:55</span></p>
<p><br /><span>SIOCSIFHWADDR: 不允许的操作<br />[yeger@yeger ~]$ sudo ifconfig wlan0 hw ether 00:11:22:33:44:55<br />SIOCSIFHWADDR: 设备或资源忙<br />[yeger@yeger ~]$ ifconfig wlan0 down<br />SIOCSIFFLAGS: 权限不够<br />[yeger@yeger ~]$ sudo ifconfig wlan0 down<br />[yeger@yeger ~]$ sudo ifconfig wlan0 hw ether 00:11:22:33:44:55<br />更改成功<br /><br />[yeger@yeger ~]$ netstat -ant 查看端口信息 a 所有 n数字显示 t tcp协议 u udp协议<br />Active Internet connections (servers and established 已建立连接)<br /></span><span style="font-size: small"><span><font size="2">Proto Recv-Q Send-Q Local Address&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Foreign Address&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; State&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />协议&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 本地地址&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 远程地址&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; 连接状态<br />类型<br />tcp&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0 0.0.0.0:57798&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0.0.0.0:*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; LISTEN&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; listen表示监听状态<br />tcp&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0 0.0.0.0:111&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0.0.0.0:*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; LISTEN&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />tcp&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0 192.168.122.1:53&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0.0.0.0:*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; LISTEN&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />tcp&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0 0.0.0.0:22&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0.0.0.0:*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; LISTEN&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />tcp&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0 127.0.0.1:631&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0.0.0.0:*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; LISTEN&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />tcp&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0 127.0.0.1:25&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0.0.0.0:*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; LISTEN&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />tcp&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0 :::111&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; :::*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; LISTEN&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />tcp&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0 :::22&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; :::*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; LISTEN&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />tcp&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0 ::1:631&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; :::*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; LISTEN&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br /><br />[yeger@yeger ~]$ netstat -r 查看路由表<br />Kernel IP routing table<br />Destination&nbsp;&nbsp;&nbsp;&nbsp; Gateway&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Genmask&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Flags&nbsp;&nbsp; MSS Window irtt Iface<br />192.168.21.0&nbsp;&nbsp;&nbsp; *&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 255.255.255.0&nbsp;&nbsp; U&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0 0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0 wlan0<br />192.168.122.0&nbsp;&nbsp; *&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 255.255.255.0&nbsp;&nbsp; U&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0 0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0 virbr0<br />default&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 192.168.21.1&nbsp;&nbsp;&nbsp; 0.0.0.0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; UG&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0 0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0 wlan0<br /><br />[yeger@yeger ~]$ netstat -i&nbsp;&nbsp; 查看网络接口状态<br />Kernel Interface table<br />Iface&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; MTU Met&nbsp;&nbsp;&nbsp; RX-OK RX-ERR RX-DRP RX-OVR&nbsp;&nbsp;&nbsp; TX-OK TX-ERR TX-DRP TX-OVR Flg&nbsp;&nbsp;&nbsp;&nbsp; <br />eth0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1500&nbsp;&nbsp; 0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0 BMU<br />lo&nbsp;&nbsp;&nbsp;&nbsp; 16436&nbsp;&nbsp; 0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 230&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 230&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0 LRU<br />virbr0&nbsp;&nbsp;&nbsp;&nbsp; 1500&nbsp;&nbsp; 0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 29&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0 BMRU<br />wlan0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1500&nbsp;&nbsp; 0&nbsp;&nbsp;&nbsp; 10546&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0&nbsp;&nbsp;&nbsp;&nbsp; 7060&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0 BMRU<br />wmaster0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0&nbsp;&nbsp; 0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0 RU<br />[yeger@yeger ~]$</font></span></span></p>
<p style="margin-bottom: 0cm"><span style="color: #274e13"><font size="2"><span style="font-size: small"><strong>MTU</strong><strong>字段：</strong>表示最大传输单元，即网络接口传输数据包的最大值。 </span><br /><span style="font-size: small"><strong>Met</strong></span><span style="font-size: small"><strong>字段：</strong>表示度量值，越小优先级越高。 </span><br /><span style="font-size: small"><strong>RX-OK/TX-OK</strong></span><span style="font-size: small"><strong>：</strong>分别表示接收、发送的数据包数量。 </span><br /><span style="font-size: small"><strong>RX-ERR/TX-ERR</strong></span><span style="font-size: small"><strong>：</strong>表示接收、发送的错误数据包数量。 </span><br /><span style="font-size: small"><strong>RX-DRP/TX-DRP</strong></span><span style="font-size: small"><strong>：</strong>表示丢弃的数量。 </span><br /><span style="font-size: small"><strong>RX-OVR/TX-OVR</strong></span><span style="font-size: small"><strong>：</strong>表示丢失数据包数量。</span></font></span></p>
<p style="margin-bottom: 0cm"><span style="font-size: small"><span><font size="2">[yeger@yeger ~]$ nslookup www.baidu.com 测试域名解析<br />Server:&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; 202.96.128.86<br />Address:&nbsp;&nbsp;&nbsp; 202.96.128.86#53<br /><br />Non-authoritative answer:<br />www.baidu.com&nbsp;&nbsp;&nbsp; canonical name = www.a.shifen.com.<br />Name:&nbsp;&nbsp;&nbsp; www.a.shifen.com<br />Address: 119.75.218.45<br />Name:&nbsp;&nbsp;&nbsp; www.a.shifen.com<br />Address: 119.75.218.45<br /></font></span></span></p>
<p style="margin-bottom: 0cm"><span>百度的IP地址是：119.75.218.45</span></p><img src ="http://www.cppblog.com/blueskiner/aggbug/186309.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/blueskiner/" target="_blank">卡洛shll</a> 2012-08-05 02:06 <a href="http://www.cppblog.com/blueskiner/archive/2012/08/05/186309.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>