??xml version="1.0" encoding="utf-8" standalone="yes"?>国产午夜福利精品久久2021,久久毛片免费看一区二区三区,99久久免费只有精品国产http://www.shnenglu.com/cyt/category/102.htmlzh-cnMon, 19 May 2008 14:17:21 GMTMon, 19 May 2008 14:17:21 GMT60如何在windows service里面控制consoleE序退?/title><link>http://www.shnenglu.com/cyt/archive/2008/01/08/40723.html</link><dc:creator>cyt</dc:creator><author>cyt</author><pubDate>Tue, 08 Jan 2008 08:07:00 GMT</pubDate><guid>http://www.shnenglu.com/cyt/archive/2008/01/08/40723.html</guid><wfw:comment>http://www.shnenglu.com/cyt/comments/40723.html</wfw:comment><comments>http://www.shnenglu.com/cyt/archive/2008/01/08/40723.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.shnenglu.com/cyt/comments/commentRss/40723.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/cyt/services/trackbacks/40723.html</trackback:ping><description><![CDATA[首先Q要控制windows servicesQ是比较Ҏ的事情,一堆现成的例子?br><a href="http://www.codeproject.com/KB/system/xyntservice.aspx">SYNtService</a> 是一个很好的例子?br>要控制一个窗口退出是十分Ҏ的事情,PostMessage可以解决问题?br>要控制console退出,也有很多现成的方法。比较通用的方法:<br>1、TerminateProcess<br>   最原始、最暴力的强制console退出的Ҏ。consoleq程毫无q手之力over了。但我希望console在推Z前至能处理一?#8220;后事”?br><br>2、signal / raise<br>   原来windows也有signalQ不qkill换成了raise。但是相对Unixpd的signal功能差很远了。而且有一个麻烦的地方是raise只能Ҏconsole生效Q而不能对指定的process?br>   可以在signal里面指定一个call back函数Q在收到SIGINT/SIGTERM之类的时候,处理一下事情,然后通知各个U程l束?br>   既然不能raise其他q程Q是否这个功能就不能用了呢?其实可以考虑一下CreateRemoteThreadQ然后在别h的进E里面raise……<br><br>3、SetConsoleCtrlHandler / GenerateConsoleCtrlEvent<br>    q个是console专门用来处理Ctrl-C/Ctrl-Break/以及windowsx事g{的处理Ҏ。比signal更强大。而且说明中写了,可以对其他的q程q行处理Q还可以对进E组处理Q。用|上的话说就是:很女子,很弓虽!<br>    但是要注意,如果要对其创建的子进E进行处理的时候,创徏子进E必要使用CREATE_NEW_PROCESS_GROUP标志。另外一点,文档写的比较隐晦的就是,q程必须要有consoleH口。否则,调用GenerateConsoleCtrlEvent会返?Q说ERROR_INVALID_HANDLE?br>    问题来了QService本n是没有consoleH口的,Service建立的子q程必要自带H口了。但是一般ؓ了美观,Service启动的进E都不想带有H口。那变成了子进E没有consoleH口QGenerateConsoleCtrlEvent失效了?br>    在网上查了很多资料(怎么没看到很黄很暴力呢?Q?Q,其中?strong><span id="l515jxp" class="FakeLink" onclick="window.location=getMailto();" onmouseover="window.status='Click to send e-mail.';" onmouseout="window.status='';"> </span></strong><span id="xb3zbr3" class="FakeLink" onclick="window.location=getMailto();" onmouseover="window.status='Click to send e-mail.';" onmouseout="window.status='';">Louis K. Thomas <loui<span style="display: none;">NØSP@M</span>sth@hotm<span style="display: none;">ÑOSP@M</span>ail.co<span style="display: none;">NÕSP@M</span>m> ?/span> <a href="http://www.latenighthacking.com/projects/2003/sendSignal/">SendSignal</a><span style="text-decoration: underline;"></span> 提到一U做法,是先获得kernel32!CtrlRoutine的入口,然后通过CreateRemoteThread的方法,让远E的console来执行kernel32!CtrlRoutine。但q种Ҏ有个问题Q在获得kernel32!CtrlRoutine的时候,也是使用GenerateConsoleCtrlEvent来获得。但是Service自己本n没有consoleH口Q一调用GenerateConsoleCtrlEvent也是出错?br>而另一?<a href="http://groups.google.com/group/microsoft.public.win32.programmer.kernel/browse_thread/thread/a705105bc415a409/a5d6a5161fcb7450?hl=en&lnk=st&q=GenerateConsoleCtrlEvent+++ERROR_INVALID_HANDLE#a5d6a5161fcb7450">google讨论l?/a> 文章Q里面提到原来可以先AllocConsole、然后GenerateConsoleCtrlEvent、然后FreeConsole……于是解决Ҏ变成:<br>Service里面:<br>  先AllocConsole<br>  然后利用GenerateConsoleCtrlEvent获得kernel32!CtrlRoutine<br>  然后FreeConsole<br>  当需要结束进E的时候,p用CreateRemoteThreadQ把kernel32!CtrlRoutine的代码注入到子process中执?br>  q样大家都看不到consoleH口Qservice里面AllocConsole很快Q看不到H口出来Q甚x疑根本就有没有窗口出来)Q同时又能通知子进E优雅地退出?br><br>存在问题Q如果我的机器作为服务器启动Q即没有q入d状态,不知道这样启动的Service会不会有问题呢?Q暂时还没有旉试?br><br><br>    <br><span style="font-weight: bold;">    <br></span><strong style="color: black; background-color: #a0ffff;"></strong><br> <img src ="http://www.shnenglu.com/cyt/aggbug/40723.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/cyt/" target="_blank">cyt</a> 2008-01-08 16:07 <a href="http://www.shnenglu.com/cyt/archive/2008/01/08/40723.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>补充一个OCI的问?/title><link>http://www.shnenglu.com/cyt/archive/2007/03/30/20912.html</link><dc:creator>cyt</dc:creator><author>cyt</author><pubDate>Thu, 29 Mar 2007 16:00:00 GMT</pubDate><guid>http://www.shnenglu.com/cyt/archive/2007/03/30/20912.html</guid><wfw:comment>http://www.shnenglu.com/cyt/comments/20912.html</wfw:comment><comments>http://www.shnenglu.com/cyt/archive/2007/03/30/20912.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.shnenglu.com/cyt/comments/commentRss/20912.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/cyt/services/trackbacks/20912.html</trackback:ping><description><![CDATA[ <p>前几天客h诉我们提供的一个访问Oracle的程序,说运行太慢了Q半天都没有处理完数据?br />客户数据也就几十万条Q也不是什么v量数据,I竟什么原因呢。而且奇怪的是我们提供的其它cM的程序访问同一张数据表却没有Q何的问题?br />l过多次反复写测试程序,试各种的条Ӟ最后发现原来是其中一条update语句执行很慢Q要2U钟才更C条。而这条update语句的where部分有两个条Ӟ一个是整数的比较条Ӟ一个是日期的比较条件。当然很Ҏ可以通过试排除了整数条件导致慢的可能性。剩下的原因是日期比较条gD慢了?br />说得也奇怪,日期条g是通过param的方式传入参数的Q执行很慢。但试的时候如果把日期条g展开Q把日期条g变成SQL的一部分Q那执行很快了。先不论Z么这么奇怪,要知道Oracle SQL语句的日期条件不是一般的ȝQ都要经qTO_DATE/TO_CHARp弄来糊弄去QSQL语句跟其他的数据库不一PE序失去通用性了。一定是自己调用OCI的时候犯了什么糊涂错误了?br />最后还是发现有一个不妥当的地方:数据库字D늱型是DATEQ而我用OCIl定param的时候,用的却是SQLT_TIMESTAMP。原因是我想hQ希望用OraDateStructp决OCI的日期类型。于是我试用回SQLT_DATQ自己“笨W的”把旉转换为OCI所能L认的7个byte的数l,然后q行E序。速度太快了,一下子执行完了?br />其实不明白的是,Oracle发现cd不匹配,要不报错;要不把条g变ؓ相容的数据进行查询。但是现在从现象看来QOracle像是把所有保存的数据逐个转换成ؓ与条件相容的cdq行判断Q而不是{换条件的cd。所以每ơupdate都变成了遍历所有的数据。难道是存在DBA可以调整的优化策略?Q不明白Q不明白…?/p> <img src ="http://www.shnenglu.com/cyt/aggbug/20912.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/cyt/" target="_blank">cyt</a> 2007-03-30 00:00 <a href="http://www.shnenglu.com/cyt/archive/2007/03/30/20912.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>OpenDBX 一个访问多数据库的Ccdhttp://www.shnenglu.com/cyt/archive/2007/03/29/20908.htmlcytcytThu, 29 Mar 2007 15:31:00 GMThttp://www.shnenglu.com/cyt/archive/2007/03/29/20908.htmlhttp://www.shnenglu.com/cyt/comments/20908.htmlhttp://www.shnenglu.com/cyt/archive/2007/03/29/20908.html#Feedback0http://www.shnenglu.com/cyt/comments/commentRss/20908.htmlhttp://www.shnenglu.com/cyt/services/trackbacks/20908.htmlhttp://www.linuxnetworks.de/opendbx/

OpenDBXQ一个开源的、简单的、可以访问多U数据库的Ccd。按作者说的,已经支持Q?br />
  • Firebird
  • Interbase
  • MS SQL Server
  • MySQL
  • Oracle
  • PostgreSQL
  • SQLite
  • SQLite3
  • Sybase
而且好像是用动态蝲入模块方式,即dlopen打开相应驱动模块的so的方式,是有点ODBC的味道?br />不过支持的数据类型以及SQL查询的功能有限?br />留着以后可能会有些参考h倹{?img src ="http://www.shnenglu.com/cyt/aggbug/20908.html" width = "1" height = "1" />

cyt 2007-03-29 23:31 发表评论
]]>
UL代码?4bitsC的问?/title><link>http://www.shnenglu.com/cyt/archive/2007/03/29/20907.html</link><dc:creator>cyt</dc:creator><author>cyt</author><pubDate>Thu, 29 Mar 2007 15:15:00 GMT</pubDate><guid>http://www.shnenglu.com/cyt/archive/2007/03/29/20907.html</guid><wfw:comment>http://www.shnenglu.com/cyt/comments/20907.html</wfw:comment><comments>http://www.shnenglu.com/cyt/archive/2007/03/29/20907.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.shnenglu.com/cyt/comments/commentRss/20907.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/cyt/services/trackbacks/20907.html</trackback:ping><description><![CDATA[ <p>一晃眼Q原来又有好几个月没有上来。其间写了几个月的javascriptQ写了几个月的JSPQC++的东襉K没有怎么过了?br /><br />q几天要原来目的C++代码?2bit的^台移植到64bit的^台。由于以前编写类库的时候已l十分小心,也早有预谋,所以竟然很利的全部编译通过Q而且-Wall下面都没有Q何warning。满心欢喜之下运行了E序。谁知道马上是一个Segment faul。沮丧之余用gdb跟踪了半天都不知道什么地方的问题。加上valgrindQ也是一头雾_竟然是说标准STL的hash_map的问题……最后在一ơ跟t的时候,无意中检查一个指针的初始化|发现不ؓI,原因应该在q里?br />L代码的上下文Q原来指针是跟一个int攑֜同一个union当中Q而union的初始化只初始化了intQ而没有初始化指针。在64bit机器的gcc下,int?2bit而指针是64bitQ所以就D指针不ؓI的现象。所以赶紧把代码中所有union的地斚w扑և来检查一遍。幸好unionq种东西qx不敢多用Q也没发现其他的异常。程序重新编译,再运行,没有Segment fault了?br /><br />然后再运行了一批unit test。发现其中有几个不能通过Q其原因其实也是比较无聊。都是自׃心之过Q?br />1、sha1的代码copy php的,其中一个php_uint32变量竟然自己写了unigned longQ傻瓜致?br />2、有个地方保存各U长度整数到文gQ因为偷懒,把函数写成了模板Q大概就是:<br />   template<typename typeInt><br />      int write(typeInt n) {<br />         writeToFile( &n, sizeof(n));<br />      }<br />   然后一个不心Q想写个string的长度的时候就变成了:  write( str.length() );<br />   str.length()cd是size_tQ?4bitQ与32bitpȝ的不一P当然也就出错了?br />   其实qx都已l很心Q尽量用static_cast强制转换为特定长度类型的变量再输出的了,偏偏是漏了一两个地方?/p> <img src ="http://www.shnenglu.com/cyt/aggbug/20907.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/cyt/" target="_blank">cyt</a> 2007-03-29 23:15 <a href="http://www.shnenglu.com/cyt/archive/2007/03/29/20907.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>db4o and GigaBasehttp://www.shnenglu.com/cyt/archive/2006/11/17/15303.htmlcytcytFri, 17 Nov 2006 09:11:00 GMThttp://www.shnenglu.com/cyt/archive/2006/11/17/15303.htmlhttp://www.shnenglu.com/cyt/comments/15303.htmlhttp://www.shnenglu.com/cyt/archive/2006/11/17/15303.html#Feedback0http://www.shnenglu.com/cyt/comments/commentRss/15303.htmlhttp://www.shnenglu.com/cyt/services/trackbacks/15303.htmldb4o的RoadShowQ终于见到英俊潇z玉树风,传说中的Matrix主Chris
    db4ol我的印象就是不依赖关系数据库的“Hibernate”,完全是全自动对象序列化 + 强查询。按照官方给出的数据Q其嵌入式的应用环境下性能真的是无出其右了。但按我的理解,׃没有低粒度锁Q必然存在无法解决的q发冲突Q或者ƈ发读问题不大Qƈ发更Ҏ能应该会有影响。究竟用了什么超强技术那׃知道Q或者有I找来研I一下。个人感觉db4oq不是要用来替代数据库,而是数据保存的一个辅助。十分适合用于Cachepȝ或者应用于嵌入式设备。db4o只提供Java和C#接口Q对于目前PDA应用来说g要求高了炏V就如Rayman所_解决了CPU和内存问题还有一个电源问题估计PDAq期也无法解冟?span style="COLOR: red">Christof一再强调其三段式事务保证数据文件完_快速易用的开发模式;大规模数据的支持……至于他们公司的开源盈利模式,弟英文水^有限Q听不懂了?br />    很久以前提到过GigaBaseQ似乎就是db4o的C++版本。不qC++先天不Q缺反机Ӟ实现当然不能像db4o般优了。但gq个选择也不错,可以告别BerkeleyDB、sqlit……从此步入OO数据保存的“天堂”…?/font>


cyt 2006-11-17 17:11 发表评论
]]>
实在惭愧http://www.shnenglu.com/cyt/archive/2006/11/12/15090.htmlcytcytSun, 12 Nov 2006 09:45:00 GMThttp://www.shnenglu.com/cyt/archive/2006/11/12/15090.htmlhttp://www.shnenglu.com/cyt/comments/15090.htmlhttp://www.shnenglu.com/cyt/archive/2006/11/12/15090.html#Feedback2http://www.shnenglu.com/cyt/comments/commentRss/15090.htmlhttp://www.shnenglu.com/cyt/services/trackbacks/15090.html工作的需要,q半q来一直写在javascriptQ一个让人又爱又恨的语言。简单灵zȝ语法、却又带来无IL陷阱。换一U思考角度的开发方式,使习惯于传统语言的我开始的时候难以适应?br />开发的时候经常在惛_何把javascript的好处带入到C++。或许boost?a href="http://www.boost.org/libs/any/index.html">any?a href="http://www.boost.org/libs/lambda/index.html">lambda ?a href="http://www.boost.org/libs/function/index.html">function ?a href="http://www.boost.org/libs/signals/index.html">signals可以为C++开发带入少的javascript乐趣?img src ="http://www.shnenglu.com/cyt/aggbug/15090.html" width = "1" height = "1" />

cyt 2006-11-12 17:45 发表评论
]]>
新版本的Quhttp://www.shnenglu.com/cyt/archive/2006/04/14/5594.htmlcytcytFri, 14 Apr 2006 15:09:00 GMThttp://www.shnenglu.com/cyt/archive/2006/04/14/5594.htmlhttp://www.shnenglu.com/cyt/comments/5594.htmlhttp://www.shnenglu.com/cyt/archive/2006/04/14/5594.html#Feedback6http://www.shnenglu.com/cyt/comments/commentRss/5594.htmlhttp://www.shnenglu.com/cyt/services/trackbacks/5594.html阅读全文

cyt 2006-04-14 23:09 发表评论
]]>
OCI讉KOracle的一些刁钻问?/title><link>http://www.shnenglu.com/cyt/archive/2006/04/14/5591.html</link><dc:creator>cyt</dc:creator><author>cyt</author><pubDate>Fri, 14 Apr 2006 14:24:00 GMT</pubDate><guid>http://www.shnenglu.com/cyt/archive/2006/04/14/5591.html</guid><wfw:comment>http://www.shnenglu.com/cyt/comments/5591.html</wfw:comment><comments>http://www.shnenglu.com/cyt/archive/2006/04/14/5591.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.shnenglu.com/cyt/comments/commentRss/5591.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/cyt/services/trackbacks/5591.html</trackback:ping><description><![CDATA[ <p>1、CLOG/BLOG的插?br /> 找了很多OCI的例子以及一些PHP的例子,基本上都是同一U做法:<br /> a、OCIStmtPrepare预处理SQL语句Q?insert into mytable (myimg) values (empty_blob()) returning myimg into :pImg"<br /> b、调用OCIDescriptorAllocQ用参数OCI_DTYPE_LOBQ获得一个LOB的句?br /> c、用OCIStmtBindByPos或者OCIStmtBindByNameQ把LOB句柄和参?pImgl定<br /> d、OCIStmtExecute执行<br /> e、OCILobWrite往LOB里面写数?br /> f、commit和释放资源等{?br /> <br /> 问题是这个SQL语句也太特别了,和其他数据库的SQL不一栗但是在java的实CQƈ不需要这么奇怪的语法?br /> insert into mytable (myimg) values(?)<br /> p够了?br /> 在我们的应用中,能够l一同一USQL的写法当然是最好的Q最好就是:<br /> insert into mytable (myimg) values (:pImg) 那就和其他的数据处理一致了?br /> <br /> 做了很多的尝试,l于扑ֈ解决的方法:<br /> a、OCIStmtPrepare预处理SQL语句Q?insert into mytable (myimg) values (:pImg)"<br /> b、调用OCIDescriptorAllocQ用参数OCI_DTYPE_LOBQ获得一个LOB的句?br /> c、通过OCILobCreateTemporary函数QؓLOB句柄创徏临时LOB对象<br /> d、OCILobWriteAppend往LOB句柄写数?br /> e、用OCIStmtBindByPos或者OCIStmtBindByNameQ把LOB句柄和参?pImgl定<br /> f、OCIStmtExecute执行<br /> g、commit和释放资源等{?br /> <br /> l过单的装QLOB操作单很多了Q?br /> TDBConnection conn = TDatabase::getConnection( strConnection );<br /> TDBStatement dbStatement(conn.getStatement());<br /> dbStatement.prepareSQL( "insert into mytable (myimg) values (:pImg)" );<br /> dbStatement.getParam("pImg").attachInputStream( fStream );<br /> dbStatement.execSQL();<br /> conn.commite();<br /> <br />2、空字符?br /> 插入一个空字符ԌOCIBindByPos/OCIBindByName的时候,那个字符串的数据cdQ不能是SQLT_LVCQ用SQLT_CHR倒是没有问题?br /> 具体Z么,只有Oracle自己知道了?br /> <br />3、指定IPq接Oracle<br /> 通过OCIServerAttach里面指定l定的SIDq接数据库。用SIDq接Oracle当然有它的好处。奇怪的是JDBC能用IP和Port指定q接哪个Oracle?br /> NOCI的帮助都找不到IPq接Ҏ。google了很久,扑ֈ解决的方法,自己生成SIDQ?br /> string strSID = "(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=%1)(PORT=%2)))(CONNECT_DATA=(SERVICE_NAME=%3)))";<br /> 里面?1设ؓOracle服务器的IPQ?2设ؓOracle服务器的PortQ一般是1521Q?3是database的名字?br /> 把这个字W串攑օOCIServerAttach</p> <p> </p> <img src ="http://www.shnenglu.com/cyt/aggbug/5591.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/cyt/" target="_blank">cyt</a> 2006-04-14 22:24 <a href="http://www.shnenglu.com/cyt/archive/2006/04/14/5591.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Linux的系l性能监测参数获取http://www.shnenglu.com/cyt/archive/2006/03/02/3660.htmlcytcytThu, 02 Mar 2006 14:54:00 GMThttp://www.shnenglu.com/cyt/archive/2006/03/02/3660.htmlhttp://www.shnenglu.com/cyt/comments/3660.htmlhttp://www.shnenglu.com/cyt/archive/2006/03/02/3660.html#Feedback3http://www.shnenglu.com/cyt/comments/commentRss/3660.htmlhttp://www.shnenglu.com/cyt/services/trackbacks/3660.html目前的工E需要简单的监测一下Linuxpȝ的:CPU负蝲、内存消耗情c几个指定目录的盘I间、磁盘I/O、swap的情况还有就是网l流量?BR>Linux下的性能工具其实都有很多。mrtgQ?A href="http://people.ee.ethz.ch/~oetiker/webtools/mrtg/">http://people.ee.ethz.ch/~oetiker/webtools/mrtg/Q就是一个很不错的选择。不q用mrtgp装sysstat、apache、snmp、perl之类的东ѝ而且安装也要好几个步骤,g比较ȝ。本来也想直接调用sar、vmstat之类的命令,parse一下结果就了。哪知道发现不同的版本的linuxq些命o的结果也都是不一栗既然要按版本parse它们的结果,那还不如直接ȝl里面获得算了。于是研I了一下sysstatQ?A href="http://freshmeat.net/projects/sysstat/">http://freshmeat.net/projects/sysstat/Q和gkrellmQ?A href="http://gkrellm.net">http://gkrellm.net Q的源代码,扑ֈ监测性能的数据所在?BR>
1、CPU
   在文?/proc/stat"里面包含了CPU的信息。每一个CPU的每一tick用在什么地斚w在这个文仉面记着。后面的数字含义分别是:user、nice、sys、idle、iowait。有些版本的kernel没有iowaitq一V这些数DCZ开机到现在QCPU的每tick用在了哪里。例如:
cpu0 256279030 0 11832528 1637168262
是cpu0从开机到现在?56279030 tick用在了user消耗,11832528用在了sys消耗。所以如果想计算单位旉Q例?sQ里面CPU的负载,那只需要计?U前后数值的差除以每一U的tick数量可以了。gkrellm是q样实现的:((200 * (v2 - v1) / CPU_TICKS_PER_SECOND) + 1) /2
例如Q第一ơ读?proc/statQuser的值是256279030Q一U以后再Mơ,值是256289030Q那么CPU在这一U的user消耗就是:((200 * (256289030 - 256279030) / CPU_TICKS_PER_SECOND) + 1) /2 = ((10000 * 200 / 1000000) + 1) / 2 = 1%了?BR>
2、内存消?BR>   文g"/proc/meminfo"里面包含的就是内存的信息Q还包括了swap的信息。例如:
$ cat /proc/meminfo
        total:    used:    free:  shared: buffers:  cached:
Mem:  1057009664 851668992 205340672        0 67616768 367820800
Swap: 2146787328 164429824 1982357504
MemTotal:      1032236 kB
MemFree:        200528 kB
MemShared:           0 kB
…?BR>不过从gkrellm的源代码看,有些版本没有前面那两行统计的信息Q只能够Ҏ下面的Key: Valueq种各式的数据收集?BR>
3、磁盘空?BR>   从gkrellm的源代码看,q个是一个很复杂的数据。磁盘分区的数据有可能分布在Q?proc/mounts?proc/diskstats?proc/partitions{等。而且如果惌查某几个特定的\径,q需要通过mount、df{命令的帮助。ؓ了减麻烦,q个数据我就直接用statfs函数直接获得了?BR>int statfs(const char *path, struct statfs *buf);
q个函数只需要输入需要检查的路径名称Q就可以q回q个路径所在的分区的空间用情况:
ȝ_buf.f_bsize * buf.f_blocks
IZI间Qbuf.f_bsize * buf.f_bavail

4、磁盘I/O
   盘I/O的数据也同样比较复杂Q有些版本看/proc/diskstatsQ有些版本看/proc/partitionsQ还有些版本至今我也不知道在那里看……不q可以看到数据的版本也像CPU那样Q需要隔一D|间取|两次取值的差就是流量?BR>
5、网l流?BR>   |络量也是五花八门Q不q基本上都可以在/proc/net/dev里面获得。同样也是需要两ơ取值取其差作ؓ量倹{?BR>
   以上是数据获得源头。程序也比较好写Q不外乎是打开一些文Ӟ逐行d来然后用sscanf来parse一下数据就可以了?/P>

cyt 2006-03-02 22:54 发表评论
]]>
单的cd安全format输出后记http://www.shnenglu.com/cyt/archive/2006/03/02/3643.htmlcytcytThu, 02 Mar 2006 08:17:00 GMThttp://www.shnenglu.com/cyt/archive/2006/03/02/3643.htmlhttp://www.shnenglu.com/cyt/comments/3643.htmlhttp://www.shnenglu.com/cyt/archive/2006/03/02/3643.html#Feedback0http://www.shnenglu.com/cyt/comments/commentRss/3643.htmlhttp://www.shnenglu.com/cyt/services/trackbacks/3643.htmlhttp://www.shnenglu.com/cyt/archive/2005/10/08/578.htmlQ?BR>今天又在codeporject里面发现有类似的CFormat(http://www.codeproject.com/useritems/pja_format.asp)。不q同h那一句,很多是徏议用boost。不q本觉得boost那套东西性能有些问题Q而且xformat独立出来使用基本上不可能Q所以一直以来还是用自己写的那个format_stream和format_string?BR>自己写的format_string在输出百分比的数据的时候有问题Q理由是没有在?’后面加参数Q所以没办法识别?’是占位W还是真正的?’号。虽然程序简单的把?%’认为是一个?’号。但是要输出癑ֈ数的时候如果写 "%%%"的话Q则优先把前面的?%’变成了?’号了。我曄把程序简单修改ؓ到三个?’的时候,pW一个ؓ占位W,后面两个合在一起变为?’号了。但始终在解释的时候有些怪怪的。例如连l四个?’,五个呢?后来Q我更q脆不改Q所有输出百分数的时候一律写Qstr.format("percent: %").arg( nPercent, '%').str();
另外一个麻烦的是输出16q制数的时候,那个argWithFormat参数也太多了点,有时候想单输Z下都要填半天参数Q估计参考CFormat的Hex实现也是一个不错的选择。反正只要能支持 << 操作的对象都能用在format_string里面?BR>format_stream/format_string的确是目前开发中用得最多的cR不q有时候讨v来,Z么非要用format方式Q难道就是因为好看的原因Q前几天在看i18nQ终于看C个format_xxxx的优势:输出字符串的替换明显工作量少了很多很多?BR>
在用javascript开发的日子Q还是忘不了 format_xxxxxQ于是有写了个javascript的版本:

function _formatString( strFormat ) {
    
this.format( strFormat );
}
;

_formatString.prototype.format 
= function ( strPattern ) {
    
this._pattern = strPattern;
    
this._p = 0;
    
this._res = "";
}
;

_formatString.prototype._moveToNext 
= function () {
    
for ( ; this._p < this._pattern.length; ++this._p ) {
        
var ch = this._pattern.charAt( this._p );
        
if ( ch == "%" ) {
            
++this._p;
            
if ( this._p < this._pattern.length && this._pattern.charAt( this._p ) == "%" ) {
                
this._res += "%";
            }
 else {
                
break;
            }
    
        }

        
else
            
this._res += ch;
    }

    
return this;
}
;

_formatString.prototype.str 
= function () {
    
this._res += this._pattern.substr( this._p );
    
return this._res;
}
;

function fmt( strPattern ) {
    
return new _formatString( strPattern );
}
;

_formatString.prototype.a 
= function () {
    
this._moveToNext();
    
for (var i = 0; i < arguments.length; i++{
        
this._res += arguments[i];
    }
  
    
return this;
}


_formatString.prototype.s 
= function () {
    
return this.str();
}

用v来大概就是:

var width = 400;
var height = 340;
var left = (screen.availWidth - width) / 2;
var top  = (screen.availHeight - height) / 2;
window.open('RYFL_lx.jsp', null,  fmt( 'width=%,height=%,left=%,top=%').a(width).a(height).a(left).a(top).s() ); 


cyt 2006-03-02 16:17 发表评论
]]>
lib介绍QGNU Lightning内嵌汇编的C++装http://www.shnenglu.com/cyt/archive/2006/01/19/2910.htmlcytcytThu, 19 Jan 2006 09:45:00 GMThttp://www.shnenglu.com/cyt/archive/2006/01/19/2910.htmlhttp://www.shnenglu.com/cyt/comments/2910.htmlhttp://www.shnenglu.com/cyt/archive/2006/01/19/2910.html#Feedback1http://www.shnenglu.com/cyt/comments/commentRss/2910.htmlhttp://www.shnenglu.com/cyt/services/trackbacks/2910.htmlfroofyJITQ来?http://fzort.org/bi/sw/froofy/

先说?GNU LightningQ来?http://www.gnu.org/software/lightning/lightning.html
一个GNU的项目,目的是可以在C/C++中写跨CPU的汇~代码,目前支持CPU有x86, SPARC和PowerPC Q但点数操作只支持x86pdQ?BR>个h觉得q是挺有意思的一个项目。有时候一些关键操作还是需要汇~来处理一下,例如加解密运、图像处理等{。以前都是直接嵌套汇~,但这样一来就会失去C代码的通用性;又或者通过#define来实现多个CPU下的汇编实现。如果用GNU LightningQ至代码统一Q管理上好很多。不q换来的代h是要多学一门“汇~”了?BR>
GNU Lightning写的代码也不是很好看Q原因是它本w是C代码Q调用的是C函数形式。froofyJIT是解决q个问题Q下面是froofyJIT重写GNU Lightning中的计算ҎLUx列的代码的节选:

GNU Lightning:

typedef int (*pifi)(int);
pifi      nfibs 
= (pifi) (jit_set_ip(codeBuffer).iptr);
int        in;                /* offset of the argument */
jit_insn  
*ref;            /* to patch the forward reference */
            jit_prolog   (
1);
in =  jit_arg_ui   ();
            jit_getarg_ui(JIT_V0, 
in);              /* V0 = n */
ref = jit_blti_ui  (jit_forward(), JIT_V0, 2);
            jit_subi_ui  (JIT_V1, JIT_V0, 
1);       /* V1 = n-1 */
            jit_subi_ui  (JIT_V2, JIT_V0, 
2);       /* V2 = n-2 */
            jit_prepare_i(
1);
            jit_pusharg_ui(JIT_V1);
            jit_finish(nfibs);
            jit_retval_i (JIT_V1);                   
/* V1 = nfibs(n-1) */
            jit_prepare_i(
1);
            jit_pusharg_ui(JIT_V2);
            jit_finish(nfibs);
            jit_retval_i (JIT_V2);                   
/* V2 = nfibs(n-2) */
            jit_addi_ui(JIT_V1,  JIT_V1,  
1);
            jit_addr_ui(JIT_RET, JIT_V1, JIT_V2);   
/* RET = V1 + V2 + 1 */
            jit_ret();
jit_patch(
ref);                               /* patch jump */
            jit_movi_i(JIT_RET, 
1);                 /* RET = 1 */
            jit_ret();
/* call the generated code, passing 32 as an argument */
jit_flush_code(codeBuffer, jit_get_ip().ptr);

froofyJIT:

typedef int (*pifi)(int);
pifi nfibs;
int in;
{
        
using namespace froofy::jit;
        label
<> basis;

nfibs
/  !org,           codeBuffer;
        prolog,         
10false;
        
!arg<ui>        in;
        getarg
<ui>      v0, in;
        blti
<ui>        basis, v0, 2;
        subi
<ui>        v1, v0, 1;
        subi
<ui>        v2, v0, 2;
        prepare
<i>      1;
        pusharg
<ui>     v1;
        finish,         nfibs;
        retval
<i>       v1;
        prepare
<i>      1;
        pusharg
<ui>     v2;
        finish,         nfibs;
        retval
<i>       v2;
        addi
<ui>        v1, v1, 1;
        addr
<ui>        rr, v1, v2;
        ret,            
10false;
basis
/  movi<i>         rr, 1;
        ret,            
10false;
        
!end,           codeBuffer;
}


明显帅了很多。(不要问我q些代码的含义,我自己都q没有学会GNU LightningQ研I当中)
不过GNU Lightning本n是不是正如他自己所_能够辑ֈ嵌入式汇~同L效率Q小弟还没有具体试q。另外,如果再加上一层C++Q会不会增加消耗,那就只有研究q原代码才能定了。这几天暂时q没有时_q点有结果再来写?img src ="http://www.shnenglu.com/cyt/aggbug/2910.html" width = "1" height = "1" />

cyt 2006-01-19 17:45 发表评论
]]>
epoll的安装和调试http://www.shnenglu.com/cyt/archive/2006/01/19/2907.htmlcytcytThu, 19 Jan 2006 08:08:00 GMThttp://www.shnenglu.com/cyt/archive/2006/01/19/2907.htmlhttp://www.shnenglu.com/cyt/comments/2907.htmlhttp://www.shnenglu.com/cyt/archive/2006/01/19/2907.html#Feedback2http://www.shnenglu.com/cyt/comments/commentRss/2907.htmlhttp://www.shnenglu.com/cyt/services/trackbacks/2907.html
其实|上也有很多的介l,例如 http://www.xmailserver.org/linux-patches/nio-improve.html 
从网上下载了一?epoll-lib-0.11.tar.gz Q把它放到已l升U内核到2.6的Redhat9机器Q解开。然后进去makeQ发现没有mkdep……也懒得了Q直接来一个:make lib/libepoll.a
跌了mkdepq一步,但还是出错:
./src/epoll.c: In function `epoll_create':
./src/epoll.c:28: error: `__NR_epoll_create' undeclared (first use in this function)
./src/epoll.c:28: error: (Each undeclared identifier is reported only once
./src/epoll.c:28: error: for each function it appears in.)
./src/epoll.c: In function `epoll_ctl':
./src/epoll.c:30: error: `__NR_epoll_ctl' undeclared (first use in this function)
./src/epoll.c: In function `epoll_wait':
./src/epoll.c:32: error: `__NR_epoll_wait' undeclared (first use in this function)
百思不得其解……向东博士提_把内核的源代码ln ?usr/src/linux目录下。这才恍然大悟。于是:
ln -s /usr/src/linux-2.6.14.2 /usr/src/linux

哈哈Q这下编译通过了。赶快make installQ其实我是自己手工把.h?lib复制到相应目录,那些man的东西全部都不管了)?BR>
然后开始编译自q代码了。谁知道C链接q一步,又出问题了:
/usr/lib/gcc/i686-pc-linux-gnu/4.0.2/../../../../i686-pc-linux-gnu/bin/ld: cannot find /lib/libpthread.so.0
q是晕死Q还以ؓ是自qgcc装错了,于是重新装了一ơgcc。但q是出现同样的问题?BR>又是向东博士提示Q?BR>ln /lib/i686/libpthread-0.10.so /lib/libpthread.so.0
链接也都通过了?BR>
也未免高兴得太早Q轮到运行出错了Q?BR>/lib/libgcc_s.so.1: version `GCC_3.3' not found (required by /usr/lib/libstdc++.so.6)
……这ơ不用别人提CZQ马上到处找扑֓里还有libgcc_s.so.1。于是我?home/cyt/gcc-4.0.2/objdir/gcc/libgcc_s.so.1复制C/lib下面。(其实是我make gcc的那个目录下面找到的libgcc_s.so.1Q其它地斚w有的Q不q我也懒得找了)?BR>l于E序跑v来了…?BR>

cyt 2006-01-19 16:08 发表评论
]]>
drupal安装心得http://www.shnenglu.com/cyt/archive/2006/01/19/2904.htmlcytcytThu, 19 Jan 2006 07:37:00 GMThttp://www.shnenglu.com/cyt/archive/2006/01/19/2904.htmlhttp://www.shnenglu.com/cyt/comments/2904.htmlhttp://www.shnenglu.com/cyt/archive/2006/01/19/2904.html#Feedback6http://www.shnenglu.com/cyt/comments/commentRss/2904.htmlhttp://www.shnenglu.com/cyt/services/trackbacks/2904.html。其实这两个月做了很多东西,但细惛_没有什么值得拿出来和大家分n?BR>
前几天公司的bbs倒了Q于是想重装一个类gblog或者论坛之cȝ东西。由于IT的同事只熟悉PHPQ于是到处找php的徏站资源。后来nomad介绍drupalQRayman也说q个不错Q于是就试安装一个。网上的资料基本都是Linux下的安装q程介绍Q几个rpm装好apache/mysql/phpQ三两下可以装好。但现在要在Win下装Q麻烦的事情多多。下面ȝ一下win下的安装q程Q?BR>
首先扑ֈ一个叫wamp的东西,http://www.wampserver.com/index.php?lang=en 一个Windows下集成apache 2、mysql 5、php 5的安装包。里面还包括了phpmyadmin。其实类似的安装包很多很多,之所以选这个,是贪图他q有一个在tray的小控制工具Q?BR>
可以方便控制apache和mysql的启动和停止Q可以方便增加aliasQ对于我q种apache配置盲来_最方便不过了?BR>
三两下安装完以后Q先q入PHPMyAdmin。(可以从tray那个图标进去,或者直接用 http://localhost/phpmyadmin/ q入Q?BR>先把root的密码改了。然后……PHPMyAdmin׃能用了,呵呵。马上把 wamp\phpmyadmin\config.inc.php 里面?$cfg['Servers'][$i]['password']的值改成刚才设|的密码。phpmyadmin可以l用了?BR>
然后是下蝲drupalQ从www.drupal.org可以扑ֈ最新版。把压羃包解开Q例如我是放?C:\drupal\下面?BR>
然后又是用tray里面?Alias directories -> add an alias功能Q增加一个媄。例如,我把drupal 映射到C:\drupal\下面。(记得输入C:\drupal\ 后面的那?\"Q没有的话alias也能创徏成功Q但却是讉K不到的)?BR>
用phpmyadmin建立一个drupal的帐Pq且建立一个drupal的库Qdrupal帐号当然要设|成拥有drupal的所有访问权限了。这些在phpmyadmin很容易就解决了。然后又是麻烦的事情了。drupal没有使用mysqliQ所以对mysql4.1以上的数据库讉K会有问题。drupal自己l出了解x案:
http://drupal.org/node/35226。于是只好按mysql自己说的http://dev.mysql.com/doc/refman/4.1/en/old-client.htmlQ更改密码类型:
set password for drupal = old_password('123456');
flush privileges;
然后扑ֈwamp\mysql\my.iniQ在[wampmysqld]下面加上一行:
old-passwords
然后用tray那个工具重起一下mysql?BR>
后面又是Ҏdrupal的说明,step by step的时候。先把drupal\database\database.mysql导入到drupalq个数据库里面。然后把drupal\sites\default\settings.php里面的base_url和db_rul改了Q例如我q里是Q?BR>$base_url = 'http://192.168.1.102/drupal';
$db_url = 'mysql://drupal:123456@localhost/drupal';

然后是在IE中打开 http://192.168.1.102/drupal/  了。麻烦事q是接踵而来。界面丑陋不堪,一?BR>{head} {styles}
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
      <noscript id="pjuwb"></noscript>
            <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
              <dd id="pjuwb"></dd>
              <abbr id="pjuwb"></abbr>
              {_BLOCK_.header.blocks}
              {_BLOCK_.header.title} {_BLOCK_.header.help} {_BLOCK_.header.message}
              在页面上。不要着急,原因是用了php5.1。drupal也有解决Ҏ?BR>
              先按 create first accountQ徏立第一个管理员用户。然后当然是改管理员密码。这些都是在那个丑陋的界面上q行。当改完密码Q界面显CZ׃个链接都没有了。这时候重新输?http://192.168.1.102/drupal/ 又回到第一个丑陋的界面?BR>先从drupal那里下蝲一?phptemplate的template engienQ?A href="http://drupal.org/project/Theme%20engines">http://drupal.org/project/Theme%20enginesQ,把它解压?drupal\themes\engines下面Q和xtemplateq排。然后再下蝲几个支持phptemplate的主题,例如 argeebee?A href="http://drupal.org/project/bidi-theme">BiDi {等。把q些主题都解开攑ֈdrupal\themes下面。然后在那个丑陋界面上选择?Themes 那个q接q去Q然后选择刚才下蝲的支?phptemplate的那些主题?BR>
              好了Q从我的角度来说工作完成了Q额外奉送下载几个插件和主题装上去,然后qimport了一个中文的本地化文Ӟ让界面变成中文。余下就是管理员自己的事情了Q要怎么折腾、要有什么创意都变得与我无关……要改程序?自己慢慢看PHP吧?BR>

              cyt 2006-01-19 15:37 发表评论
              ]]>
              使用std::vector的一个误?/title><link>http://www.shnenglu.com/cyt/archive/2005/11/09/1010.html</link><dc:creator>cyt</dc:creator><author>cyt</author><pubDate>Wed, 09 Nov 2005 07:22:00 GMT</pubDate><guid>http://www.shnenglu.com/cyt/archive/2005/11/09/1010.html</guid><wfw:comment>http://www.shnenglu.com/cyt/comments/1010.html</wfw:comment><comments>http://www.shnenglu.com/cyt/archive/2005/11/09/1010.html#Feedback</comments><slash:comments>4</slash:comments><wfw:commentRss>http://www.shnenglu.com/cyt/comments/commentRss/1010.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/cyt/services/trackbacks/1010.html</trackback:ping><description><![CDATA[借助valgrindQ终于找C个隐藏很久的bugQ?BR> <DIV style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><IMG src="http://www.shnenglu.com/images/OutliningIndicators/None.gif" align=top><SPAN style="COLOR: #0000ff">class</SPAN><SPAN style="COLOR: #000000"> A<BR><IMG id=Codehighlighter1_8_21_Open_Image onclick="this.style.display='none'; Codehighlighter1_8_21_Open_Text.style.display='none'; Codehighlighter1_8_21_Closed_Image.style.display='inline'; Codehighlighter1_8_21_Closed_Text.style.display='inline';" src="http://www.shnenglu.com/images/OutliningIndicators/ExpandedBlockStart.gif" align=top><IMG id=Codehighlighter1_8_21_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_8_21_Closed_Text.style.display='none'; Codehighlighter1_8_21_Open_Image.style.display='inline'; Codehighlighter1_8_21_Open_Text.style.display='inline';" src="http://www.shnenglu.com/images/OutliningIndicators/ContractedBlock.gif" align=top></SPAN><SPAN id=Codehighlighter1_8_21_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><IMG src="http://www.shnenglu.com/images/dot.gif"></SPAN><SPAN id=Codehighlighter1_8_21_Open_Text><SPAN style="COLOR: #000000">{<BR><IMG src="http://www.shnenglu.com/images/OutliningIndicators/InBlock.gif" align=top>    <IMG src="http://www.shnenglu.com/images/dot.gif"><IMG src="http://www.shnenglu.com/images/dot.gif"><BR><IMG src="http://www.shnenglu.com/images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</SPAN></SPAN><SPAN style="COLOR: #000000">;<BR><IMG src="http://www.shnenglu.com/images/OutliningIndicators/None.gif" align=top>std::vector</SPAN><SPAN style="COLOR: #000000"><</SPAN><SPAN style="COLOR: #000000">A</SPAN><SPAN style="COLOR: #000000">></SPAN><SPAN style="COLOR: #000000">  vecArray;<BR><IMG src="http://www.shnenglu.com/images/OutliningIndicators/None.gif" align=top><BR><IMG src="http://www.shnenglu.com/images/OutliningIndicators/None.gif" align=top>vecArray.push_back( <IMG src="http://www.shnenglu.com/images/dot.gif"> );<BR><IMG src="http://www.shnenglu.com/images/OutliningIndicators/None.gif" align=top>vecArray.push_back( <IMG src="http://www.shnenglu.com/images/dot.gif"> );<BR><IMG src="http://www.shnenglu.com/images/OutliningIndicators/None.gif" align=top>vecArray.push_back( <IMG src="http://www.shnenglu.com/images/dot.gif"> );<BR><IMG src="http://www.shnenglu.com/images/OutliningIndicators/None.gif" align=top><BR><IMG src="http://www.shnenglu.com/images/OutliningIndicators/None.gif" align=top>A </SPAN><SPAN style="COLOR: #000000">&</SPAN><SPAN style="COLOR: #000000"> a</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000"> vecArray.back();<BR><IMG src="http://www.shnenglu.com/images/OutliningIndicators/None.gif" align=top>vecArray.push_back( <IMG src="http://www.shnenglu.com/images/dot.gif"> );<BR><IMG src="http://www.shnenglu.com/images/OutliningIndicators/None.gif" align=top><IMG src="http://www.shnenglu.com/images/dot.gif"><IMG src="http://www.shnenglu.com/images/dot.gif"><BR><IMG src="http://www.shnenglu.com/images/OutliningIndicators/None.gif" align=top><BR><IMG src="http://www.shnenglu.com/images/OutliningIndicators/None.gif" align=top></SPAN></DIV>以上的代码骤眼看上去也没有什么奇怪的地方Q经q多ơ的试也没有发C么问题。但昨天bugl于爆发了,E序L无缘无故down掉?BR>其实原因很简单,是?A & a = vecArray.back(); q一步?BR>vector是一个会自增长的容器Q自增长的结果就是把原来的内存释放掉Q重新分配一个够大的内存。既然原来的内存已经释放掉,那么a所引用的内存就是一D|效的内存。对无效内存的访问,后果有多严重׃用多说了?BR><BR>惌x法也很多Q最单就是用std::list或者std::deque替代vector?img src ="http://www.shnenglu.com/cyt/aggbug/1010.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/cyt/" target="_blank">cyt</a> 2005-11-09 15:22 <a href="http://www.shnenglu.com/cyt/archive/2005/11/09/1010.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>补充 BVRDE 使用的一些注意问?/title><link>http://www.shnenglu.com/cyt/archive/2005/10/14/680.html</link><dc:creator>cyt</dc:creator><author>cyt</author><pubDate>Fri, 14 Oct 2005 07:21:00 GMT</pubDate><guid>http://www.shnenglu.com/cyt/archive/2005/10/14/680.html</guid><wfw:comment>http://www.shnenglu.com/cyt/comments/680.html</wfw:comment><comments>http://www.shnenglu.com/cyt/archive/2005/10/14/680.html#Feedback</comments><slash:comments>6</slash:comments><wfw:commentRss>http://www.shnenglu.com/cyt/comments/commentRss/680.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/cyt/services/trackbacks/680.html</trackback:ping><description><![CDATA[BVRDE 会自动生成MakefileQƈ把project中的cpp自动加到Makefile中?BR>如果是build debug版本的时候,它会在make之前会执行一个export DEBUG_OPTIONS="-g -D_DEBUG"Q但׃个h比较喜欢tcshQ所以这个export在tcsh下ƈ不生效,所以必要在Solution Explorer那里选择project的propertiesQ然后在Compiler->Commands->Compiler Directives那里改一下设|?BR>另外Q自动生成的Makefile里面自动加上-O参数Q但q个-O参数会媄响Debug时候程序代码的定位Q所以还是手工去掉。一x逸的Ҏ是去program files\BVRDE\Templates\Wizards\下面把makefile.txt下改一下。另外,clean的时候出了要rm core以外Q在linux下还应该加上core.*?img src ="http://www.shnenglu.com/cyt/aggbug/680.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/cyt/" target="_blank">cyt</a> 2005-10-14 15:21 <a href="http://www.shnenglu.com/cyt/archive/2005/10/14/680.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>一个远EDebug Linux/Unix下进E的工具Q不是那个Magic xxxxQ?/title><link>http://www.shnenglu.com/cyt/archive/2005/10/12/662.html</link><dc:creator>cyt</dc:creator><author>cyt</author><pubDate>Wed, 12 Oct 2005 08:34:00 GMT</pubDate><guid>http://www.shnenglu.com/cyt/archive/2005/10/12/662.html</guid><wfw:comment>http://www.shnenglu.com/cyt/comments/662.html</wfw:comment><comments>http://www.shnenglu.com/cyt/archive/2005/10/12/662.html#Feedback</comments><slash:comments>4</slash:comments><wfw:commentRss>http://www.shnenglu.com/cyt/comments/commentRss/662.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/cyt/services/trackbacks/662.html</trackback:ping><description><![CDATA[<P>曑և何时国软g Magic xxxx 也算是振奋h心的一个YӞ可以q程开发和Debug。用过一下早期的版本Q效果未如理惟뀂后来据说有长的发展,但已l变成了一个收费Y件了?BR><BR>昨天在找WTL的sample的时候,发现有一?<A >http://www.viksoe.dk/</A> Q里面比较多好的WTL的控件?BR>其中Q里面提C?<A >http://bvrde.sourceforge.net/</A>  一个免费的q程Debug工具。下载ƈ试了一下,感觉q不错?BR>BVRDE不需要像Magic xxxx那样安装服务器端。他只需要正地讄ftp/sftp、telnet/ssh{参敎ͼp正确q行q程的程序开发和调试?BR>调试的功能也比较强,基本上常用的功能都有Q?BR><BR><IMG height=572 alt=BVRDE_UI.GIF src="http://www.shnenglu.com/images/cppblog_com/cyt/cpp/BVRDE_UI.GIF" width=1009 border=0><BR><BR><BR>另外Q它q支持cvs/svn{版本控Ӟ有一定的Auto-Suggestion和Auto-Completion的能力?BR><BR>毕竟q个是一个免费的软gQ还是存在不的BugQ例如不能自动生成标准库的TAGQ即不能Ҏ准库实现Auto-Suggestion和Auto-CompletionQ、窗口位|不能保存……另外也有很多地方不够h性化……不q也是基本能用了?BR><BR></P><img src ="http://www.shnenglu.com/cyt/aggbug/662.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/cyt/" target="_blank">cyt</a> 2005-10-12 16:34 <a href="http://www.shnenglu.com/cyt/archive/2005/10/12/662.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>C++的RMI之我?/title><link>http://www.shnenglu.com/cyt/archive/2005/10/08/594.html</link><dc:creator>cyt</dc:creator><author>cyt</author><pubDate>Sat, 08 Oct 2005 09:24:00 GMT</pubDate><guid>http://www.shnenglu.com/cyt/archive/2005/10/08/594.html</guid><wfw:comment>http://www.shnenglu.com/cyt/comments/594.html</wfw:comment><comments>http://www.shnenglu.com/cyt/archive/2005/10/08/594.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.shnenglu.com/cyt/comments/commentRss/594.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/cyt/services/trackbacks/594.html</trackback:ping><description><![CDATA[刚刚搬来q个温暖的C++大家庭,已l发现有高手在开发C++的RMI了?BR><BR>我一直都在留?A >www.codeproject.com</A>的一个项目:<A >http://www.codeproject.com/threads/RMI_For_Cpp.asp</A><BR>作者ƈ在不断的完善中,但也基本上能用了?BR>calvin前几天又提醒q我一ơ,一个久q的projectQ?A >http://acdk.sourceforge.net/</A> 里面也实CcM的RMI技术。(当然是模仿Java的RMIQ而且模仿得很像)?BR><BR>个h比较讨厌cM于ICE那种Q需要通过一个外部工L译IDL的做法,不利于集成开发:老要在IDE上做些手脚,以实现自动预~译Q要扄应的语法解释器解释IDLQ否则编辑困难;׃不是源代码的一部分Q代码管理上l常会有些؜乱……所以反而比较喜Ƣ类gRMI for c++q种Q把接口的描qC作ؓ源代码的一部分。而且׃都是C++语言的一部分Q不会有太多的额外工作?BR><BR>但在本h的实际工作中QRMI却不如想象中q么有效?BR>首先Q就是参C递。很多情况下Q调用一个函敎ͼ会传入一些参数。既然是面向对象开发,传入一个对象的情况是不可避免的。例如:<BR>int func(TMyObject & a);<BR>TMyObject可能是一个很庞大Q很复杂的类Q但func里面可能只需要访问其?0%的成员变量。但是只通过IDL的接口,不可能知道究竟函数里面需要哪些数据,所以一般根据IDL生成的辅助代码,都会是把整个TMyObject对象序列化ƈ传递。当TMyObject相当庞大的时候,q个费相当厉害。更好的做法只好把func所需要的参数逐个排列出来作ؓfunc的参数。但q样func用v来就变得极ؓȝ了?BR>其次是数据的处理问题。经怼出现cM于int func(stream & a, stream & b);的函数调用。对于客LQ缺省的实现Ҏ理解Q按序把两个stream中的数据序列化就可以了。但是在服务器端Q代码就没有q么好写了。由于stream一般都是一个虚c,因此IDL生成的辅助代码就要想办法用一U具体stream子类Q把|络数据先收下来Q然后再传给实际的func函数。而这个stream的子cM比较头疼Q应该选内存还是时文件呢Q还是更一点,数据内存、大数据文g呢?但无论是哪种ҎQ都要考虑数据的回收和生存期的问题。另外不爽的地方是数据要接收完毕才能真正执行funcQ从而数据是多拷贝了一ơ了?BR><BR>当然q里所说的问题对于一般应用都无关痛痒Q但对于一些性能要求比较高的场合QRMI自动生成的stub无能ؓ力了?BR>RMI往往也和反射、成员序列化{技术相兟뀂而且通常q要涉及到通讯版本差异处理、异常处理等{。像ICEq增加了异步处理、对象发现等{。所以要做一个完整的RMIQ的不是容易的事情?BR><img src ="http://www.shnenglu.com/cyt/aggbug/594.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/cyt/" target="_blank">cyt</a> 2005-10-08 17:24 <a href="http://www.shnenglu.com/cyt/archive/2005/10/08/594.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Oracle的一些应用技巧备?/title><link>http://www.shnenglu.com/cyt/archive/2005/10/08/590.html</link><dc:creator>cyt</dc:creator><author>cyt</author><pubDate>Sat, 08 Oct 2005 06:50:00 GMT</pubDate><guid>http://www.shnenglu.com/cyt/archive/2005/10/08/590.html</guid><wfw:comment>http://www.shnenglu.com/cyt/comments/590.html</wfw:comment><comments>http://www.shnenglu.com/cyt/archive/2005/10/08/590.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.shnenglu.com/cyt/comments/commentRss/590.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/cyt/services/trackbacks/590.html</trackback:ping><description><![CDATA[<P>今天用Shell script做一个安装包Q其中需要用SQLPlus做一些数据库初始化处理。其中碰上两个问题:</P> <P>1?amp;的{?BR>    以前一直都不知道,原来在SQLPlus中,&的含义是让用戯入参数?BR>例如Qinsert into my_table values('0=0&1=0&2=0');<BR>执行SQLPlus的时候,׃提示Q?BR>Enter value for 1: abc<BR>Enter value for 2: efg<BR>然后实际插入的结果是Q?BR>insert into my_table values('0=0abc=0efg=0');<BR>    要去掉这个功能有两种实现ҎQ?BR>    A、用转义字符Q在QQ友e点的帮助下,扑ֈ下面q段话:<BR>SQLPLUS recognizes the '&' "and" character as a substitution character for data input. <BR>So to store a string such as "Johnson & Son" into an Oracle table, use an escape character, as in 'Johnson \& Son' (with the \&). <BR><BR>But first turn on escape character processing: <BR><BR>SQL> set escape \  </P> <P>    B、更单,关闭q个功能p了:<BR>SET DEFINE OFF;<BR>Use SET DEFINE OFF to prevent scanning for the substitution character. Reference: bug 13199 <BR></P> <P>2、md5<BR>    其实应该不算是奇怪问题,׃shell scrip调用的一批初始化数据库数据的SQL语句惛_mysql和Oracle之间通用Q即不想mysql中管理一份,oracle中管理一份。其实语句大部分都是相同Q但唯独有个初始化管理员密码的SQL语句Cȝ。密码是md5加密的,插入mysql的时候可以用mysql的md5函数Q但是Oracle没有同名的函数。网上google一把,很多解决ҎQ但试了几个都不行。后来综合了几个的做法,最l得Z个结果:<BR>CREATE OR REPLACE FUNCTION md5(passwd IN VARCHAR2) RETURN VARCHAR2<BR>IS<BR> retval varchar2(32);<BR>BEGIN<BR> retval := lower( utl_raw.cast_to_raw(DBMS_OBFUSCATION_TOOLKIT.MD5(INPUT_STRING => passwd)) );<BR> RETURN retval;<BR>END;<BR></P><img src ="http://www.shnenglu.com/cyt/aggbug/590.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/cyt/" target="_blank">cyt</a> 2005-10-08 14:50 <a href="http://www.shnenglu.com/cyt/archive/2005/10/08/590.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>g++ 3.4.3http://www.shnenglu.com/cyt/archive/2005/10/08/585.htmlcytcytSat, 08 Oct 2005 06:45:00 GMThttp://www.shnenglu.com/cyt/archive/2005/10/08/585.htmlhttp://www.shnenglu.com/cyt/comments/585.htmlhttp://www.shnenglu.com/cyt/archive/2005/10/08/585.html#Feedback0http://www.shnenglu.com/cyt/comments/commentRss/585.htmlhttp://www.shnenglu.com/cyt/services/trackbacks/585.htmlq来公司的事情比较多Q都没有旉来blog写写东西了?/P>

              q来公司其中一个项目需要程序在g++ 3.4.3下编译,而源代码在g++ 3.2.3下面一个Warning都没有,但是?.4.3下则一堆Error了。后来发现原来g++ 3.4.3严格了很多。其中“出问题”最多的是这U情况:

              class TObjBase
              {
              public:
                  TObjBase(void) : m_nVal(0) {}
                  ~TObjBase(void) {}

                  int getVal(void) const { return m_nVal; }
                  void setVal(int n) { m_nVal = n; }
              protected:
                  int    m_nVal;
              };

              template<class typeObj>
              class TExtObj : public typeObj
              {
              public:
                  TExtObj(void) : typeObj() {}

                  int getExtVal(void) const { return getVal() + 100; }
              };

              q是一U比较常见的应用QAdapter和Decorator模式都会用到q种技术。但问题在于g++ 3.4.3却说int getExtVal(void) const { return getVal() + 100; }q一行错误,getVal()找不到?/P>

              的确Q单以TExtObjq个cȝ来,怎么也是找不到getVal()的定义在哪里。g++ 3.2.3以及VC6、VC7{,均以十分怿开发者的态度猜测q个函数必定在其他地方定义了Q有可能是外部独立的函数、有可能是typeObj的成员函数。但g++ 3.4.3却非要程序员很负责Q的告诉编译器Q究竟是哪一个getVal()Q于是解x法:
              Ҏ一Q?BR>int getExtVal(void) const { return typeObj::getVal() + 100; }

              或?/P>


              Ҏ二:
              int getExtVal(void) const { return this->getVal() + 100; }

              当然Q如果是外部的独立函敎ͼ那就是:

              int getExtVal(void) const { return ::getVal() + 100; }

              然而,在getVal()是虚函数的时候,Ҏ一和方法二是有区别的,q个是需要十分小心的事情。方法一是无Z么时候都会调用typeObj的getVal()Q方法二是调用当前类最适合的虚函数getVal()?BR>



              cyt 2005-10-08 14:45 发表评论
              ]]>
              异步方式数据l构I/Ohttp://www.shnenglu.com/cyt/archive/2005/10/08/583.htmlcytcytSat, 08 Oct 2005 06:44:00 GMThttp://www.shnenglu.com/cyt/archive/2005/10/08/583.htmlhttp://www.shnenglu.com/cyt/comments/583.htmlhttp://www.shnenglu.com/cyt/archive/2005/10/08/583.html#Feedback0http://www.shnenglu.com/cyt/comments/commentRss/583.htmlhttp://www.shnenglu.com/cyt/services/trackbacks/583.html以前一直都是做同步方式的数据结构存储。即典型的:
              void  TMyClass::onSave(TStorage & s)
              {
                  s << member1;
                  s << member2;
                    ......
              }

              void  TMyClass::onLoad(TStorage & s)
              {
                  s >> member1;
                  s >> member2;
                    ......
              }
              假如s满了QSave的时候)或者s数据不QLoad的时候)Q函C{待Q直到s可用或者出错退出。相当于q程的Stack帮我们保存了I/O状态的上下文?/P>

              但是现在要{到异步方式I/OQ当s“不可用”的时候,U程应该中断当前的操作,把I/O状态的上下文保存下来,转而做其他的操作?BR>所以麻烦就来了Q要自己做这个上下文的保存。一般来说要记录以下的内容:

              1、操作到哪一个成员?BR>2、假如成员是一个普通的cd、那p记录操作到类型的哪一个byte?BR>2、如果成员是一个复合类型,同样Q递归地回C1?/P>

              因此Q上下文保存的结果一般都是一个自己做的stackQ里面就是记录这个递归的过E?/P>

              其实xQ何苦ؓ了省那几十k的空间折自己呢Q例如输出,先用同步的方式把数据记录在内存,然后p录内存的起始地址和长度,异步处理的时候就把内存输出,如果没有输出完的Q就C未输出部分的起始地址和长度,{待下一ơ?BR>不过当结果比较庞大的时候,q是需要自己慢慢苦qԌ真是悲惨…?/P>

              cyt 2005-10-08 14:44 发表评论
              ]]>
              þþоƷ| þþ޾Ʒ| ҹҹݺݾþAV| 69Ʒþþþ9999APGF| þó˹Ʒ| þùѹۿƷ| ҹþþþþþþõӰ | ݺɫþۺ| ƷŷþþӰ| þۺϳ| þþþþëƬѲ| պƷרþþ| þպƷһ | þ| þþŷղa| þþþƷ| þҹɫƷAV| ?VþþƷ | þۺɫɫ| þùҹƵ| AVþþƷݺݰ˳ | ձһþ | þþùҺ| þþþó˾Ʒ | һþaþþƷۺ| þþþþþþþþþƷ| Ʒþ| þþƷavˮ| þ붯aëƬ| þԾƷ| þþþþžžƷӰԺ| þþþƷþþþþ| ƷŷþþþӰ| þøݾƷԴվ| 99þ99þþþƷ | ղƷþþþþþɫ| ͵ٸþþþþþþ| þþþþϸApp| þоƷ| ޾Ʒһþþ| þרƷ|