<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-5347288948477829359</id><updated>2012-02-16T01:15:03.986-08:00</updated><category term='openmoko、mobile、shr、embeded linux'/><category term='asterisk'/><category term='freebsd'/><category term='1.2.40'/><category term='libdb1.a'/><category term='amd64'/><category term='clri'/><category term='黑客'/><title type='text'>yoblooc</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://yoblooc.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5347288948477829359/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://yoblooc.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>j.z</name><uri>http://www.blogger.com/profile/15855068428842751244</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>79</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-5347288948477829359.post-1503610928705352742</id><published>2011-11-15T01:43:00.001-08:00</published><updated>2011-11-15T02:09:46.727-08:00</updated><title type='text'>centos6禁用drm.ko</title><content type='html'>最近将公司的闲置Dell PowerEdge 1850装了centos6。用的是centos6 x86 minimal光盘。&lt;br /&gt;安装一切正常。&lt;br /&gt;启动后，发现日志中有大量&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="background-color: black;"&gt;&lt;span class="Apple-style-span" style="color: white;"&gt;[drm] in favor of DVI-I-1&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="background-color: black;"&gt;&lt;span class="Apple-style-span" style="color: white;"&gt;[drm] 1: conflicting encoders switching off DVI-I-1&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="background-color: black;"&gt;&lt;span class="Apple-style-span" style="color: white;"&gt;[drm] in favor of VGA-2&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="background-color: black;"&gt;&lt;span class="Apple-style-span" style="color: white;"&gt;[drm] 1: conflicting encoders switching off VGA-2&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;div&gt;信息，而且还在增长。&lt;/div&gt;&lt;div&gt;google drm一下，drm是比较新的东西，1850用不上。&lt;/div&gt;&lt;div&gt;修改/etc/modprobe.d/blacklist.conf,没有禁用成功。&lt;/div&gt;&lt;div&gt;最后，修改/boot/grub/grub.cfg，在kernel行加drm.modeset=0，重启禁用成功。&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5347288948477829359-1503610928705352742?l=yoblooc.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yoblooc.blogspot.com/feeds/1503610928705352742/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5347288948477829359&amp;postID=1503610928705352742' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5347288948477829359/posts/default/1503610928705352742'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5347288948477829359/posts/default/1503610928705352742'/><link rel='alternate' type='text/html' href='http://yoblooc.blogspot.com/2011/11/centos6drmko.html' title='centos6禁用drm.ko'/><author><name>j.z</name><uri>http://www.blogger.com/profile/15855068428842751244</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5347288948477829359.post-7361853731884601732</id><published>2011-08-21T22:09:00.000-07:00</published><updated>2011-08-21T22:09:29.012-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='freebsd'/><category scheme='http://www.blogger.com/atom/ns#' term='clri'/><title type='text'>freebsd /var 空间占用超过100%故障解决</title><content type='html'>&lt;b&gt;昨天遇到问题&lt;/b&gt;：公司的网关服务器/var空间占用超过100%,导致dns服务无法运行，导致一系列问题。&lt;br /&gt;&lt;br /&gt;&lt;b&gt;对应１：&lt;/b&gt;　用命令du -sh *对/var/下的目录都进行了检查，没有发现占用空间特别大的现象。&lt;br /&gt;&lt;br /&gt;估计是系统有隐藏占用空间的情况，倒底是什么呢，怎么能找出来呢？&lt;br /&gt;google一番后，虽然没有直接的帮助，但是想到了需要监视进程打开的文件。&lt;br /&gt;查到了命令&lt;a href="http://www.freebsd.org/cgi/man.cgi?query=fstat&amp;amp;apropos=0&amp;amp;sektion=0&amp;amp;manpath=FreeBSD+8.2-RELEASE&amp;amp;arch=default&amp;amp;format=html"&gt;&lt;b&gt;&lt;span style="color: red;"&gt;fstat&lt;/span&gt;&lt;/b&gt;&lt;/a&gt;，这个命令很方便，直接输入fstat，不加任何参数，会将系统所有打开的文件及进程都显示出来。运行后，如下：&lt;br /&gt;#fstat &lt;br /&gt;USER&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; CMD&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; PID&amp;nbsp;&amp;nbsp; FD MOUNT&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; INUM MODE&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; SZ|DV R/W&lt;br /&gt;root&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; syslogd&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 632&amp;nbsp;&amp;nbsp; 22 /var&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 23616 -rw-r--r--&amp;nbsp; 897683611 rw&lt;br /&gt;/var对应slice /dev/amrd0s1e只有1G空间，很显然是这个导致的。&lt;br /&gt;&lt;br /&gt;&lt;b&gt;为什么会找不到这个文件呢？&lt;/b&gt;&lt;br /&gt;执行&lt;br /&gt;#find /var -type f -inum 23616 -print&lt;br /&gt;提示找不到文件。&lt;br /&gt;&lt;br /&gt;&lt;b&gt;结论：&lt;/b&gt;&lt;br /&gt;看来是系统产生了一个无效结点文件，而且该文件可以被syslogd进程不断添加内容。但是从系统角度是看不到也无法访问这个文件的，导致/var一直在悄悄增长，最终占满空间。&lt;br /&gt;&lt;br /&gt;&lt;b&gt;解决方法：&lt;/b&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;重启系统，进入single模式&lt;/li&gt;&lt;li&gt;执行 #&lt;a href="http://www.freebsd.org/cgi/man.cgi?query=clri&amp;amp;apropos=0&amp;amp;sektion=0&amp;amp;manpath=FreeBSD+8.2-RELEASE&amp;amp;arch=default&amp;amp;format=html"&gt;clri&lt;/a&gt; /dev/amrd0s1e 23616 (清除/dev/amrd0s1e分区的无效结点23616)&lt;/li&gt;&lt;li&gt;执行 #fsck /dev/amrd0s1e (修复分区上的错误)&lt;/li&gt;&lt;li&gt;进入正常模式，/var空间恢复正常&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;b&gt;进一步思考：&lt;/b&gt;&lt;br /&gt;什么原因产生上面的现象？与syslogd进程有关联，还是系统的原因？&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5347288948477829359-7361853731884601732?l=yoblooc.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yoblooc.blogspot.com/feeds/7361853731884601732/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5347288948477829359&amp;postID=7361853731884601732' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5347288948477829359/posts/default/7361853731884601732'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5347288948477829359/posts/default/7361853731884601732'/><link rel='alternate' type='text/html' href='http://yoblooc.blogspot.com/2011/08/freebsd-var-100.html' title='freebsd /var 空间占用超过100%故障解决'/><author><name>j.z</name><uri>http://www.blogger.com/profile/15855068428842751244</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total><georss:featurename>中国辽宁省大连</georss:featurename><georss:point>38.914024 121.61467700000003</georss:point><georss:box>38.802927999999994 121.44473200000003 39.02512 121.78462200000003</georss:box></entry><entry><id>tag:blogger.com,1999:blog-5347288948477829359.post-6035030285638641520</id><published>2010-06-02T21:15:00.000-07:00</published><updated>2010-06-02T21:15:53.162-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='黑客'/><title type='text'>遇到“黑客”了</title><content type='html'>今天上班没多久，日本客户就紧急发送邮件过来。panta窗口联系上，也声明是严重问题。&lt;br /&gt;客户管理的asterisk服务器上两个月，被拨叫了国际长途，费用达40多万日元。&lt;br /&gt;邮件发送的附件，是ISP发过来的，是拨打国际长途的SIP协议包。SIP协议包里面让我很感吃惊的一点是，SIP用户的IP，都是aaa.aaa.aa.aa,怎么做到的？ 我从没想过可以这样。&lt;br /&gt;&lt;span style="background-color: #cccccc;"&gt;No:1 (ID:1872807####) 2010/XX/XX XX:XX:XX.XXX [XXX.XXX.XXX.XXX:5060] =&amp;gt; [&lt;span style="color: #cc0000;"&gt;aaa.aaa.aa.aa&lt;/span&gt;:5060] &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;查了查日志，原来盗用账户的动作由来已久了。从2009就已经存在，直到上两个月，才取得突破。&lt;br /&gt;&lt;span style="background-color: #cccccc; font-size: x-small;"&gt;[May 11 01:37:28] NOTICE[13672] chan_sip.c: Registration from '"9989"&lt;sip:9989@xxx.xxx.xxx.xxx1&gt;' failed for '64.79.106.162' - No matching peer found&lt;br /&gt;[May 11 01:37:28] NOTICE[13672] chan_sip.c: Registration from '"9990"&lt;sip:9990@xxx.xxx.xxx.xxx1&gt;' failed for '64.79.106.162' - No matching peer found&lt;br /&gt;[May 11 01:37:28] NOTICE[13672] chan_sip.c: Registration from '"9992"&lt;sip:9992@xxx.xxx.xxx.xxx1&gt;' failed for '64.79.106.162' - No matching peer found&lt;br /&gt;[May 11 01:37:28] NOTICE[13672] chan_sip.c: Registration from '"9994"&lt;sip:9994@xxx.xxx.xxx.xxx1&gt;' failed for '64.79.106.162' - No matching peer found&lt;br /&gt;[May 11 01:37:28] NOTICE[13672] chan_sip.c: Registration from '"9997"&lt;sip:9997@xxx.xxx.xxx.xxx1&gt;' failed for '64.79.106.162' - No matching peer found&lt;br /&gt;[May 12 03:58:12] NOTICE[13672] chan_sip.c: Received SIP subscribe for peer without mailbox: 79##&lt;br /&gt;[May 12 03:58:12] NOTICE[13672] chan_sip.c: Received SIP subscribe for peer without mailbox: 79##&lt;/sip:9997@xxx.xxx.xxx.xxx1&gt;&lt;/sip:9994@xxx.xxx.xxx.xxx1&gt;&lt;/sip:9992@xxx.xxx.xxx.xxx1&gt;&lt;/sip:9990@xxx.xxx.xxx.xxx1&gt;&lt;/sip:9989@xxx.xxx.xxx.xxx1&gt;&lt;/span&gt;&lt;br /&gt;黑客很小心，时间，IP，次数都比较隐蔽。所以粗心的日本客户一直没注意。&lt;br /&gt;&lt;br /&gt;不知道这笔国际长途费，最后怎么处理。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5347288948477829359-6035030285638641520?l=yoblooc.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yoblooc.blogspot.com/feeds/6035030285638641520/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5347288948477829359&amp;postID=6035030285638641520' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5347288948477829359/posts/default/6035030285638641520'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5347288948477829359/posts/default/6035030285638641520'/><link rel='alternate' type='text/html' href='http://yoblooc.blogspot.com/2010/06/blog-post.html' title='遇到“黑客”了'/><author><name>j.z</name><uri>http://www.blogger.com/profile/15855068428842751244</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5347288948477829359.post-2449133429519225256</id><published>2010-05-12T17:44:00.000-07:00</published><updated>2010-05-12T17:52:27.163-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='1.2.40'/><category scheme='http://www.blogger.com/atom/ns#' term='libdb1.a'/><category scheme='http://www.blogger.com/atom/ns#' term='asterisk'/><category scheme='http://www.blogger.com/atom/ns#' term='amd64'/><title type='text'>asterisk 1.2 版本在amd64服务器上编译问题</title><content type='html'>问题：&lt;br /&gt;近日，需要将服务器上的asterisk从1.2.31.1升级到1.2.40。 &lt;br /&gt;编译1.2.40后make install, asterisk 服务可以正常启动。但是进入控制台执行database show,提示Database unavailable. 或者 db.c: Unable to open Asterisk database。&lt;br /&gt;&lt;br /&gt;多次试验都无法解决。用1.2.31.1源代码make clean后，重新编译，居然也出现同样提示。&lt;br /&gt;幸好还有个备份，用备份直接make install后，一切正常了。&lt;br /&gt;&lt;br /&gt;对源代码diff，没有发现区别。最后确定是编译后的.o文件有问题。而且上面的提示是与Berkley db相关的，先将备份目录下db1-ast/libdb1.a拷贝到新编译源代码的相同目录下，覆盖原文件，重新对asterisk 进行make, make install，正常了。同样方法用于1.2.40也OK。&lt;br /&gt;&lt;br /&gt;分析,新编译的libdb1.a为&lt;br /&gt;-rw-r--r-- 1 root root 119734&amp;nbsp; 5月 10 11:49 db1-ast/libdb1.a&lt;br /&gt;成功的libdb1.a为&lt;br /&gt;-rw-r--r-- 1 root root 119750&amp;nbsp; 4月 25&amp;nbsp; 2009 ../asterisk-1.2.31.1/db1-ast/libdb1.a&lt;br /&gt;&lt;br /&gt;从字节上看，成功的libdb1.a略大，分别将里面的文件解压后，逐一比较大小，都相同。&lt;br /&gt;&lt;br /&gt;ＯＳ：&lt;br /&gt;LSB Version:&amp;nbsp;&amp;nbsp; &amp;nbsp;:core-3.1-amd64:core-3.1-ia32:core-3.1-noarch:graphics-3.1-amd64:graphics-3.1-ia32:graphics-3.1-noarch&lt;br /&gt;Distributor ID:&amp;nbsp;&amp;nbsp; &amp;nbsp;CentOS&lt;br /&gt;Description:&amp;nbsp;&amp;nbsp; &amp;nbsp;CentOS release 5.3 (Final)&lt;br /&gt;Release:&amp;nbsp;&amp;nbsp; &amp;nbsp;5.3&lt;br /&gt;Codename:&amp;nbsp;&amp;nbsp; &amp;nbsp;Final&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5347288948477829359-2449133429519225256?l=yoblooc.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yoblooc.blogspot.com/feeds/2449133429519225256/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5347288948477829359&amp;postID=2449133429519225256' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5347288948477829359/posts/default/2449133429519225256'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5347288948477829359/posts/default/2449133429519225256'/><link rel='alternate' type='text/html' href='http://yoblooc.blogspot.com/2010/05/asterisk-12-amd64.html' title='asterisk 1.2 版本在amd64服务器上编译问题'/><author><name>j.z</name><uri>http://www.blogger.com/profile/15855068428842751244</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5347288948477829359.post-93019956358110661</id><published>2010-05-05T01:53:00.001-07:00</published><updated>2010-05-05T01:53:43.233-07:00</updated><title type='text'>Asterisk The Future of Telephoy</title><content type='html'>http://astbook.asteriskdocs.org/&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5347288948477829359-93019956358110661?l=yoblooc.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yoblooc.blogspot.com/feeds/93019956358110661/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5347288948477829359&amp;postID=93019956358110661' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5347288948477829359/posts/default/93019956358110661'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5347288948477829359/posts/default/93019956358110661'/><link rel='alternate' type='text/html' href='http://yoblooc.blogspot.com/2010/05/asterisk-future-of-telephoy.html' title='Asterisk The Future of Telephoy'/><author><name>j.z</name><uri>http://www.blogger.com/profile/15855068428842751244</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5347288948477829359.post-692761260088003072</id><published>2010-04-29T23:19:00.000-07:00</published><updated>2010-04-29T23:19:05.340-07:00</updated><title type='text'>openmoko shr版本编译手记</title><content type='html'>&lt;span style="font-size: small;"&gt;&lt;b&gt;PC环境： &lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: x-small;"&gt;$ lsb_release -a&lt;br /&gt;LSB Version:&amp;nbsp;&amp;nbsp;&amp;nbsp; :core-3.1-ia32:core-3.1-noarch:graphics-3.1-ia32:graphics-3.1-noarch&lt;br /&gt;Distributor ID:&amp;nbsp;&amp;nbsp;&amp;nbsp; CentOS&lt;br /&gt;Description:&amp;nbsp;&amp;nbsp;&amp;nbsp; CentOS release 5.2 (Final)&lt;br /&gt;Release:&amp;nbsp;&amp;nbsp;&amp;nbsp; 5.2&lt;br /&gt;Codename:&amp;nbsp;&amp;nbsp;&amp;nbsp; Final&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre class="wiki"&gt;&lt;span style="font-size: x-small;"&gt;$ wget http://shr.bearstech.com/Makefile&lt;/span&gt;&lt;/pre&gt;&lt;pre class="wiki"&gt;&lt;span style="font-size: x-small;"&gt;$ make setup&lt;/span&gt;&lt;/pre&gt;&lt;pre class="wiki"&gt;&lt;span style="font-size: x-small;"&gt;（一切正常）&lt;/span&gt;&lt;/pre&gt;&lt;pre class="wiki"&gt;&lt;/pre&gt;&lt;span style="font-size: small;"&gt;&lt;b&gt;1. python2.5&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: x-small;"&gt;按照&lt;a href="http://trac.shr-project.org/trac/wiki/Building%20SHR"&gt;http://trac.shr-project.org/trac/wiki/Building%20SHR&lt;/a&gt;说明，编译image需要ｐｙｔｈｏｎ２.５以上版本。&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: x-small;"&gt;CentOS5.2平台python版本是2.4, 官方还没有升级到2.4以上。不想编译源代码，所以google了一下现成的rpm包。&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: x-small;"&gt;# cd /etc/yum.reposd/ &amp;amp;&amp;amp;　wget http://mirrors.geekymedia.com/centos/geekymedia.repo&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: x-small;"&gt;# vi /etc/yum.reposd/geekymedia.repo&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: x-small;"&gt;enabled=1&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: x-small;"&gt;变更为&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: x-small;"&gt;enabled=0&lt;/span&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: x-small;"&gt;# yum install --enablerepo=geekymedia-current python25&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: x-small;"&gt;注意： &lt;span style="background-color: #999999;"&gt;/usr/bin/python, /usr/bin/python2.4 两个文件是硬链接。 我直接ln -s /usr/bin/python25 /usr/bin/python后，就吃亏了，yum无法运行了。 重新&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;div style="background-color: #999999;"&gt;&lt;span style="font-size: x-small;"&gt;# rpm -iv --force --nodeps http://vault.centos.org/5.2/os/i386/CentOS/python-devel-2.4.3-21.el5.i386.rpm&lt;/span&gt;&lt;/div&gt;&lt;div style="background-color: #999999;"&gt;&lt;span style="font-size: x-small;"&gt;# rpm -iv --force --nodeps http://vault.centos.org/5.2/os/i386/CentOS/python-2.4.3-21.el5.i386.rpm&lt;/span&gt;&lt;/div&gt;&lt;div style="background-color: #999999;"&gt;&lt;span style="font-size: x-small;"&gt;# yum update python python-devel&lt;br /&gt;才恢复回来。&lt;/span&gt;&lt;/div&gt;&lt;div style="background-color: #999999;"&gt;&lt;span style="font-size: x-small;"&gt;这次学乖了，先rm /usr/bin/python2.4 , 再cp /usr/bin/python /usr/bin/python2.4一份。&lt;/span&gt;&lt;/div&gt;&lt;span style="font-size: x-small;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: x-small;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: x-small;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: x-small;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: x-small;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: x-small;"&gt;&lt;br /&gt;# ln -sf /usr/bin/python25 /usr/bin/python&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: x-small;"&gt;OK，可以make image了&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: x-small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: x-small;"&gt;&lt;b&gt;&lt;span style="font-size: small;"&gt;2. svn: XXX directory already exists&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: x-small;"&gt;&lt;span style="font-size: x-small;"&gt;svn不熟，google一下，知道是存在同名目录，但是可能什么地方版本不同了。&lt;/span&gt;&lt;b&gt;&lt;span style="font-size: small;"&gt; &lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: x-small;"&gt;在安装的根目录下find ./ -type d -name XXX 果然有，rm掉。继续make image。&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: small;"&gt;&lt;b&gt;3. failed, fatal, error&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: x-small;"&gt;只要屏幕文字不动了，看到Waiting for X active tasks to finish类似文字，下面还有error之类的信息，那说明上面已经出现问题了。不需要等了，直接CTRL+C吧。&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: x-small;"&gt;找到最早出现failed或者error的地方（通常离Waiting xxx 不远),将package名复制下来。执行&lt;br /&gt;$bitbake -c clean package名&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: x-small;"&gt;$bitbake package名&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: x-small;"&gt;继续make image。&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: x-small;"&gt;你会看到NOTE： Running task X of 7503, X数字已经比之前增加了。&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: x-small;"&gt;（编译过程是脆弱的，我经常遇到fatal: read error: Connection reset by peer :-( ,这种情况直接make image即可。）&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: x-small;"&gt;以上，暂时停止。shr-unstable版本编译错误太多了。我改为先编译shr-test版本。&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: small;"&gt;&lt;b&gt;test-1. 基本正常，在遇到shr-lite-image-2.0-r13前。&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: x-small;"&gt;shr-lite-image-2.0-r13总是提示：&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: x-small;"&gt;XXX : Cannot satisfy the following dependencies for task-shr-minimal-x:&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: x-small;"&gt;*&amp;nbsp; eglibc-binary-localedata-en-us *&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; eglibc-binay-localedata-zh-cn *&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: x-small;"&gt;ERROR: Function do_rootfs failed&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: x-small;"&gt;用find命令找不到&lt;/span&gt;&lt;span style="font-size: x-small;"&gt; eglibc-binary-localedata-en-us，&lt;/span&gt;&lt;span style="font-size: x-small;"&gt;eglibc-binay-localedata-zh-cn文件倒是有&lt;/span&gt;&lt;span style="font-size: x-small;"&gt;eglibc-localedata-en-us，&lt;/span&gt;&lt;span style="font-size: x-small;"&gt;eglibc-localedata-zh-cn。&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: x-small;"&gt;所以用grep命令对整个目录做个遍历，找到了。&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: x-small;"&gt;vi ./tmp/depoly/ipk/om-gta02/Packages&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: x-small;"&gt;将"-binary"文字全部删除，保存。 运行make image一切OK了。我终于编译成功了！&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: x-small;"&gt;下一步，我再回头编译shr-unstable版本吧。&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: x-small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5347288948477829359-692761260088003072?l=yoblooc.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yoblooc.blogspot.com/feeds/692761260088003072/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5347288948477829359&amp;postID=692761260088003072' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5347288948477829359/posts/default/692761260088003072'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5347288948477829359/posts/default/692761260088003072'/><link rel='alternate' type='text/html' href='http://yoblooc.blogspot.com/2010/04/openmoko-shr_29.html' title='openmoko shr版本编译手记'/><author><name>j.z</name><uri>http://www.blogger.com/profile/15855068428842751244</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5347288948477829359.post-67637594686085157</id><published>2010-04-22T17:43:00.000-07:00</published><updated>2010-04-22T17:46:48.923-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='openmoko、mobile、shr、embeded linux'/><title type='text'>openmoko shr版本手记</title><content type='html'>&lt;b&gt;notebook:&lt;/b&gt; Asus X88S,&lt;br /&gt;&lt;b&gt;OS:&lt;/b&gt; ubuntu 9.10 X86。&lt;br /&gt;&lt;b&gt;FreeRunner SHR&lt;/b&gt;&lt;span style="font-size: x-small;"&gt;&lt;br /&gt;&lt;b&gt;&lt;span style="font-size: small;"&gt;boot:&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style="font-size: small;"&gt;&lt;a href="http://downloads.openmoko.org/distro/testing/NeoFreerunner/qi-s3c2442-1.0.2+gitr3b8513d8b3d9615ebda605de4bda18371aa3f359.udfu"&gt; qi-s3c2442-1.0.2+gitr3b8513d8b3d9615ebda605de4bda18371aa3f359.udfu&lt;/a&gt;  &lt;/span&gt;&lt;br /&gt;&lt;b&gt;rootfs:&lt;/b&gt;  &lt;a href="http://shr.bearstech.com/shr-unstable/images/om-gta02/shr-full-eglibc-ipk--20100420-om-gta02.rootfs.jffs2"&gt;shr-full-eglibc-ipk--20100420-om-gta02.rootfs.jffs2&lt;/a&gt;&lt;br /&gt;&lt;b&gt;kernel:&lt;/b&gt; &lt;a href="http://shr.bearstech.com/shr-unstable/images/om-gta02/uImage-2.6.29-oe11+gitr119862+a15608f241a40b41fed5bffe511355c2067c4e88-r8-om-gta02.bin"&gt;uImage-2.6.29-oe11+gitr119862+a15608f241a40b41fed5bffe511355c2067c4e88-r8-om-gta02.bin&lt;/a&gt;&lt;br /&gt;illume不稳定，经常弹出错误窗口。recover后也不行，需要在notebook ssh后执行/etc/init.d/xserver-nodm restart&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;1. 使用usb network&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: x-small;"&gt;FreeRunner启动后，通过usb连接notebook。&lt;br /&gt;$ lsusb&lt;br /&gt;Bus 002 Device 003: ID 1457:5122 First International Computer, Inc. OpenMoko Neo1973 / Neo Freerunner kernel&lt;span style="color: #000099;"&gt; cdc_ether&lt;/span&gt; USB network&lt;br /&gt;$ dmesg&lt;br /&gt;[  103.140040] usb 2-2: new full speed USB device using ohci_hcd and address 3&lt;br /&gt;[  103.368680] usb 2-2: configuration #1 chosen from 2 choices&lt;br /&gt;但是ifconfig无法看到interface。反复插拨usb连接线多次，才有可能看到，在我机器上是eth15。&lt;br /&gt;&lt;br /&gt;后来发现，只要执行&lt;br /&gt;$ sudo modprobe cdc_ether&lt;br /&gt;就可以找到eth15了。&lt;br /&gt;&lt;span style="background-color: #76a5af;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-weight: bold;"&gt;2. 中文支持&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;参照http://trac.shr-project.org/trac/wiki/i18n&lt;br /&gt;&lt;br /&gt;root@om-gta02 ~ $ opkg install eglibc-locale-zh-cn eglibc-localedata-zh-cn&lt;/span&gt;&lt;span style="font-size: x-small;"&gt;&lt;br /&gt;root@om-gta02 ~ $ opkg install task-fonts-truetype-chinese&lt;br /&gt;&lt;br /&gt;root@om-gta02 ~ $ opkg remove tzdata&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size: x-small;"&gt;root@om-gta02 ~ $ &lt;/span&gt;&lt;span style="font-size: x-small;"&gt;opkg install tzdata-asia&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size: x-small;"&gt;root@om-gta02 ~ $ &lt;/span&gt;&lt;span style="font-size: x-small;"&gt;echo "Asia/Shanghai" &amp;gt; /etc/timezone&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size: x-small;"&gt;root@om-gta02 ~ $ ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: x-small;"&gt;&lt;br /&gt;root@om-gta02 /usr/share/zoneinfo $ opkg list-installed | grep tzdata&lt;br /&gt;tzdata-africa - 2010b-r5.0.4&lt;br /&gt;tzdata-americas - 2010b-r5.0.4&lt;br /&gt;tzdata-asia - 2010b-r5.0.4&lt;br /&gt;tzdata-australia - 2010b-r5.0.4&lt;br /&gt;tzdata-europe - 2010b-r5.0.4&lt;br /&gt;root@om-gta02 /usr/share/zoneinfo $ opkg remove tzdata-africa tzdata-americas tzdata-australia tzdata-europe&lt;br /&gt;root@om-gta02 /usr/share/zoneinfo $ rm -rf Africa/ America/ Australia/ Brazil/ Canada/ Chile/ Etc/ Europe/ Indian/ Mexico/ Mideast/ Pacific/ US/&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size: x-small;"&gt;root@om-gta02 ~ $ vi /etc/profile&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: x-small;"&gt;# set your locale here:                                         &lt;br /&gt;#export LANG=en_US.UTF-8                                        &lt;br /&gt;export LANG=zh_CN.UTF-8&lt;br /&gt;&lt;br /&gt;root@om-gta02 ~ $ rm -rf .e/&lt;br /&gt;root@om-gta02 ~ $ /etc/init.d/xserver-nodm restart&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size: x-small;"&gt;&lt;span style="font-size: small;"&gt;&lt;br style="font-weight: bold;" /&gt;&lt;span style="font-weight: bold;"&gt;3. 其它&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size: x-small;"&gt;&lt;br /&gt;［同步时间］&lt;/span&gt;&lt;span style="font-weight: bold;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;root@om-gta02 ~ $ opkg install ntpclient&lt;/span&gt;&lt;span style="font-size: x-small;"&gt;&lt;br /&gt;root@om-gta02 ~ $ ntpclient -h 192.168.0.200 -s&lt;br /&gt;&lt;br /&gt;［安装支持中文浏览器］&lt;br /&gt;root@om-gta02 ~ $ opkg remove --force-depends ventura&lt;br /&gt;root@om-gta02 ~ $ opkg install midori&lt;br /&gt;&lt;br /&gt;［安装&lt;/span&gt;&lt;span style="font-size: x-small;"&gt;旋转&lt;/span&gt;&lt;span style="font-size: x-small;"&gt;屏幕程序］&lt;br /&gt;root@om-gta02 ~ $ opkg install omnewrotate  &amp;lt;---- 安装后，无反应&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: x-small;"&gt;root@om-gta02 ~ $ &lt;/span&gt;&lt;span style="font-size: x-small;"&gt;opkg install http://www.opkg.org/packages/0_accel-rotate_0.41_armv4t.ipk  &amp;lt;---安装后，无反应&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: x-small;"&gt;[安装neolight]&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: x-small;"&gt;root@om-gta02 ~ $ opkg install http://neolight.googlecode.com/files/neolight_1.4.0-r0_all.ipk  &amp;lt;---怎么关闭？&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: x-small;"&gt;   &lt;span style="font-size: small;"&gt;&lt;b&gt;4. WIFI&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: x-small;"&gt;在设置打开wifi后&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: x-small;"&gt;root@om-gta02 ~ $ &lt;/span&gt;iwlist eth0 scanning&lt;br /&gt;&lt;span style="font-size: x-small;"&gt;root@om-gta02 ~ $ udhcpc eth0&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: x-small;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5347288948477829359-67637594686085157?l=yoblooc.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yoblooc.blogspot.com/feeds/67637594686085157/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5347288948477829359&amp;postID=67637594686085157' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5347288948477829359/posts/default/67637594686085157'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5347288948477829359/posts/default/67637594686085157'/><link rel='alternate' type='text/html' href='http://yoblooc.blogspot.com/2010/04/openmoko-shr.html' title='openmoko shr版本手记'/><author><name>j.z</name><uri>http://www.blogger.com/profile/15855068428842751244</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5347288948477829359.post-270272135044594046</id><published>2010-04-19T21:43:00.000-07:00</published><updated>2010-04-19T21:44:22.219-07:00</updated><title type='text'>扫描开放的udp端口</title><content type='html'>nc -u -z -v X.X.X.X  ports&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5347288948477829359-270272135044594046?l=yoblooc.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yoblooc.blogspot.com/feeds/270272135044594046/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5347288948477829359&amp;postID=270272135044594046' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5347288948477829359/posts/default/270272135044594046'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5347288948477829359/posts/default/270272135044594046'/><link rel='alternate' type='text/html' href='http://yoblooc.blogspot.com/2010/04/udp.html' title='扫描开放的udp端口'/><author><name>j.z</name><uri>http://www.blogger.com/profile/15855068428842751244</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5347288948477829359.post-8540097680784662733</id><published>2010-01-27T19:00:00.000-08:00</published><updated>2010-01-27T19:04:36.440-08:00</updated><title type='text'>x11vnc: a VNC server for real X displays</title><content type='html'>这个软件可以使vnc viewer查看远程主机的屏幕。注意，不是虚拟X终端。&lt;br /&gt;我经常忘记这个软件名称，然后google回来，又忘了，...。&lt;br /&gt;&lt;a href="http://www.karlrunge.com/x11vnc/"&gt;http://www.karlrunge.com/x11vnc/&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5347288948477829359-8540097680784662733?l=yoblooc.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yoblooc.blogspot.com/feeds/8540097680784662733/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5347288948477829359&amp;postID=8540097680784662733' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5347288948477829359/posts/default/8540097680784662733'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5347288948477829359/posts/default/8540097680784662733'/><link rel='alternate' type='text/html' href='http://yoblooc.blogspot.com/2010/01/x11vnc-vnc-server-for-real-x-displays.html' title='x11vnc: a VNC server for real X displays'/><author><name>j.z</name><uri>http://www.blogger.com/profile/15855068428842751244</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5347288948477829359.post-4031595980149422892</id><published>2010-01-26T19:09:00.000-08:00</published><updated>2010-01-26T19:12:18.514-08:00</updated><title type='text'>翻墙回来了！</title><content type='html'>转自［http://www.wangchaoyong.cn/blog/?p=549］，为了不丢失，放一份在此。&lt;br /&gt;&lt;br /&gt;用Google APP Engine建个人代理来翻下墙&lt;br /&gt;　　Google App Engine是Google提供的可扩展系统上构建网络应用程序。每个 Google App Engine 应用程序都可使用多达 500MB 的持久存储空间以及可支持每月 500 万综合浏览量的足够带宽和 CPU。目前每个用户可以免费创建十个应用。&lt;br /&gt;网友的介绍已经非常详尽，所以老王就不重复，请看下面的转载文章：&lt;br /&gt;&lt;br /&gt;转载自：广陵散 `s 博客 lizhenglin.com&lt;br /&gt;&lt;br /&gt;        找代理上网总是一件烦人甚至恼人的事情。某次和同学闲聊，他推荐了Gappproxy给我使用，我用了一下，感觉还可以。现将自己使用的一些心得记录如下，希望能让广大Linuxer受益。（windows下使用的详细教程请参看http://skydao.com/post/google-app-engine-to-do-with-personal-proxy-server-second-edition）&lt;br /&gt;&lt;br /&gt;        使用的过程主要分为两个部分。第一部分是上传一个文件到google app engine（GAE）,第二部分是建立本地和GAE的连接。&lt;br /&gt; &lt;br /&gt;1：上传&lt;br /&gt;1.1 创建一个google appengine帐号&lt;br /&gt;点击链接 （http://appengine.google.com）申请注册一个google appengine帐号，注册需要一个gmail邮箱，另外在注册的过程中需要填入手机号码进行验证。&lt;br /&gt;（老王注：注册并创建应用哦，应用名称下面将需要用到）&lt;br /&gt;&lt;br /&gt;1.2 安装python&lt;br /&gt;我的系统是Ubuntu8.04，所以只要apt-get install python就可以了&lt;br /&gt;（老王注：Windows系统下载）&lt;br /&gt;&lt;br /&gt;1.3 下载并安装google appengine软件包&lt;br /&gt;点击链接（http://code.google.com/appengine/downloads.html ），下载Linux平台的Google App Engine SDK，并进行解压。我的解压路径是桌面上的GAE目录。&lt;br /&gt;（老王注：windows系统下载windows平台的GAE SDK）&lt;br /&gt;&lt;br /&gt;1.4 下载并解压fetchserver源码包。&lt;br /&gt;点击链接 （http://code.google.com/p/gappproxy/downloads/list ），下载里面的fetchserver- 1.0.0beta.tar.gz。这个是GAppProxy服务端源码包，用于架设自己的fetchServer。要将这个包进行解压。然后将解压后的 文件（fetchServer）夹放入Google App Engine SDK的安装目录。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;1.5 编辑fetchServer目录下的app.yaml文件。&lt;br /&gt;用nano或者其他方式编辑这个文件，主要编辑的参数是第一行application.&lt;br /&gt;～～～～～～～～～～～～～～～～～～～～&lt;br /&gt;application: aaaaaa(比如我的比如你的AppEngine地址是aaaaaaaaa.appspot.com，那就是application帐号就是aaaaaa）)&lt;br /&gt;～～～～～～～～～～～～～～～～～～～～&lt;br /&gt;编辑结束后，保存并关闭这个文件。&lt;br /&gt;（老王注：application帐号即使第一步创建的应用名称）&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Easy AdSense by Unreal&lt;br /&gt;1.6 上传&lt;br /&gt;进入Google App Engine SDK目录。然后运行命令：appcfg.py update fetchserver。程序会要求你填入你的gmail和gmail的密码。&lt;br /&gt;～～～～～～&lt;br /&gt;hoffmann@ubuntu:~/Desktop/GAE$ python appcfg.py update fetchServer/&lt;br /&gt;Scanning files on local disk.&lt;br /&gt;Initiating update.&lt;br /&gt;Email: abcd@gmail.com&lt;br /&gt;Password for abcd@gmail.com：&lt;br /&gt;Cloning 1 application file.&lt;br /&gt;Deploying new version.&lt;br /&gt;Checking if new version is ready to serve.&lt;br /&gt;Closing update: new version is ready to start serving.&lt;br /&gt;～～～～～～&lt;br /&gt;OK ，上传部分完毕。&lt;br /&gt;（老王注：用cmd命令行方式上传，需要用dos命令更改目录至fetchserver所在GAE SDK目录，然后通过上述appcfg.py update fetchserver命令上传，过程中输入Gmail邮箱和密码，输入密码时在命令行中是不显示任何符号的哦）&lt;br /&gt;&lt;br /&gt;2：连接&lt;br /&gt;2.1：下载客户端&lt;br /&gt;点击链接（http://code.google.com/p/gappproxy/downloads/list），下载gappproxy- 1.0.0beta.tar.gz ，这个是GAppProxy源码包，内含客户端所有源码，并将这个文件进行解压。我还是解压在桌面上，文件夹的名字是gappproxy。&lt;br /&gt;&lt;br /&gt;2.2 更改配置文件&lt;br /&gt;进入gappproxy目录，用nano或者其他的文件编辑器编辑proxy.conf文件。在fetchserver一栏里面填写自己的apengine地址。并去掉一行开头的井号（这个是注释用的）&lt;br /&gt;～～～～～～～～～～～～～～～～～&lt;br /&gt;GAppProxy configuration&lt;br /&gt;&lt;br /&gt;# local_proxy&lt;br /&gt;#local_proxy = host:port&lt;br /&gt;#&lt;br /&gt;# If local proxy needs authentication:&lt;br /&gt;#local_proxy = user:passwd@host:port&lt;br /&gt;&lt;br /&gt;fetch server&lt;br /&gt;#fetch_server = http://127.0.0.1:8080/fetch.py&lt;br /&gt;fetch_server = http://aaaaaa.appspot.com/fetch.py ###填写自己注册的appengine地址。&lt;br /&gt;#fetch_server = http://fetchserver-nolog.appspot.com/fetch.py&lt;br /&gt;～～～～～～～～～～～～～～～～～～～～&lt;br /&gt;然后保存并关闭。&lt;br /&gt;&lt;br /&gt;2.3 运行代理服务&lt;br /&gt;直接在终端里面运行 proxy.py.如果看到HTTP Enabled : YES的字样，恭喜你，代理已经成功开启了。你所要做的就是将这个终端一直开着，就可以上网了。代理的地址是127.0.0.1:8000.这个可以在浏览器里面设置的。&lt;br /&gt;（老王注：首先在浏览器里配置局域网连接，配置代理地址127.0.0.1，端口8000，然后再运行gappproxy目录下的proxy.py）&lt;br /&gt;～～～～～～～～～～～～～～～&lt;br /&gt;hoffmann@ubuntu:~/Desktop/gappproxy$ python proxy.py&lt;br /&gt;——————————————–&lt;br /&gt;HTTP Enabled : YES&lt;br /&gt;HTTPS Enabled: NO   （老王注：老王的也是YES）&lt;br /&gt;Local Proxy :&lt;br /&gt;Fetch Server : http://aaaaaa.appspot.com/fetch.py&lt;br /&gt;——————————————–&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5347288948477829359-4031595980149422892?l=yoblooc.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yoblooc.blogspot.com/feeds/4031595980149422892/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5347288948477829359&amp;postID=4031595980149422892' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5347288948477829359/posts/default/4031595980149422892'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5347288948477829359/posts/default/4031595980149422892'/><link rel='alternate' type='text/html' href='http://yoblooc.blogspot.com/2010/01/blog-post.html' title='翻墙回来了！'/><author><name>j.z</name><uri>http://www.blogger.com/profile/15855068428842751244</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5347288948477829359.post-2467939628830975149</id><published>2008-12-10T17:35:00.000-08:00</published><updated>2009-03-15T23:27:22.761-07:00</updated><title type='text'>DELL机Centos5系统休眠后无法唤醒的处理</title><content type='html'>现象：&lt;br /&gt;在DELL机上安装Centos5后，在Gnome “系统”-&gt;首选项-&gt;更多首选项-&gt;电源首选项（gnome-power-preferences）窗口设定好休眠。 机器休眠后总是无法唤醒（我的键盘上也没有power之类的按键），按电源开关也无效。&lt;br /&gt;&lt;br /&gt;解决方法：&lt;br /&gt;google一番后，来到了&lt;a href="http://people.freedesktop.org/~hughsient/quirk/quirk-suspend-index.html"&gt;http://people.freedesktop.org/~hughsient/quirk/quirk-suspend-index.html&lt;/a&gt;，按照说明，&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;＃less /usr/share/hal/fdi/information/10freedesktop/20-video-quirk-pm-el5-dell.fdi&lt;br /&gt;内容为：&lt;br /&gt;&amp;lt;?xml version="1.0" encoding="ISO-8859-1"?&amp;gt; &amp;lt;!-- -*- SGML -*- --&amp;gt;&lt;br /&gt;&amp;lt;deviceinfo version="0.2"&gt;&lt;br /&gt;  &amp;lt;device&gt;&lt;br /&gt;    &amp;lt;match key="system.hardware.vendor" string="Dell Inc."&gt;&lt;br /&gt;      &amp;lt;!-- M6300 --&gt;&lt;br /&gt;      &amp;lt;match key="system.hardware.product" string="Precision M6300"&gt;&lt;br /&gt;        &amp;lt;match key="system.hardware.primary_video.vendor" int="0x10de"&gt;&lt;br /&gt;          &amp;lt;match key="system.hardware.primary_video.product" int="0x40d"&gt;&lt;br /&gt;           &amp;lt;merge key="power_management.quirk.none" type="bool"&gt;true&lt;/merge&gt;&lt;br /&gt;          &amp;lt;/match&gt;&lt;br /&gt;        &amp;lt;/match&gt;&lt;br /&gt;      &amp;lt;/match&gt;&lt;br /&gt;      &amp;lt;!-- M4300 --&gt;&lt;br /&gt;      &amp;lt;match key="system.hardware.product" string="Precision M4300"&gt;&lt;br /&gt;        &amp;lt;match key="system.hardware.primary_video.vendor" int="0x10de"&gt;&lt;br /&gt;          &amp;lt;match key="system.hardware.primary_video.product" int="0x42d"&gt;&lt;br /&gt;           &amp;lt;merge key="power_management.quirk.none" type="bool"&gt;true&lt;/merge&gt;&lt;br /&gt;          &amp;lt;/match&gt;&lt;br /&gt;        &amp;lt;/match&gt;&lt;br /&gt;      &amp;lt;/match&gt;&lt;br /&gt;    &amp;lt;/match&gt;&lt;br /&gt;  &amp;lt;/device&gt;&lt;br /&gt;&amp;lt;/deviceinfo&gt;&lt;br /&gt;至少从上面可以看出&lt;br /&gt;&amp;lt;merge key="power_management.quirk.none" type="bool"&gt;true&amp;lt;/merge&gt;&lt;br /&gt;quirk都禁止了，quirk根据说明就是为了唤醒用的（实际的英文说明并不是这么说的，但是我没看懂，暂时这么理解）。&lt;br /&gt;将上面的true改成false是不是就可以了，当然不是了，&lt;br /&gt;&amp;lt;match key="system.hardware.product" string="Precision M4300"&gt;&lt;br /&gt;这代表机器对应的产品标识。&lt;br /&gt;执行：&lt;br /&gt;dmidecode&lt;br /&gt;输出：&lt;br /&gt;Handle 0x0100, DMI type 1, 25 bytes.&lt;br /&gt;System Information&lt;br /&gt;        Manufacturer: Dell Inc.                &lt;br /&gt;        Product Name: OptiPlex GX520               &lt;br /&gt;        Version: Not Specified&lt;br /&gt;        Serial Number: XXXXXXXXXX&lt;br /&gt;        UUID: XXXXXXXXXXXXXXXXXXXXXXXXXXXX&lt;br /&gt;        Wake-up Type: Power Switch&lt;br /&gt;Product Name: OptiPlex GX520 这才是我的DELL机标识。&lt;br /&gt;&lt;br /&gt;那么应该怎么写？&lt;br /&gt;还好，不需要自己查资料，&lt;a href="http://cgit.freedesktop.org/hal-info/"&gt;http://cgit.freedesktop.org/hal-info/&lt;/a&gt;有最新的DELL机器配置，下载后，打开对应文件，找到&lt;br /&gt;      &amp;lt;!-- Dell OptiPlex --&gt;&lt;br /&gt;      &amp;lt;match key="system.hardware.product" prefix_ncase="OptiPlex"&gt;&lt;br /&gt;        &amp;lt;match key="system.hardware.product" contains_outof="GX520;GX260"&gt;&lt;br /&gt;          &amp;lt;merge key="power_management.quirk.vbe_post" type="bool"&gt;true&lt;/merge&gt;&lt;br /&gt;          &amp;lt;merge key="power_management.quirk.vbemode_restore" type="bool"&gt;true&lt;/merge&gt;&lt;br /&gt;        &amp;lt;/match&gt;&lt;br /&gt;...&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;嗯，将这一段拷贝到本机的/usr/share/hal/fdi/information/10freedesktop/20-video-quirk-pm-el5-dell.fdi文件中即可。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5347288948477829359-2467939628830975149?l=yoblooc.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yoblooc.blogspot.com/feeds/2467939628830975149/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5347288948477829359&amp;postID=2467939628830975149' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5347288948477829359/posts/default/2467939628830975149'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5347288948477829359/posts/default/2467939628830975149'/><link rel='alternate' type='text/html' href='http://yoblooc.blogspot.com/2008/12/dellcentos5.html' title='DELL机Centos5系统休眠后无法唤醒的处理'/><author><name>j.z</name><uri>http://www.blogger.com/profile/15855068428842751244</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5347288948477829359.post-871077629811635637</id><published>2008-11-19T19:05:00.000-08:00</published><updated>2008-11-19T19:11:56.220-08:00</updated><title type='text'>The RPC Portmapper</title><content type='html'>&lt;blockquote&gt;    Portmap is a server that converts RPC program numbers into DARPA protocol port numbers.  It must be running&lt;br /&gt;     in order to make RPC calls.&lt;br /&gt;&lt;br /&gt;     When an RPC server is started, it will tell portmap what port number it is listening to, and what RPC pro-&lt;br /&gt;     gram numbers it is prepared to serve.  When a client wishes to make an RPC call to a given program number,&lt;br /&gt;     it will first contact portmap on the server machine to determine the port number where RPC packets should&lt;br /&gt;     be sent.&lt;br /&gt;&lt;br /&gt;     Portmap must be started before any RPC servers are invoked.&lt;br /&gt;&lt;br /&gt;     rpcinfo -p localhost        &lt;====&gt;     pmap_dump&lt;br /&gt;&lt;br /&gt;     rpcinfo -t localhost nfs&lt;br /&gt;&lt;br /&gt;     More info reference:  man rpcinfo  &lt;br /&gt;&lt;br /&gt;&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5347288948477829359-871077629811635637?l=yoblooc.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yoblooc.blogspot.com/feeds/871077629811635637/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5347288948477829359&amp;postID=871077629811635637' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5347288948477829359/posts/default/871077629811635637'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5347288948477829359/posts/default/871077629811635637'/><link rel='alternate' type='text/html' href='http://yoblooc.blogspot.com/2008/11/rpc-portmapper.html' title='The RPC Portmapper'/><author><name>j.z</name><uri>http://www.blogger.com/profile/15855068428842751244</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5347288948477829359.post-6631043738761526951</id><published>2008-10-23T23:51:00.000-07:00</published><updated>2008-11-19T19:23:50.999-08:00</updated><title type='text'>Usage of Linux normal commands</title><content type='html'>&lt;pre&gt;&lt;br /&gt;1. sed&lt;br /&gt;  1) sed "/^[ ]*$/d" &lt;br /&gt;    删除文件中的空行&lt;br /&gt;  2) sed -i -e "/^#.*$/d" -e "/^;.*$/d" filename&lt;br /&gt;    删除文件中的注释行（以#或;开头）。直接替换，不做备份，小心误操作！ &lt;br /&gt;&lt;br /&gt;2. stty&lt;br /&gt;  修改或显示终端的行设置&lt;br /&gt;&lt;br /&gt;3. terminfo&lt;br /&gt;  /usr/share/terminfo/X/X&lt;br /&gt;&lt;br /&gt;4. man console_codes ( man console_codes | sed "s/.^H//g" )&lt;br /&gt;  查看linux终端的所有控制符号和转义序列&lt;br /&gt;&lt;br /&gt;CONSOLE_CODES(4)           Linux Programmer’s Manual          CONSOLE_CODES(4)&lt;br /&gt;&lt;br /&gt;NAME&lt;br /&gt;       console_codes - Linux console escape and control sequences&lt;br /&gt;&lt;br /&gt;DESCRIPTION&lt;br /&gt;       The   Linux  console  implements  a  large  subset  of  the  VT102  and&lt;br /&gt;       ECMA-48/ISO 6429/ANSI X3.64 terminal controls,  plus  certain  private-&lt;br /&gt;       mode  sequences  for changing the color palette, character-set mapping,&lt;br /&gt;       etc.  In the  tabular  descriptions  below,  the  second  column  gives&lt;br /&gt;       ECMA-48  or  DEC  mnemonics  (the  latter if prefixed with DEC) for the&lt;br /&gt;       given function.  Sequences without a mnemonic are neither  ECMA-48  nor&lt;br /&gt;       VT102.&lt;br /&gt;&lt;br /&gt;       After  all  the normal output processing has been done, and a stream of&lt;br /&gt;       characters arrives at the console driver for actual printing, the first&lt;br /&gt;       thing  that  happens is a translation from the code used for processing&lt;br /&gt;       to the code used for printing.&lt;br /&gt;&lt;br /&gt;       If the console is in UTF-8 mode, then  the  incoming  bytes  are  first&lt;br /&gt;       assembled  into  16-bit  Unicode  codes.  Otherwise each byte is trans-&lt;br /&gt;       formed according to the current mapping table (which translates it to a&lt;br /&gt;       Unicode value).  See the CHARACTER SETS section below for discussion.&lt;br /&gt;&lt;br /&gt;       In the normal case, the Unicode value is converted to a font index, and&lt;br /&gt;       this is stored in video memory, so that  the  corresponding  glyph  (as&lt;br /&gt;       found  in  video ROM) appears on the screen.  Note that the use of Uni-&lt;br /&gt;       code (and the design of the PC hardware) allows us to use 512 different&lt;br /&gt;       glyphs simultaneously.&lt;br /&gt;&lt;br /&gt;       If  the  current  Unicode  value is a control character, or we are cur-&lt;br /&gt;       rently processing an escape sequence, the value will treated specially.&lt;br /&gt;       Instead  of  being turned into a font index and rendered as a glyph, it&lt;br /&gt;       may trigger cursor movement or other control functions.  See the  LINUX&lt;br /&gt;       CONSOLE CONTROLS section below for discussion.&lt;br /&gt;&lt;br /&gt;       It  is  generally not good practice to hard-wire terminal controls into&lt;br /&gt;       programs.  Linux supports a terminfo(5) database of terminal  capabili-&lt;br /&gt;       ties.   Rather than emitting console escape sequences by hand, you will&lt;br /&gt;       almost always want to use a terminfo-aware screen  library  or  utility&lt;br /&gt;       such as ncurses(3), tput(1), or reset(1).&lt;br /&gt;&lt;br /&gt;LINUX CONSOLE CONTROLS&lt;br /&gt;       This  section describes all the control characters and escape sequences&lt;br /&gt;       that invoke special functions (i.e. anything other than writing a glyph&lt;br /&gt;       at the current cursor location) on the Linux console.&lt;br /&gt;&lt;br /&gt;   Control characters&lt;br /&gt;       A  character is a control character if (before transformation according&lt;br /&gt;       to the mapping table) it has one of the 14 codes 00 (NUL), 07 (BEL), 08&lt;br /&gt;       (BS), 09 (HT), 0a (LF), 0b (VT), 0c (FF), 0d (CR), 0e (SO), 0f (SI), 18&lt;br /&gt;       (CAN), 1a (SUB), 1b (ESC), 7f (DEL).  One can set  a  ‘display  control&lt;br /&gt;       characters’  mode  (see  below), and allow 07, 09, 0b, 18, 1a, 7f to be&lt;br /&gt;       displayed as glyphs.  On the other hand, in UTF-8 mode all codes  00-1f&lt;br /&gt;       are  regarded as control characters, regardless of any ‘display control&lt;br /&gt;       characters’ mode.&lt;br /&gt;&lt;br /&gt;       If we have a control character, it is acted upon immediately  and  then&lt;br /&gt;       discarded  (even  in  the  middle of an escape sequence) and the escape&lt;br /&gt;       sequence continues with the next character.  (However, ESC starts a new&lt;br /&gt;       escape  sequence,  possibly aborting a previous unfinished one, and CAN&lt;br /&gt;       and SUB abort any escape sequence.)  The recognized control  characters&lt;br /&gt;       are  BEL, BS, HT, LF, VT, FF, CR, SO, SI, CAN, SUB, ESC, DEL, CSI. They&lt;br /&gt;       do what one would expect:&lt;br /&gt;&lt;br /&gt;       BEL (0x07, ^G) beeps;&lt;br /&gt;&lt;br /&gt;       BS (0x08, ^H) backspaces one column (but not past the beginning of  the&lt;br /&gt;              line);&lt;br /&gt;&lt;br /&gt;       HT  (0x09,  ^I)  goes to the next tab stop or to the end of the line if&lt;br /&gt;              there is no earlier tab stop;&lt;br /&gt;&lt;br /&gt;       LF (0x0A, ^J), VT (0x0B, ^K) and FF (0x0C, ^L) all give a linefeed;&lt;br /&gt;&lt;br /&gt;       CR (0x0D, ^M) gives a carriage return;&lt;br /&gt;&lt;br /&gt;       SO (0x0E, ^N) activates the G1 character set, and if  LF/NL  (new  line&lt;br /&gt;              mode) is set also a carriage return;&lt;br /&gt;&lt;br /&gt;       SI (0x0F, ^O) activates the G0 character set;&lt;br /&gt;&lt;br /&gt;       CAN (0x18, ^X) and SUB (0x1A, ^Z) interrupt escape sequences;&lt;br /&gt;&lt;br /&gt;       ESC (0x1B, ^[) starts an escape sequence;&lt;br /&gt;&lt;br /&gt;       DEL (0x7F) is ignored;&lt;br /&gt;&lt;br /&gt;       CSI (0x9B) is equivalent to ESC [.&lt;br /&gt;&lt;br /&gt;   ESC- but not CSI-sequences&lt;br /&gt;       ESC c     RIS      Reset.&lt;br /&gt;       ESC D     IND      Linefeed.&lt;br /&gt;       ESC E     NEL      Newline.&lt;br /&gt;       ESC H     HTS      Set tab stop at current column.&lt;br /&gt;       ESC M     RI       Reverse linefeed.&lt;br /&gt;       ESC Z     DECID    DEC private identification. The kernel returns the&lt;br /&gt;                          string  ESC [ ? 6 c, claiming that it is a  VT102.&lt;br /&gt;       ESC 7     DECSC    Save    current    state    (cursor   coordinates,&lt;br /&gt;                          attributes, character sets pointed at by G0,  G1).&lt;br /&gt;       ESC 8     DECRC    Restore state most recently saved by ESC 7.&lt;br /&gt;       ESC [     CSI      Control sequence introducer&lt;br /&gt;       ESC %              Start sequence selecting character set&lt;br /&gt;       ESC % @               Select default (ISO 646 / ISO 8859-1)&lt;br /&gt;       ESC % G               Select UTF-8&lt;br /&gt;       ESC % 8               Select UTF-8 (obsolete)&lt;br /&gt;       ESC # 8   DECALN   DEC screen alignment test - fill screen with E’s.&lt;br /&gt;       ESC (              Start sequence defining G0 character set&lt;br /&gt;       ESC ( B               Select default (ISO 8859-1 mapping)&lt;br /&gt;       ESC ( 0               Select VT100 graphics mapping&lt;br /&gt;       ESC ( U               Select null mapping - straight to character ROM&lt;br /&gt;       ESC ( K               Select user mapping - the map that is loaded by&lt;br /&gt;                             the utility mapscrn(8).&lt;br /&gt;       ESC )              Start sequence defining G1&lt;br /&gt;                          (followed by one of B, 0, U, K, as above).&lt;br /&gt;       ESC &gt;     DECPNM   Set numeric keypad mode&lt;br /&gt;       ESC =     DECPAM   Set application keypad mode&lt;br /&gt;       ESC ]     OSC      (Should  be:  Operating  system  command)  ESC ] P&lt;br /&gt;                          nrrggbb: set palette, with parameter  given  in  7&lt;br /&gt;                          hexadecimal  digits after the final P :-(.  Here n&lt;br /&gt;                          is the color  (0-15),  and  rrggbb  indicates  the&lt;br /&gt;                          red/green/blue  values  (0-255).   ESC  ] R: reset&lt;br /&gt;                          palette&lt;br /&gt;&lt;br /&gt;   ECMA-48 CSI sequences&lt;br /&gt;       CSI (or ESC [) is followed by a sequence of parameters,  at  most  NPAR&lt;br /&gt;       (16),  that  are  decimal  numbers separated by semicolons. An empty or&lt;br /&gt;       absent parameter is taken to be 0.  The sequence of parameters  may  be&lt;br /&gt;       preceded by a single question mark.&lt;br /&gt;&lt;br /&gt;       However,  after  CSI [ (or ESC [ [) a single character is read and this&lt;br /&gt;       entire sequence is ignored. (The idea is to ignore an  echoed  function&lt;br /&gt;       key.)&lt;br /&gt;&lt;br /&gt;       The action of a CSI sequence is determined by its final character.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;       @   ICH       Insert the indicated # of blank characters.&lt;br /&gt;       A   CUU       Move cursor up the indicated # of rows.&lt;br /&gt;       B   CUD       Move cursor down the indicated # of rows.&lt;br /&gt;       C   CUF       Move cursor right the indicated # of columns.&lt;br /&gt;       D   CUB       Move cursor left the indicated # of columns.&lt;br /&gt;       E   CNL       Move cursor down the indicated # of rows, to column 1.&lt;br /&gt;       F   CPL       Move cursor up the indicated # of rows, to column 1.&lt;br /&gt;       G   CHA       Move cursor to indicated column in current row.&lt;br /&gt;       H   CUP       Move cursor to the indicated row, column (origin at 1,1).&lt;br /&gt;       J   ED        Erase display (default: from cursor to end of display).&lt;br /&gt;                     ESC [ 1 J: erase from start to cursor.&lt;br /&gt;                     ESC [ 2 J: erase whole display.&lt;br /&gt;       K   EL        Erase line (default: from cursor to end of line).&lt;br /&gt;                     ESC [ 1 K: erase from start of line to cursor.&lt;br /&gt;                     ESC [ 2 K: erase whole line.&lt;br /&gt;       L   IL        Insert the indicated # of blank lines.&lt;br /&gt;       M   DL        Delete the indicated # of lines.&lt;br /&gt;       P   DCH       Delete the indicated # of characters on the current line.&lt;br /&gt;       X   ECH       Erase the indicated # of characters on the current line.&lt;br /&gt;       a   HPR       Move cursor right the indicated # of columns.&lt;br /&gt;       c   DA        Answer ESC [ ? 6 c: ‘I am a VT102’.&lt;br /&gt;       d   VPA       Move cursor to the indicated row, current column.&lt;br /&gt;       e   VPR       Move cursor down the indicated # of rows.&lt;br /&gt;       f   HVP       Move cursor to the indicated row, column.&lt;br /&gt;       g   TBC       Without parameter: clear tab stop at the current position.&lt;br /&gt;                     ESC [ 3 g: delete all tab stops.&lt;br /&gt;       h   SM        Set Mode (see below).&lt;br /&gt;       l   RM        Reset Mode (see below).&lt;br /&gt;       m   SGR       Set attributes (see below).&lt;br /&gt;       n   DSR       Status report (see below).&lt;br /&gt;       q   DECLL     Set keyboard LEDs.&lt;br /&gt;                     ESC [ 0 q: clear all LEDs&lt;br /&gt;                     ESC [ 1 q: set Scroll Lock LED&lt;br /&gt;                     ESC [ 2 q: set Num Lock LED&lt;br /&gt;                     ESC [ 3 q: set Caps Lock LED&lt;br /&gt;       r   DECSTBM   Set scrolling region; parameters are top and bottom row.&lt;br /&gt;       s   ?         Save cursor location.&lt;br /&gt;       u   ?         Restore cursor location.&lt;br /&gt;       ‘   HPA       Move cursor to indicated column in current row.&lt;br /&gt;&lt;br /&gt;   ECMA-48 Set Graphics Rendition&lt;br /&gt;       The  ECMA-48  SGR  sequence ESC [ parameters m sets display attributes.&lt;br /&gt;       Several attributes can be set in the same sequence, separated by  semi-&lt;br /&gt;       colons.   An empty parameter (between semicolons or string initiator or&lt;br /&gt;       terminator) is interpreted as a zero.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;       param   result&lt;br /&gt;       0       reset all attributes to their defaults&lt;br /&gt;       1       set bold&lt;br /&gt;       2       set half-bright (simulated with color on a color display)&lt;br /&gt;       4       set underscore (simulated with color on a color  display)&lt;br /&gt;               (the  colors  used  to  simulate dim or underline are set&lt;br /&gt;               using ESC ] ...)&lt;br /&gt;       5       set blink&lt;br /&gt;       7       set reverse video&lt;br /&gt;       10      reset selected mapping, display control flag, and  toggle&lt;br /&gt;               meta flag (ECMA-48 says "primary font").&lt;br /&gt;&lt;br /&gt;       11      select null mapping, set display control flag, reset tog-&lt;br /&gt;               gle meta flag (ECMA-48 says "first alternate font").&lt;br /&gt;       12      select null mapping, set display control flag, set toggle&lt;br /&gt;               meta  flag  (ECMA-48  says "second alternate font").  The&lt;br /&gt;               toggle meta flag causes the high bit of a byte to be tog-&lt;br /&gt;               gled before the mapping table translation is done.&lt;br /&gt;       21      set normal intensity (ECMA-48 says "doubly underlined")&lt;br /&gt;       22      set normal intensity&lt;br /&gt;       24      underline off&lt;br /&gt;       25      blink off&lt;br /&gt;       27      reverse video off&lt;br /&gt;       30      set black foreground&lt;br /&gt;       31      set red foreground&lt;br /&gt;       32      set green foreground&lt;br /&gt;       33      set brown foreground&lt;br /&gt;       34      set blue foreground&lt;br /&gt;       35      set magenta foreground&lt;br /&gt;       36      set cyan foreground&lt;br /&gt;       37      set white foreground&lt;br /&gt;       38      set underscore on, set default foreground color&lt;br /&gt;       39      set underscore off, set default foreground color&lt;br /&gt;       40      set black background&lt;br /&gt;       41      set red background&lt;br /&gt;       42      set green background&lt;br /&gt;       43      set brown background&lt;br /&gt;       44      set blue background&lt;br /&gt;       45      set magenta background&lt;br /&gt;       46      set cyan background&lt;br /&gt;       47      set white background&lt;br /&gt;       49      set default background color&lt;br /&gt;&lt;br /&gt;   ECMA-48 Mode Switches&lt;br /&gt;       ESC [ 3 h&lt;br /&gt;              DECCRM (default off): Display control chars.&lt;br /&gt;&lt;br /&gt;       ESC [ 4 h&lt;br /&gt;              DECIM (default off): Set insert mode.&lt;br /&gt;&lt;br /&gt;       ESC [ 20 h&lt;br /&gt;              LF/NL  (default  off): Automatically follow echo of LF, VT or FF&lt;br /&gt;              with CR.&lt;br /&gt;&lt;br /&gt;   ECMA-48 Status Report Commands&lt;br /&gt;       ESC [ 5 n&lt;br /&gt;              Device status report (DSR): Answer is ESC [ 0 n (Terminal OK).&lt;br /&gt;&lt;br /&gt;       ESC [ 6 n&lt;br /&gt;              Cursor position report (CPR): Answer is ESC [ y ; x R, where x,y&lt;br /&gt;              is the cursor location.&lt;br /&gt;&lt;br /&gt;   DEC Private Mode (DECSET/DECRST) sequences.&lt;br /&gt;       These  are  not  described in ECMA-48.  We list the Set Mode sequences;&lt;br /&gt;       the Reset Mode sequences are obtained by replacing  the  final  ‘h’  by&lt;br /&gt;       ‘l’.&lt;br /&gt;&lt;br /&gt;       ESC [ ? 1 h&lt;br /&gt;              DECCKM  (default  off):  When set, the cursor keys send an ESC O&lt;br /&gt;              prefix, rather than ESC [.&lt;br /&gt;&lt;br /&gt;       ESC [ ? 3 h&lt;br /&gt;              DECCOLM (default off = 80 columns): 80/132 col mode switch.  The&lt;br /&gt;              driver sources note that this alone does not suffice; some user-&lt;br /&gt;              mode utility such as resizecons(8) has to  change  the  hardware&lt;br /&gt;              registers on the console video card.&lt;br /&gt;&lt;br /&gt;       ESC [ ? 5 h&lt;br /&gt;              DECSCNM (default off): Set reverse-video mode.&lt;br /&gt;&lt;br /&gt;       ESC [ ? 6 h&lt;br /&gt;              DECOM  (default off): When set, cursor addressing is relative to&lt;br /&gt;              the upper left corner of the scrolling region.&lt;br /&gt;&lt;br /&gt;       ESC [ ? 7 h&lt;br /&gt;              DECAWM (default on): Set autowrap on.  In this mode,  a  graphic&lt;br /&gt;              character  emitted  after column 80 (or column 132 of DECCOLM is&lt;br /&gt;              on) forces a wrap to the beginning of the following line  first.&lt;br /&gt;&lt;br /&gt;       ESC [ ? 8 h&lt;br /&gt;              DECARM (default on): Set keyboard autorepreat on.&lt;br /&gt;&lt;br /&gt;       ESC [ ? 9 h&lt;br /&gt;              X10  Mouse  Reporting (default off): Set reporting mode to 1 (or&lt;br /&gt;              reset to 0) — see below.&lt;br /&gt;&lt;br /&gt;       ESC [ ? 25 h&lt;br /&gt;              DECTECM (default on): Make cursor visible.&lt;br /&gt;&lt;br /&gt;       ESC [ ? 1000 h&lt;br /&gt;              X11 Mouse Reporting (default off): Set reporting mode to  2  (or&lt;br /&gt;              reset to 0) — see below.&lt;br /&gt;&lt;br /&gt;   Linux Console Private CSI Sequences&lt;br /&gt;       The following sequences are neither ECMA-48 nor native VT102.  They are&lt;br /&gt;       native to the Linux console driver.  Colors are in SGR parameters: 0  =&lt;br /&gt;       black,  1 = red, 2 = green, 3 = brown, 4 = blue, 5 = magenta, 6 = cyan,&lt;br /&gt;       7 = white.&lt;br /&gt;&lt;br /&gt;       ESC [ 1 ; n ]       Set color n as the underline color&lt;br /&gt;       ESC [ 2 ; n ]       Set color n as the dim color&lt;br /&gt;       ESC [ 8 ]           Make the current color pair the default attributes.&lt;br /&gt;       ESC [ 9 ; n ]       Set screen blank timeout to n minutes.&lt;br /&gt;       ESC [ 10 ; n ]      Set bell frequency in Hz.&lt;br /&gt;       ESC [ 11 ; n ]      Set bell duration in msec.&lt;br /&gt;       ESC [ 12 ; n ]      Bring specified console to the front.&lt;br /&gt;       ESC [ 13 ]          Unblank the screen.&lt;br /&gt;       ESC [ 14 ; n ]      Set the VESA powerdown interval in minutes.&lt;br /&gt;&lt;br /&gt;CHARACTER SETS&lt;br /&gt;       The kernel knows about 4 translations of bytes into console-screen sym-&lt;br /&gt;       bols.   The  four tables are: a) Latin1 -&gt; PC, b) VT100 graphics -&gt; PC,&lt;br /&gt;       c) PC -&gt; PC, d) user-defined.&lt;br /&gt;&lt;br /&gt;       There are two character sets, called G0 and G1, and one of them is  the&lt;br /&gt;       current  character  set. (Initially G0.)  Typing ^N causes G1 to become&lt;br /&gt;       current, ^O causes G0 to become current.&lt;br /&gt;&lt;br /&gt;       These variables G0 and G1 point at a  translation  table,  and  can  be&lt;br /&gt;       changed by the user.  Initially they point at tables a) and b), respec-&lt;br /&gt;       tively.  The sequences ESC ( B and ESC ( 0 and ESC (  U  and  ESC  (  K&lt;br /&gt;       cause G0 to point at translation table a), b), c) and d), respectively.&lt;br /&gt;       The sequences ESC ) B and ESC ) 0 and ESC ) U and ESC ) K cause  G1  to&lt;br /&gt;       point at translation table a), b), c) and d), respectively.&lt;br /&gt;&lt;br /&gt;       The  sequence  ESC c causes a terminal reset, which is what you want if&lt;br /&gt;       the screen is all garbled.  The oft-advised "echo ^V^O" will only  make&lt;br /&gt;       G0  current,  but there is no guarantee that G0 points at table a).  In&lt;br /&gt;       some distributions there is a program reset(1)  that  just  does  "echo&lt;br /&gt;       ^[c".   If  your  terminfo entry for the console is correct (and has an&lt;br /&gt;       entry rs1=\Ec), then "tput reset" will also work.&lt;br /&gt;&lt;br /&gt;       The user-defined mapping table can be set using mapscrn(8).  The result&lt;br /&gt;       of  the mapping is that if a symbol c is printed, the symbol s = map[c]&lt;br /&gt;       is sent to the video memory. The bitmap that corresponds to s is  found&lt;br /&gt;       in the character ROM, and can be changed using setfont(8).&lt;br /&gt;&lt;br /&gt;MOUSE TRACKING&lt;br /&gt;       The  mouse  tracking  facility  is  intended to return xterm-compatible&lt;br /&gt;       mouse status reports.  Because the console driver has no  way  to  know&lt;br /&gt;       the device or type of the mouse, these reports are returned in the con-&lt;br /&gt;       sole input stream only when the  virtual  terminal  driver  receives  a&lt;br /&gt;       mouse  update  ioctl.   These ioctls must be generated by a mouse-aware&lt;br /&gt;       user-mode application such as the gpm(8) daemon.&lt;br /&gt;&lt;br /&gt;       The mouse tracking escape sequences generated by xterm  encode  numeric&lt;br /&gt;       parameters  in a single character as value+040.  For example, ‘!’ is 1.&lt;br /&gt;       The screen coordinate system is 1-based.&lt;br /&gt;&lt;br /&gt;       The X10 compatibility mode sends an escape  sequence  on  button  press&lt;br /&gt;       encoding  the  location and the mouse button pressed.  It is enabled by&lt;br /&gt;       sending ESC [ ? 9 h and disabled with ESC [ ? 9 l.   On  button  press,&lt;br /&gt;       xterm  sends ESC [ M bxy (6 characters).  Here b is button-1, and x and&lt;br /&gt;       y are the x and y coordinates of the mouse when the button was pressed.&lt;br /&gt;       This is the same code the kernel also produces.&lt;br /&gt;&lt;br /&gt;       Normal  tracking mode (not implemented in Linux 2.0.24) sends an escape&lt;br /&gt;       sequence on both button press and  release.   Modifier  information  is&lt;br /&gt;       also  sent.   It is enabled by sending ESC [ ? 1000 h and disabled with&lt;br /&gt;       ESC [ 1000 l.  On button press or release, xterm sends  ESC  [  M  bxy.&lt;br /&gt;       The  low  two bits of b encode button information: 0=MB1 pressed, 1=MB2&lt;br /&gt;       pressed, 2=MB3 pressed, 3=release.  The upper bits  encode  what  modi-&lt;br /&gt;       fiers  were  down  when  the button was pressed and are added together:&lt;br /&gt;       4=Shift, 8=Meta, 16=Control.  Again x and y are the x and y coordinates&lt;br /&gt;       of the mouse event.  The upper left corner is (1,1).&lt;br /&gt;&lt;br /&gt;COMPARISONS WITH OTHER TERMINALS&lt;br /&gt;       Many different terminal types are described, like the Linux console, as&lt;br /&gt;       being ‘VT100-compatible’.  Here  we  discuss  differences  between  the&lt;br /&gt;       Linux  console  and  the  two  most important others, the DEC VT102 and&lt;br /&gt;       xterm(1).&lt;br /&gt;&lt;br /&gt;   Control-character handling&lt;br /&gt;       The VT102 also recognized the following control characters:&lt;br /&gt;&lt;br /&gt;       NUL (0x00) was ignored;&lt;br /&gt;&lt;br /&gt;       ENQ (0x05) triggered an answerback message;&lt;br /&gt;&lt;br /&gt;       DC1 (0x11, ^Q, XON) resumed transmission;&lt;br /&gt;&lt;br /&gt;       DC3 (0x13, ^S, XOFF) caused VT100 to ignore (and stop transmitting) all&lt;br /&gt;              codes except XOFF and XON.&lt;br /&gt;&lt;br /&gt;       VT100-like DC1/DC3 processing may be enabled by the tty driver.&lt;br /&gt;&lt;br /&gt;       The  xterm  program  (in  VT100 mode) recognizes the control characters&lt;br /&gt;       BEL, BS, HT, LF, VT, FF, CR, SO, SI, ESC.&lt;br /&gt;&lt;br /&gt;   Escape sequences&lt;br /&gt;       VT100 console sequences not implemented on the Linux console:&lt;br /&gt;&lt;br /&gt;       ESC N       SS2   Single shift 2. (Select G2 character set for the next&lt;br /&gt;                         character only.)&lt;br /&gt;       ESC O       SS3   Single shift 3. (Select G3 character set for the next&lt;br /&gt;                         character only.)&lt;br /&gt;       ESC P       DCS   Device control string (ended by ESC \)&lt;br /&gt;       ESC X       SOS   Start of string.&lt;br /&gt;       ESC ^       PM    Privacy message (ended by ESC \)&lt;br /&gt;       ESC \       ST    String terminator&lt;br /&gt;       ESC * ...         Designate G2 character set&lt;br /&gt;       ESC + ...         Designate G3 character set&lt;br /&gt;&lt;br /&gt;       The program xterm (in VT100 mode) recognizes ESC c, ESC # 8, ESC &gt;, ESC&lt;br /&gt;       =,  ESC  D, ESC E, ESC H, ESC M, ESC N, ESC O, ESC P ... ESC  ESC Z (it&lt;br /&gt;       answers ESC [ ? 1 ; 2 c, ‘I am a VT100 with advanced video option’) and&lt;br /&gt;       ESC  ^  ... ESC  with the same meanings as indicated above.  It accepts&lt;br /&gt;       ESC (, ESC ), ESC *,  ESC + followed by 0, A, B  for  the  DEC  special&lt;br /&gt;       character and line drawing set, UK, and US-ASCII, respectively.&lt;br /&gt;&lt;br /&gt;       The  user  can  configure  xterm  to  respond to VT220-specific control&lt;br /&gt;       sequences, and it will identify itself as a VT52, VT100, and up depend-&lt;br /&gt;       ing on the way it is configured and initialized.&lt;br /&gt;&lt;br /&gt;       It  accepts ESC ] (OSC) for the setting of certain resources.  In addi-&lt;br /&gt;       tion to the ECMA-48 string terminator (ST), xterm accepts a BEL to ter-&lt;br /&gt;       minate  an  OSC  string.   These are a few of the OSC control sequences&lt;br /&gt;       recognized by xterm:&lt;br /&gt;&lt;br /&gt;       ESC ] 0 ; txt ST        Set icon name and window title to txt.&lt;br /&gt;       ESC ] 1 ; txt ST        Set icon name to txt.&lt;br /&gt;       ESC ] 2 ; txt ST        Set window title to txt.&lt;br /&gt;       ESC ] 4 ; num; txt ST   Set ANSI color num to txt.&lt;br /&gt;       ESC ] 10 ; txt ST       Set dynamic text color to txt.&lt;br /&gt;       ESC ] 4 6 ; name ST     Change log file to name (normally disabled&lt;br /&gt;                               by a compile-time option)&lt;br /&gt;       ESC ] 5 0 ; fn ST       Set font to fn.&lt;br /&gt;&lt;br /&gt;       It recognizes the following with slightly modified meaning (saving more&lt;br /&gt;       state, behaving closer to VT100/VT220):&lt;br /&gt;&lt;br /&gt;       ESC 7  DECSC   Save cursor&lt;br /&gt;       ESC 8  DECRC   Restore cursor&lt;br /&gt;&lt;br /&gt;       It also recognizes&lt;br /&gt;&lt;br /&gt;       ESC F          Cursor to lower left corner of screen (if enabled by&lt;br /&gt;                      xterm’s hpLowerleftBugCompat resource)&lt;br /&gt;       ESC l          Memory lock (per HP terminals).&lt;br /&gt;                      Locks memory above the cursor.&lt;br /&gt;       ESC m          Memory unlock (per HP terminals).&lt;br /&gt;       ESC n   LS2    Invoke the G2 character set.&lt;br /&gt;       ESC o   LS3    Invoke the G3 character set.&lt;br /&gt;       ESC |   LS3R   Invoke the G3 character set as GR.&lt;br /&gt;       ESC }   LS2R   Invoke the G2 character set as GR.&lt;br /&gt;       ESC ~   LS1R   Invoke the G1 character set as GR.&lt;br /&gt;&lt;br /&gt;       It also recognizes ESC % and provides a more complete UTF-8 implementa-&lt;br /&gt;       tion than Linux console.&lt;br /&gt;&lt;br /&gt;   CSI Sequences&lt;br /&gt;       Old versions of xterm, e.g., from X11R5, interpret the blink SGR  as  a&lt;br /&gt;       bold  SGR.  Later versions which implemented ANSI colors, e.g., XFree86&lt;br /&gt;       3.1.2A in 1995, improved this by allowing the  blink  attribute  to  be&lt;br /&gt;       displayed  as a color.  Modern versions of xterm implement blink SGR as&lt;br /&gt;       blinking text and still allow colored text as an alternate rendering of&lt;br /&gt;       SGRs.   Stock  X11R6  versions did not recognize the color-setting SGRs&lt;br /&gt;       until the X11R6.8  release,  which  incorporated  XFree86  xterm.   All&lt;br /&gt;       ECMA-48 CSI sequences recognized by Linux are also recognized by xterm,&lt;br /&gt;       however xterm implements several ECMA-48 and DEC control sequences  not&lt;br /&gt;       recognized by Linux.&lt;br /&gt;&lt;br /&gt;       The  xterm  program  recognizes  all  of the DEC Private Mode sequences&lt;br /&gt;       listed above, but none of the Linux private-mode sequences.   For  dis-&lt;br /&gt;       cussion  of xterm’s own private-mode sequences, refer to the Xterm Con-&lt;br /&gt;       trol Sequences document by Edward Moy, Stephen Gildea,  and  Thomas  E.&lt;br /&gt;       Dickey available with the X distribution.  That document, though terse,&lt;br /&gt;       is much longer than this manual page.  For a chronological overview,&lt;br /&gt;&lt;br /&gt;              http://invisible-island.net/xterm/xterm.log.html&lt;br /&gt;&lt;br /&gt;       details changes to xterm.&lt;br /&gt;&lt;br /&gt;       The vttest program&lt;br /&gt;&lt;br /&gt;              http://invisible-island.net/vttest/&lt;br /&gt;&lt;br /&gt;       demonstrates many of these control sequences.  The xterm source distri-&lt;br /&gt;       bution also contains sample scripts which exercise other features.&lt;br /&gt;&lt;br /&gt;NOTE&lt;br /&gt;       ESC 8 (DECRC) is not able to restore the character set changed with ESC&lt;br /&gt;       %.&lt;br /&gt;&lt;br /&gt;BUGS&lt;br /&gt;       In 2.0.23, CSI  is  broken,  and  NUL  is  not  ignored  inside  escape&lt;br /&gt;       sequences.&lt;br /&gt;&lt;br /&gt;       Some   older  kernel  versions  (after  2.0)  interpret  8-bit  control&lt;br /&gt;       sequences.  These "C1 controls"  use  codes  between  128  and  159  to&lt;br /&gt;       replace  ESC [, ESC ] and similar two-byte control sequence initiators.&lt;br /&gt;       There are fragments of that in modern  kernels  (either  overlooked  or&lt;br /&gt;       broken  by  changes to support UTF-8), but the implementation is incom-&lt;br /&gt;       plete and should be regarded as unreliable.&lt;br /&gt;&lt;br /&gt;       Linux "private mode" sequences do not follow the rules in  ECMA-48  for&lt;br /&gt;       private  mode control sequences.  In particular, those ending with ] do&lt;br /&gt;       not use a  standard  terminating  character.   The  OSC  (set  palette)&lt;br /&gt;       sequence is a greater problem, since xterm may interpret this as a con-&lt;br /&gt;       trol sequence which requires a string terminator (ST).  Unlike the set-&lt;br /&gt;       term  sequences  which  will be ignored (since they are invalid control&lt;br /&gt;       sequences), the palette sequence will make xterm appear to hang (though&lt;br /&gt;       pressing  the  return-key  will fix that).  To accommodate applications&lt;br /&gt;       which have been hardcoded to use Linux control sequences, set the xterm&lt;br /&gt;       resource brokenLinuxOSC to true.&lt;br /&gt;&lt;br /&gt;       An  older  version  of  this document implied that Linux recognizes the&lt;br /&gt;       ECMA-48 control sequence for invisible text.  It is ignored.&lt;br /&gt;&lt;br /&gt;SEE ALSO&lt;br /&gt;       console(4), console_ioctl(4), charsets(7)&lt;br /&gt;&lt;br /&gt;Linux                             2006-05-29                  CONSOLE_CODES(4)&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;5. &amp;lt;ctrl+v&amp;gt; 然后按组合键 可以在终端输入对应的转义符号。&lt;br /&gt;   比如：&lt;br /&gt;   &amp;lt;ctrl+v&amp;gt;&amp;lt;escape&amp;gt; 终端会显示^[, 已经将&lt;escape&gt;的控制符号输入&lt;br /&gt;&lt;br /&gt;6. grotty&lt;br /&gt;   groff driver for typewriter-like devices&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5347288948477829359-6631043738761526951?l=yoblooc.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yoblooc.blogspot.com/feeds/6631043738761526951/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5347288948477829359&amp;postID=6631043738761526951' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5347288948477829359/posts/default/6631043738761526951'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5347288948477829359/posts/default/6631043738761526951'/><link rel='alternate' type='text/html' href='http://yoblooc.blogspot.com/2008/10/usage-of-linux-normal-commands.html' title='Usage of Linux normal commands'/><author><name>j.z</name><uri>http://www.blogger.com/profile/15855068428842751244</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5347288948477829359.post-2482927581591486513</id><published>2008-10-23T18:14:00.000-07:00</published><updated>2010-02-23T00:19:21.628-08:00</updated><title type='text'>Samba</title><content type='html'>&lt;pre&gt;&lt;br /&gt;1. findnmb&lt;br /&gt;列出当前子网内提供samba服务的主机&lt;br /&gt;&lt;br /&gt;2. smbclient -L { IP | NETBIOS NAME }&lt;br /&gt;查看主机上的SMB资源名称&lt;br /&gt;&lt;br /&gt;3. smbstatus&lt;br /&gt;查看当前的连接（包括没有权限的访问连接）&lt;br /&gt;   -b  简要信息&lt;br /&gt;   -v  列出详细信息&lt;br /&gt;   其它参数略&lt;br /&gt;&lt;br /&gt;4. mount //IP/sharename /mountpath -o username=XXXX&lt;br /&gt;访问资源&lt;br /&gt;&lt;br /&gt;5. smb.conf&lt;br /&gt;  1) &lt;br /&gt;   [global]&lt;br /&gt;    security = share  &lt;-----针对window用户&lt;br /&gt;    security = user   &lt;-----window系统会使用当前windows登录用户, 除非windows用户与samba服务器用户名称相同，或者访问smb服务器时弹出登录窗口？？？&lt;br /&gt;&lt;br /&gt;  2)&lt;br /&gt;    [global]&lt;br /&gt;    username map = /xxxx/xxxx/file&lt;br /&gt;    file格式：&lt;br /&gt;     系统用户名称 = smb登录用户名1, smb登录用户名2, ...&lt;br /&gt;&lt;br /&gt;    登录流程：&lt;br /&gt;&lt;br /&gt;         smb登录用户名1----&gt;---+&lt;br /&gt;                               |&lt;br /&gt;                               +----&gt;--- 系统用户(密码为smbpasswd设置的)&lt;br /&gt;                               |&lt;br /&gt;         smb登录用户名2----&gt;---+&lt;br /&gt;&lt;br /&gt;    file文件内没有映射的用户与系统同名用户权限相同。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;6. smbpasswd&lt;br /&gt;   增加，修改可以访问smb资源用户密码。&lt;br /&gt;   smb用户与samba服务器用户权限相同（没有使用username map前提）。&lt;br /&gt;&lt;br /&gt;7. tdbdump&lt;br /&gt;   dump tdb格式文件内容&lt;br /&gt;&lt;br /&gt;8. windows下切换smb登录用户&lt;br /&gt;   net use \\X.X.X.X\IPC$ /delete&lt;br /&gt;   重新敲入\\X.X.X.X\会又弹出登录窗口。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;示例&lt;br /&gt;smb.conf&lt;br /&gt;[global]&lt;br /&gt;        workgroup = mygroup&lt;br /&gt;        server string = Samba Server Version %v&lt;br /&gt;        auth methods = sam   &lt;---- 不允许非法用户或guest登录&lt;br /&gt;        security = user      &lt;---- windows下访问smb服务器会弹出窗口，登录后会在顶层显示出与用户名相同的共享文件夹&lt;br /&gt;        passdb backend = tdbsam&lt;br /&gt;        cups options = raw&lt;br /&gt;        browseable = yes&lt;br /&gt;        log file = /var/log/samba/%m.log&lt;br /&gt;        dos charset = cp950  &lt;---- GBK显示&lt;br /&gt;        unix charset = utf8   &lt;---- 如果是gbk, 则用gbk&lt;br /&gt;        display charset = utf8&lt;br /&gt;[homes]&lt;br /&gt;        comment = Home Directories&lt;br /&gt;        path = /var/lib/samba/%u&lt;br /&gt;        browseable = no      &lt;---- yes, 会显示homes共享名&lt;br /&gt;        writeable = yes&lt;br /&gt;[printers]&lt;br /&gt;        comment = All Printers&lt;br /&gt;        path = /var/spool/samba&lt;br /&gt;        browseable = no&lt;br /&gt;        printable = yes&lt;br /&gt;[upload]&lt;br /&gt;        comment = Users upload &lt;br /&gt;        path = /var/lib/samba&lt;br /&gt;        browseable = yes&lt;br /&gt;        writeable = yes&lt;br /&gt;&lt;br /&gt;service smb restart重启。&lt;br /&gt;在winxp浏览窗口敲入\\10.5.1.241\, 弹出登录窗口，用test用户登录后,目录如下：&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_EM4SLsllzP0/SQKqpacHAKI/AAAAAAAAEj8/msguTYJpjng/s1600-h/smb.JPG"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 116px;" src="http://1.bp.blogspot.com/_EM4SLsllzP0/SQKqpacHAKI/AAAAAAAAEj8/msguTYJpjng/s320/smb.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5260954943170740386" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;实际test目录在upload共享目录下。&lt;br /&gt;&lt;br /&gt;■遇到问题&lt;br /&gt;在test目录下增加，删除操作有时不能及时刷新，需要手动F5进行。&lt;br /&gt;Samba版本Version 3.0.28-1.el5_2.1。&lt;br /&gt;（可能和网络状况有关，linux desktop下没有发现。）&lt;br /&gt;WinXP下建立如下注册项，&lt;br /&gt;[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer]&lt;br /&gt;"NoSimpleNetIDList"=dword:00000001&lt;br /&gt;或许会改变。我没严格测试过。&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5347288948477829359-2482927581591486513?l=yoblooc.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yoblooc.blogspot.com/feeds/2482927581591486513/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5347288948477829359&amp;postID=2482927581591486513' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5347288948477829359/posts/default/2482927581591486513'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5347288948477829359/posts/default/2482927581591486513'/><link rel='alternate' type='text/html' href='http://yoblooc.blogspot.com/2008/10/samba.html' title='Samba'/><author><name>j.z</name><uri>http://www.blogger.com/profile/15855068428842751244</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_EM4SLsllzP0/SQKqpacHAKI/AAAAAAAAEj8/msguTYJpjng/s72-c/smb.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5347288948477829359.post-4577854201585712442</id><published>2008-10-16T00:41:00.001-07:00</published><updated>2008-10-22T22:39:38.434-07:00</updated><title type='text'>Linux X Window System运行原理与启动过程</title><content type='html'>http://www.host01.com/article/server/00070002/062140909549426.htm&lt;br /&gt;http://en.wikipedia.org/wiki/X_protocol&lt;br /&gt;http://en.wikipedia.org/wiki/Windowing_system&lt;br /&gt;&lt;br /&gt;Following is a example. I wrote it for testing.&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;#!/bin/sh&lt;br /&gt;function w2term&lt;br /&gt;{&lt;br /&gt;   pid=$1&lt;br /&gt;   valid=`ps -p $pid | wc -l`&lt;br /&gt;   if [ $valid -eq 2 ]; then&lt;br /&gt;      ttyname="/dev/""`ps --ppid $pid -o tty | tail -n1`"&lt;br /&gt;      if [ -w $ttyname ]; then&lt;br /&gt;         echo `date "+%Y%m%d %k:%M:%S"` now! &gt; $ttyname&lt;br /&gt;         exit 0&lt;br /&gt;      fi&lt;br /&gt;   fi&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;export PATH="/bin:/usr/bin"&lt;br /&gt;&lt;br /&gt;pidfile="/tmp/screen_term.pid"&lt;br /&gt;if [ -f $pidfile ]; then&lt;br /&gt;   pid=`cat $pidfile`&lt;br /&gt;   w2term $pid&lt;br /&gt;fi&lt;br /&gt;&lt;br /&gt;xterm -mesg -display :0 &gt;/dev/null &amp;&lt;br /&gt;backjob=$!&lt;br /&gt;echo $backjob &gt; $pidfile&lt;br /&gt;w2term $backjob&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Within a console, I execute "#sh mytest.sh", then xterm window popup in my desktop.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5347288948477829359-4577854201585712442?l=yoblooc.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yoblooc.blogspot.com/feeds/4577854201585712442/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5347288948477829359&amp;postID=4577854201585712442' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5347288948477829359/posts/default/4577854201585712442'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5347288948477829359/posts/default/4577854201585712442'/><link rel='alternate' type='text/html' href='http://yoblooc.blogspot.com/2008/10/linux-x-window-system.html' title='Linux X Window System运行原理与启动过程'/><author><name>j.z</name><uri>http://www.blogger.com/profile/15855068428842751244</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5347288948477829359.post-7542213201419985853</id><published>2008-10-10T22:45:00.000-07:00</published><updated>2008-10-10T22:47:33.090-07:00</updated><title type='text'>Embeded linux distribution</title><content type='html'>http://www.imedialinux.com/&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5347288948477829359-7542213201419985853?l=yoblooc.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yoblooc.blogspot.com/feeds/7542213201419985853/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5347288948477829359&amp;postID=7542213201419985853' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5347288948477829359/posts/default/7542213201419985853'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5347288948477829359/posts/default/7542213201419985853'/><link rel='alternate' type='text/html' href='http://yoblooc.blogspot.com/2008/10/embeded-linux-distribution.html' title='Embeded linux distribution'/><author><name>j.z</name><uri>http://www.blogger.com/profile/15855068428842751244</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5347288948477829359.post-1237470751562287561</id><published>2008-10-10T22:41:00.000-07:00</published><updated>2008-10-10T22:45:08.193-07:00</updated><title type='text'>Get sound from remote Linux/Unix machine on your window client</title><content type='html'>http://www.liquid-reality.de/display/liquid/ESound+for+Windows&lt;br /&gt;http://www.pulseaudio.org/&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5347288948477829359-1237470751562287561?l=yoblooc.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yoblooc.blogspot.com/feeds/1237470751562287561/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5347288948477829359&amp;postID=1237470751562287561' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5347288948477829359/posts/default/1237470751562287561'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5347288948477829359/posts/default/1237470751562287561'/><link rel='alternate' type='text/html' href='http://yoblooc.blogspot.com/2008/10/get-sound-from-remote-linuxunix-on-your.html' title='Get sound from remote Linux/Unix machine on your window client'/><author><name>j.z</name><uri>http://www.blogger.com/profile/15855068428842751244</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5347288948477829359.post-5678835342393481408</id><published>2008-09-09T23:10:00.000-07:00</published><updated>2008-09-09T23:17:14.430-07:00</updated><title type='text'>Windows Live OneCare Family Safety's Problem</title><content type='html'>I forget when and why I installed "Windows Live OneCare Family Safety". But now it becomes my nightmare. &lt;br /&gt;I have spended a lot of time to find why I cann't view a web site. Finally I find all because of shutdown of "Windows Live OneCare Family Safety" service.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5347288948477829359-5678835342393481408?l=yoblooc.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yoblooc.blogspot.com/feeds/5678835342393481408/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5347288948477829359&amp;postID=5678835342393481408' title='1 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5347288948477829359/posts/default/5678835342393481408'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5347288948477829359/posts/default/5678835342393481408'/><link rel='alternate' type='text/html' href='http://yoblooc.blogspot.com/2008/09/windows-live-onecare-family-safetys.html' title='Windows Live OneCare Family Safety&apos;s Problem'/><author><name>j.z</name><uri>http://www.blogger.com/profile/15855068428842751244</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5347288948477829359.post-6839790181755312923</id><published>2008-08-26T20:46:00.001-07:00</published><updated>2009-03-16T20:04:09.528-07:00</updated><title type='text'>sendmail notes</title><content type='html'>&lt;pre&gt;&lt;br /&gt;1. sendmail parameters&lt;br /&gt;   1) sendmail -Cclient.cf -d21.12 -bt&lt;br /&gt;     The -d21.12 switch tells sendmail to print each rule as it is processed.&lt;br /&gt;&lt;br /&gt;   2) sendmail -d0.1 -bt &lt;br /&gt;     The -d0.1 debugging command-line switch, which tells sendmail to print the identity of the local machine&lt;br /&gt;&lt;br /&gt;   3) sendmail -d37.1 -Cclient.cf -bt &lt; /dev/null&lt;br /&gt;     The -d37.1 will cause each option to be printed as it is found in the client.cf file&lt;br /&gt;&lt;br /&gt;   4) &gt; =S ruleset (-bt)&lt;br /&gt;     View rules of ruleset&lt;br /&gt;  &lt;br /&gt;   5) &gt; .Cw localhost (-bt)&lt;br /&gt;     The .C command (new with V8.7) tells sendmail to temporarily add a word to a &lt;br /&gt;class. In this case we added the word localhost to the class w.&lt;br /&gt;&lt;br /&gt;2. The flow of addresses through rule sets&lt;br /&gt;&lt;br /&gt;                                     +----+&lt;br /&gt;                                 +--&gt;| 0  |----&gt;delivery agent&lt;br /&gt;                                 |   +----+&lt;br /&gt;                                 |   +----+   +----+ &lt;br /&gt;                                 +--&gt;| 2  |--&gt;| R= |--&gt;&lt;br /&gt;                                 |   +----+   +----+  |&lt;br /&gt;input  address           +----+  |                    |   +----+&lt;br /&gt;sender&amp;recipient  =====&gt; | 3  |--+                    +--&gt;| 4  |----&gt;return&lt;br /&gt;                         +----+  |                    |   +----+&lt;br /&gt;                                 |   +----+   +----+  |&lt;br /&gt;                                 +--&gt;| 1  |--&gt;| S= |--&gt;&lt;br /&gt;                                     +----+   +----+&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5347288948477829359-6839790181755312923?l=yoblooc.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yoblooc.blogspot.com/feeds/6839790181755312923/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5347288948477829359&amp;postID=6839790181755312923' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5347288948477829359/posts/default/6839790181755312923'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5347288948477829359/posts/default/6839790181755312923'/><link rel='alternate' type='text/html' href='http://yoblooc.blogspot.com/2008/08/sendmail-notes.html' title='sendmail notes'/><author><name>j.z</name><uri>http://www.blogger.com/profile/15855068428842751244</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5347288948477829359.post-2372016686518857975</id><published>2008-07-28T20:33:00.000-07:00</published><updated>2008-07-28T20:42:20.086-07:00</updated><title type='text'>port forward using ssh</title><content type='html'>For example, I have A, B two hosts. &lt;br /&gt;I can login to host A using ssh from remote terminal now, but only can access host B  from A . A, B are in the same local network.&lt;br /&gt;I run "ssh -f -g -N -L [bind_address:]port:host:hostport [user@]host" at host A.&lt;br /&gt;After that, I can direct access host B from remote terminal.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5347288948477829359-2372016686518857975?l=yoblooc.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yoblooc.blogspot.com/feeds/2372016686518857975/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5347288948477829359&amp;postID=2372016686518857975' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5347288948477829359/posts/default/2372016686518857975'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5347288948477829359/posts/default/2372016686518857975'/><link rel='alternate' type='text/html' href='http://yoblooc.blogspot.com/2008/07/port-forward-using-ssh.html' title='port forward using ssh'/><author><name>j.z</name><uri>http://www.blogger.com/profile/15855068428842751244</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5347288948477829359.post-4097387331143391915</id><published>2008-07-24T22:32:00.001-07:00</published><updated>2008-07-24T22:32:58.734-07:00</updated><title type='text'>routing software suite</title><content type='html'>http://www.quagga.net/&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5347288948477829359-4097387331143391915?l=yoblooc.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yoblooc.blogspot.com/feeds/4097387331143391915/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5347288948477829359&amp;postID=4097387331143391915' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5347288948477829359/posts/default/4097387331143391915'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5347288948477829359/posts/default/4097387331143391915'/><link rel='alternate' type='text/html' href='http://yoblooc.blogspot.com/2008/07/routing-software-suite.html' title='routing software suite'/><author><name>j.z</name><uri>http://www.blogger.com/profile/15855068428842751244</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5347288948477829359.post-4837923262408493611</id><published>2008-06-18T23:33:00.001-07:00</published><updated>2008-06-18T23:33:34.386-07:00</updated><title type='text'>http://www.linuxguruz.com/</title><content type='html'>http://www.linuxguruz.com/&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5347288948477829359-4837923262408493611?l=yoblooc.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yoblooc.blogspot.com/feeds/4837923262408493611/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5347288948477829359&amp;postID=4837923262408493611' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5347288948477829359/posts/default/4837923262408493611'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5347288948477829359/posts/default/4837923262408493611'/><link rel='alternate' type='text/html' href='http://yoblooc.blogspot.com/2008/06/httpwwwlinuxguruzcom.html' title='http://www.linuxguruz.com/'/><author><name>j.z</name><uri>http://www.blogger.com/profile/15855068428842751244</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5347288948477829359.post-7624460877923720358</id><published>2008-06-17T00:20:00.000-07:00</published><updated>2008-06-18T23:34:31.301-07:00</updated><title type='text'>查看Berkeley hash db内容</title><content type='html'>1.&lt;br /&gt;makemap -u hash xxxx.db&lt;br /&gt;&lt;br /&gt;2.&lt;br /&gt;db_dump -d a xxx.db&lt;br /&gt;db_dump -p xxx.db&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5347288948477829359-7624460877923720358?l=yoblooc.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yoblooc.blogspot.com/feeds/7624460877923720358/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5347288948477829359&amp;postID=7624460877923720358' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5347288948477829359/posts/default/7624460877923720358'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5347288948477829359/posts/default/7624460877923720358'/><link rel='alternate' type='text/html' href='http://yoblooc.blogspot.com/2008/06/berkeley-db.html' title='查看Berkeley hash db内容'/><author><name>j.z</name><uri>http://www.blogger.com/profile/15855068428842751244</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5347288948477829359.post-2967907409837103684</id><published>2008-04-01T06:20:00.000-07:00</published><updated>2008-04-01T06:21:18.664-07:00</updated><title type='text'>YoLinux: Linux Audio Streaming</title><content type='html'>http://www.yolinux.com/TUTORIALS/LinuxTutorialAudioStreaming.html&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5347288948477829359-2967907409837103684?l=yoblooc.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yoblooc.blogspot.com/feeds/2967907409837103684/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5347288948477829359&amp;postID=2967907409837103684' title='1 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5347288948477829359/posts/default/2967907409837103684'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5347288948477829359/posts/default/2967907409837103684'/><link rel='alternate' type='text/html' href='http://yoblooc.blogspot.com/2008/04/yolinux-linux-audio-streaming.html' title='YoLinux: Linux Audio Streaming'/><author><name>j.z</name><uri>http://www.blogger.com/profile/15855068428842751244</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5347288948477829359.post-6523276159215761944</id><published>2008-04-01T05:56:00.000-07:00</published><updated>2008-04-01T05:57:23.926-07:00</updated><title type='text'>The Network Audio System (NAS)</title><content type='html'>http://www.radscan.com/nas.html&lt;br /&gt;The Network Audio System is a network transparent, client/server audio transport system. It can be described as the audio equivalent of an X server.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5347288948477829359-6523276159215761944?l=yoblooc.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yoblooc.blogspot.com/feeds/6523276159215761944/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5347288948477829359&amp;postID=6523276159215761944' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5347288948477829359/posts/default/6523276159215761944'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5347288948477829359/posts/default/6523276159215761944'/><link rel='alternate' type='text/html' href='http://yoblooc.blogspot.com/2008/04/network-audio-system-nas.html' title='The Network Audio System (NAS)'/><author><name>j.z</name><uri>http://www.blogger.com/profile/15855068428842751244</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5347288948477829359.post-2242396027466640354</id><published>2008-03-31T20:35:00.001-07:00</published><updated>2008-03-31T20:40:03.358-07:00</updated><title type='text'>VLC media player</title><content type='html'>VLC media player - the cross-platform media player and streaming server&lt;br /&gt;&lt;a href="http://www.videolan.org/vlc/"&gt;http://www.videolan.org/vlc/&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5347288948477829359-2242396027466640354?l=yoblooc.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yoblooc.blogspot.com/feeds/2242396027466640354/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5347288948477829359&amp;postID=2242396027466640354' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5347288948477829359/posts/default/2242396027466640354'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5347288948477829359/posts/default/2242396027466640354'/><link rel='alternate' type='text/html' href='http://yoblooc.blogspot.com/2008/03/optchina-seo-seo-baidu-9-35800000-12400.html' title='VLC media player'/><author><name>j.z</name><uri>http://www.blogger.com/profile/15855068428842751244</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5347288948477829359.post-4201105689542181943</id><published>2008-03-16T20:29:00.000-07:00</published><updated>2008-03-16T20:46:45.514-07:00</updated><title type='text'>postgre迁移时，如何防止乱码</title><content type='html'>从一个postgre数据库迁移数据到另一个postgre数据库，不注意一些细节问题，会导致多字节编码文字出现乱码。&lt;br /&gt;&lt;br /&gt;在psql提示符下&lt;br /&gt;&gt;show all;&lt;br /&gt;&lt;pre&gt;&lt;small&gt;&lt;br /&gt;              name               |    setting     |                                         description                                          &lt;br /&gt;---------------------------------+----------------+----------------------------------------------------------------------------------------------&lt;br /&gt; client_encoding                 | sql_ascii      | Sets the client's character set encoding.&lt;br /&gt; lc_collate                      | ja_JP.UTF-8    | Shows the collation order locale.&lt;br /&gt; lc_ctype                        | ja_JP.UTF-8    | Shows the character classification and case conversion locale.&lt;br /&gt; lc_messages                     | ja_JP.UTF-8    | Sets the language in which messages are displayed.&lt;br /&gt; lc_monetary                     | ja_JP.UTF-8    | Sets the locale for formatting monetary amounts.&lt;br /&gt; lc_numeric                      | ja_JP.UTF-8    | Sets the locale for formatting numbers.&lt;br /&gt; lc_time                         | ja_JP.UTF-8    | Sets the locale for formatting date and time values.&lt;br /&gt;&lt;br /&gt;&lt;/small&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;注意以上几项在两个postgre数据库中是否一致。　&lt;br /&gt;&lt;br /&gt;新建的postgre服务，很容易更改。&lt;br /&gt;初始化时，下面这样初始化就可以了。&lt;br /&gt;&lt;pre&gt;&lt;small&gt;&lt;br /&gt;su - postgres&lt;br /&gt;initdb  --encoding=SQL_ASCII --locale=ja_JP.UTF-8 --lc-collate=ja_JP.UTF-8 --lc-ctype=ja_JP.UTF-8  -D /var/lib/pgsql/data/&lt;br /&gt;&lt;/small&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5347288948477829359-4201105689542181943?l=yoblooc.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yoblooc.blogspot.com/feeds/4201105689542181943/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5347288948477829359&amp;postID=4201105689542181943' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5347288948477829359/posts/default/4201105689542181943'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5347288948477829359/posts/default/4201105689542181943'/><link rel='alternate' type='text/html' href='http://yoblooc.blogspot.com/2008/03/postgre.html' title='postgre迁移时，如何防止乱码'/><author><name>j.z</name><uri>http://www.blogger.com/profile/15855068428842751244</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5347288948477829359.post-5932813742180840090</id><published>2008-03-14T02:26:00.000-07:00</published><updated>2008-03-14T03:04:46.382-07:00</updated><title type='text'>[error] (20014)Error string not specified yet: Cannot store SSL session to DBM file `/usr/local/apache2/logs/XXXX-ssl_scache'</title><content type='html'>今天做了一次紧急调查，结果比较有意思，写下来。&lt;br /&gt;一个网站的https访问显示不出页面，用http访问是正常的。https也不是全部都不能用，只有要求登录的页面才显示不了页面。&lt;br /&gt;该网站使用两台主机做负载。&lt;br /&gt;&lt;br /&gt;试了试，确定用https只能访问到其中一台，另一台访问不到。&lt;br /&gt;&lt;br /&gt;根据apache设置，tail -f 错误日志&lt;br /&gt;...&lt;br /&gt;[Fri Mar 14 14:22:50 2008][error] (20014)Error string not specified yet: Cannot store SSL session to DBM file `/usr/local/apache2/logs/XXXX-ssl_scache'&lt;br /&gt;...&lt;br /&gt;&lt;br /&gt;不明白，根据错误信息google一下，找到有限的几条，只有提问的，没有回答的。&lt;br /&gt;&lt;br /&gt;在服务器上想多种办法，反复验证，没有结论。&lt;br /&gt;&lt;br /&gt;想了一个办法，用fetch https://10.x.x.x/xx/ 一台台测，　其中一台正常，另一台也就是从外部总访问那台出错。&lt;br /&gt;&lt;br /&gt;我蒙了，apache版本都一样，只有openssl版本不同。正常的是0.9.7e, 不正常的是0.9.7d。&lt;br /&gt;难道是openssl bug。上官方网站查更新日志，比较0.9.7d -- 0.9.7e有什么不同，没发现上面的错误情况。&lt;br /&gt;&lt;br /&gt;我硬着头皮劝客户，改为https只访问正常那台。&lt;br /&gt;&lt;br /&gt;客户却不着急恢复正常访问，坚持要查出原因。（呵呵，也不知道为什么还称为紧急对应）&lt;br /&gt;&lt;br /&gt;无意间df了一下，恍然大悟！&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&gt; df -h&lt;br /&gt;Filesystem     Size    Used   Avail Capacity  Mounted on&lt;br /&gt;/dev/ad4s1a    989M     38M    872M     4%    /&lt;br /&gt;devfs          1.0K    1.0K      0B   100%    /dev&lt;br /&gt;/dev/ad4s1e    989M     64M    847M     7%    /tmp&lt;br /&gt;/dev/ad4s1f     67G     64G   -1.6G   103%    /usr&lt;br /&gt;/dev/ad4s1d    989M    8.2M    902M     1%    /var&lt;br /&gt;&lt;br /&gt;/dev/ad4s1f     67G     64G   -1.6G   103%    /usr　&lt;-- 磁盘都满了，也不知道管理员干什么吃的。&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;剩下好做了，删除一些过时的日志。正常了，呵呵....&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5347288948477829359-5932813742180840090?l=yoblooc.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yoblooc.blogspot.com/feeds/5932813742180840090/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5347288948477829359&amp;postID=5932813742180840090' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5347288948477829359/posts/default/5932813742180840090'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5347288948477829359/posts/default/5932813742180840090'/><link rel='alternate' type='text/html' href='http://yoblooc.blogspot.com/2008/03/error-20014error-string-not-specified.html' title='[error] (20014)Error string not specified yet: Cannot store SSL session to DBM file `/usr/local/apache2/logs/XXXX-ssl_scache&apos;'/><author><name>j.z</name><uri>http://www.blogger.com/profile/15855068428842751244</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5347288948477829359.post-8812111911747974066</id><published>2008-03-12T21:10:00.000-07:00</published><updated>2008-03-12T21:13:09.539-07:00</updated><title type='text'>checker</title><content type='html'>&lt;a href="http://valgrind.org/"&gt;Valgrind&lt;/a&gt; is an award-winning instrumentation framework for building dynamic analysis tools. There are Valgrind tools that can automatically detect many memory management and threading bugs, and profile your programs in detail. You can also use Valgrind to build new tools.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5347288948477829359-8812111911747974066?l=yoblooc.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yoblooc.blogspot.com/feeds/8812111911747974066/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5347288948477829359&amp;postID=8812111911747974066' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5347288948477829359/posts/default/8812111911747974066'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5347288948477829359/posts/default/8812111911747974066'/><link rel='alternate' type='text/html' href='http://yoblooc.blogspot.com/2008/03/memory-checker.html' title='checker'/><author><name>j.z</name><uri>http://www.blogger.com/profile/15855068428842751244</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5347288948477829359.post-8243249595029960340</id><published>2008-03-12T20:37:00.000-07:00</published><updated>2008-03-12T20:55:26.893-07:00</updated><title type='text'>调用freetds</title><content type='html'>&lt;a href="http://www.freetds.org/"&gt;freetds&lt;/a&gt;&lt;a href="ftp://ftp.ibiblio.org/pub/Linux/ALPHA/freetds/stable/freetds-stable.tgz"&gt;0.64版&lt;/a&gt;，是目前的稳定版。&lt;br /&gt;以下是调用其中的dblib库的方法（freetds缺省方式安装）。&lt;br /&gt;&lt;br /&gt;编译程序：&lt;br /&gt;头文件搜索路径：　　　-I/usr/local/include&lt;br /&gt;库搜索路径：　　　　　-L/usr/local/lib&lt;br /&gt;链接库：　　　　　　　-lsybdb&lt;br /&gt;&lt;br /&gt;发布程序：&lt;br /&gt;只需要发布libsybdb.so.5.0.0库　&lt;br /&gt;ln -s libsybdb.so.5.0.0 libsybdb.so.5&lt;br /&gt;&lt;br /&gt;调用程序：&lt;br /&gt;export LD_LIBRARY_PATH=$libpath TDSVER=8.0 TDSPORT=1433; your_program;&lt;br /&gt;以上是访问Ms Sql Server2005的环境变量设置。&lt;br /&gt;&lt;br /&gt;使用问题：&lt;br /&gt;dblib库仍不完善。如果使用数据缓冲区，用dbgetrow(...)函数跳转到指定行后，使用dbbind(...)函数绑定的变量可以正确得到相应行的值，使用dbdata(...)函数无法正确得到。&lt;br /&gt;原因：&lt;br /&gt;看freetds源代码会明白，dbdata(...)使用了XXXXX-&gt;currentrow这种方式，　而dbgetrow(...)没做相关的设置。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5347288948477829359-8243249595029960340?l=yoblooc.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yoblooc.blogspot.com/feeds/8243249595029960340/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5347288948477829359&amp;postID=8243249595029960340' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5347288948477829359/posts/default/8243249595029960340'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5347288948477829359/posts/default/8243249595029960340'/><link rel='alternate' type='text/html' href='http://yoblooc.blogspot.com/2008/03/freetds.html' title='调用freetds'/><author><name>j.z</name><uri>http://www.blogger.com/profile/15855068428842751244</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5347288948477829359.post-3351242582888239125</id><published>2008-03-12T20:36:00.000-07:00</published><updated>2008-03-12T20:37:36.798-07:00</updated><title type='text'>GNU checker - Summary</title><content type='html'>&lt;a href="http://savannah.nongnu.org/projects/checker/"&gt;http://savannah.nongnu.org/projects/checker/&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5347288948477829359-3351242582888239125?l=yoblooc.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yoblooc.blogspot.com/feeds/3351242582888239125/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5347288948477829359&amp;postID=3351242582888239125' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5347288948477829359/posts/default/3351242582888239125'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5347288948477829359/posts/default/3351242582888239125'/><link rel='alternate' type='text/html' href='http://yoblooc.blogspot.com/2008/03/gnu-checker-summary.html' title='GNU checker - Summary'/><author><name>j.z</name><uri>http://www.blogger.com/profile/15855068428842751244</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5347288948477829359.post-4997757160324385601</id><published>2008-03-11T23:26:00.000-07:00</published><updated>2008-03-11T23:27:09.622-07:00</updated><title type='text'>the Linux Cross Reference</title><content type='html'>&lt;a href="http://lxr.linux.no/"&gt;http://lxr.linux.no/&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5347288948477829359-4997757160324385601?l=yoblooc.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yoblooc.blogspot.com/feeds/4997757160324385601/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5347288948477829359&amp;postID=4997757160324385601' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5347288948477829359/posts/default/4997757160324385601'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5347288948477829359/posts/default/4997757160324385601'/><link rel='alternate' type='text/html' href='http://yoblooc.blogspot.com/2008/03/linux-cross-reference.html' title='the Linux Cross Reference'/><author><name>j.z</name><uri>http://www.blogger.com/profile/15855068428842751244</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5347288948477829359.post-5806949509525726257</id><published>2008-03-02T17:48:00.000-08:00</published><updated>2008-03-02T22:12:39.100-08:00</updated><title type='text'>下载文件名乱码的部分解决方案</title><content type='html'>所谓部分解决方案，是指方案并不能对所有的浏览器都有效。&lt;br /&gt;究其原因，不同的浏览器实现的机制不同，是否对此应该制订一个统一的标准呢？期待......&lt;br /&gt;从网页上下载文件是大家都曾做过的，如果下载的文件名称是非ascii字符，也就是多字节编码，不同浏览器弹出的下载提示窗口以及另存文字名，有的会显示正常，有的则会显示乱码。&lt;br /&gt;闲话少说了，言归正传&lt;br /&gt;1. 下载文件的实现机制(利用http　header), 下面是一个例子&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;        header("Content-type: application/x-csv");&lt;br /&gt;        header("Content-disposition: attachment; filename=".$file_name);&lt;br /&gt;        header("Content-length: ". strlen($csv_lines));&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;2. 解决乱码问题&lt;br /&gt;　1) 针对不同的浏览器写不同的代码。&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;        $csv_lines = mb_convert_encoding($csv_lines, "SJIS", "EUC-JP");&lt;br /&gt;        if(strpos(strtoupper($_SERVER["HTTP_USER_AGENT"]), "FIREFOX"))&lt;br /&gt;        {&lt;br /&gt;            $file_name = "登録者.csv';&lt;br /&gt;        }&lt;br /&gt;        else&lt;br /&gt;        {&lt;br /&gt;            $file_name = mb_convert_encoding("登録者.csv', "SJIS", "EUC-JP");&lt;br /&gt;        }&lt;br /&gt;        header("Content-type: application/x-csv");&lt;br /&gt;        header("Content-disposition: attachment; filename=".$file_name);&lt;br /&gt;        header("Content-length: ". strlen($csv_lines));&lt;br /&gt;　   　（Firefox, IE下测试正常, opera乱码）&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;　以上代码，在不同的编码页面，比如EUC-JP,弹出的下载窗口可以正确显示shift-jis编码的文件名。&lt;br /&gt;&lt;br /&gt;　2) 相同的代码，适用不同的浏览器&lt;br /&gt;　如果不想改代码，比如&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;        $csv_lines = mb_convert_encoding($csv_lines, "SJIS", "EUC-JP");&lt;br /&gt;        $file_name = mb_convert_encoding("登録者.csv', "SJIS", "EUC-JP");&lt;br /&gt;        header("Content-type: application/x-csv");&lt;br /&gt;        header("Content-disposition: attachment; filename=".$file_name);&lt;br /&gt;        header("Content-length: ". strlen($csv_lines));&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;　解决方法为，在点击下载链接时，新打开一个浏览器窗口，编码与下载文件名编码相同。比如都是shift-jis编码，在这个窗口，再弹出下载窗口。&lt;br /&gt;　　(firefox, ie, opera都测试正常）&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;　　a. &amp;lt;a href="http://xxxx.com/d.php" target="_blank"&amp;gt;xxx&amp;lt;/a&amp;gt;&lt;br /&gt;    b.  d.php&lt;br /&gt;        ...&lt;br /&gt;        &amp;lt;meta equiv="Content-Type" content="text/html; charset=SHIFT_JIS"&amp;gt;&lt;br /&gt;        &amp;lt;body onload="" location ="'http://xxxx.com/download.php';"&amp;gt;&lt;br /&gt;    c.  download.php&lt;br /&gt;        $csv_lines = mb_convert_encoding($csv_lines, "SJIS", "EUC-JP");&lt;br /&gt;        $file_name = mb_convert_encoding("登録者.csv', "SJIS", "EUC-JP");&lt;br /&gt;        header("Content-type: application/x-csv");&lt;br /&gt;        header("Content-disposition: attachment; filename=".$file_name);&lt;br /&gt;        header("Content-length: ". strlen($csv_lines));&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;原理：下载页面的编码与下载文件名及文件内容的编码一致，就不会出现乱码&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5347288948477829359-5806949509525726257?l=yoblooc.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yoblooc.blogspot.com/feeds/5806949509525726257/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5347288948477829359&amp;postID=5806949509525726257' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5347288948477829359/posts/default/5806949509525726257'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5347288948477829359/posts/default/5806949509525726257'/><link rel='alternate' type='text/html' href='http://yoblooc.blogspot.com/2008/03/blog-post.html' title='下载文件名乱码的部分解决方案'/><author><name>j.z</name><uri>http://www.blogger.com/profile/15855068428842751244</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5347288948477829359.post-6283326686194528923</id><published>2008-01-23T17:20:00.000-08:00</published><updated>2008-01-23T17:28:13.251-08:00</updated><title type='text'>Stack Overflow Problems Under Windows</title><content type='html'>我的标准C程序在*nix系统下编译及运行正常，在WindowXp下用cygwin下的gcc编译OK后，运行总是出现类似"Segmentation Fault"的错误提示。百思不得其解。后来根据提示信息google一下，总算筛出了有用的信息。&lt;br /&gt;解决方案就是需要手工修改stack大小。&lt;br /&gt;&lt;ul&gt;&lt;li&gt;F:\Microsoft Visual Studio 8\VC\bin&gt;editbin.exe /STACK:32768000 I:\cygwin\my\src\my.exe&lt;/li&gt;&lt;li&gt;F:\Microsoft Visual Studio 8\VC\bin&gt;dumpbin /headers I:\cygwin\my\src\my.exe&lt;/li&gt;&lt;/ul&gt;第一句是调整stack大小，第二句是查看修改后的stack。&lt;br /&gt;&lt;br /&gt;对我有帮助的&lt;a href="http://cs.nyu.edu/exact/core/doc/stackOverflow.txt"&gt;文章链接&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5347288948477829359-6283326686194528923?l=yoblooc.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yoblooc.blogspot.com/feeds/6283326686194528923/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5347288948477829359&amp;postID=6283326686194528923' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5347288948477829359/posts/default/6283326686194528923'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5347288948477829359/posts/default/6283326686194528923'/><link rel='alternate' type='text/html' href='http://yoblooc.blogspot.com/2008/01/stack-overflow-problems-under-windows.html' title='Stack Overflow Problems Under Windows'/><author><name>j.z</name><uri>http://www.blogger.com/profile/15855068428842751244</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5347288948477829359.post-5143825382082633908</id><published>2008-01-09T23:04:00.000-08:00</published><updated>2008-03-16T21:08:11.130-07:00</updated><title type='text'>php调用libcurl库</title><content type='html'>php调用libcurl库不好的地方是：&lt;br /&gt;1. 机器上需要安装libcurl链接库&lt;br /&gt;2. php编译选项中也需要加入--with-curl=[CURL]选项&lt;br /&gt;有点麻烦。&lt;br /&gt;好的地方是：&lt;br /&gt;1. 支持多种协议，简化代码编写&lt;br /&gt;2. 更人性化，傻瓜化，不用重新发明轮子&lt;br /&gt;&lt;br /&gt;以下是小段测试代码：&lt;br /&gt;&lt;span style="font-style: italic;font-size:78%;" &gt;&lt;?php&lt;br /&gt;// create a new cURL resource&lt;br /&gt;$ch = curl_init();&lt;br /&gt;&lt;br /&gt;// set URL and other appropriate options&lt;br /&gt;curl_setopt($ch, CURLOPT_URL, "http://www.xi-soft.com");&lt;br /&gt;curl_setopt($ch, CURLOPT_HEADER, true);&lt;br /&gt;curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);&lt;br /&gt;//curl_setopt($ch, CURLOPT_NOBODY, true);&lt;br /&gt;&lt;br /&gt;// grab URL and pass it to the browser&lt;br /&gt;curl_exec($ch);&lt;br /&gt;&lt;br /&gt;// close cURL resource, and free up system resources&lt;br /&gt;curl_close($ch);&lt;br /&gt;&lt;br /&gt;?&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5347288948477829359-5143825382082633908?l=yoblooc.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yoblooc.blogspot.com/feeds/5143825382082633908/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5347288948477829359&amp;postID=5143825382082633908' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5347288948477829359/posts/default/5143825382082633908'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5347288948477829359/posts/default/5143825382082633908'/><link rel='alternate' type='text/html' href='http://yoblooc.blogspot.com/2008/01/phplibcurl.html' title='php调用libcurl库'/><author><name>j.z</name><uri>http://www.blogger.com/profile/15855068428842751244</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5347288948477829359.post-6521273710947701815</id><published>2008-01-09T22:46:00.000-08:00</published><updated>2008-03-16T20:28:36.600-07:00</updated><title type='text'>PHP调用DOM函数解析网页</title><content type='html'>以下是一小段测试代码：&lt;br /&gt;&lt;span style="font-size:78%;"&gt;&lt;span style="font-style: italic;"&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;$con = file_get_contents("t.html");&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;$tmp = @DOMDocument::loadHTML($con);&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;$encode = $tmp-&gt;actualEncoding;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;echo $encode."\n";&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;if(empty($encode))&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;{&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;        $encode = "GB2312";&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;}&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic bold;"&gt;$con = mb_convert_encoding($con, 'HTML-ENTITIES', $encode);&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;$doc = @DOMDocument::loadHTML($con);&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;//$tags = $doc-&gt;getElementsByTagName('a');&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;//foreach ($tags as $tag) {&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;//      echo $tag-&gt;getAttribute('href').' | '.$tag-&gt;nodeValue."\n";&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;//}&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;#$links = $doc-&gt;getElementsByTagName("link");&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;#foreach( $links as $link)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;#{&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;#       echo $link-&gt;getAttribute('type')." | ".$link-&gt;getAttribute('title')." | ".$link-&gt;getAttribute('href')."\n";&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;#}&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;//$links = $doc-&gt;getElementsByTagName("meta");&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;//foreach( $links as $link)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;//{&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;//      echo $link-&gt;getAttribute('name')." | ".$link-&gt;getAttribute('content')."\n";&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;//}&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;$scripts = $doc-&gt;getElementsByTagName("script");&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;foreach( $scripts as $script)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;{&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;        if($script-&gt;hasAttribute("src"))&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;                echo $script-&gt;getAttribute('src')."\n";&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;}&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;?&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;使用DOM函数解析网页很方便，需要注意的是这一行&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:78%;"&gt;&lt;span style="font-style: italic;"&gt;$con = mb_convert_encoding($con, 'HTML-ENTITIES', $encode);&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;DOM函数对多字节支持得有问题，如果有不能识别的多字节文字，函数会停止继续解析。&lt;br /&gt;不加上面的一行，很容易会发现网页中还有很多内容并没有解析出来。&lt;br /&gt;比如"2000元/m&lt;sup&gt;2&lt;/sup&gt;" , 遇到m&lt;sup&gt;2&lt;/sup&gt;这个多字节字会停止解析。&lt;br /&gt;加&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:78%;"&gt;&lt;span style="font-style: italic;"&gt;$con = mb_convert_encoding($con, 'HTML-ENTITIES', $encode);&lt;/span&gt;&lt;span style="font-size:100%;"&gt;后，解析出来的内容会显示为"2000元/", m&lt;sup&gt;2&lt;/sup&gt;被删掉了，但是整体网页内容完整解析出来了。&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:78%;"&gt;&lt;span style="font-style: italic;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5347288948477829359-6521273710947701815?l=yoblooc.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yoblooc.blogspot.com/feeds/6521273710947701815/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5347288948477829359&amp;postID=6521273710947701815' title='1 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5347288948477829359/posts/default/6521273710947701815'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5347288948477829359/posts/default/6521273710947701815'/><link rel='alternate' type='text/html' href='http://yoblooc.blogspot.com/2008/01/phpdom.html' title='PHP调用DOM函数解析网页'/><author><name>j.z</name><uri>http://www.blogger.com/profile/15855068428842751244</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5347288948477829359.post-596624568734458621</id><published>2007-12-11T02:02:00.000-08:00</published><updated>2007-12-11T02:13:08.429-08:00</updated><title type='text'>window,linux下处理数值溢出的差异</title><content type='html'>题目说大了。其实我没有为此作过完整的分析，只是因缘际会，遇到过一个问题，解决了而已。&lt;br /&gt;32位长的有符号整数，表示范围在 0x0FFFFFFF~0x1FFFFFF 。&lt;br /&gt;如果溢出，window根据我的测试结果，是将超出部分直接截去。Linux是取最近的合法值。&lt;br /&gt;比如正数&gt;0FFFFFF, window是将低24位保留（包括第24位)，高于24位取0,&lt;br /&gt;Linux是直接取0x0FFFFFF。&lt;br /&gt;我是在测试一个发布的取google rank的php程序时，遇到的。&lt;br /&gt;该程序在window平台运行正常，在linux平台无法取到google rank值。&lt;br /&gt;压缩包名称:prank.zip。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5347288948477829359-596624568734458621?l=yoblooc.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yoblooc.blogspot.com/feeds/596624568734458621/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5347288948477829359&amp;postID=596624568734458621' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5347288948477829359/posts/default/596624568734458621'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5347288948477829359/posts/default/596624568734458621'/><link rel='alternate' type='text/html' href='http://yoblooc.blogspot.com/2007/12/windowlinux.html' title='window,linux下处理数值溢出的差异'/><author><name>j.z</name><uri>http://www.blogger.com/profile/15855068428842751244</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5347288948477829359.post-8419779462902964950</id><published>2007-12-09T18:17:00.000-08:00</published><updated>2007-12-09T18:18:06.368-08:00</updated><title type='text'>php程序mysql客户端字符集与mysql db字符集不一致的应对</title><content type='html'>以日文字符集例子说明：&lt;br /&gt;html页面字符集为Shift-jis编码，mysql db对应表的字符集为ujis(即EUC-JP)编码。&lt;br /&gt;&lt;br /&gt;1.连接数据库后执行&lt;br /&gt;mysql_query("set names sjis");&lt;br /&gt;此语句告诉数据库，客户端使用的是sjis字符集编码。&lt;br /&gt;    ----对db执行写操作(UPDATE, INSERT)，mysql服务器端会自动将后续的sql语句转成mysql db 表的字符集编码操作数据库。&lt;br /&gt;    ----对db执行查询操作，mysql服务器端会自动将mysql db表内容转成客户端使用的字符集编码，显示给客户端。&lt;br /&gt;&lt;br /&gt;以上，也就是存储在数据库的内容是按ujis编码保存的，显示的内容则是按shift-jis编码显示的。&lt;br /&gt;不同字符集间的编码转换由mysql服务器端完成，客户端只要执行set names sjis就够了。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5347288948477829359-8419779462902964950?l=yoblooc.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yoblooc.blogspot.com/feeds/8419779462902964950/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5347288948477829359&amp;postID=8419779462902964950' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5347288948477829359/posts/default/8419779462902964950'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5347288948477829359/posts/default/8419779462902964950'/><link rel='alternate' type='text/html' href='http://yoblooc.blogspot.com/2007/12/phpmysqlmysql-db.html' title='php程序mysql客户端字符集与mysql db字符集不一致的应对'/><author><name>j.z</name><uri>http://www.blogger.com/profile/15855068428842751244</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5347288948477829359.post-7240847023795289838</id><published>2007-12-07T23:17:00.000-08:00</published><updated>2007-12-08T00:19:15.544-08:00</updated><title type='text'>linux下指定依赖库路径</title><content type='html'>&lt;ol&gt;&lt;li&gt;export LD_LIBRARY_PATH="your libs complete path" 这样，可以用与系统版本冲突的lib。或者发布非源码程序。&lt;/li&gt;&lt;li&gt;用chrpath修改编译程序的dynamic library load path (rpath)（没试验过）&lt;/li&gt;&lt;/ol&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5347288948477829359-7240847023795289838?l=yoblooc.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yoblooc.blogspot.com/feeds/7240847023795289838/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5347288948477829359&amp;postID=7240847023795289838' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5347288948477829359/posts/default/7240847023795289838'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5347288948477829359/posts/default/7240847023795289838'/><link rel='alternate' type='text/html' href='http://yoblooc.blogspot.com/2007/12/linux.html' title='linux下指定依赖库路径'/><author><name>j.z</name><uri>http://www.blogger.com/profile/15855068428842751244</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5347288948477829359.post-2620236098516188052</id><published>2007-12-07T23:14:00.000-08:00</published><updated>2007-12-07T23:15:08.729-08:00</updated><title type='text'>RPM resource chrpath</title><content type='html'>&lt;a href="http://rpmfind.net/linux/rpm2html/search.php?query=chrpath"&gt;chrpath allows you to modify the dynamic library load path (rpath) of compiled programs.  Currently, only removing and modifying the rpath is supported.&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5347288948477829359-2620236098516188052?l=yoblooc.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yoblooc.blogspot.com/feeds/2620236098516188052/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5347288948477829359&amp;postID=2620236098516188052' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5347288948477829359/posts/default/2620236098516188052'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5347288948477829359/posts/default/2620236098516188052'/><link rel='alternate' type='text/html' href='http://yoblooc.blogspot.com/2007/12/rpm-resource-chrpath.html' title='RPM resource chrpath'/><author><name>j.z</name><uri>http://www.blogger.com/profile/15855068428842751244</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5347288948477829359.post-2975045600330826866</id><published>2007-12-07T21:45:00.000-08:00</published><updated>2008-01-21T22:14:23.054-08:00</updated><title type='text'>php with-iconv 编译问题</title><content type='html'>Centos5下准备重新编译打包原来安装的php5.1.6。在php.spec中加入--with-iconv, --with-iconv-path后，rpmbuild -bb php.spec总是报编译错误。&lt;br /&gt;错误停留在&lt;br /&gt;/bin/sh /usr/src/redhat/BUILD/php-5.1.6/build-apache/libtool ... -o sapi/cli/php 处。&lt;br /&gt;经查，没有加入-liconv编译选项。&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;修改方案&lt;/span&gt;：&lt;br /&gt;&lt;ul&gt;&lt;li&gt;修改/usr/src/redhat/SOURCES/php-5.1.6.tar.gz源码包中的acinclude.m4文件。&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;在acinclude.m4宏定义PHP_SETUP_ICONV内，改为如下：&lt;/li&gt;&lt;/ul&gt;   2343     if test -n "$ICONV_DIR"; then&lt;br /&gt;  2344       PHP_ADD_LIBRARY_WITH_PATH($iconv_lib_name, $ICONV_DIR/$PHP_LIBDIR, $1)&lt;br /&gt;  2345       PHP_ADD_INCLUDE($ICONV_DIR/include)&lt;br /&gt;  2346     else&lt;br /&gt;  2347       PHP_ADD_LIBRARY(iconv,,)&lt;br /&gt;  2348     fi&lt;br /&gt;&lt;br /&gt;其中2346,2347行为新加入行，其它不变。&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;重新打包php-5.1.6.tar.gz。&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;运行：rpmbuild -bb --sign /usr/src/redhat/SPECS/php.spec&lt;/li&gt;&lt;/ul&gt;重新制作rpm成功。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5347288948477829359-2975045600330826866?l=yoblooc.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yoblooc.blogspot.com/feeds/2975045600330826866/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5347288948477829359&amp;postID=2975045600330826866' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5347288948477829359/posts/default/2975045600330826866'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5347288948477829359/posts/default/2975045600330826866'/><link rel='alternate' type='text/html' href='http://yoblooc.blogspot.com/2007/12/php-with-iconv.html' title='php with-iconv 编译问题'/><author><name>j.z</name><uri>http://www.blogger.com/profile/15855068428842751244</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5347288948477829359.post-3517682225767854608</id><published>2007-12-07T17:58:00.000-08:00</published><updated>2007-12-07T18:00:36.037-08:00</updated><title type='text'>JiBX: Binding XML to Java Code</title><content type='html'>&lt;a href="http://jibx.sourceforge.net/index.html"&gt;JiBX is a framework for binding XML data to Java objects. It lets you work with data from XML documents using your own class structures. The JiBX framework handles all the details of converting your data to and from XML based on your instructions. JiBX is designed to perform the translation between internal data structures and XML with very high efficiency, but still allows you a high degree of control over the translation process.&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5347288948477829359-3517682225767854608?l=yoblooc.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yoblooc.blogspot.com/feeds/3517682225767854608/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5347288948477829359&amp;postID=3517682225767854608' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5347288948477829359/posts/default/3517682225767854608'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5347288948477829359/posts/default/3517682225767854608'/><link rel='alternate' type='text/html' href='http://yoblooc.blogspot.com/2007/12/jibx-binding-xml-to-java-code.html' title='JiBX: Binding XML to Java Code'/><author><name>j.z</name><uri>http://www.blogger.com/profile/15855068428842751244</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5347288948477829359.post-2264106954942416019</id><published>2007-11-13T21:46:00.000-08:00</published><updated>2008-03-30T19:32:00.186-07:00</updated><title type='text'>备忘录</title><content type='html'>开源web项目&lt;br /&gt;============================================&lt;br /&gt;Package                                                         Type&lt;br /&gt;bBlog  [W]                                             Blog&lt;br /&gt;WordPress  [W]                                   Blog&lt;br /&gt;B2evolution [W]                               Blog&lt;br /&gt;v-war           [W]                                 Clan Script&lt;br /&gt;PHPNuke - Clan.Net  [W]              Clan Script&lt;br /&gt;Joomla  [W]                                       CMS&lt;br /&gt;Mambo [W]                                        CMS&lt;br /&gt;XOOPS [W]                                     CMS&lt;br /&gt;Nucleus [W]                                        CMS&lt;br /&gt;Drupal  [W]                                            CMS&lt;br /&gt;E107 [W]                                            CMS&lt;br /&gt;PHP Nuke [W]                                     CMS&lt;br /&gt;Xoops chinese [W]                                      CMS&lt;br /&gt;PHP Fusion [W]                            CMS&lt;br /&gt;Zen Cart [W]                                      Commerce&lt;br /&gt;osCommerce [W]                                  Commerce&lt;br /&gt;CubeCart [W]                                   Commerce&lt;br /&gt;XMB Engage [W]    forum&lt;br /&gt;phpBB [W]    Forums&lt;br /&gt;MyBB [W]    Forums&lt;br /&gt;UseBB [W]    Forums&lt;br /&gt;MyLittle Forum [W]    Forums&lt;br /&gt;PHP Wind [W]    Forums&lt;br /&gt;phpBB3 [W]    Forums&lt;br /&gt;SMF [W]    Forums&lt;br /&gt;Minerva [W]    Forums&lt;br /&gt;iceBB [W]    Forums&lt;br /&gt;4images [W]    Gallery&lt;br /&gt;CopperMine  [W]    Gallery&lt;br /&gt;KnowledgebasePublisher[W]    KnowledgeBase&lt;br /&gt;CuteNews  [W]    News&lt;br /&gt;Mkportal M [W]    Portal&lt;br /&gt;WikiWig [W]    Wiki&lt;br /&gt;MediaWiki      [W]    Wiki&lt;br /&gt;&lt;h1&gt;&lt;span style="font-size:100%;"&gt;WebKit  web browser engine&lt;/span&gt;&lt;/h1&gt;&lt;br /&gt;日志分析工具&lt;br /&gt;==============================================&lt;br /&gt;&lt;a href="http://awstats.sourceforge.net/"&gt;awstats&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;mail相关工具&lt;br /&gt;==============================================&lt;br /&gt;&lt;a href="http://sourceforge.net/projects/vpopmail/"&gt;vpopmail&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt; synergy: [noun] a mutually advantageous conjunction of distinct elements&lt;/p&gt;&lt;p&gt;============================================== &lt;/p&gt; Synergy lets you easily share a single mouse and keyboard between multiple computers with different operating systems, each with its own display, without special hardware.  It's intended for users with multiple computers on their desk since each system uses its own monitor(s)&lt;br /&gt;&lt;a href="http://synergy2.sourceforge.net/"&gt;http://synergy2.sourceforge.net/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;drupai.org           drupal 开源cms系统&lt;br /&gt;http://www.stunnel.org/   Stunnel -- Universal SSL Wrapper&lt;br /&gt;http://www.ucarp.org/project/ucarp    Ucarp允许多台主机共享一个网络ip, 提供自动容错功能。&lt;br /&gt;http://www.drbd.org  同步工具，网络磁盘镜像工具&lt;br /&gt;http://siprouter.onsip.org/doc/gettingstarted/    SER SIP代理服务器&lt;br /&gt;Ultra Monkey  http://www.ultramonkey.org/  负载平衡&lt;br /&gt;The High-Availability Linux Project   http://www.linux-ha.org/   Provide a high-availability (clustering) solution for Linux which promotes reliability, availability, and serviceability (RAS) through a community development effort.&lt;br /&gt;Heartbeat   http://www.linux-ha.org/HeartbeatProgram  &lt;br /&gt;   It performs death-of-node detection, communications and cluster management in one process.&lt;br /&gt;Beowulf http://www.beowulf.org&lt;br /&gt;     基于普通硬件，linux系统，私有网络的集群方案&lt;br /&gt;&lt;br /&gt;Kernel Korner - Unionfs: Bringing Filesystems Together&lt;br /&gt;http://www.linuxjournal.com/article/7714&lt;br /&gt;&lt;br /&gt;Tiobench http://directory.fsf.org/tiobench.html&lt;br /&gt;Tiobench - Threaded I/O bench for Linux. Tiobench is a file system benchmark especially designed to test I/O performance with multiple running threads&lt;br /&gt;&lt;br /&gt;http://www.lcic.org/index.html linux集群信息中心&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5347288948477829359-2264106954942416019?l=yoblooc.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yoblooc.blogspot.com/feeds/2264106954942416019/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5347288948477829359&amp;postID=2264106954942416019' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5347288948477829359/posts/default/2264106954942416019'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5347288948477829359/posts/default/2264106954942416019'/><link rel='alternate' type='text/html' href='http://yoblooc.blogspot.com/2007/11/blog-post.html' title='备忘录'/><author><name>j.z</name><uri>http://www.blogger.com/profile/15855068428842751244</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5347288948477829359.post-4927046516239091975</id><published>2007-08-19T21:55:00.000-07:00</published><updated>2007-08-19T21:56:33.040-07:00</updated><title type='text'>View HTML Source Generated by AJAX (IE)</title><content type='html'>To view the generated source in IE you can type the following in the address bar&lt;br /&gt;&lt;br /&gt;    javascript:'&lt;xmp&gt;' + window.document.body.outerHTML+ '&lt;/xmp&gt;'&lt;br /&gt;&lt;br /&gt;摘自：&lt;a href="http://ericappel.net/blog/ViewHTMLSourceGeneratedByAJAX.aspx"&gt;http://ericappel.net/blog/ViewHTMLSourceGeneratedByAJAX.aspx&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5347288948477829359-4927046516239091975?l=yoblooc.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yoblooc.blogspot.com/feeds/4927046516239091975/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5347288948477829359&amp;postID=4927046516239091975' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5347288948477829359/posts/default/4927046516239091975'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5347288948477829359/posts/default/4927046516239091975'/><link rel='alternate' type='text/html' href='http://yoblooc.blogspot.com/2007/08/view-html-source-generated-by-ajax-ie.html' title='View HTML Source Generated by AJAX (IE)'/><author><name>j.z</name><uri>http://www.blogger.com/profile/15855068428842751244</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5347288948477829359.post-7897822993201243767</id><published>2007-07-29T22:53:00.000-07:00</published><updated>2007-07-29T22:55:13.115-07:00</updated><title type='text'>web图片浏览及相关</title><content type='html'>http://web.mit.edu/pgbovine/www/xml_gal_manual.htm&lt;br /&gt;基于xml的 XML Photo Gallery&lt;br /&gt;&lt;br /&gt;http://www.imagemagick.org/script/index.php&lt;br /&gt;ImageMagick® is a software suite to create, edit, and compose bitmap images. It can read, convert and write images in a variety of formats (over 100) including DPX, EXR, GIF, JPEG, JPEG-2000, PDF, PhotoCD, PNG, Postscript, SVG, and TIFF. Use ImageMagick to translate, flip, mirror, rotate, scale, shear and transform images, adjust image colors, apply various special effects, or draw text, lines, polygons, ellipses and Bézier curves.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5347288948477829359-7897822993201243767?l=yoblooc.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yoblooc.blogspot.com/feeds/7897822993201243767/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5347288948477829359&amp;postID=7897822993201243767' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5347288948477829359/posts/default/7897822993201243767'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5347288948477829359/posts/default/7897822993201243767'/><link rel='alternate' type='text/html' href='http://yoblooc.blogspot.com/2007/07/web_29.html' title='web图片浏览及相关'/><author><name>j.z</name><uri>http://www.blogger.com/profile/15855068428842751244</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5347288948477829359.post-4301187214786595274</id><published>2007-07-15T19:01:00.000-07:00</published><updated>2007-07-15T19:02:17.832-07:00</updated><title type='text'>SWFObject: Javascript Flash Player detection and embed script</title><content type='html'>&lt;a href="http://blog.deconcept.com/swfobject/" &gt;http://blog.deconcept.com/swfobject/&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5347288948477829359-4301187214786595274?l=yoblooc.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yoblooc.blogspot.com/feeds/4301187214786595274/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5347288948477829359&amp;postID=4301187214786595274' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5347288948477829359/posts/default/4301187214786595274'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5347288948477829359/posts/default/4301187214786595274'/><link rel='alternate' type='text/html' href='http://yoblooc.blogspot.com/2007/07/swfobject-javascript-flash-player.html' title='SWFObject: Javascript Flash Player detection and embed script'/><author><name>j.z</name><uri>http://www.blogger.com/profile/15855068428842751244</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5347288948477829359.post-2158707590764428409</id><published>2007-07-04T22:34:00.000-07:00</published><updated>2007-07-04T22:57:56.915-07:00</updated><title type='text'>rsync同步一例</title><content type='html'>与远程服务器同步版本&lt;br /&gt;#!/bin/sh&lt;br /&gt;PATH=/bin:/usr/bin&lt;br /&gt;exclude="auth/ logs/ tmp/ view/ smarty/cache smarty/templates_c company_logo/"&lt;br /&gt;rsync -avz username@xxx.xx.xx:/home/me/ `{ for i in $exclude; do echo -n " --exclude=${i}"; done; }` /home/me&lt;br /&gt;&lt;br /&gt;man rsync会看到详细的选项说明，这里只对用到的选项做下说明：&lt;br /&gt;-v 输出交互信息，可以更详细了解到程序执行的细节。&lt;br /&gt;-a 等同于-rlptgoD，&lt;br /&gt;  -r 递归遍历目录&lt;br /&gt;  -l 保留链接形式&lt;br /&gt;  -p 保留权限&lt;br /&gt;  -t 保留文件时间信息&lt;br /&gt;  -g 保留文件组属性&lt;br /&gt;  -o 保留文件属主(只有以root用户执行才能做到)&lt;br /&gt;  -D 保留设备属性(只有以root用户执行才能做到)&lt;br /&gt;-z 传输时压缩数据&lt;br /&gt;&lt;br /&gt;--exclude= 指明哪些目录/文件不需要同步&lt;br /&gt;&lt;br /&gt;因为上面的--exclude=比较多，所以用了shell循环脚本形式。&lt;br /&gt;`{ for i in $exclude; do echo -n " --exclude=${i}"; done; }`&lt;br /&gt;&lt;br /&gt;常用到的选项还有&lt;br /&gt;--delete 删除掉同步目录下没有的目录/文件&lt;br /&gt;-u 只更将比同步目录文件旧的文件(新文件内容不会被覆盖)&lt;br /&gt;-e 指定远程shell&lt;br /&gt;&lt;br /&gt;还有username@xxx.xx.xx:/home/me/ 中的&lt;br /&gt;/home/me/  --  代表只同步me目录下的内容&lt;br /&gt;如果为&lt;br /&gt;/home/me   --  代表将me及其下(如果为目录)的所有内容都同步(会在被同步目录下，建立me目录)&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;其它更多的用法，现用现查man好了。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;反过来，将本地程序同步到远程服务器&lt;br /&gt;#!/bin/sh&lt;br /&gt;PATH=/bin:/usr/bin&lt;br /&gt;exclude="auth/ logs/ tmp/ view/ smarty/cache smarty/templates_c company_logo/"&lt;br /&gt;rsync -avz /home/me/ `{ for i in $exclude; do echo -n " --exclude=${i}"; done; }` username@xxx.xx.xx:/home/me/&lt;br /&gt;&lt;br /&gt;颠倒一下就可以了，需要注意最后有没有'/'！&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5347288948477829359-2158707590764428409?l=yoblooc.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yoblooc.blogspot.com/feeds/2158707590764428409/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5347288948477829359&amp;postID=2158707590764428409' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5347288948477829359/posts/default/2158707590764428409'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5347288948477829359/posts/default/2158707590764428409'/><link rel='alternate' type='text/html' href='http://yoblooc.blogspot.com/2007/07/rsync.html' title='rsync同步一例'/><author><name>j.z</name><uri>http://www.blogger.com/profile/15855068428842751244</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5347288948477829359.post-6377104965020478</id><published>2007-07-02T22:40:00.001-07:00</published><updated>2007-07-02T22:40:20.954-07:00</updated><title type='text'>javascript动态效果</title><content type='html'>http://script.aculo.us/&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5347288948477829359-6377104965020478?l=yoblooc.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yoblooc.blogspot.com/feeds/6377104965020478/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5347288948477829359&amp;postID=6377104965020478' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5347288948477829359/posts/default/6377104965020478'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5347288948477829359/posts/default/6377104965020478'/><link rel='alternate' type='text/html' href='http://yoblooc.blogspot.com/2007/07/javascript.html' title='javascript动态效果'/><author><name>j.z</name><uri>http://www.blogger.com/profile/15855068428842751244</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5347288948477829359.post-6189403748831886996</id><published>2007-07-02T19:40:00.000-07:00</published><updated>2007-07-02T22:09:44.307-07:00</updated><title type='text'>css在ie6和firefox1.5中的应用</title><content type='html'>有些css式样在firefox1.5中正常应用，在ie6中却没有效果，或者相反。&lt;br /&gt;1)child selector&lt;br /&gt;syntax:&lt;br /&gt;parent selector &gt; child selector&lt;br /&gt;在ie6下改成&lt;br /&gt;parent selector[space]child selector&lt;br /&gt;效果相同了。&lt;br /&gt;&lt;br /&gt;&lt;a href="http://drupal.org/node/49970"&gt;http://drupal.org/node/49970&lt;/a&gt;也有类似说明&lt;br /&gt;[ the following statements represent four different ways to access the pjavascript:void(0)&lt;br /&gt;发布帖子age content title text ]&lt;br /&gt;&lt;br /&gt;/* appears to work in both IE and Firefox&lt;br /&gt;(selector - descendant syntax)&lt;br /&gt;div.#main h2.#title&lt;br /&gt;{&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;div.main-content h2.content-title&lt;br /&gt;{&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;/* doesn't appear to work in IE */&lt;br /&gt;(selector - child syntax)&lt;br /&gt;div.#main &gt; h2.#title&lt;br /&gt;{&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;div.main-content &gt; h2.content-title&lt;br /&gt;{&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;2)input size&lt;br /&gt;ie6下size设定后，控件大小显示极其准确。&lt;br /&gt;firefox1.5下却会多出个空格大小。&lt;br /&gt;&lt;br /&gt;3)white-space:nowrap&lt;br /&gt;ie6下似乎默认为nowrap(没测试过）&lt;br /&gt;firefox1.5下需要设定一下。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5347288948477829359-6189403748831886996?l=yoblooc.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yoblooc.blogspot.com/feeds/6189403748831886996/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5347288948477829359&amp;postID=6189403748831886996' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5347288948477829359/posts/default/6189403748831886996'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5347288948477829359/posts/default/6189403748831886996'/><link rel='alternate' type='text/html' href='http://yoblooc.blogspot.com/2007/07/cssie6firefox15.html' title='css在ie6和firefox1.5中的应用'/><author><name>j.z</name><uri>http://www.blogger.com/profile/15855068428842751244</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5347288948477829359.post-8701001641187651876</id><published>2007-07-02T05:28:00.000-07:00</published><updated>2007-07-02T05:54:36.173-07:00</updated><title type='text'>prototypejs &amp;javascript 一些使用体会</title><content type='html'>&lt;div&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;一、&lt;br /&gt;prototype 是一个很优秀的javascript框架。大大地减轻了动态web应用开发的工作量。&lt;br /&gt;最近一个项目中用到了它。 通过在Firefox1.5、IE6下的测试有几点体会：&lt;br /&gt;1)&lt;br /&gt;prototype框架提供的类及方法在Firefox1.5下执行一点问题都没有;&lt;br /&gt;IE6下如果直接引用prototype扩展的方法，会出现没有对象或属性错误提示。&lt;br /&gt;需要加$()在javascript原始类对象上。 比如:&lt;br /&gt;function tt(obj)&lt;br /&gt;{&lt;br /&gt;   $(obj)....&lt;br /&gt;}&lt;br /&gt;调用语法&lt;input type="button" onclick="tt(this)"/&gt;&lt;br /&gt;&lt;br /&gt;2)&lt;br /&gt;IE6下某些方法可能会执行，也可能执行不了。&lt;br /&gt;比如用Element.up('tr[class~=test]')方法，有些页面能执行成功，有些页面执行失败。&lt;br /&gt;没有仔细分析，推测和html tag嵌套的深度有关。&lt;br /&gt;&lt;br /&gt;二、&lt;br /&gt;javascript&lt;br /&gt;1) &lt;br /&gt;link中调用javascript几种方法&lt;br /&gt;a) &lt;a href="javascript:;" onclick="tt()"&gt;click me&lt;/a&gt;(在www.126.com 添加附件 标签处见过，此种方式IE6不是总能执行。Firefox1.5下运行未见异常)&lt;br /&gt;不能执行的情形如下：&lt;br /&gt;用javascript脚本调用form.submit()方法。&lt;br /&gt;b) &lt;a href="url" onclick="tt()"&gt;click me&lt;/a&gt; 此方式IE6,Firefox1.5未见异常。&lt;br /&gt;&lt;br /&gt;2)&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5347288948477829359-8701001641187651876?l=yoblooc.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yoblooc.blogspot.com/feeds/8701001641187651876/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5347288948477829359&amp;postID=8701001641187651876' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5347288948477829359/posts/default/8701001641187651876'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5347288948477829359/posts/default/8701001641187651876'/><link rel='alternate' type='text/html' href='http://yoblooc.blogspot.com/2007/07/prototypejs.html' title='prototypejs &amp;javascript 一些使用体会'/><author><name>j.z</name><uri>http://www.blogger.com/profile/15855068428842751244</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5347288948477829359.post-7952129390374652658</id><published>2007-07-02T02:33:00.000-07:00</published><updated>2007-07-02T02:34:53.941-07:00</updated><title type='text'>历史时刻</title><content type='html'>结婚           2001/04/06&lt;br /&gt;生女           2005/04/06&lt;br /&gt;其他记不太清了。&lt;br /&gt;Financeweb网站 2006/12/15日全部关闭&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5347288948477829359-7952129390374652658?l=yoblooc.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yoblooc.blogspot.com/feeds/7952129390374652658/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5347288948477829359&amp;postID=7952129390374652658' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5347288948477829359/posts/default/7952129390374652658'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5347288948477829359/posts/default/7952129390374652658'/><link rel='alternate' type='text/html' href='http://yoblooc.blogspot.com/2007/07/blog-post_02.html' title='历史时刻'/><author><name>j.z</name><uri>http://www.blogger.com/profile/15855068428842751244</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5347288948477829359.post-238989186396412939</id><published>2007-07-02T02:30:00.000-07:00</published><updated>2007-07-02T02:31:30.381-07:00</updated><title type='text'>最符合标准的日文邮件php发送方式</title><content type='html'>根据工作实践，最符合标准的日文邮件发送方式：&lt;br /&gt;mb_internal_encoding("euc-jp");&lt;br /&gt;mb_language("ja");&lt;br /&gt;mb_send_mail($to,$today,$body,$from);&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5347288948477829359-238989186396412939?l=yoblooc.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yoblooc.blogspot.com/feeds/238989186396412939/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5347288948477829359&amp;postID=238989186396412939' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5347288948477829359/posts/default/238989186396412939'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5347288948477829359/posts/default/238989186396412939'/><link rel='alternate' type='text/html' href='http://yoblooc.blogspot.com/2007/07/php.html' title='最符合标准的日文邮件php发送方式'/><author><name>j.z</name><uri>http://www.blogger.com/profile/15855068428842751244</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5347288948477829359.post-7724544724653323040</id><published>2007-07-02T02:23:00.000-07:00</published><updated>2007-07-02T02:26:00.083-07:00</updated><title type='text'>查看十六进制的工具： od</title><content type='html'>我经常忘记在unix/linux下查看十六进制的常用程序叫什么。每次都重新用man查起。&lt;br /&gt;记一下吧： od&lt;br /&gt;&lt;br /&gt;od -t a&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5347288948477829359-7724544724653323040?l=yoblooc.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yoblooc.blogspot.com/feeds/7724544724653323040/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5347288948477829359&amp;postID=7724544724653323040' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5347288948477829359/posts/default/7724544724653323040'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5347288948477829359/posts/default/7724544724653323040'/><link rel='alternate' type='text/html' href='http://yoblooc.blogspot.com/2007/07/od.html' title='查看十六进制的工具： od'/><author><name>j.z</name><uri>http://www.blogger.com/profile/15855068428842751244</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5347288948477829359.post-6081658803028751507</id><published>2007-07-02T02:04:00.000-07:00</published><updated>2007-07-02T02:05:46.400-07:00</updated><title type='text'>脚本实现通过代理服务器访问其它网站页面</title><content type='html'>&lt;div&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&lt;?php&lt;br /&gt;get_url("http://xxx.jp/mmm/tse20d?type=i&amp;key=KSISU****:*:*");&lt;br /&gt;&lt;br /&gt;function get_url($url)&lt;br /&gt;{&lt;br /&gt;        if($fh=fsockopen("proxyserver" ,8080, $errno, $errstr, 30))&lt;br /&gt;        {&lt;br /&gt;                $out .="GET {$url} HTTP/1.0\r\n";&lt;br /&gt;                $out .="Host: quote.nri.co.jp\r\n";&lt;br /&gt;                //$out .="Keep-Alive: 300\r\n";&lt;br /&gt;                $out .="Proxy-Connection: keep-alive\r\n\r\n";&lt;br /&gt;&lt;br /&gt;                fwrite($fh,$out);&lt;br /&gt;                while (!feof($fh)) {&lt;br /&gt;                        $get .= fgets($fh, 128);&lt;br /&gt;                }&lt;br /&gt;                fclose($fh);&lt;br /&gt;&lt;br /&gt;                $get = substr($get, strpos($get, "Proxy-Connection: close\r\n") + strlen("Proxy-Connection: close\r\n\r\n"));&lt;br /&gt;                echo $get;&lt;br /&gt;&lt;br /&gt;        }&lt;br /&gt;        else&lt;br /&gt;        {&lt;br /&gt;                echo "$errstr ($errno)&lt;br /&gt;\n";&lt;br /&gt;        }&lt;br /&gt;}&lt;br /&gt;?&gt;&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5347288948477829359-6081658803028751507?l=yoblooc.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yoblooc.blogspot.com/feeds/6081658803028751507/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5347288948477829359&amp;postID=6081658803028751507' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5347288948477829359/posts/default/6081658803028751507'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5347288948477829359/posts/default/6081658803028751507'/><link rel='alternate' type='text/html' href='http://yoblooc.blogspot.com/2007/07/blog-post.html' title='脚本实现通过代理服务器访问其它网站页面'/><author><name>j.z</name><uri>http://www.blogger.com/profile/15855068428842751244</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5347288948477829359.post-8490076222764113224</id><published>2007-07-02T02:01:00.000-07:00</published><updated>2007-07-02T02:03:31.179-07:00</updated><title type='text'>自动通过http basic验证</title><content type='html'>&lt;div&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&lt;?php&lt;br /&gt;set_time_limit(0);&lt;br /&gt;&lt;br /&gt;$user="faa";&lt;br /&gt;$pwd="faa";&lt;br /&gt;$default_auth_str = base64_encode("{$user}:{$pwd}");&lt;br /&gt;$default_port=80;&lt;br /&gt;&lt;br /&gt;$urls[1] = "http://xxx.xxx.com/portfolio/ldrss/ipo.xml";&lt;br /&gt;$urls[2] = "http://xxx.xxx.com/ldrss/market.xml";&lt;br /&gt;&lt;br /&gt;foreach($urls as $url)&lt;br /&gt;{&lt;br /&gt;        if(get_xml($url, $content))&lt;br /&gt;        {&lt;br /&gt;                echo str_repeat("=",100)."\n";&lt;br /&gt;                echo "get {$url} OK\n";&lt;br /&gt;                echo str_repeat("=",100)."\n";&lt;br /&gt;                echo $content."\n\n";&lt;br /&gt;        }&lt;br /&gt;        else&lt;br /&gt;        {&lt;br /&gt;                echo $content."\n";&lt;br /&gt;        }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;function get_xml($url, &amp;$content)&lt;br /&gt;{&lt;br /&gt;        global $default_auth_str;&lt;br /&gt;        global $default_port;&lt;br /&gt;&lt;br /&gt;        $url_arr = parse_url($url);&lt;br /&gt;        if(!empty($url_arr["user"]))&lt;br /&gt;        {&lt;br /&gt;                $auth_str = base64_encode($url_arr["user"].":".$url_arr["pass"]);&lt;br /&gt;        }&lt;br /&gt;        else&lt;br /&gt;        {&lt;br /&gt;                $auth_str = $default_auth_str;&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        if(!empty($url_arr["port"]))&lt;br /&gt;        {&lt;br /&gt;                $port = $url_arr["port"];&lt;br /&gt;        }&lt;br /&gt;        else&lt;br /&gt;        {&lt;br /&gt;                $port = $default_port;&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        $fp = fsockopen($url_arr["host"], $port, $errno, $errstr, 30);&lt;br /&gt;        if (!$fp) {&lt;br /&gt;                $content = "$errstr ($errno)&lt;br /&gt;\n";&lt;br /&gt;                return false;&lt;br /&gt;        } &lt;br /&gt;        else &lt;br /&gt;        {&lt;br /&gt;                $pattern = "/".$url_arr["user"].":".$url_arr["pass"]."@"."/";&lt;br /&gt;                $url_deal = preg_replace($pattern, "", $url);&lt;br /&gt;                $out ="GET ".$url_deal." HTTP/1.1\r\n";&lt;br /&gt;                $out .="Host: ".$url_arr["host"]."\r\n";&lt;br /&gt;                $out .="Connection: Keep-Alive\r\n";&lt;br /&gt;                $out .="Authorization: Basic ".$auth_str."\r\n\r\n";&lt;br /&gt;&lt;br /&gt;                if(!fwrite($fp, $out))&lt;br /&gt;                {&lt;br /&gt;                        $content = "error\n";&lt;br /&gt;                        fclose($fp);&lt;br /&gt;                        return false;&lt;br /&gt;                }&lt;br /&gt;&lt;br /&gt;                while (!feof($fp)) {&lt;br /&gt;                        $get .= fgets($fp, 1024);&lt;br /&gt;                }&lt;br /&gt;                fclose($fp);&lt;br /&gt;&lt;br /&gt;                $pos = strpos(strtolower($get), "&lt;?xml");&lt;br /&gt;                if($pos===false)&lt;br /&gt;                {&lt;br /&gt;                        $content = $get;&lt;br /&gt;                        return false;&lt;br /&gt;                }&lt;br /&gt;&lt;br /&gt;                $content = substr($get, $pos);&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        return true;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;?&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5347288948477829359-8490076222764113224?l=yoblooc.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yoblooc.blogspot.com/feeds/8490076222764113224/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5347288948477829359&amp;postID=8490076222764113224' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5347288948477829359/posts/default/8490076222764113224'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5347288948477829359/posts/default/8490076222764113224'/><link rel='alternate' type='text/html' href='http://yoblooc.blogspot.com/2007/07/http-basic.html' title='自动通过http basic验证'/><author><name>j.z</name><uri>http://www.blogger.com/profile/15855068428842751244</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5347288948477829359.post-886796126383484462</id><published>2007-07-02T01:59:00.001-07:00</published><updated>2007-07-02T01:59:58.613-07:00</updated><title type='text'>web浏览器文件下载窗口的服务器端实现</title><content type='html'>header("Content-type: application/csv");&lt;br /&gt; header("Content-Disposition: attachment; filename=$fileName");&lt;br /&gt; readfile("slast_csv/".$fileName);&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5347288948477829359-886796126383484462?l=yoblooc.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yoblooc.blogspot.com/feeds/886796126383484462/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5347288948477829359&amp;postID=886796126383484462' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5347288948477829359/posts/default/886796126383484462'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5347288948477829359/posts/default/886796126383484462'/><link rel='alternate' type='text/html' href='http://yoblooc.blogspot.com/2007/07/web.html' title='web浏览器文件下载窗口的服务器端实现'/><author><name>j.z</name><uri>http://www.blogger.com/profile/15855068428842751244</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5347288948477829359.post-8556341791157487504</id><published>2007-07-02T01:55:00.000-07:00</published><updated>2007-07-02T01:56:59.807-07:00</updated><title type='text'>sendmail, qmail的对应实例</title><content type='html'>sendmail利用下列命令确认队列的滞留情况。&lt;br /&gt;mailq&lt;br /&gt;mailq -Ac&lt;br /&gt;&lt;br /&gt;反复实行下列命令，进行强制送信。&lt;br /&gt;/usr/sbin/sendmail -q -v -Ac&lt;br /&gt;/usr/sbin/sendmail -q -v&lt;br /&gt;/etc/rc3.d/S80sendmail restart&lt;br /&gt;&lt;br /&gt;用日志确认邮件队列的送信状况。&lt;br /&gt;tail -f /var/log/maillog&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;成功&lt;br /&gt;/usr/local/qmail/supervise/qmail-send/log/main&lt;br /&gt;# find . -anewer @4000000043ce61c01d5be074.s -exec grep -l "developers@xxxx" {} \;&lt;br /&gt;./@4000000043cf86b801799dec.s&lt;br /&gt;&lt;br /&gt;# grep "developers@xxxx" @4000000043cf86b801799dec.s&lt;br /&gt;@4000000043cf81f805e043cc starting delivery 4676184: msg 2777080 to remote developers@fin.livedoor.com&lt;br /&gt;&lt;br /&gt;# grep "delivery 4676184" @4000000043cf86b801799dec.s&lt;br /&gt;@4000000043cf81f805e043cc starting delivery 4676184: msg 2777080 to remote developers@xxxxx&lt;br /&gt;@4000000043cf81f811f659bc delivery 4676184: success: 203.104.97.8_accepted_message./Remote_host_said:_250_2.0.0_k0JCBQ87031606_Message_accepted_for_delivery/&lt;br /&gt;&lt;br /&gt;不成功&lt;br /&gt;/usr/local/qmail/queue/remote&lt;br /&gt;# tail  1565255&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5347288948477829359-8556341791157487504?l=yoblooc.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yoblooc.blogspot.com/feeds/8556341791157487504/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5347288948477829359&amp;postID=8556341791157487504' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5347288948477829359/posts/default/8556341791157487504'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5347288948477829359/posts/default/8556341791157487504'/><link rel='alternate' type='text/html' href='http://yoblooc.blogspot.com/2007/07/sendmail-qmail.html' title='sendmail, qmail的对应实例'/><author><name>j.z</name><uri>http://www.blogger.com/profile/15855068428842751244</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5347288948477829359.post-4559019783425667155</id><published>2007-07-02T01:42:00.000-07:00</published><updated>2007-07-02T01:48:25.082-07:00</updated><title type='text'>SEO的一个对策（动态链接变为静态链接形式）</title><content type='html'>&lt;div&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&lt;?php&lt;br /&gt;&lt;br /&gt;/*&lt;br /&gt; static_url.inc&lt;br /&gt; SEO 用に作ったライブラリ&lt;br /&gt; PATH_INFO を $_REQUEST にセットする&lt;br /&gt; 例:&lt;br /&gt;     http://xxx/aaa/a/123/abc/ (php/変数名/値/変数名/値/...)&lt;br /&gt;     は以下のアクセスと同じ意味となる&lt;br /&gt;     ↓&lt;br /&gt;     http://xxx/aaa?a=123&amp;b=abc&lt;br /&gt;&lt;br /&gt; パラメータを PATH_INFO にすることにより、相対パスの指定で不具合が&lt;br /&gt; でることがある。そのため、$_path というグローバル変数を設定する&lt;br /&gt; $_path には '../../..' のように実行されたphpと同じ階層を指すように設定される&lt;br /&gt;*/&lt;br /&gt;&lt;br /&gt;$server_info = $_SERVER[PATH_INFO];&lt;br /&gt;$param = explode('/',$server_info);&lt;br /&gt;&lt;br /&gt;while($name = next($param)){&lt;br /&gt; $_REQUEST[$name] = next($param);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;$level = substr_count($server_info,'/');&lt;br /&gt;$path = '';&lt;br /&gt;&lt;br /&gt;if($level &gt; 0){&lt;br /&gt; for($i = 0; $i &lt; $level; $i++){&lt;br /&gt;  $_path .= '..';&lt;br /&gt;  if($i &lt; $level - 1) $_path .= '/';&lt;br /&gt; }&lt;br /&gt;} else{&lt;br /&gt; $_path = '.';&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;?&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5347288948477829359-4559019783425667155?l=yoblooc.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yoblooc.blogspot.com/feeds/4559019783425667155/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5347288948477829359&amp;postID=4559019783425667155' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5347288948477829359/posts/default/4559019783425667155'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5347288948477829359/posts/default/4559019783425667155'/><link rel='alternate' type='text/html' href='http://yoblooc.blogspot.com/2007/07/seo.html' title='SEO的一个对策（动态链接变为静态链接形式）'/><author><name>j.z</name><uri>http://www.blogger.com/profile/15855068428842751244</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5347288948477829359.post-2503397540087130206</id><published>2007-06-04T08:12:00.000-07:00</published><updated>2007-07-02T01:28:52.888-07:00</updated><title type='text'>javascript验证日文代码的函数</title><content type='html'>&lt;span &gt;javascript验证日文代码的函数&lt;/span&gt;&lt;br&gt;&lt;br /&gt;&lt;br /&gt;&lt;br&gt;&lt;span &gt;  提供一个javascript验证有关全角半角平假片假数字汉子的转换判断的函数代码（estimate_input.php）&lt;br&gt;&amp;lt;script language="javascript" type="text/javascript"&amp;gt;&lt;br&gt; &amp;nbsp;  dakuten &amp;nbsp;  &amp;nbsp; = new Array("ヴ","","","ガ","ギ","グ","ゲ","ゴ","ザ","ジ","ズ","ゼ","ゾ","ダ","ヂ","ヅ","デ","ド","","","","","","バ","ビ","ブ","ベ","ボ");&lt;br&gt; &amp;nbsp;  handaku &amp;nbsp;  &amp;nbsp; = new Array('パ','ピ','プ','ペ','ポ');&lt;br&gt; &amp;nbsp;  zenkaku_kana = new Array("ヲ","ァ","ィ","ゥ","ェ","ォ","ャ","ュ","ョ","ッ","ｰ","ア","イ","ウ","エ","オ","カ","キ","ク","ケ","コ","サ","シ","ス","セ","ソ","タ","チ","ツ","テ","ト","ナ","ニ","ヌ","ネ","ノ","ハ","ヒ","フ","ヘ","ホ","マ","ミ","ム","メ","モ","ヤ","ユ","ヨ","ラ","リ","ル","レ","ロ","ワ","ン");&lt;br&gt; &amp;nbsp;  kansuuji=new Array(12295,19968,20108,19977,22235,20116,20845,19971,20843,20061);&lt;br&gt; &amp;nbsp;  &lt;br&gt;&lt;br&gt;function deleteAlpha(str) {&lt;br&gt; &amp;nbsp; &amp;nbsp;//delete 半角英&lt;br&gt; &amp;nbsp; &amp;nbsp;str=number(str)&lt;br&gt; &amp;nbsp;  le=str.length;&lt;br&gt; &amp;nbsp;  xout="";&lt;br&gt; &amp;nbsp;  for(i=0;i&amp;lt;le;i++){&lt;br&gt; &amp;nbsp;  &amp;nbsp;   code=str.charCodeAt(i);&lt;br&gt; &amp;nbsp;  &amp;nbsp;   if(code&amp;lt;48 || code&amp;gt;57){continue;}&lt;br&gt; &amp;nbsp;  &amp;nbsp;   xout=xout+String.fromCharCode(code) ;&lt;br&gt; &amp;nbsp;  }&lt;br&gt; &amp;nbsp;  return xout; &amp;nbsp; &amp;nbsp;&lt;br&gt;}&lt;br&gt;&lt;br&gt;function deleteSpace(str) {&lt;br&gt; &amp;nbsp;  le=str.length;&lt;br&gt; &amp;nbsp; &amp;nbsp;//delete 全角英&lt;br&gt; &amp;nbsp;  xout="";&lt;br&gt; &amp;nbsp;  for(i=0;i&amp;lt;le;i++){&lt;br&gt; &amp;nbsp;  &amp;nbsp;   code=str.charCodeAt(i);&lt;br&gt; &amp;nbsp;  &amp;nbsp;   if(String.fromCharCode(code)==' '){continue;}&lt;br&gt; &amp;nbsp;  &amp;nbsp;   xout=xout+String.fromCharCode(code) ;&lt;br&gt; &amp;nbsp;  }&lt;br&gt; &amp;nbsp;  return xout; &amp;nbsp; &amp;nbsp;&lt;br&gt;}&lt;br&gt;&lt;br&gt;function A_kana(x){&lt;br&gt; &amp;nbsp;  //平假 to 片假&lt;br&gt; &amp;nbsp;  le=x.length;&lt;br&gt; &amp;nbsp;  xout="";&lt;br&gt; &amp;nbsp;  for(i=0;i&amp;lt;le;i++){&lt;br&gt; &amp;nbsp;  &amp;nbsp;   code=x.charCodeAt(i);&lt;br&gt; &amp;nbsp;  &amp;nbsp;   if(code&amp;gt;=12353 &amp;amp;&amp;amp; code&amp;lt;=12435){code=code+96;}&lt;br&gt; &amp;nbsp;  &amp;nbsp;   xout=xout+String.fromCharCode(code) ;&lt;br&gt; &amp;nbsp;  }&lt;br&gt; &amp;nbsp;  return xout;&lt;br&gt;}&lt;br&gt;&lt;br&gt;function kana(x){&lt;br&gt; &amp;nbsp;  //片假 to 平假&lt;br&gt; &amp;nbsp;  le=x.length;&lt;br&gt; &amp;nbsp;  xout="";&lt;br&gt; &amp;nbsp;  for(i=0;i&amp;lt;le;i++){&lt;br&gt; &amp;nbsp;  &amp;nbsp;   code=x.charCodeAt(i);&lt;br&gt; &amp;nbsp;  &amp;nbsp;   if(code&amp;gt;=12449 &amp;amp;&amp;amp; code&amp;lt;=12531){code=code-96;}&lt;br&gt; &amp;nbsp;  &amp;nbsp;   xout=xout+String.fromCharCode(code) ;&lt;br&gt; &amp;nbsp;  }&lt;br&gt; &amp;nbsp;  return xout;&lt;br&gt;}&lt;br&gt;&lt;br&gt;function kanahankaku(x){&lt;br&gt; &amp;nbsp;  //全角 to 半角&lt;br&gt; &amp;nbsp;  le=x.length;&lt;br&gt; &amp;nbsp;  xout="";&lt;br&gt; &amp;nbsp;  for(i=0;i&amp;lt;le;i++){&lt;br&gt; &amp;nbsp;  &amp;nbsp;   code=x.charCodeAt(i);&lt;br&gt; &amp;nbsp;  &amp;nbsp;   if(code&amp;gt;=12449 &amp;amp;&amp;amp; code&amp;lt;=12534){&lt;br&gt; &amp;nbsp;  &amp;nbsp;  &amp;nbsp;   xout=xout+kanahenkan[code-12449];&lt;br&gt; &amp;nbsp;  &amp;nbsp;   }else{&lt;br&gt; &amp;nbsp;  &amp;nbsp;  &amp;nbsp;   xout=xout+String.fromCharCode(code);&lt;br&gt; &amp;nbsp;  &amp;nbsp;   }&lt;br&gt; &amp;nbsp;  }&lt;br&gt; &amp;nbsp;  return xout;&lt;br&gt;}&lt;br&gt;function A_kanahankaku(x){&lt;br&gt; &amp;nbsp;  //半角 to 全角&lt;br&gt; &amp;nbsp;  le=x.length;&lt;br&gt; &amp;nbsp;  tout="";&lt;br&gt; &amp;nbsp;  xout="";&lt;br&gt; &amp;nbsp;  code=x.charCodeAt(0);&lt;br&gt; &amp;nbsp;  for(i=0;i&amp;lt;le;i++){&lt;br&gt; &amp;nbsp;  &amp;nbsp;   code_next=x.charCodeAt(i+1);&lt;br&gt; &amp;nbsp;  &amp;nbsp;   if(code&amp;gt;=65382 &amp;amp;&amp;amp; code&amp;lt;=65437){&lt;br&gt; &amp;nbsp;  &amp;nbsp;  &amp;nbsp;   if(code_next==65438){&lt;br&gt; &amp;nbsp;  &amp;nbsp;  &amp;nbsp;  &amp;nbsp;  &amp;nbsp; moji=dakuten[code-65395];&lt;br&gt; &amp;nbsp;  &amp;nbsp;  &amp;nbsp;  &amp;nbsp;  &amp;nbsp; i++;&lt;br&gt; &amp;nbsp;  &amp;nbsp;  &amp;nbsp;  &amp;nbsp;  &amp;nbsp; code_next=x.charCodeAt(i+1);&lt;br&gt; &amp;nbsp;  &amp;nbsp;  &amp;nbsp;   }else if(code_next==65439){&lt;br&gt; &amp;nbsp;  &amp;nbsp;  &amp;nbsp;  &amp;nbsp;  &amp;nbsp; moji=handaku[code-65418];&lt;br&gt; &amp;nbsp;  &amp;nbsp;  &amp;nbsp;  &amp;nbsp;  &amp;nbsp; i++;&lt;br&gt; &amp;nbsp;  &amp;nbsp;  &amp;nbsp;  &amp;nbsp;  &amp;nbsp; code_next=x.charCodeAt(i+1);&lt;br&gt; &amp;nbsp;  &amp;nbsp;  &amp;nbsp;   }else{&lt;br&gt; &amp;nbsp;  &amp;nbsp;  &amp;nbsp;  &amp;nbsp;  &amp;nbsp; moji=zenkaku_kana[code-65382];&lt;br&gt; &amp;nbsp;  &amp;nbsp;  &amp;nbsp;   }&lt;br&gt; &amp;nbsp;  &amp;nbsp;  &amp;nbsp;   xout=xout+moji;&lt;br&gt; &amp;nbsp;  &amp;nbsp;   }else{&lt;br&gt; &amp;nbsp;  &amp;nbsp;  &amp;nbsp;   xout=xout+String.fromCharCode(code);&lt;br&gt; &amp;nbsp;  &amp;nbsp;   }&lt;br&gt; &amp;nbsp;  &amp;nbsp;   code=code_next;&lt;br&gt; &amp;nbsp;  }&lt;br&gt; &amp;nbsp;  return xout;&lt;br&gt;}&lt;br&gt;&lt;br&gt;function halpha(x){&lt;br&gt; &amp;nbsp;  //半角英 to 全角英&lt;br&gt; &amp;nbsp;  le=x.length;&lt;br&gt; &amp;nbsp;  xout="";&lt;br&gt; &amp;nbsp;  for(i=0;i&amp;lt;le;i++){&lt;br&gt; &amp;nbsp;  &amp;nbsp;   code=x.charCodeAt(i);&lt;br&gt; &amp;nbsp;  &amp;nbsp;   if(code&amp;gt;=65 &amp;amp;&amp;amp; code&amp;lt;=90){code=code+65248;}&lt;br&gt; &amp;nbsp;  &amp;nbsp;   if(code&amp;gt;=97 &amp;amp;&amp;amp; code&amp;lt;=122){code=code+65248;}&lt;br&gt; &amp;nbsp;  &amp;nbsp;   xout=xout+String.fromCharCode(code) ;&lt;br&gt; &amp;nbsp;  }&lt;br&gt; &amp;nbsp;  return xout;&lt;br&gt;}&lt;br&gt;&lt;br&gt;function alpha(x){&lt;br&gt; &amp;nbsp;  //全角英 to 半角英&lt;br&gt; &amp;nbsp;  le=x.length;&lt;br&gt; &amp;nbsp;  xout="";&lt;br&gt; &amp;nbsp;  for(i=0;i&amp;lt;le;i++){&lt;br&gt; &amp;nbsp;  &amp;nbsp;   code=x.charCodeAt(i);&lt;br&gt; &amp;nbsp;  &amp;nbsp;   if(code&amp;gt;=65313 &amp;amp;&amp;amp; code&amp;lt;=65338){code=code-65248;}&lt;br&gt; &amp;nbsp;  &amp;nbsp;   if(code&amp;gt;=65345 &amp;amp;&amp;amp; code&amp;lt;=65370){code=code-65248;}&lt;br&gt; &amp;nbsp;  &amp;nbsp;   xout=xout+String.fromCharCode(code) ;&lt;br&gt; &amp;nbsp;  }&lt;br&gt; &amp;nbsp;  return xout;&lt;br&gt;}&lt;br&gt;&lt;br&gt;function hnumber(x){&lt;br&gt; &amp;nbsp;  //半角数 to 全角数&lt;br&gt; &amp;nbsp;  le=x.length;&lt;br&gt; &amp;nbsp;  xout="";&lt;br&gt; &amp;nbsp;  for(i=0;i&amp;lt;le;i++){&lt;br&gt; &amp;nbsp;  &amp;nbsp;   code=x.charCodeAt(i);&lt;br&gt; &amp;nbsp;  &amp;nbsp;   if(code&amp;gt;=48 &amp;amp;&amp;amp; code&amp;lt;=57){code=code+65248;}&lt;br&gt; &amp;nbsp;  &amp;nbsp;   xout=xout+String.fromCharCode(code) ;&lt;br&gt; &amp;nbsp;  }&lt;br&gt; &amp;nbsp;  return xout;&lt;br&gt;}&lt;br&gt;&lt;br&gt;function number(x){&lt;br&gt; &amp;nbsp;  //全角数 to 半角数 &lt;br&gt; &amp;nbsp;  le=x.length;&lt;br&gt; &amp;nbsp;  xout="";&lt;br&gt; &amp;nbsp;  for(i=0;i&amp;lt;le;i++){&lt;br&gt; &amp;nbsp;  &amp;nbsp;   code=x.charCodeAt(i)&lt;br&gt; &amp;nbsp;  &amp;nbsp;   if(code&amp;gt;=65296 &amp;amp;&amp;amp; code&amp;lt;=65305){code=code-65248;}&lt;br&gt; &amp;nbsp;  &amp;nbsp;   xout=xout+String.fromCharCode(code) ;&lt;br&gt; &amp;nbsp;  }&lt;br&gt; &amp;nbsp;  return xout;&lt;br&gt;}&lt;br&gt;&lt;br&gt;function num_kan(x){&lt;br&gt; &amp;nbsp;  //全角数から漢数字&lt;br&gt; &amp;nbsp;  le=x.length;&lt;br&gt; &amp;nbsp;  xout="";&lt;br&gt; &amp;nbsp;  for(i=0;i&amp;lt;le;i++){&lt;br&gt; &amp;nbsp;  &amp;nbsp;   code=x.charCodeAt(i)&lt;br&gt; &amp;nbsp;  &amp;nbsp;   if(code&amp;gt;=65296 &amp;amp;&amp;amp; code&amp;lt;=65305){code=kansuuji[code-65296];}&lt;br&gt; &amp;nbsp;  &amp;nbsp;   xout=xout+String.fromCharCode(code) ;&lt;br&gt; &amp;nbsp;  }&lt;br&gt; &amp;nbsp;  return xout;&lt;br&gt;}&lt;br&gt;&lt;br&gt;function kan_num(x){&lt;br&gt; &amp;nbsp;  //全角数から漢数字&lt;br&gt; &amp;nbsp;  le=x.length;&lt;br&gt; &amp;nbsp;  xout="";&lt;br&gt; &amp;nbsp;  for(i=0;i&amp;lt;le;i++){&lt;br&gt; &amp;nbsp;  &amp;nbsp;   code=x.charCodeAt(i)&lt;br&gt; &amp;nbsp;  &amp;nbsp;   if(code == 12295){dmy='０'}&lt;br&gt; &amp;nbsp;  &amp;nbsp;   else if(code == 19968){dmy='１'}&lt;br&gt; &amp;nbsp;  &amp;nbsp;   else if(code == 20108){dmy='２'}&lt;br&gt; &amp;nbsp;  &amp;nbsp;   else if(code == 19977){dmy='３'}&lt;br&gt; &amp;nbsp;  &amp;nbsp;   else if(code == 22235){dmy='４'}&lt;br&gt; &amp;nbsp;  &amp;nbsp;   else if(code == 20116){dmy='５'}&lt;br&gt; &amp;nbsp;  &amp;nbsp;   else if(code == 20845){dmy='６'}&lt;br&gt; &amp;nbsp;  &amp;nbsp;   else if(code == 19971){dmy='７'}&lt;br&gt; &amp;nbsp;  &amp;nbsp;   else if(code == 20843){dmy='８'}&lt;br&gt; &amp;nbsp;  &amp;nbsp;   else if(code == 20061){dmy='９'}&lt;br&gt; &amp;nbsp;  &amp;nbsp;   else{dmy=x.charAt(i)}&lt;br&gt; &amp;nbsp;  &amp;nbsp;   xout=xout+dmy ;&lt;br&gt; &amp;nbsp;  }&lt;br&gt; &amp;nbsp;  return xout;&lt;br&gt;}&lt;br&gt;&amp;lt;/script&amp;gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5347288948477829359-2503397540087130206?l=yoblooc.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yoblooc.blogspot.com/feeds/2503397540087130206/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5347288948477829359&amp;postID=2503397540087130206' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5347288948477829359/posts/default/2503397540087130206'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5347288948477829359/posts/default/2503397540087130206'/><link rel='alternate' type='text/html' href='http://yoblooc.blogspot.com/2007/06/blog-post.html' title='javascript验证日文代码的函数'/><author><name>j.z</name><uri>http://www.blogger.com/profile/15855068428842751244</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5347288948477829359.post-5738418340111791043</id><published>2007-05-23T18:32:00.000-07:00</published><updated>2007-05-23T18:48:26.482-07:00</updated><title type='text'>内核中加入squashfs lzma支持</title><content type='html'>近日基于&lt;a href="http://cdlinux.berlios.de/index-cn.html"&gt;dtCDlinux&lt;/a&gt; 做一个瘦客户端，可以从光盘启动、运行，也可以通过PXE方式启动运行。&lt;br /&gt;大部分工作都是dtCDlinux现成的，只是增加了日文化的支持。为了让系统运行时占用内存更小，将squashfs lzma压缩编码支持编译进内核。 &lt;br /&gt;官方网站&lt;a href="http://www.squashfs-lzma.org/"&gt;http://www.squashfs-lzma.org/&lt;/a&gt;只提供了将squashfs lzma支持编译成模块的方式。显然这是不够的，因为dtCDlinux启动时加载的initrd映像就是squashfs格式的，最好也压缩成squashfs lzma格式。&lt;br /&gt;经过研究，发现编译进内核也并不难。 内核打过squashfs和squashfs lzma补丁后，再打我做的如下补丁就OK了。&lt;br /&gt;&lt;p&gt;&lt;br /&gt;diff -x .gitignore -Nurp linux-2.6.20.11/fs/squashfs/LzmaDecode.c  linux-2.6.20.11_lzma/fs/squashfs/LzmaDecode.c&lt;br /&gt;--- linux-2.6.20.11/fs/squashfs/LzmaDecode.c    1970-01-01 09:00:00.000000000 +0900&lt;br /&gt;+++ linux-2.6.20.11_lzma/fs/squashfs/LzmaDecode.c       2007-05-15 20:34:12.000000000 +0900&lt;br /&gt;@@ -0,0 +1,584 @@&lt;br /&gt;+/*&lt;br /&gt;+  LzmaDecode.c&lt;br /&gt;+  LZMA Decoder (optimized for Speed version)&lt;br /&gt;+  &lt;br /&gt;+  LZMA SDK 4.40 Copyright (c) 1999-2006 Igor Pavlov (2006-05-01)&lt;br /&gt;+  http://www.7-zip.org/&lt;br /&gt;+&lt;br /&gt;+  LZMA SDK is licensed under two licenses:&lt;br /&gt;+  1) GNU Lesser General Public License (GNU LGPL)&lt;br /&gt;+  2) Common Public License (CPL)&lt;br /&gt;+  It means that you can select one of these two licenses and &lt;br /&gt;+  follow rules of that license.&lt;br /&gt;+&lt;br /&gt;+  SPECIAL EXCEPTION:&lt;br /&gt;+  Igor Pavlov, as the author of this Code, expressly permits you to &lt;br /&gt;+  statically or dynamically link your Code (or bind by name) to the &lt;br /&gt;+  interfaces of this file without subjecting your linked Code to the &lt;br /&gt;+  terms of the CPL or GNU LGPL. Any modifications or additions &lt;br /&gt;+  to this file, however, are subject to the LGPL or CPL terms.&lt;br /&gt;+*/&lt;br /&gt;+&lt;br /&gt;+#include "LzmaDecode.h"&lt;br /&gt;+&lt;br /&gt;+#define kNumTopBits 24&lt;br /&gt;+#define kTopValue ((UInt32)1 &lt;&lt; kNumTopBits)&lt;br /&gt;+&lt;br /&gt;+#define kNumBitModelTotalBits 11&lt;br /&gt;+#define kBitModelTotal (1 &lt;&lt; kNumBitModelTotalBits)&lt;br /&gt;+#define kNumMoveBits 5&lt;br /&gt;+&lt;br /&gt;+#define RC_READ_BYTE (*Buffer++)&lt;br /&gt;+&lt;br /&gt;+#define RC_INIT2 Code = 0; Range = 0xFFFFFFFF; \&lt;br /&gt;+  { int i; for(i = 0; i &lt; 5; i++) { RC_TEST; Code = (Code &lt;&lt; 8) | RC_READ_BYTE; }}&lt;br /&gt;+&lt;br /&gt;+#ifdef _LZMA_IN_CB&lt;br /&gt;+&lt;br /&gt;+#define RC_TEST { if (Buffer == BufferLim) \&lt;br /&gt;+  { SizeT size; int result = InCallback-&gt;Read(InCallback, &amp;Buffer, &amp;size); if (result != LZMA_RESULT_OK) return result; \&lt;br /&gt;+  BufferLim = Buffer + size; if (size == 0) return LZMA_RESULT_DATA_ERROR; }}&lt;br /&gt;+&lt;br /&gt;+#define RC_INIT Buffer = BufferLim = 0; RC_INIT2&lt;br /&gt;+&lt;br /&gt;+#else&lt;br /&gt;+&lt;br /&gt;+#define RC_TEST { if (Buffer == BufferLim) return LZMA_RESULT_DATA_ERROR; }&lt;br /&gt;+&lt;br /&gt;+#define RC_INIT(buffer, bufferSize) Buffer = buffer; BufferLim = buffer + bufferSize; RC_INIT2&lt;br /&gt;+ &lt;br /&gt;+#endif&lt;br /&gt;+&lt;br /&gt;+#define RC_NORMALIZE if (Range &lt; kTopValue) { RC_TEST; Range &lt;&lt;= 8; Code = (Code &lt;&lt; 8) | RC_READ_BYTE; }&lt;br /&gt;+&lt;br /&gt;+#define IfBit0(p) RC_NORMALIZE; bound = (Range &gt;&gt; kNumBitModelTotalBits) * *(p); if (Code &lt; bound)&lt;br /&gt;+#define UpdateBit0(p) Range = bound; *(p) += (kBitModelTotal - *(p)) &gt;&gt; kNumMoveBits;&lt;br /&gt;+#define UpdateBit1(p) Range -= bound; Code -= bound; *(p) -= (*(p)) &gt;&gt; kNumMoveBits;&lt;br /&gt;+&lt;br /&gt;+#define RC_GET_BIT2(p, mi, A0, A1) IfBit0(p) \&lt;br /&gt;+  { UpdateBit0(p); mi &lt;&lt;= 1; A0; } else \&lt;br /&gt;+  { UpdateBit1(p); mi = (mi + mi) + 1; A1; } &lt;br /&gt;+  &lt;br /&gt;+#define RC_GET_BIT(p, mi) RC_GET_BIT2(p, mi, ; , ;)               &lt;br /&gt;+&lt;br /&gt;+#define RangeDecoderBitTreeDecode(probs, numLevels, res) \&lt;br /&gt;+  { int i = numLevels; res = 1; \&lt;br /&gt;+  do { CProb *p = probs + res; RC_GET_BIT(p, res) } while(--i != 0); \&lt;br /&gt;+  res -= (1 &lt;&lt; numLevels); }&lt;br /&gt;+&lt;br /&gt;+&lt;br /&gt;+#define kNumPosBitsMax 4&lt;br /&gt;+#define kNumPosStatesMax (1 &lt;&lt; kNumPosBitsMax)&lt;br /&gt;+&lt;br /&gt;+#define kLenNumLowBits 3&lt;br /&gt;+#define kLenNumLowSymbols (1 &lt;&lt; kLenNumLowBits)&lt;br /&gt;+#define kLenNumMidBits 3&lt;br /&gt;+#define kLenNumMidSymbols (1 &lt;&lt; kLenNumMidBits)&lt;br /&gt;+#define kLenNumHighBits 8&lt;br /&gt;+#define kLenNumHighSymbols (1 &lt;&lt; kLenNumHighBits)&lt;br /&gt;+&lt;br /&gt;+#define LenChoice 0&lt;br /&gt;+#define LenChoice2 (LenChoice + 1)&lt;br /&gt;+#define LenLow (LenChoice2 + 1)&lt;br /&gt;+#define LenMid (LenLow + (kNumPosStatesMax &lt;&lt; kLenNumLowBits))&lt;br /&gt;+#define LenHigh (LenMid + (kNumPosStatesMax &lt;&lt; kLenNumMidBits))&lt;br /&gt;+#define kNumLenProbs (LenHigh + kLenNumHighSymbols) &lt;br /&gt;+&lt;br /&gt;+&lt;br /&gt;+#define kNumStates 12&lt;br /&gt;+#define kNumLitStates 7&lt;br /&gt;+&lt;br /&gt;+#define kStartPosModelIndex 4&lt;br /&gt;+#define kEndPosModelIndex 14&lt;br /&gt;+#define kNumFullDistances (1 &lt;&lt; (kEndPosModelIndex &gt;&gt; 1))&lt;br /&gt;+&lt;br /&gt;+#define kNumPosSlotBits 6&lt;br /&gt;+#define kNumLenToPosStates 4&lt;br /&gt;+&lt;br /&gt;+#define kNumAlignBits 4&lt;br /&gt;+#define kAlignTableSize (1 &lt;&lt; kNumAlignBits)&lt;br /&gt;+&lt;br /&gt;+#define kMatchMinLen 2&lt;br /&gt;+&lt;br /&gt;+#define IsMatch 0&lt;br /&gt;+#define IsRep (IsMatch + (kNumStates &lt;&lt; kNumPosBitsMax))&lt;br /&gt;+#define IsRepG0 (IsRep + kNumStates)&lt;br /&gt;+#define IsRepG1 (IsRepG0 + kNumStates)&lt;br /&gt;+#define IsRepG2 (IsRepG1 + kNumStates)&lt;br /&gt;+#define IsRep0Long (IsRepG2 + kNumStates)&lt;br /&gt;+#define PosSlot (IsRep0Long + (kNumStates &lt;&lt; kNumPosBitsMax))&lt;br /&gt;+#define SpecPos (PosSlot + (kNumLenToPosStates &lt;&lt; kNumPosSlotBits))&lt;br /&gt;+#define Align (SpecPos + kNumFullDistances - kEndPosModelIndex)&lt;br /&gt;+#define LenCoder (Align + kAlignTableSize)&lt;br /&gt;+#define RepLenCoder (LenCoder + kNumLenProbs)&lt;br /&gt;+#define Literal (RepLenCoder + kNumLenProbs)&lt;br /&gt;+&lt;br /&gt;+#if Literal != LZMA_BASE_SIZE&lt;br /&gt;+StopCompilingDueBUG&lt;br /&gt;+#endif&lt;br /&gt;+&lt;br /&gt;+int LzmaDecodeProperties(CLzmaProperties *propsRes, const unsigned char *propsData, int size)&lt;br /&gt;+{&lt;br /&gt;+  unsigned char prop0;&lt;br /&gt;+  if (size &lt; LZMA_PROPERTIES_SIZE)&lt;br /&gt;+    return LZMA_RESULT_DATA_ERROR;&lt;br /&gt;+  prop0 = propsData[0];&lt;br /&gt;+  if (prop0 &gt;= (9 * 5 * 5))&lt;br /&gt;+    return LZMA_RESULT_DATA_ERROR;&lt;br /&gt;+  {&lt;br /&gt;+    for (propsRes-&gt;pb = 0; prop0 &gt;= (9 * 5); propsRes-&gt;pb++, prop0 -= (9 * 5));&lt;br /&gt;+    for (propsRes-&gt;lp = 0; prop0 &gt;= 9; propsRes-&gt;lp++, prop0 -= 9);&lt;br /&gt;+    propsRes-&gt;lc = prop0;&lt;br /&gt;+    /*&lt;br /&gt;+    unsigned char remainder = (unsigned char)(prop0 / 9);&lt;br /&gt;+    propsRes-&gt;lc = prop0 % 9;&lt;br /&gt;+    propsRes-&gt;pb = remainder / 5;&lt;br /&gt;+    propsRes-&gt;lp = remainder % 5;&lt;br /&gt;+    */&lt;br /&gt;+  }&lt;br /&gt;+&lt;br /&gt;+  #ifdef _LZMA_OUT_READ&lt;br /&gt;+  {&lt;br /&gt;+    int i;&lt;br /&gt;+    propsRes-&gt;DictionarySize = 0;&lt;br /&gt;+    for (i = 0; i &lt; 4; i++)&lt;br /&gt;+      propsRes-&gt;DictionarySize += (UInt32)(propsData[1 + i]) &lt;&lt; (i * 8);&lt;br /&gt;+    if (propsRes-&gt;DictionarySize == 0)&lt;br /&gt;+      propsRes-&gt;DictionarySize = 1;&lt;br /&gt;+  }&lt;br /&gt;+  #endif&lt;br /&gt;+  return LZMA_RESULT_OK;&lt;br /&gt;+}&lt;br /&gt;+&lt;br /&gt;+#define kLzmaStreamWasFinishedId (-1)&lt;br /&gt;+&lt;br /&gt;+int LzmaDecode(CLzmaDecoderState *vs,&lt;br /&gt;+    #ifdef _LZMA_IN_CB&lt;br /&gt;+    ILzmaInCallback *InCallback,&lt;br /&gt;+    #else&lt;br /&gt;+    const unsigned char *inStream, SizeT inSize, SizeT *inSizeProcessed,&lt;br /&gt;+    #endif&lt;br /&gt;+    unsigned char *outStream, SizeT outSize, SizeT *outSizeProcessed)&lt;br /&gt;+{&lt;br /&gt;+  CProb *p = vs-&gt;Probs;&lt;br /&gt;+  SizeT nowPos = 0;&lt;br /&gt;+  Byte previousByte = 0;&lt;br /&gt;+  UInt32 posStateMask = (1 &lt;&lt; (vs-&gt;Properties.pb)) - 1;&lt;br /&gt;+  UInt32 literalPosMask = (1 &lt;&lt; (vs-&gt;Properties.lp)) - 1;&lt;br /&gt;+  int lc = vs-&gt;Properties.lc;&lt;br /&gt;+&lt;br /&gt;+  #ifdef _LZMA_OUT_READ&lt;br /&gt;+  &lt;br /&gt;+  UInt32 Range = vs-&gt;Range;&lt;br /&gt;+  UInt32 Code = vs-&gt;Code;&lt;br /&gt;+  #ifdef _LZMA_IN_CB&lt;br /&gt;+  const Byte *Buffer = vs-&gt;Buffer;&lt;br /&gt;+  const Byte *BufferLim = vs-&gt;BufferLim;&lt;br /&gt;+  #else&lt;br /&gt;+  const Byte *Buffer = inStream;&lt;br /&gt;+  const Byte *BufferLim = inStream + inSize;&lt;br /&gt;+  #endif&lt;br /&gt;+  int state = vs-&gt;State;&lt;br /&gt;+  UInt32 rep0 = vs-&gt;Reps[0], rep1 = vs-&gt;Reps[1], rep2 = vs-&gt;Reps[2], rep3 = vs-&gt;Reps[3];&lt;br /&gt;+  int len = vs-&gt;RemainLen;&lt;br /&gt;+  UInt32 globalPos = vs-&gt;GlobalPos;&lt;br /&gt;+  UInt32 distanceLimit = vs-&gt;DistanceLimit;&lt;br /&gt;+&lt;br /&gt;+  Byte *dictionary = vs-&gt;Dictionary;&lt;br /&gt;+  UInt32 dictionarySize = vs-&gt;Properties.DictionarySize;&lt;br /&gt;+  UInt32 dictionaryPos = vs-&gt;DictionaryPos;&lt;br /&gt;+&lt;br /&gt;+  Byte tempDictionary[4];&lt;br /&gt;+&lt;br /&gt;+  #ifndef _LZMA_IN_CB&lt;br /&gt;+  *inSizeProcessed = 0;&lt;br /&gt;+  #endif&lt;br /&gt;+  *outSizeProcessed = 0;&lt;br /&gt;+  if (len == kLzmaStreamWasFinishedId)&lt;br /&gt;+    return LZMA_RESULT_OK;&lt;br /&gt;+&lt;br /&gt;+  if (dictionarySize == 0)&lt;br /&gt;+  {&lt;br /&gt;+    dictionary = tempDictionary;&lt;br /&gt;+    dictionarySize = 1;&lt;br /&gt;+    tempDictionary[0] = vs-&gt;TempDictionary[0];&lt;br /&gt;+  }&lt;br /&gt;+&lt;br /&gt;+  if (len == kLzmaNeedInitId)&lt;br /&gt;+  {&lt;br /&gt;+    {&lt;br /&gt;+      UInt32 numProbs = Literal + ((UInt32)LZMA_LIT_SIZE &lt;&lt; (lc + vs-&gt;Properties.lp));&lt;br /&gt;+      UInt32 i;&lt;br /&gt;+      for (i = 0; i &lt; numProbs; i++)&lt;br /&gt;+        p[i] = kBitModelTotal &gt;&gt; 1; &lt;br /&gt;+      rep0 = rep1 = rep2 = rep3 = 1;&lt;br /&gt;+      state = 0;&lt;br /&gt;+      globalPos = 0;&lt;br /&gt;+      distanceLimit = 0;&lt;br /&gt;+      dictionaryPos = 0;&lt;br /&gt;+      dictionary[dictionarySize - 1] = 0;&lt;br /&gt;+      #ifdef _LZMA_IN_CB&lt;br /&gt;+      RC_INIT;&lt;br /&gt;+      #else&lt;br /&gt;+      RC_INIT(inStream, inSize);&lt;br /&gt;+      #endif&lt;br /&gt;+    }&lt;br /&gt;+    len = 0;&lt;br /&gt;+  }&lt;br /&gt;+  while(len != 0 &amp;&amp; nowPos &lt; outSize)&lt;br /&gt;+  {&lt;br /&gt;+    UInt32 pos = dictionaryPos - rep0;&lt;br /&gt;+    if (pos &gt;= dictionarySize)&lt;br /&gt;+      pos += dictionarySize;&lt;br /&gt;+    outStream[nowPos++] = dictionary[dictionaryPos] = dictionary[pos];&lt;br /&gt;+    if (++dictionaryPos == dictionarySize)&lt;br /&gt;+      dictionaryPos = 0;&lt;br /&gt;+    len--;&lt;br /&gt;+  }&lt;br /&gt;+  if (dictionaryPos == 0)&lt;br /&gt;+    previousByte = dictionary[dictionarySize - 1];&lt;br /&gt;+  else&lt;br /&gt;+    previousByte = dictionary[dictionaryPos - 1];&lt;br /&gt;+&lt;br /&gt;+  #else /* if !_LZMA_OUT_READ */&lt;br /&gt;+&lt;br /&gt;+  int state = 0;&lt;br /&gt;+  UInt32 rep0 = 1, rep1 = 1, rep2 = 1, rep3 = 1;&lt;br /&gt;+  int len = 0;&lt;br /&gt;+  const Byte *Buffer;&lt;br /&gt;+  const Byte *BufferLim;&lt;br /&gt;+  UInt32 Range;&lt;br /&gt;+  UInt32 Code;&lt;br /&gt;+&lt;br /&gt;+  #ifndef _LZMA_IN_CB&lt;br /&gt;+  *inSizeProcessed = 0;&lt;br /&gt;+  #endif&lt;br /&gt;+  *outSizeProcessed = 0;&lt;br /&gt;+&lt;br /&gt;+  {&lt;br /&gt;+    UInt32 i;&lt;br /&gt;+    UInt32 numProbs = Literal + ((UInt32)LZMA_LIT_SIZE &lt;&lt; (lc + vs-&gt;Properties.lp));&lt;br /&gt;+    for (i = 0; i &lt; numProbs; i++)&lt;br /&gt;+      p[i] = kBitModelTotal &gt;&gt; 1;&lt;br /&gt;+  }&lt;br /&gt;+  &lt;br /&gt;+  #ifdef _LZMA_IN_CB&lt;br /&gt;+  RC_INIT;&lt;br /&gt;+  #else&lt;br /&gt;+  RC_INIT(inStream, inSize);&lt;br /&gt;+  #endif&lt;br /&gt;+&lt;br /&gt;+  #endif /* _LZMA_OUT_READ */&lt;br /&gt;+&lt;br /&gt;+  while(nowPos &lt; outSize)&lt;br /&gt;+  {&lt;br /&gt;+    CProb *prob;&lt;br /&gt;+    UInt32 bound;&lt;br /&gt;+    int posState = (int)(&lt;br /&gt;+        (nowPos &lt;br /&gt;+        #ifdef _LZMA_OUT_READ&lt;br /&gt;+        + globalPos&lt;br /&gt;+        #endif&lt;br /&gt;+        )&lt;br /&gt;+        &amp; posStateMask);&lt;br /&gt;+&lt;br /&gt;+    prob = p + IsMatch + (state &lt;&lt; kNumPosBitsMax) + posState;&lt;br /&gt;+    IfBit0(prob)&lt;br /&gt;+    {&lt;br /&gt;+      int symbol = 1;&lt;br /&gt;+      UpdateBit0(prob)&lt;br /&gt;+      prob = p + Literal + (LZMA_LIT_SIZE * &lt;br /&gt;+        (((&lt;br /&gt;+        (nowPos &lt;br /&gt;+        #ifdef _LZMA_OUT_READ&lt;br /&gt;+        + globalPos&lt;br /&gt;+        #endif&lt;br /&gt;+        )&lt;br /&gt;+        &amp; literalPosMask) &lt;&lt; lc) + (previousByte &gt;&gt; (8 - lc))));&lt;br /&gt;+&lt;br /&gt;+      if (state &gt;= kNumLitStates)&lt;br /&gt;+      {&lt;br /&gt;+        int matchByte;&lt;br /&gt;+        #ifdef _LZMA_OUT_READ&lt;br /&gt;+        UInt32 pos = dictionaryPos - rep0;&lt;br /&gt;+        if (pos &gt;= dictionarySize)&lt;br /&gt;+          pos += dictionarySize;&lt;br /&gt;+        matchByte = dictionary[pos];&lt;br /&gt;+        #else&lt;br /&gt;+        matchByte = outStream[nowPos - rep0];&lt;br /&gt;+        #endif&lt;br /&gt;+        do&lt;br /&gt;+        {&lt;br /&gt;+          int bit;&lt;br /&gt;+          CProb *probLit;&lt;br /&gt;+          matchByte &lt;&lt;= 1;&lt;br /&gt;+          bit = (matchByte &amp; 0x100);&lt;br /&gt;+          probLit = prob + 0x100 + bit + symbol;&lt;br /&gt;+          RC_GET_BIT2(probLit, symbol, if (bit != 0) break, if (bit == 0) break)&lt;br /&gt;+        }&lt;br /&gt;+        while (symbol &lt; 0x100);&lt;br /&gt;+      }&lt;br /&gt;+      while (symbol &lt; 0x100)&lt;br /&gt;+      {&lt;br /&gt;+        CProb *probLit = prob + symbol;&lt;br /&gt;+        RC_GET_BIT(probLit, symbol)&lt;br /&gt;+      }&lt;br /&gt;+      previousByte = (Byte)symbol;&lt;br /&gt;+&lt;br /&gt;+      outStream[nowPos++] = previousByte;&lt;br /&gt;+      #ifdef _LZMA_OUT_READ&lt;br /&gt;+      if (distanceLimit &lt; dictionarySize)&lt;br /&gt;+        distanceLimit++;&lt;br /&gt;+&lt;br /&gt;+      dictionary[dictionaryPos] = previousByte;&lt;br /&gt;+      if (++dictionaryPos == dictionarySize)&lt;br /&gt;+        dictionaryPos = 0;&lt;br /&gt;+      #endif&lt;br /&gt;+      if (state &lt; 4) state = 0;&lt;br /&gt;+      else if (state &lt; 10) state -= 3;&lt;br /&gt;+      else state -= 6;&lt;br /&gt;+    }&lt;br /&gt;+    else             &lt;br /&gt;+    {&lt;br /&gt;+      UpdateBit1(prob);&lt;br /&gt;+      prob = p + IsRep + state;&lt;br /&gt;+      IfBit0(prob)&lt;br /&gt;+      {&lt;br /&gt;+        UpdateBit0(prob);&lt;br /&gt;+        rep3 = rep2;&lt;br /&gt;+        rep2 = rep1;&lt;br /&gt;+        rep1 = rep0;&lt;br /&gt;+        state = state &lt; kNumLitStates ? 0 : 3;&lt;br /&gt;+        prob = p + LenCoder;&lt;br /&gt;+      }&lt;br /&gt;+      else&lt;br /&gt;+      {&lt;br /&gt;+        UpdateBit1(prob);&lt;br /&gt;+        prob = p + IsRepG0 + state;&lt;br /&gt;+        IfBit0(prob)&lt;br /&gt;+        {&lt;br /&gt;+          UpdateBit0(prob);&lt;br /&gt;+          prob = p + IsRep0Long + (state &lt;&lt; kNumPosBitsMax) + posState;&lt;br /&gt;+          IfBit0(prob)&lt;br /&gt;+          {&lt;br /&gt;+            #ifdef _LZMA_OUT_READ&lt;br /&gt;+            UInt32 pos;&lt;br /&gt;+            #endif&lt;br /&gt;+            UpdateBit0(prob);&lt;br /&gt;+            &lt;br /&gt;+            #ifdef _LZMA_OUT_READ&lt;br /&gt;+            if (distanceLimit == 0)&lt;br /&gt;+            #else&lt;br /&gt;+            if (nowPos == 0)&lt;br /&gt;+            #endif&lt;br /&gt;+              return LZMA_RESULT_DATA_ERROR;&lt;br /&gt;+            &lt;br /&gt;+            state = state &lt; kNumLitStates ? 9 : 11;&lt;br /&gt;+            #ifdef _LZMA_OUT_READ&lt;br /&gt;+            pos = dictionaryPos - rep0;&lt;br /&gt;+            if (pos &gt;= dictionarySize)&lt;br /&gt;+              pos += dictionarySize;&lt;br /&gt;+            previousByte = dictionary[pos];&lt;br /&gt;+            dictionary[dictionaryPos] = previousByte;&lt;br /&gt;+            if (++dictionaryPos == dictionarySize)&lt;br /&gt;+              dictionaryPos = 0;&lt;br /&gt;+            #else&lt;br /&gt;+            previousByte = outStream[nowPos - rep0];&lt;br /&gt;+            #endif&lt;br /&gt;+            outStream[nowPos++] = previousByte;&lt;br /&gt;+            #ifdef _LZMA_OUT_READ&lt;br /&gt;+            if (distanceLimit &lt; dictionarySize)&lt;br /&gt;+              distanceLimit++;&lt;br /&gt;+            #endif&lt;br /&gt;+&lt;br /&gt;+            continue;&lt;br /&gt;+          }&lt;br /&gt;+          else&lt;br /&gt;+          {&lt;br /&gt;+            UpdateBit1(prob);&lt;br /&gt;+          }&lt;br /&gt;+        }&lt;br /&gt;+        else&lt;br /&gt;+        {&lt;br /&gt;+          UInt32 distance;&lt;br /&gt;+          UpdateBit1(prob);&lt;br /&gt;+          prob = p + IsRepG1 + state;&lt;br /&gt;+          IfBit0(prob)&lt;br /&gt;+          {&lt;br /&gt;+            UpdateBit0(prob);&lt;br /&gt;+            distance = rep1;&lt;br /&gt;+          }&lt;br /&gt;+          else &lt;br /&gt;+          {&lt;br /&gt;+            UpdateBit1(prob);&lt;br /&gt;+            prob = p + IsRepG2 + state;&lt;br /&gt;+            IfBit0(prob)&lt;br /&gt;+            {&lt;br /&gt;+              UpdateBit0(prob);&lt;br /&gt;+              distance = rep2;&lt;br /&gt;+            }&lt;br /&gt;+            else&lt;br /&gt;+            {&lt;br /&gt;+              UpdateBit1(prob);&lt;br /&gt;+              distance = rep3;&lt;br /&gt;+              rep3 = rep2;&lt;br /&gt;+            }&lt;br /&gt;+            rep2 = rep1;&lt;br /&gt;+          }&lt;br /&gt;+          rep1 = rep0;&lt;br /&gt;+          rep0 = distance;&lt;br /&gt;+        }&lt;br /&gt;+        state = state &lt; kNumLitStates ? 8 : 11;&lt;br /&gt;+        prob = p + RepLenCoder;&lt;br /&gt;+      }&lt;br /&gt;+      {&lt;br /&gt;+        int numBits, offset;&lt;br /&gt;+        CProb *probLen = prob + LenChoice;&lt;br /&gt;+        IfBit0(probLen)&lt;br /&gt;+        {&lt;br /&gt;+          UpdateBit0(probLen);&lt;br /&gt;+          probLen = prob + LenLow + (posState &lt;&lt; kLenNumLowBits);&lt;br /&gt;+          offset = 0;&lt;br /&gt;+          numBits = kLenNumLowBits;&lt;br /&gt;+        }&lt;br /&gt;+        else&lt;br /&gt;+        {&lt;br /&gt;+          UpdateBit1(probLen);&lt;br /&gt;+          probLen = prob + LenChoice2;&lt;br /&gt;+          IfBit0(probLen)&lt;br /&gt;+          {&lt;br /&gt;+            UpdateBit0(probLen);&lt;br /&gt;+            probLen = prob + LenMid + (posState &lt;&lt; kLenNumMidBits);&lt;br /&gt;+            offset = kLenNumLowSymbols;&lt;br /&gt;+            numBits = kLenNumMidBits;&lt;br /&gt;+          }&lt;br /&gt;+          else&lt;br /&gt;+          {&lt;br /&gt;+            UpdateBit1(probLen);&lt;br /&gt;+            probLen = prob + LenHigh;&lt;br /&gt;+            offset = kLenNumLowSymbols + kLenNumMidSymbols;&lt;br /&gt;+            numBits = kLenNumHighBits;&lt;br /&gt;+          }&lt;br /&gt;+        }&lt;br /&gt;+        RangeDecoderBitTreeDecode(probLen, numBits, len);&lt;br /&gt;+        len += offset;&lt;br /&gt;+      }&lt;br /&gt;+&lt;br /&gt;+      if (state &lt; 4)&lt;br /&gt;+      {&lt;br /&gt;+        int posSlot;&lt;br /&gt;+        state += kNumLitStates;&lt;br /&gt;+        prob = p + PosSlot +&lt;br /&gt;+            ((len &lt; kNumLenToPosStates ? len : kNumLenToPosStates - 1) &lt;&lt; &lt;br /&gt;+            kNumPosSlotBits);&lt;br /&gt;+        RangeDecoderBitTreeDecode(prob, kNumPosSlotBits, posSlot);&lt;br /&gt;+        if (posSlot &gt;= kStartPosModelIndex)&lt;br /&gt;+        {&lt;br /&gt;+          int numDirectBits = ((posSlot &gt;&gt; 1) - 1);&lt;br /&gt;+          rep0 = (2 | ((UInt32)posSlot &amp; 1));&lt;br /&gt;+          if (posSlot &lt; kEndPosModelIndex)&lt;br /&gt;+          {&lt;br /&gt;+            rep0 &lt;&lt;= numDirectBits;&lt;br /&gt;+            prob = p + SpecPos + rep0 - posSlot - 1;&lt;br /&gt;+          }&lt;br /&gt;+          else&lt;br /&gt;+          {&lt;br /&gt;+            numDirectBits -= kNumAlignBits;&lt;br /&gt;+            do&lt;br /&gt;+            {&lt;br /&gt;+              RC_NORMALIZE&lt;br /&gt;+              Range &gt;&gt;= 1;&lt;br /&gt;+              rep0 &lt;&lt;= 1;&lt;br /&gt;+              if (Code &gt;= Range)&lt;br /&gt;+              {&lt;br /&gt;+                Code -= Range;&lt;br /&gt;+                rep0 |= 1;&lt;br /&gt;+              }&lt;br /&gt;+            }&lt;br /&gt;+            while (--numDirectBits != 0);&lt;br /&gt;+            prob = p + Align;&lt;br /&gt;+            rep0 &lt;&lt;= kNumAlignBits;&lt;br /&gt;+            numDirectBits = kNumAlignBits;&lt;br /&gt;+          }&lt;br /&gt;+          {&lt;br /&gt;+            int i = 1;&lt;br /&gt;+            int mi = 1;&lt;br /&gt;+            do&lt;br /&gt;+            {&lt;br /&gt;+              CProb *prob3 = prob + mi;&lt;br /&gt;+              RC_GET_BIT2(prob3, mi, ; , rep0 |= i);&lt;br /&gt;+              i &lt;&lt;= 1;&lt;br /&gt;+            }&lt;br /&gt;+            while(--numDirectBits != 0);&lt;br /&gt;+          }&lt;br /&gt;+        }&lt;br /&gt;+        else&lt;br /&gt;+          rep0 = posSlot;&lt;br /&gt;+        if (++rep0 == (UInt32)(0))&lt;br /&gt;+        {&lt;br /&gt;+          /* it's for stream version */&lt;br /&gt;+          len = kLzmaStreamWasFinishedId;&lt;br /&gt;+          break;&lt;br /&gt;+        }&lt;br /&gt;+      }&lt;br /&gt;+&lt;br /&gt;+      len += kMatchMinLen;&lt;br /&gt;+      #ifdef _LZMA_OUT_READ&lt;br /&gt;+      if (rep0 &gt; distanceLimit) &lt;br /&gt;+      #else&lt;br /&gt;+      if (rep0 &gt; nowPos)&lt;br /&gt;+      #endif&lt;br /&gt;+        return LZMA_RESULT_DATA_ERROR;&lt;br /&gt;+&lt;br /&gt;+      #ifdef _LZMA_OUT_READ&lt;br /&gt;+      if (dictionarySize - distanceLimit &gt; (UInt32)len)&lt;br /&gt;+        distanceLimit += len;&lt;br /&gt;+      else&lt;br /&gt;+        distanceLimit = dictionarySize;&lt;br /&gt;+      #endif&lt;br /&gt;+&lt;br /&gt;+      do&lt;br /&gt;+      {&lt;br /&gt;+        #ifdef _LZMA_OUT_READ&lt;br /&gt;+        UInt32 pos = dictionaryPos - rep0;&lt;br /&gt;+        if (pos &gt;= dictionarySize)&lt;br /&gt;+          pos += dictionarySize;&lt;br /&gt;+        previousByte = dictionary[pos];&lt;br /&gt;+        dictionary[dictionaryPos] = previousByte;&lt;br /&gt;+        if (++dictionaryPos == dictionarySize)&lt;br /&gt;+          dictionaryPos = 0;&lt;br /&gt;+        #else&lt;br /&gt;+        previousByte = outStream[nowPos - rep0];&lt;br /&gt;+        #endif&lt;br /&gt;+        len--;&lt;br /&gt;+        outStream[nowPos++] = previousByte;&lt;br /&gt;+      }&lt;br /&gt;+      while(len != 0 &amp;&amp; nowPos &lt; outSize);&lt;br /&gt;+    }&lt;br /&gt;+  }&lt;br /&gt;+  RC_NORMALIZE;&lt;br /&gt;+&lt;br /&gt;+  #ifdef _LZMA_OUT_READ&lt;br /&gt;+  vs-&gt;Range = Range;&lt;br /&gt;+  vs-&gt;Code = Code;&lt;br /&gt;+  vs-&gt;DictionaryPos = dictionaryPos;&lt;br /&gt;+  vs-&gt;GlobalPos = globalPos + (UInt32)nowPos;&lt;br /&gt;+  vs-&gt;DistanceLimit = distanceLimit;&lt;br /&gt;+  vs-&gt;Reps[0] = rep0;&lt;br /&gt;+  vs-&gt;Reps[1] = rep1;&lt;br /&gt;+  vs-&gt;Reps[2] = rep2;&lt;br /&gt;+  vs-&gt;Reps[3] = rep3;&lt;br /&gt;+  vs-&gt;State = state;&lt;br /&gt;+  vs-&gt;RemainLen = len;&lt;br /&gt;+  vs-&gt;TempDictionary[0] = tempDictionary[0];&lt;br /&gt;+  #endif&lt;br /&gt;+&lt;br /&gt;+  #ifdef _LZMA_IN_CB&lt;br /&gt;+  vs-&gt;Buffer = Buffer;&lt;br /&gt;+  vs-&gt;BufferLim = BufferLim;&lt;br /&gt;+  #else&lt;br /&gt;+  *inSizeProcessed = (SizeT)(Buffer - inStream);&lt;br /&gt;+  #endif&lt;br /&gt;+  *outSizeProcessed = nowPos;&lt;br /&gt;+  return LZMA_RESULT_OK;&lt;br /&gt;+}&lt;br /&gt;diff -x .gitignore -Nurp linux-2.6.20.11/fs/squashfs/LzmaDecode.h  linux-2.6.20.11_lzma/fs/squashfs/LzmaDecode.h&lt;br /&gt;--- linux-2.6.20.11/fs/squashfs/LzmaDecode.h    1970-01-01 09:00:00.000000000 +0900&lt;br /&gt;+++ linux-2.6.20.11_lzma/fs/squashfs/LzmaDecode.h       2007-05-15 20:34:12.000000000 +0900&lt;br /&gt;@@ -0,0 +1,113 @@&lt;br /&gt;+/* &lt;br /&gt;+  LzmaDecode.h&lt;br /&gt;+  LZMA Decoder interface&lt;br /&gt;+&lt;br /&gt;+  LZMA SDK 4.40 Copyright (c) 1999-2006 Igor Pavlov (2006-05-01)&lt;br /&gt;+  http://www.7-zip.org/&lt;br /&gt;+&lt;br /&gt;+  LZMA SDK is licensed under two licenses:&lt;br /&gt;+  1) GNU Lesser General Public License (GNU LGPL)&lt;br /&gt;+  2) Common Public License (CPL)&lt;br /&gt;+  It means that you can select one of these two licenses and &lt;br /&gt;+  follow rules of that license.&lt;br /&gt;+&lt;br /&gt;+  SPECIAL EXCEPTION:&lt;br /&gt;+  Igor Pavlov, as the author of this code, expressly permits you to &lt;br /&gt;+  statically or dynamically link your code (or bind by name) to the &lt;br /&gt;+  interfaces of this file without subjecting your linked code to the &lt;br /&gt;+  terms of the CPL or GNU LGPL. Any modifications or additions &lt;br /&gt;+  to this file, however, are subject to the LGPL or CPL terms.&lt;br /&gt;+*/&lt;br /&gt;+&lt;br /&gt;+#ifndef __LZMADECODE_H&lt;br /&gt;+#define __LZMADECODE_H&lt;br /&gt;+&lt;br /&gt;+#include "LzmaTypes.h"&lt;br /&gt;+&lt;br /&gt;+/* #define _LZMA_IN_CB */&lt;br /&gt;+/* Use callback for input data */&lt;br /&gt;+&lt;br /&gt;+/* #define _LZMA_OUT_READ */&lt;br /&gt;+/* Use read function for output data */&lt;br /&gt;+&lt;br /&gt;+/* #define _LZMA_PROB32 */&lt;br /&gt;+/* It can increase speed on some 32-bit CPUs, &lt;br /&gt;+   but memory usage will be doubled in that case */&lt;br /&gt;+&lt;br /&gt;+/* #define _LZMA_LOC_OPT */&lt;br /&gt;+/* Enable local speed optimizations inside code */&lt;br /&gt;+&lt;br /&gt;+#ifdef _LZMA_PROB32&lt;br /&gt;+#define CProb UInt32&lt;br /&gt;+#else&lt;br /&gt;+#define CProb UInt16&lt;br /&gt;+#endif&lt;br /&gt;+&lt;br /&gt;+#define LZMA_RESULT_OK 0&lt;br /&gt;+#define LZMA_RESULT_DATA_ERROR 1&lt;br /&gt;+&lt;br /&gt;+#ifdef _LZMA_IN_CB&lt;br /&gt;+typedef struct _ILzmaInCallback&lt;br /&gt;+{&lt;br /&gt;+  int (*Read)(void *object, const unsigned char **buffer, SizeT *bufferSize);&lt;br /&gt;+} ILzmaInCallback;&lt;br /&gt;+#endif&lt;br /&gt;+&lt;br /&gt;+#define LZMA_BASE_SIZE 1846&lt;br /&gt;+#define LZMA_LIT_SIZE 768&lt;br /&gt;+&lt;br /&gt;+#define LZMA_PROPERTIES_SIZE 5&lt;br /&gt;+&lt;br /&gt;+typedef struct _CLzmaProperties&lt;br /&gt;+{&lt;br /&gt;+  int lc;&lt;br /&gt;+  int lp;&lt;br /&gt;+  int pb;&lt;br /&gt;+  #ifdef _LZMA_OUT_READ&lt;br /&gt;+  UInt32 DictionarySize;&lt;br /&gt;+  #endif&lt;br /&gt;+}CLzmaProperties;&lt;br /&gt;+&lt;br /&gt;+int LzmaDecodeProperties(CLzmaProperties *propsRes, const unsigned char *propsData, int size);&lt;br /&gt;+&lt;br /&gt;+#define LzmaGetNumProbs(Properties) (LZMA_BASE_SIZE + (LZMA_LIT_SIZE &lt;&lt; ((Properties)-&gt;lc + (Properties)-&gt;lp)))&lt;br /&gt;+&lt;br /&gt;+#define kLzmaNeedInitId (-2)&lt;br /&gt;+&lt;br /&gt;+typedef struct _CLzmaDecoderState&lt;br /&gt;+{&lt;br /&gt;+  CLzmaProperties Properties;&lt;br /&gt;+  CProb *Probs;&lt;br /&gt;+&lt;br /&gt;+  #ifdef _LZMA_IN_CB&lt;br /&gt;+  const unsigned char *Buffer;&lt;br /&gt;+  const unsigned char *BufferLim;&lt;br /&gt;+  #endif&lt;br /&gt;+&lt;br /&gt;+  #ifdef _LZMA_OUT_READ&lt;br /&gt;+  unsigned char *Dictionary;&lt;br /&gt;+  UInt32 Range;&lt;br /&gt;+  UInt32 Code;&lt;br /&gt;+  UInt32 DictionaryPos;&lt;br /&gt;+  UInt32 GlobalPos;&lt;br /&gt;+  UInt32 DistanceLimit;&lt;br /&gt;+  UInt32 Reps[4];&lt;br /&gt;+  int State;&lt;br /&gt;+  int RemainLen;&lt;br /&gt;+  unsigned char TempDictionary[4];&lt;br /&gt;+  #endif&lt;br /&gt;+} CLzmaDecoderState;&lt;br /&gt;+&lt;br /&gt;+#ifdef _LZMA_OUT_READ&lt;br /&gt;+#define LzmaDecoderInit(vs) { (vs)-&gt;RemainLen = kLzmaNeedInitId; }&lt;br /&gt;+#endif&lt;br /&gt;+&lt;br /&gt;+int LzmaDecode(CLzmaDecoderState *vs,&lt;br /&gt;+    #ifdef _LZMA_IN_CB&lt;br /&gt;+    ILzmaInCallback *inCallback,&lt;br /&gt;+    #else&lt;br /&gt;+    const unsigned char *inStream, SizeT inSize, SizeT *inSizeProcessed,&lt;br /&gt;+    #endif&lt;br /&gt;+    unsigned char *outStream, SizeT outSize, SizeT *outSizeProcessed);&lt;br /&gt;+&lt;br /&gt;+#endif&lt;br /&gt;diff -x .gitignore -Nurp linux-2.6.20.11/fs/squashfs/LzmaTypes.h  linux-2.6.20.11_lzma/fs/squashfs/LzmaTypes.h&lt;br /&gt;--- linux-2.6.20.11/fs/squashfs/LzmaTypes.h     1970-01-01 09:00:00.000000000 +0900&lt;br /&gt;+++ linux-2.6.20.11_lzma/fs/squashfs/LzmaTypes.h        2007-05-15 20:58:42.000000000 +0900&lt;br /&gt;@@ -0,0 +1,45 @@&lt;br /&gt;+/* &lt;br /&gt;+LzmaTypes.h &lt;br /&gt;+&lt;br /&gt;+Types for LZMA Decoder&lt;br /&gt;+&lt;br /&gt;+This file written and distributed to public domain by Igor Pavlov.&lt;br /&gt;+This file is part of LZMA SDK 4.40 (2006-05-01)&lt;br /&gt;+*/&lt;br /&gt;+&lt;br /&gt;+#ifndef __LZMATYPES_H&lt;br /&gt;+#define __LZMATYPES_H&lt;br /&gt;+&lt;br /&gt;+#ifndef _7ZIP_BYTE_DEFINED&lt;br /&gt;+#define _7ZIP_BYTE_DEFINED&lt;br /&gt;+typedef unsigned char Byte;&lt;br /&gt;+#endif &lt;br /&gt;+&lt;br /&gt;+#ifndef _7ZIP_UINT16_DEFINED&lt;br /&gt;+#define _7ZIP_UINT16_DEFINED&lt;br /&gt;+typedef unsigned short UInt16;&lt;br /&gt;+#endif &lt;br /&gt;+&lt;br /&gt;+#ifndef _7ZIP_UINT32_DEFINED&lt;br /&gt;+#define _7ZIP_UINT32_DEFINED&lt;br /&gt;+#ifdef _LZMA_UINT32_IS_ULONG&lt;br /&gt;+typedef unsigned long UInt32;&lt;br /&gt;+#else&lt;br /&gt;+typedef unsigned int UInt32;&lt;br /&gt;+#endif&lt;br /&gt;+#endif &lt;br /&gt;+&lt;br /&gt;+/* #define _LZMA_SYSTEM_SIZE_T */&lt;br /&gt;+/* Use system's size_t. You can use it to enable 64-bit sizes supporting */&lt;br /&gt;+&lt;br /&gt;+#ifndef _7ZIP_SIZET_DEFINED&lt;br /&gt;+#define _7ZIP_SIZET_DEFINED&lt;br /&gt;+#ifdef _LZMA_SYSTEM_SIZE_T&lt;br /&gt;+#include &lt;stddef.h&gt;&lt;br /&gt;+typedef size_t SizeT;&lt;br /&gt;+#else&lt;br /&gt;+typedef UInt32 SizeT;&lt;br /&gt;+#endif&lt;br /&gt;+#endif&lt;br /&gt;+&lt;br /&gt;+#endif&lt;br /&gt;diff -x .gitignore -Nurp linux-2.6.20.11/fs/squashfs/Makefile linux-2.6.20.11_lzma/fs/squashfs/Makefile&lt;br /&gt;--- linux-2.6.20.11/fs/squashfs/Makefile        2007-05-23 16:07:25.000000000 +0900&lt;br /&gt;+++ linux-2.6.20.11_lzma/fs/squashfs/Makefile   2007-05-17 21:47:50.000000000 +0900&lt;br /&gt;@@ -4,4 +4,6 @@&lt;br /&gt; &lt;br /&gt; obj-$(CONFIG_SQUASHFS) += squashfs.o&lt;br /&gt; squashfs-y += inode.o&lt;br /&gt;-squashfs-y += squashfs2_0.o&lt;br /&gt;+squashfs-y += squashfs2_0.o LzmaDecode.o uncomp.o&lt;br /&gt;+&lt;br /&gt;+EXTRA_CFLAGS += -U_LZMA_PROB32&lt;br /&gt;diff -x .gitignore -Nurp linux-2.6.20.11/fs/squashfs/sqlzma.h linux-2.6.20.11_lzma/fs/squashfs/sqlzma.h&lt;br /&gt;--- linux-2.6.20.11/fs/squashfs/sqlzma.h        1970-01-01 09:00:00.000000000 +0900&lt;br /&gt;+++ linux-2.6.20.11_lzma/fs/squashfs/sqlzma.h   2007-05-15 20:56:07.000000000 +0900&lt;br /&gt;@@ -0,0 +1,79 @@&lt;br /&gt;+/*&lt;br /&gt;+ * Copyright (C) 2006 Junjiro Okajima&lt;br /&gt;+ * Copyright (C) 2006 Tomas Matejicek, slax.org&lt;br /&gt;+ *&lt;br /&gt;+ * LICENSE follows the described one in lzma.&lt;br /&gt;+ */&lt;br /&gt;+&lt;br /&gt;+/* $Id: sqlzma.h,v 1.13 2007/01/07 15:12:48 jro Exp $ */&lt;br /&gt;+&lt;br /&gt;+#ifndef __sqlzma_h__&lt;br /&gt;+#define __sqlzma_h__&lt;br /&gt;+&lt;br /&gt;+#ifndef __KERNEL__&lt;br /&gt;+#include &lt;stdlib.h&gt;&lt;br /&gt;+#include &lt;string.h&gt;&lt;br /&gt;+#include &lt;zlib.h&gt;&lt;br /&gt;+#ifdef _REENTRANT&lt;br /&gt;+#include &lt;pthread.h&gt;&lt;br /&gt;+#endif&lt;br /&gt;+#else&lt;br /&gt;+#include &lt;linux/zlib.h&gt;&lt;br /&gt;+#endif&lt;br /&gt;+#define _7ZIP_BYTE_DEFINED&lt;br /&gt;+&lt;br /&gt;+/*&lt;br /&gt;+ * detect the compression method automatically by the first byte of compressed&lt;br /&gt;+ * data.&lt;br /&gt;+ * according to rfc1950, the first byte of zlib compression must be 0x?8.&lt;br /&gt;+ */&lt;br /&gt;+#define is_lzma(c)     (c == 0x5d)&lt;br /&gt;+&lt;br /&gt;+/* ---------------------------------------------------------------------- */&lt;br /&gt;+&lt;br /&gt;+#ifdef __cplusplus&lt;br /&gt;+extern "C" {&lt;br /&gt;+#endif&lt;br /&gt;+&lt;br /&gt;+#ifndef __KERNEL__&lt;br /&gt;+/* for mksquashfs only */&lt;br /&gt;+int sqlzma_cm(int lzma, z_stream *stream, Bytef *next_in, uInt avail_in,&lt;br /&gt;+             Bytef *next_out, uInt avail_out);&lt;br /&gt;+#endif&lt;br /&gt;+&lt;br /&gt;+/* ---------------------------------------------------------------------- */&lt;br /&gt;+/*&lt;br /&gt;+ * Three patterns for sqlzma uncompression. very dirty code.&lt;br /&gt;+ * - kernel space (squashfs kernel module)&lt;br /&gt;+ * - user space with pthread (mksquashfs)&lt;br /&gt;+ * - user space without pthread (unsquashfs)&lt;br /&gt;+ */&lt;br /&gt;+&lt;br /&gt;+struct sized_buf {&lt;br /&gt;+       unsigned int    sz;&lt;br /&gt;+       unsigned char   *buf;&lt;br /&gt;+};&lt;br /&gt;+&lt;br /&gt;+enum {SQUN_PROB, SQUN_RESULT, SQUN_LAST};&lt;br /&gt;+struct sqlzma_un {&lt;br /&gt;+       int                     un_lzma;&lt;br /&gt;+       struct sized_buf        un_a[SQUN_LAST];&lt;br /&gt;+       unsigned char           un_prob[31960]; /* unlzma 64KB */&lt;br /&gt;+       z_stream                un_stream;&lt;br /&gt;+#define un_cmbuf       un_stream.next_in&lt;br /&gt;+#define un_cmlen       un_stream.avail_in&lt;br /&gt;+#define un_resbuf      un_stream.next_out&lt;br /&gt;+#define un_resroom     un_stream.avail_out&lt;br /&gt;+#define un_reslen      un_stream.total_out&lt;br /&gt;+};&lt;br /&gt;+&lt;br /&gt;+int sqlzma_init(struct sqlzma_un *un, int do_lzma, unsigned int res_sz);&lt;br /&gt;+int sqlzma_un(struct sqlzma_un *un, struct sized_buf *src, struct sized_buf *dst);&lt;br /&gt;+void sqlzma_fin(struct sqlzma_un *un);&lt;br /&gt;+&lt;br /&gt;+/* ---------------------------------------------------------------------- */&lt;br /&gt;+&lt;br /&gt;+#ifdef __cplusplus&lt;br /&gt;+};&lt;br /&gt;+#endif&lt;br /&gt;+#endif&lt;br /&gt;diff -x .gitignore -Nurp linux-2.6.20.11/fs/squashfs/sqmagic.h linux-2.6.20.11_lzma/fs/squashfs/sqmagic.h&lt;br /&gt;--- linux-2.6.20.11/fs/squashfs/sqmagic.h       1970-01-01 09:00:00.000000000 +0900&lt;br /&gt;+++ linux-2.6.20.11_lzma/fs/squashfs/sqmagic.h  2007-05-15 20:56:07.000000000 +0900&lt;br /&gt;@@ -0,0 +1,17 @@&lt;br /&gt;+/*&lt;br /&gt;+ * Copyright (C) 2006 Junjiro Okajima&lt;br /&gt;+ * Copyright (C) 2006 Tomas Matejicek, slax.org&lt;br /&gt;+ *&lt;br /&gt;+ * LICENSE must follow the one in squashfs.&lt;br /&gt;+ */&lt;br /&gt;+&lt;br /&gt;+/* $Id: sqmagic.h,v 1.2 2006/11/27 03:54:58 jro Exp $ */&lt;br /&gt;+&lt;br /&gt;+#ifndef __sqmagic_h__&lt;br /&gt;+#define __sqmagic_h__&lt;br /&gt;+&lt;br /&gt;+/* see SQUASHFS_MAGIC in squashfs_fs.h */&lt;br /&gt;+#define SQUASHFS_MAGIC_LZMA            0x71736873&lt;br /&gt;+#define SQUASHFS_MAGIC_LZMA_SWAP       0x73687371&lt;br /&gt;+&lt;br /&gt;+#endif&lt;br /&gt;diff -x .gitignore -Nurp linux-2.6.20.11/fs/squashfs/uncomp.c linux-2.6.20.11_lzma/fs/squashfs/uncomp.c&lt;br /&gt;--- linux-2.6.20.11/fs/squashfs/uncomp.c        1970-01-01 09:00:00.000000000 +0900&lt;br /&gt;+++ linux-2.6.20.11_lzma/fs/squashfs/uncomp.c   2007-05-15 20:42:39.000000000 +0900&lt;br /&gt;@@ -0,0 +1,221 @@&lt;br /&gt;+/*&lt;br /&gt;+ * Copyright (C) 2006, 2007 Junjiro Okajima&lt;br /&gt;+ * Copyright (C) 2006, 2007 Tomas Matejicek, slax.org&lt;br /&gt;+ *&lt;br /&gt;+ * LICENSE follows the described one in lzma.txt.&lt;br /&gt;+ */&lt;br /&gt;+&lt;br /&gt;+/* $Id: uncomp.c,v 1.30 2007/03/04 12:45:53 jro Exp $ */&lt;br /&gt;+&lt;br /&gt;+/* extract some parts from lzma443/C/7zip/Compress/LZMA_C/LzmaTest.c */&lt;br /&gt;+&lt;br /&gt;+#ifndef __KERNEL__&lt;br /&gt;+#include &lt;stdio.h&gt;&lt;br /&gt;+#include &lt;stdlib.h&gt;&lt;br /&gt;+#include &lt;string.h&gt;&lt;br /&gt;+#include &lt;errno.h&gt;&lt;br /&gt;+#include &lt;assert.h&gt;&lt;br /&gt;+#include &lt;pthread.h&gt;&lt;br /&gt;+#define unlikely(x)            __builtin_expect(!!(x), 0)&lt;br /&gt;+#define BUG_ON(x)              assert(!(x))&lt;br /&gt;+/* sqlzma buffers are always larger than a page. true? */&lt;br /&gt;+#define kmalloc(sz,gfp)                malloc(sz)&lt;br /&gt;+#define kfree(p)               free(p)&lt;br /&gt;+#define zlib_inflate(s, f)     inflate(s, f)&lt;br /&gt;+#define zlib_inflateInit(s)    inflateInit(s)&lt;br /&gt;+#define zlib_inflateReset(s)   inflateReset(s)&lt;br /&gt;+#define zlib_inflateEnd(s)     inflateEnd(s)&lt;br /&gt;+#else&lt;br /&gt;+#include &lt;linux/init.h&gt;&lt;br /&gt;+#include &lt;linux/module.h&gt;&lt;br /&gt;+#include &lt;linux/kernel.h&gt;&lt;br /&gt;+#include &lt;linux/vmalloc.h&gt;&lt;br /&gt;+#ifndef WARN_ON_ONCE&lt;br /&gt;+#define WARN_ON_ONCE(b)        WARN_ON(b)&lt;br /&gt;+#endif&lt;br /&gt;+#endif /* __KERNEL__ */&lt;br /&gt;+&lt;br /&gt;+#include "sqlzma.h"&lt;br /&gt;+#include "LzmaDecode.h"&lt;br /&gt;+&lt;br /&gt;+static int LzmaUncompress(struct sqlzma_un *un)&lt;br /&gt;+{&lt;br /&gt;+       int err, i, ret;&lt;br /&gt;+       SizeT outSize, inProcessed, outProcessed, srclen;&lt;br /&gt;+       /* it's about 24-80 bytes structure, if int is 32-bit */&lt;br /&gt;+       CLzmaDecoderState state;&lt;br /&gt;+       unsigned char *dst, *src, a[8];&lt;br /&gt;+       struct sized_buf *sbuf;&lt;br /&gt;+&lt;br /&gt;+       /* Decode LZMA properties and allocate memory */&lt;br /&gt;+       err = -EINVAL;&lt;br /&gt;+       src = un-&gt;un_cmbuf;&lt;br /&gt;+       ret = LzmaDecodeProperties(&amp;state.Properties, src, LZMA_PROPERTIES_SIZE);&lt;br /&gt;+       src += LZMA_PROPERTIES_SIZE;&lt;br /&gt;+       if (unlikely(ret != LZMA_RESULT_OK))&lt;br /&gt;+               goto out;&lt;br /&gt;+       i = LzmaGetNumProbs(&amp;state.Properties);&lt;br /&gt;+       if (unlikely(i &lt;= 0))&lt;br /&gt;+               i = 1;&lt;br /&gt;+       i *= sizeof(CProb);&lt;br /&gt;+       sbuf = un-&gt;un_a + SQUN_PROB;&lt;br /&gt;+       if (unlikely(sbuf-&gt;sz &lt; i)) {&lt;br /&gt;+               if (sbuf-&gt;buf &amp;&amp; sbuf-&gt;buf != un-&gt;un_prob)&lt;br /&gt;+                       kfree(sbuf-&gt;buf);&lt;br /&gt;+#ifdef __KERNEL__&lt;br /&gt;+               printk("%s:%d: %d --&gt; %d\n", __func__, __LINE__, sbuf-&gt;sz, i);&lt;br /&gt;+#else&lt;br /&gt;+               printf("%d --&gt; %d\n", sbuf-&gt;sz, i);&lt;br /&gt;+#endif&lt;br /&gt;+               err = -ENOMEM;&lt;br /&gt;+               sbuf-&gt;sz = 0;&lt;br /&gt;+               sbuf-&gt;buf = kmalloc(i, GFP_ATOMIC);&lt;br /&gt;+               if (unlikely(!sbuf-&gt;buf))&lt;br /&gt;+                       goto out;&lt;br /&gt;+               sbuf-&gt;sz = i;&lt;br /&gt;+       }&lt;br /&gt;+       state.Probs = (void*)sbuf-&gt;buf;&lt;br /&gt;+&lt;br /&gt;+       /* Read uncompressed size */&lt;br /&gt;+       memcpy(a, src, sizeof(a));&lt;br /&gt;+       src += sizeof(a);&lt;br /&gt;+       outSize = a[0] | (a[1] &lt;&lt; 8) | (a[2] &lt;&lt; 16) | (a[3] &lt;&lt; 24);&lt;br /&gt;+&lt;br /&gt;+       err = -EINVAL;&lt;br /&gt;+       dst = un-&gt;un_resbuf;&lt;br /&gt;+       if (unlikely(!dst || outSize &gt; un-&gt;un_reslen))&lt;br /&gt;+               goto out;&lt;br /&gt;+       un-&gt;un_reslen = outSize;&lt;br /&gt;+       srclen = un-&gt;un_cmlen - (src - un-&gt;un_cmbuf);&lt;br /&gt;+&lt;br /&gt;+       /* Decompress */&lt;br /&gt;+       err = LzmaDecode(&amp;state, src, srclen, &amp;inProcessed, dst, outSize,&lt;br /&gt;+                        &amp;outProcessed);&lt;br /&gt;+       if (err)&lt;br /&gt;+               err = -EINVAL;&lt;br /&gt;+&lt;br /&gt;+ out:&lt;br /&gt;+#ifndef __KERNEL__&lt;br /&gt;+       if (err)&lt;br /&gt;+               fprintf(stderr, "err %d\n", err);&lt;br /&gt;+#endif&lt;br /&gt;+       return err;&lt;br /&gt;+}&lt;br /&gt;+&lt;br /&gt;+int sqlzma_un(struct sqlzma_un *un, struct sized_buf *src,&lt;br /&gt;+             struct sized_buf *dst)&lt;br /&gt;+{&lt;br /&gt;+       int err, by_lzma = 0;&lt;br /&gt;+       if (un-&gt;un_lzma &amp;&amp; is_lzma(*src-&gt;buf)) {&lt;br /&gt;+               by_lzma = 1;&lt;br /&gt;+               un-&gt;un_cmbuf = src-&gt;buf;&lt;br /&gt;+               un-&gt;un_cmlen = src-&gt;sz;&lt;br /&gt;+               un-&gt;un_resbuf = dst-&gt;buf;&lt;br /&gt;+               un-&gt;un_reslen = dst-&gt;sz;&lt;br /&gt;+&lt;br /&gt;+               /* this library is thread-safe */&lt;br /&gt;+               err = LzmaUncompress(un);&lt;br /&gt;+               goto out;&lt;br /&gt;+       }&lt;br /&gt;+&lt;br /&gt;+       err = zlib_inflateReset(&amp;un-&gt;un_stream);&lt;br /&gt;+       if (unlikely(err != Z_OK))&lt;br /&gt;+               goto out;&lt;br /&gt;+       un-&gt;un_stream.next_in = src-&gt;buf;&lt;br /&gt;+       un-&gt;un_stream.avail_in = src-&gt;sz;&lt;br /&gt;+       un-&gt;un_stream.next_out = dst-&gt;buf;&lt;br /&gt;+       un-&gt;un_stream.avail_out = dst-&gt;sz;&lt;br /&gt;+       err = zlib_inflate(&amp;un-&gt;un_stream, Z_FINISH);&lt;br /&gt;+       if (err == Z_STREAM_END)&lt;br /&gt;+               err = 0;&lt;br /&gt;+&lt;br /&gt;+ out:&lt;br /&gt;+       if (err) {&lt;br /&gt;+#ifdef __KERNEL__&lt;br /&gt;+               WARN_ON_ONCE(1);&lt;br /&gt;+#else&lt;br /&gt;+               char a[64] = "ZLIB ";&lt;br /&gt;+               if (by_lzma) {&lt;br /&gt;+                       strcpy(a, "LZMA ");&lt;br /&gt;+#ifdef _REENTRANT&lt;br /&gt;+                       strerror_r(err, a + 5, sizeof(a) - 5);&lt;br /&gt;+#else&lt;br /&gt;+                       strncat(a, strerror(err), sizeof(a) - 5);&lt;br /&gt;+#endif&lt;br /&gt;+               } else&lt;br /&gt;+                       strncat(a, zError(err), sizeof(a) - 5);&lt;br /&gt;+               fprintf(stderr, "%s: %.*s\n", __func__, sizeof(a), a);&lt;br /&gt;+#endif&lt;br /&gt;+       }&lt;br /&gt;+       return err;&lt;br /&gt;+}&lt;br /&gt;+&lt;br /&gt;+int sqlzma_init(struct sqlzma_un *un, int do_lzma, unsigned int res_sz)&lt;br /&gt;+{&lt;br /&gt;+       int err;&lt;br /&gt;+&lt;br /&gt;+       err = -ENOMEM;&lt;br /&gt;+       un-&gt;un_lzma = do_lzma;&lt;br /&gt;+       memset(un-&gt;un_a, 0, sizeof(un-&gt;un_a));&lt;br /&gt;+       un-&gt;un_a[SQUN_PROB].buf = un-&gt;un_prob;&lt;br /&gt;+       un-&gt;un_a[SQUN_PROB].sz = sizeof(un-&gt;un_prob);&lt;br /&gt;+       if (res_sz) {&lt;br /&gt;+               un-&gt;un_a[SQUN_RESULT].buf = kmalloc(res_sz, GFP_KERNEL);&lt;br /&gt;+               if (unlikely(!un-&gt;un_a[SQUN_RESULT].buf))&lt;br /&gt;+                       return err;&lt;br /&gt;+               un-&gt;un_a[SQUN_RESULT].sz = res_sz;&lt;br /&gt;+       }&lt;br /&gt;+&lt;br /&gt;+       un-&gt;un_stream.next_in = NULL;&lt;br /&gt;+       un-&gt;un_stream.avail_in = 0;&lt;br /&gt;+#ifdef __KERNEL__&lt;br /&gt;+       un-&gt;un_stream.workspace = kmalloc(zlib_inflate_workspacesize(), GFP_KERNEL);&lt;br /&gt;+       if (unlikely(!un-&gt;un_stream.workspace))&lt;br /&gt;+               return err;&lt;br /&gt;+#else&lt;br /&gt;+       un-&gt;un_stream.opaque = NULL;&lt;br /&gt;+       un-&gt;un_stream.zalloc = Z_NULL;&lt;br /&gt;+       un-&gt;un_stream.zfree = Z_NULL;&lt;br /&gt;+#endif&lt;br /&gt;+       err = zlib_inflateInit(&amp;un-&gt;un_stream);&lt;br /&gt;+       if (unlikely(err == Z_MEM_ERROR))&lt;br /&gt;+               return -ENOMEM;&lt;br /&gt;+       BUG_ON(err);&lt;br /&gt;+       return err;&lt;br /&gt;+}&lt;br /&gt;+&lt;br /&gt;+void sqlzma_fin(struct sqlzma_un *un)&lt;br /&gt;+{&lt;br /&gt;+       int i;&lt;br /&gt;+       for (i = 0; i &lt; SQUN_LAST; i++)&lt;br /&gt;+               if (un-&gt;un_a[i].buf &amp;&amp; un-&gt;un_a[i].buf != un-&gt;un_prob)&lt;br /&gt;+                       kfree(un-&gt;un_a[i].buf);&lt;br /&gt;+       BUG_ON(zlib_inflateEnd(&amp;un-&gt;un_stream) != Z_OK);&lt;br /&gt;+}&lt;br /&gt;+&lt;br /&gt;+#ifdef __KERNEL__&lt;br /&gt;+EXPORT_SYMBOL(sqlzma_un);&lt;br /&gt;+EXPORT_SYMBOL(sqlzma_init);&lt;br /&gt;+EXPORT_SYMBOL(sqlzma_fin);&lt;br /&gt;+&lt;br /&gt;+#if 0&lt;br /&gt;+static int __init sqlzma_init(void)&lt;br /&gt;+{&lt;br /&gt;+       return 0;&lt;br /&gt;+}&lt;br /&gt;+&lt;br /&gt;+static void __exit sqlzma_exit(void)&lt;br /&gt;+{&lt;br /&gt;+}&lt;br /&gt;+&lt;br /&gt;+module_init(sqlzma_init);&lt;br /&gt;+module_exit(sqlzma_exit);&lt;br /&gt;+#endif&lt;br /&gt;+&lt;br /&gt;+MODULE_LICENSE("GPL");&lt;br /&gt;+MODULE_AUTHOR("Junjiro Okajima &lt;hooanon05 at yahoo dot co dot jp&gt;");&lt;br /&gt;+MODULE_VERSION("$Id: uncomp.c,v 1.30 2007/03/04 12:45:53 jro Exp $");&lt;br /&gt;+MODULE_DESCRIPTION("LZMA uncompress for squashfs. "&lt;br /&gt;+                  "Some functions for squashfs to support LZMA and "&lt;br /&gt;+                  "a tiny wrapper for LzmaDecode.c in LZMA SDK from www.7-zip.org.");&lt;br /&gt;+#endif&lt;br /&gt;diff -x .gitignore -Nurp linux-2.6.20.11/init/do_mounts_rd.c linux-2.6.20.11_lzma/init/do_mounts_rd.c&lt;br /&gt;--- linux-2.6.20.11/init/do_mounts_rd.c 2007-05-23 16:07:25.000000000 +0900&lt;br /&gt;+++ linux-2.6.20.11_lzma/init/do_mounts_rd.c    2007-05-19 01:30:11.000000000 +0900&lt;br /&gt;@@ -11,6 +11,8 @@&lt;br /&gt; &lt;br /&gt; #include "do_mounts.h"&lt;br /&gt; &lt;br /&gt;+#include "sqmagic.h"&lt;br /&gt;+&lt;br /&gt; #define BUILD_CRAMDISK&lt;br /&gt; &lt;br /&gt; int __initdata rd_prompt = 1;/* 1 = prompt for RAM disk, 0 = don't prompt */&lt;br /&gt;@@ -106,7 +108,7 @@ identify_ramdisk_image(int fd, int start&lt;br /&gt;        }&lt;br /&gt; &lt;br /&gt;        /* squashfs is at block zero too */&lt;br /&gt;-       if (squashfsb-&gt;s_magic == SQUASHFS_MAGIC) {&lt;br /&gt;+       if (squashfsb-&gt;s_magic == SQUASHFS_MAGIC || squashfsb-&gt;s_magic == SQUASHFS_MAGIC_LZMA) {&lt;br /&gt;                printk(KERN_NOTICE&lt;br /&gt;                       "RAMDISK: squashfs filesystem found at block %d\n",&lt;br /&gt;                       start_block);&lt;br /&gt; diff -x .gitignore -Nurp linux-2.6.20.11/init/sqmagic.h linux-2.6.20.11_lzma/init/sqmagic.h&lt;br /&gt;--- linux-2.6.20.11/init/sqmagic.h      1970-01-01 09:00:00.000000000 +0900&lt;br /&gt;+++ linux-2.6.20.11_lzma/init/sqmagic.h 2007-05-19 01:29:36.000000000 +0900&lt;br /&gt;@@ -0,0 +1,17 @@&lt;br /&gt;+/*&lt;br /&gt;+ * Copyright (C) 2006 Junjiro Okajima&lt;br /&gt;+ * Copyright (C) 2006 Tomas Matejicek, slax.org&lt;br /&gt;+ *&lt;br /&gt;+ * LICENSE must follow the one in squashfs.&lt;br /&gt;+ */&lt;br /&gt;+&lt;br /&gt;+/* $Id: sqmagic.h,v 1.2 2006/11/27 03:54:58 jro Exp $ */&lt;br /&gt;+&lt;br /&gt;+#ifndef __sqmagic_h__&lt;br /&gt;+#define __sqmagic_h__&lt;br /&gt;+&lt;br /&gt;+/* see SQUASHFS_MAGIC in squashfs_fs.h */&lt;br /&gt;+#define SQUASHFS_MAGIC_LZMA            0x71736873&lt;br /&gt;+#define SQUASHFS_MAGIC_LZMA_SWAP       0x73687371&lt;br /&gt;+&lt;br /&gt;+#endif&lt;br /&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5347288948477829359-5738418340111791043?l=yoblooc.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yoblooc.blogspot.com/feeds/5738418340111791043/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5347288948477829359&amp;postID=5738418340111791043' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5347288948477829359/posts/default/5738418340111791043'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5347288948477829359/posts/default/5738418340111791043'/><link rel='alternate' type='text/html' href='http://yoblooc.blogspot.com/2007/05/squashfs-lzma.html' title='内核中加入squashfs lzma支持'/><author><name>j.z</name><uri>http://www.blogger.com/profile/15855068428842751244</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5347288948477829359.post-6234097156257035700</id><published>2007-02-26T00:25:00.001-08:00</published><updated>2007-02-26T00:25:37.177-08:00</updated><title type='text'>日文全半角、平片假名与英文对照表</title><content type='html'>日文全半角、平片假名与英文对照表&lt;br /&gt;&lt;br /&gt;"zen-kaku"　全角&lt;br /&gt;"han-kaku" 半角&lt;br /&gt;"zen-kaku kata-kana" 全角片假名&lt;br /&gt;"han-kaku kata-kana" 半角片假名&lt;br /&gt;"zen-kaku hira-gana" 全角平假名&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5347288948477829359-6234097156257035700?l=yoblooc.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yoblooc.blogspot.com/feeds/6234097156257035700/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5347288948477829359&amp;postID=6234097156257035700' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5347288948477829359/posts/default/6234097156257035700'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5347288948477829359/posts/default/6234097156257035700'/><link rel='alternate' type='text/html' href='http://yoblooc.blogspot.com/2007/02/blog-post_26.html' title='日文全半角、平片假名与英文对照表'/><author><name>j.z</name><uri>http://www.blogger.com/profile/15855068428842751244</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5347288948477829359.post-2250802909588947854</id><published>2007-02-26T00:21:00.000-08:00</published><updated>2007-02-26T00:22:26.118-08:00</updated><title type='text'>awk一日速成</title><content type='html'>以下转贴，来源为同事发的一个帖子：&lt;br /&gt;&lt;br /&gt;一、AWK执行方法：&lt;br /&gt;1、awk -f xxx.awk datafile&lt;br /&gt;xxx.awk为用awk语法编写的脚本&lt;br /&gt;2、awk 'pattern{Action}' datafile&lt;br /&gt;awk的语句需要用单引号括在中间&lt;br /&gt;&lt;br /&gt;二、AWK内建变量：&lt;br /&gt;$0: 代表读入的datafile的一行&lt;br /&gt;$1、$2....$n：代表$0字符串中以空格或TAB或指定字符分割的每一列的值&lt;br /&gt;NF: 一共有多少列&lt;br /&gt;NR: 一共读了多少行&lt;br /&gt;FILENAME: AWK读入的文件名称&lt;br /&gt;&lt;br /&gt;三、AWK语法：&lt;br /&gt;pattern{Action}&lt;br /&gt;pattern: 是扫行Action的条件，主要是一些关系运算及匹配运算(~或!~)。省略patterm时代表无条件执行Action&lt;br /&gt;  如: $1*$2*$3!=14{Action} 表示如果第一、二、三列的乘积不为14的话，就执行Action&lt;br /&gt;    $1=="A1"{Action} 表示如果第一列是"A1"的话，执行Action&lt;br /&gt;   $1~/1/{Action} 表示如果$1中包含1这个字符，执行Action&lt;br /&gt;  AWK中有两个保留的Pattern分别是END和BEGIN&lt;br /&gt;    END{Action}&lt;br /&gt;    END的说明：&lt;br /&gt;        a、AWK處理完所有資料, 即將離開程式時.&lt;br /&gt;      b、平常讀入資料列時, END並不成立, 故其後的Actions並不被執行;&lt;br /&gt;      c、唯有當AWK讀完所有資料時, 該Actions才會被執行 ( 注意,不管資料列有多少筆,&lt;br /&gt;        END僅在最後才成立, 故該Actions僅被執行一次.)&lt;br /&gt;    BEGIN{Action}&lt;br /&gt;    BEGIN的说明:&lt;br /&gt;      BEGIN 和 END 同為AWK中之種一 Pattern. 以 BEGIN 為Pattern的Actions,只有在AWK&lt;br /&gt;      開始執行程式,尚未開啟任何輸入檔前, 被執行一次.(注意: 只被執行一次 )&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Action: 是一些awk的指令.awk的指令与C语言中的指令十分相似.&lt;br /&gt;    例如 : AWK的 I/O指令 : print, printf( ), getline..&lt;br /&gt;        AWK的 流程控制指令 : if(...){..} else{..}, while(...){...}...&lt;br /&gt;  例子：&lt;br /&gt;  emp.dat文件内容&lt;br /&gt;   A1     1     3     4&lt;br /&gt;   B1     2     3     4&lt;br /&gt;   C1     2     3     4&lt;br /&gt;   E1     0     3     4&lt;br /&gt;  emp.awk脚本内容:&lt;br /&gt;   {printf("%s is %3d,%3d,%3d, total=%3d",$1,$2,$3,$4,$2*$3*$4)}&lt;br /&gt;   {printf(" row number : %d\n", NF)}&lt;br /&gt;  执行脚本emp.awk处理emp.dat文件：&lt;br /&gt;   &gt; awk -f emp.awk emp.dat&lt;br /&gt;   A1 is   1, 3, 4, total= 12 row number : 4&lt;br /&gt;   B1 is   2, 3, 4, total= 24 row number : 4&lt;br /&gt;   C1 is   2, 3, 4, total= 24 row number : 4&lt;br /&gt;   E1 is   0, 3, 4, total= 0 row number : 4&lt;br /&gt;  命令行执行:&lt;br /&gt;   &gt; awk '{printf("%s total=%5d\n",$1,$2*$3*$4)}' emp.dat&lt;br /&gt;   A1 total=   12&lt;br /&gt;   B1 total=   24&lt;br /&gt;   C1 total=   24&lt;br /&gt;   E1 total=   0&lt;br /&gt;    &gt; awk '{print $1,$2*$3*$4}' emp.dat&lt;br /&gt;   A1 12&lt;br /&gt;   B1 24&lt;br /&gt;   C1 24&lt;br /&gt;   E1 0&lt;br /&gt;&lt;br /&gt;四、一个稍微复杂一些的例子：&lt;br /&gt;emp.dat: 第一列员工名字，第二列入职日期，第三列薪资&lt;br /&gt;lhl 20050916   3500.00&lt;br /&gt;z3   20050905   3000.00&lt;br /&gt;l4   20051005   2000.00&lt;br /&gt;w5   20051015   1000.00&lt;br /&gt;g6   20040805   1800.00&lt;br /&gt;&lt;br /&gt;/*我们要为2004/09-2005/09期间入职的职工加薪%5,2004/09以前入职的员式加薪%8*/&lt;br /&gt;emp.awk&lt;br /&gt;$2&lt;20050930 &amp;&amp; $2&gt;=20040901{$3 = $3*1.05}&lt;br /&gt;$2&lt;=20040901{$3=$3*1.05}&lt;br /&gt;{printf("%s\t%s\t%.02f\n",$1,$2,$3)}&lt;br /&gt;执行结果&lt;br /&gt;&gt; awk -f emp.awk emp.dat&lt;br /&gt;lhl   20050916     3675.00&lt;br /&gt;z3     20050905     3150.00&lt;br /&gt;l4     20051005     2000.00&lt;br /&gt;w5     20051015     1000.00&lt;br /&gt;g6     20040805     1944.00&lt;br /&gt;&lt;br /&gt;五、使用AWK中的数组:&lt;br /&gt;AWK中的数组不用预先声明，可以使用“字符串”做下标。&lt;br /&gt;通过例程理解吧。&lt;br /&gt;以下是一个班级的学生选课情况：&lt;br /&gt;reg.dat&lt;br /&gt;Mary     O.S.       Arch.       Discrete&lt;br /&gt;Steve   D.S.       Algorithm   Arch.&lt;br /&gt;Wang   Discrete   Graphics   O.S.&lt;br /&gt;Lisa     Graphics   A.I.&lt;br /&gt;Lily     Discrete   Algorithm&lt;br /&gt;&lt;br /&gt;第一列是学生名称，其余列是课程名称，我们要统计每一科有多少人选修。&lt;br /&gt;程序course.awk代码如下：&lt;br /&gt;1: {for( i=2; i&lt; NF; i++) Number[$i]++ }&lt;br /&gt;2: END{ for( course in Number) printf("\%-10s \%d\n", course, Number[course] )}&lt;br /&gt;解释：&lt;br /&gt;1：从reg.dat读入的一行信息中取得第2列-第NF列，这里的NF代表一共有多少列，&lt;br /&gt;  然后以该列的值($i)为下标，将数组项(Number[$i])进行自增加运算。&lt;br /&gt;2：在程序结束时输出数据的各项：&lt;br /&gt;  for( var in var_array) printf{...}&lt;br /&gt;  类似shell编程中的用法，遍历数组var_array，取出下标var。&lt;br /&gt;执行结果:&lt;br /&gt;&gt; awk -f course.awk reg.dat&lt;br /&gt;Discrete   2&lt;br /&gt;D.S.     1&lt;br /&gt;O.S.     1&lt;br /&gt;Graphics   2&lt;br /&gt;Arch.     1&lt;br /&gt;Algorithm 1&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;六、AWK 程式中使用 Shell 命令&lt;br /&gt;/* count.awk 用于计算在线人数 */&lt;br /&gt;BEGIN {&lt;br /&gt;while ( "who" | getline ) n++&lt;br /&gt;print n&lt;br /&gt;}&lt;br /&gt;1、getline是AWK所提供的输入指令,使用方法如下：&lt;br /&gt;  a. getline var &lt; file 从file读入一行到var中。&lt;br /&gt;  b. "shell command" | getline var 将shell command输入的结果中一行读入var中。&lt;br /&gt;  c. getline var 程序等待用户输入，并把输入的数据存入var中,&lt;br /&gt;    如果var省略则信息存在$0中（旧的awk版本不支持)。&lt;br /&gt;  getline 一次读取一行,&lt;br /&gt;      读取成功return 1,&lt;br /&gt;      读取失敗return -1,&lt;br /&gt;      文件结束return 0;&lt;br /&gt;2、 “{ |}” 為 AWK 中表示 pipe的符號. AWK 把 pipe之前的字串“who”當成Shell上的命令,&lt;br /&gt;  并由shell执行该命令,执行的结果(原先应在屏幕上输出的)由pipe送进AWK程式中(此程序中传给getline)。&lt;br /&gt;&lt;br /&gt;执行结果：&lt;br /&gt;&gt; awk -f count.awk&lt;br /&gt;24&lt;br /&gt;&lt;br /&gt;参考资数&lt;br /&gt;http://phi.sinica.edu.tw/aspac/reports/94/94011/ （提供实例及内建命令列表)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5347288948477829359-2250802909588947854?l=yoblooc.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yoblooc.blogspot.com/feeds/2250802909588947854/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5347288948477829359&amp;postID=2250802909588947854' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5347288948477829359/posts/default/2250802909588947854'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5347288948477829359/posts/default/2250802909588947854'/><link rel='alternate' type='text/html' href='http://yoblooc.blogspot.com/2007/02/awk.html' title='awk一日速成'/><author><name>j.z</name><uri>http://www.blogger.com/profile/15855068428842751244</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5347288948477829359.post-7441922106848916026</id><published>2007-02-26T00:18:00.001-08:00</published><updated>2007-02-26T00:18:24.864-08:00</updated><title type='text'>日文编码对照表</title><content type='html'>日文编码对照表&lt;br /&gt;&lt;br /&gt;http://charset.7jp.net/&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5347288948477829359-7441922106848916026?l=yoblooc.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yoblooc.blogspot.com/feeds/7441922106848916026/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5347288948477829359&amp;postID=7441922106848916026' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5347288948477829359/posts/default/7441922106848916026'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5347288948477829359/posts/default/7441922106848916026'/><link rel='alternate' type='text/html' href='http://yoblooc.blogspot.com/2007/02/blog-post.html' title='日文编码对照表'/><author><name>j.z</name><uri>http://www.blogger.com/profile/15855068428842751244</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5347288948477829359.post-1741790143445870705</id><published>2007-02-26T00:17:00.000-08:00</published><updated>2007-02-26T00:18:00.843-08:00</updated><title type='text'>perl convert to php script</title><content type='html'>perl预定义变量说明:   http://www.xav.com/perl/lib/Pod/perlvar.html&lt;br /&gt;perl to php translation:  http://www.cs.wcupa.edu/~rkline/perl2php/&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5347288948477829359-1741790143445870705?l=yoblooc.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yoblooc.blogspot.com/feeds/1741790143445870705/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5347288948477829359&amp;postID=1741790143445870705' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5347288948477829359/posts/default/1741790143445870705'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5347288948477829359/posts/default/1741790143445870705'/><link rel='alternate' type='text/html' href='http://yoblooc.blogspot.com/2007/02/perl-convert-to-php-script.html' title='perl convert to php script'/><author><name>j.z</name><uri>http://www.blogger.com/profile/15855068428842751244</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5347288948477829359.post-3829655955085216523</id><published>2007-02-26T00:15:00.001-08:00</published><updated>2007-02-26T00:15:40.288-08:00</updated><title type='text'>检查一批文件的php语法</title><content type='html'>&gt; for i in /home/.../* ; do /usr/local/php/bin/php -l $i ; done&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5347288948477829359-3829655955085216523?l=yoblooc.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yoblooc.blogspot.com/feeds/3829655955085216523/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5347288948477829359&amp;postID=3829655955085216523' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5347288948477829359/posts/default/3829655955085216523'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5347288948477829359/posts/default/3829655955085216523'/><link rel='alternate' type='text/html' href='http://yoblooc.blogspot.com/2007/02/php.html' title='检查一批文件的php语法'/><author><name>j.z</name><uri>http://www.blogger.com/profile/15855068428842751244</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5347288948477829359.post-7468569608367676436</id><published>2007-02-26T00:05:00.000-08:00</published><updated>2007-02-26T00:11:38.737-08:00</updated><title type='text'>apache切换到维护页面的设置</title><content type='html'>以前open项目时，首先要将外部用户访问都重定向到维护页面，但是开发人员可以正常访问，测试。&lt;br /&gt;&lt;br /&gt;因为公司外部IP是确定的，所以在apache中设置为除公司IP外其它IP均重定向到维护页面。&lt;br /&gt; RewriteRule ^/css/(.*) /home/xxxxx/htdocs/img/$1 [L]  &lt;br&gt;&lt;br /&gt; RewriteRule ^/img/(.*) /home/xxxxx/htdocs/img/$1 [L]  &lt;br&gt;&lt;br /&gt;        RewriteCond %{REMOTE_ADDR} !^xxx.xxx.xxx.xxx   &lt;br /&gt;        RewriteCond %{REMOTE_ADDR} !^xx.xx.xx  &lt;br /&gt; RewriteRule ^/(.*) /home/xxx/htdocs/xxx/maintenance.php [L]&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5347288948477829359-7468569608367676436?l=yoblooc.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yoblooc.blogspot.com/feeds/7468569608367676436/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5347288948477829359&amp;postID=7468569608367676436' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5347288948477829359/posts/default/7468569608367676436'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5347288948477829359/posts/default/7468569608367676436'/><link rel='alternate' type='text/html' href='http://yoblooc.blogspot.com/2007/02/apache.html' title='apache切换到维护页面的设置'/><author><name>j.z</name><uri>http://www.blogger.com/profile/15855068428842751244</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5347288948477829359.post-7203225510638817440</id><published>2007-02-25T23:50:00.000-08:00</published><updated>2007-02-26T00:02:53.990-08:00</updated><title type='text'>mysql Too many open files 错误的对应</title><content type='html'>以下内容为2006/04项目open时遇到的问题及错误定位方法：&lt;br /&gt;首先，在FreeBSD服务器上源代码编译了mysql x.x.x版本。mysql数据库运行后，每隔几个小时就会重启。&lt;br /&gt;查看错误日志，显示Too many open files。&lt;br /&gt;&lt;br /&gt;1. 用fstat查看不到有用的信息&lt;br /&gt;2. 后来采用如下方法，监控到打开文件不断在增长。&lt;br /&gt;sysctl -a |grpe files&lt;br /&gt;XX-XX-XX(XXXx)# ssh 10.0.XX.XX "sysctl -a | grep files"&lt;br /&gt;kern.maxfiles: 16424&lt;br /&gt;kern.maxfilesperproc: 14781&lt;br /&gt;kern.openfiles: 1987 &lt;----------------这里一直在增长，重启db后，从很小的值又开始增长。&lt;br /&gt;p1003_1b.mapped_files: 1&lt;br /&gt;&lt;br /&gt;3. 进一步，调查&lt;br /&gt;&gt;( pstat -f | grep -v kqueue | wc -l ) &amp;&amp; ( pstat -f | grep kqueue | wc -l )&lt;br /&gt;470&lt;br /&gt;4159 &lt;-----------这个值是&lt;br /&gt;&gt;( pstat -f | grep -v kqueue | wc -l ) &amp;&amp; ( pstat -f | grep kqueue | wc -l )&lt;br /&gt;470&lt;br /&gt;4160&lt;br /&gt;&gt;( pstat -f | grep -v kqueue | wc -l ) &amp;&amp; ( pstat -f | grep kqueue | wc -l )&lt;br /&gt;470&lt;br /&gt;4162&lt;br /&gt;&gt;( pstat -f | grep -v kqueue | wc -l ) &amp;&amp; ( pstat -f | grep kqueue | wc -l )&lt;br /&gt;470&lt;br /&gt;4163&lt;br /&gt;引发的是mysql,根据相关资料同链接的libc_r.so链接库有关系。为什么同libc_r.so有关系，又牵扯到操作系统是FreeBSD 5.2.1-release版本。这个版本还没有支持mysql 需要的pthread，只能用libc_r.so代替。另一个问题是出问题的mysql是静态编译，也就是说不存在动态链接libc_r.so。还有一个现象是根据资料编译的测试程序在上面跑没出现用kqueue方式打开的文件不能关闭？&lt;br /&gt;&lt;br /&gt;解决方法：改为使用其它服务器上稳定版本mysql。&lt;br /&gt;          重新动态编译mysql或者也可以吧，但是没有试验。毕竟是做正式发布，最快解决问题是首要的。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5347288948477829359-7203225510638817440?l=yoblooc.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yoblooc.blogspot.com/feeds/7203225510638817440/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5347288948477829359&amp;postID=7203225510638817440' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5347288948477829359/posts/default/7203225510638817440'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5347288948477829359/posts/default/7203225510638817440'/><link rel='alternate' type='text/html' href='http://yoblooc.blogspot.com/2007/02/mysql-too-many-open-files.html' title='mysql Too many open files 错误的对应'/><author><name>j.z</name><uri>http://www.blogger.com/profile/15855068428842751244</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5347288948477829359.post-4269279540453352750</id><published>2006-10-28T00:18:00.000-07:00</published><updated>2008-01-23T17:19:26.307-08:00</updated><title type='text'>源文件中的常量定义加extern后，才能被外部访问</title><content type='html'>为什么一个常量的定义，比如&lt;br /&gt;const int const_a=1000;&lt;br /&gt;在一个.h文件中定义后，被任何源文件.cpp文件包含，都可以直接引用。&lt;br /&gt;而在一个源文件.cpp文件中定义后，必须在定义处加上extern， 引用后先提供一个extern int const_a声明才能使用？&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;我先做个解释，大家看看对不对：&lt;br /&gt;1) 在.h文件中定义，被任何源文件.cpp包含，&lt;br /&gt;编译时，编译器会将引用const_a的地方都替换成实际的常量存储地址， 程序执行时，已经没有const_a概念， 只是引用相应的存储地址而已;&lt;br /&gt;&lt;br /&gt;2) 在.cpp文件中定义，没有加extern，同1)&lt;br /&gt;其它源文件编译时既看不到const_a的定义， 试图在所有.obj文件的符号表中找到对应的符号， 找不到， 所以编译时会出错&lt;br /&gt;&lt;br /&gt;3) 在.cpp文件中定义， 并且加上extern&lt;br /&gt;定义const_a的源文件，编译时会在符号表中生成const_a的符号， 该符号指出cosnt_a对应存储地址。&lt;br /&gt;其它源文件自身没有const_a定义， 在const_a对应的源文件.obj符号表中找到了const_a的符号，所以知道了const_a的存储地址， 编译通过。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5347288948477829359-4269279540453352750?l=yoblooc.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yoblooc.blogspot.com/feeds/4269279540453352750/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5347288948477829359&amp;postID=4269279540453352750' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5347288948477829359/posts/default/4269279540453352750'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5347288948477829359/posts/default/4269279540453352750'/><link rel='alternate' type='text/html' href='http://yoblooc.blogspot.com/2006/10/extern.html' title='源文件中的常量定义加extern后，才能被外部访问'/><author><name>j.z</name><uri>http://www.blogger.com/profile/15855068428842751244</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5347288948477829359.post-4826650009951624307</id><published>2006-10-09T05:21:00.000-07:00</published><updated>2006-10-09T05:22:05.911-07:00</updated><title type='text'>automake reference</title><content type='html'>GNU Autoconf, Automake, and Libtool http://sources.redhat.com/autobook/autobook/autobook_toc.html&lt;br /&gt;&lt;br /&gt;GNU Autoconf Manualhttp://www.gnu.org/manual/autoconf&lt;br /&gt;&lt;br /&gt;GNU Automake Manualhttp://www.gnu.org/manual/automake&lt;br /&gt;&lt;br /&gt;GNU Libtool Manualhttp://www.gnu.org/manual/libtool&lt;br /&gt;&lt;br /&gt;Learning the GNU development toolshttp://autotoolset.sourceforge.net/tutorial.html&lt;br /&gt;&lt;br /&gt;The GNU configure and build systemhttp://www.airs.com/ian/configure/configure_toc.html&lt;br /&gt;&lt;br /&gt;GNU macro processor (GNU m4)http://www.gnu.org/manual/m4-1.4/m4.html&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5347288948477829359-4826650009951624307?l=yoblooc.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yoblooc.blogspot.com/feeds/4826650009951624307/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5347288948477829359&amp;postID=4826650009951624307' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5347288948477829359/posts/default/4826650009951624307'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5347288948477829359/posts/default/4826650009951624307'/><link rel='alternate' type='text/html' href='http://yoblooc.blogspot.com/2006/10/automake-reference.html' title='automake reference'/><author><name>j.z</name><uri>http://www.blogger.com/profile/15855068428842751244</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5347288948477829359.post-4371268570871905280</id><published>2006-10-08T20:57:00.000-07:00</published><updated>2006-10-08T21:03:47.462-07:00</updated><title type='text'></title><content type='html'>下面是我第一次编译so动态链接库时写的一个make脚本。&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;p style="background-color: black; color: rgb(255, 255, 255);"&gt;CC=gcc&lt;br /&gt;LDOPTIONS=-L/root/score -lscore -I/root/score&lt;br /&gt;MASTERVER=1&lt;br /&gt;MINORVER=0&lt;br /&gt;LIBNAME=libscore.so&lt;br /&gt;LIBOPTION=-fPIC -shared -Wl,-soname,$(LIBNAME).$(MASTERVER) -o$(LIBNAME).$(MASTERVER).$(MINORVER) &lt;br /&gt;CFLAGS=-g3&lt;br /&gt;SCORE_SOURCE=score.c&lt;br /&gt;SCORE_EXAM1_SOURCE=score_exam1.c&lt;br /&gt;SCORE_EXAM2_SOURCE=score_exam2.c&lt;br /&gt;&lt;br /&gt;#all: score score_exam1 score_exam2&lt;br /&gt;all: libscore.so score_exam1 score_exam2&lt;br /&gt;libscore.so:$(SCORE_SOURCE:.c=.o)&lt;br /&gt; $(CC) $(CFLAGS) $(LIBOPTION) $&lt;&lt;br /&gt; ln -s $(LIBNAME).$(MASTERVER).$(MINORVER) $(LIBNAME).$(MASTERVER)&lt;br /&gt; ln -s $(LIBNAME).$(MASTERVER).$(MINORVER) $(LIBNAME)&lt;br /&gt;&lt;br /&gt;score_exam1:$(SCORE_EXAM1_SOURCE:.c=.o)&lt;br /&gt; $(CC) $(CFLAGS) $(LDOPTIONS) -o $(@) $&lt;&lt;br /&gt;&lt;br /&gt;score_exam2:$(SCORE_EXAM2_SOURCE:.c=.o)&lt;br /&gt; $(CC) $(CFLAGS) $(LDOPTIONS) -o $(@) $&lt;&lt;br /&gt;&lt;br /&gt;.PHONY : clean&lt;br /&gt;clean:clean_score clean_exam1 clean_exam2&lt;br /&gt;&lt;br /&gt;.PHONY : clean_score&lt;br /&gt;clean_score:&lt;br /&gt; rm score.o&lt;br /&gt; rm $(LIBNAME) &lt;br /&gt; rm $(LIBNAME).$(MASTERVER) &lt;br /&gt; rm $(LIBNAME).$(MASTERVER).$(MINORVER)&lt;br /&gt;&lt;br /&gt;.PHONY : clean_exam1&lt;br /&gt;clean_exam1:&lt;br /&gt; rm score_exam1.o&lt;br /&gt; rm score_exam1&lt;br /&gt;&lt;br /&gt;.PHONY : clear_exam2&lt;br /&gt;clean_exam2:&lt;br /&gt; rm score_exam2.o&lt;br /&gt; rm score_exam2&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5347288948477829359-4371268570871905280?l=yoblooc.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yoblooc.blogspot.com/feeds/4371268570871905280/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5347288948477829359&amp;postID=4371268570871905280' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5347288948477829359/posts/default/4371268570871905280'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5347288948477829359/posts/default/4371268570871905280'/><link rel='alternate' type='text/html' href='http://yoblooc.blogspot.com/2006/10/somake-ccgcc-ldoptions-lrootscore.html' title=''/><author><name>j.z</name><uri>http://www.blogger.com/profile/15855068428842751244</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5347288948477829359.post-6369709220657877724</id><published>2006-09-14T02:30:00.000-07:00</published><updated>2006-09-14T02:32:19.145-07:00</updated><title type='text'>调查80端口当前连接ip数</title><content type='html'>&lt;p style="background-color:black; color:rgb(255,255,255);"&gt;[freebsd]&lt;br /&gt;netstat -ant | grep -E "\.80.*ESTABLISHED" | awk '{print $5}' | awk -F"." '{print $1"."$2"."$3"."$4}' | sort | uniq -c | sort -r | awk 'BEGIN{total=0}{print $0; total+=$1;}END{print "total: "total" connections";}'&lt;br /&gt;[linux]&lt;br /&gt;netstat -ant | grep -E ":80.*ESTABLISHED" | awk '{print $5}' | awk -F"." '{print $1"."$2"."$3"."$4}' | sort | uniq -c | sort -r | awk 'BEGIN{total=0}{print $0; total+=$1;}END{print "total: "total" connections";}'&lt;br /&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5347288948477829359-6369709220657877724?l=yoblooc.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yoblooc.blogspot.com/feeds/6369709220657877724/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5347288948477829359&amp;postID=6369709220657877724' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5347288948477829359/posts/default/6369709220657877724'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5347288948477829359/posts/default/6369709220657877724'/><link rel='alternate' type='text/html' href='http://yoblooc.blogspot.com/2006/09/80ip.html' title='调查80端口当前连接ip数'/><author><name>j.z</name><uri>http://www.blogger.com/profile/15855068428842751244</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5347288948477829359.post-1045838134215078218</id><published>2006-09-06T20:41:00.001-07:00</published><updated>2006-09-06T20:41:45.832-07:00</updated><title type='text'>调查cron程序数量</title><content type='html'>很简单。 一般cron列表内容会有一些注释和被注释掉的cron。下面命令就是为了过滤掉这些以及空白行,还利用了命令都会有路径，所以命令行第一个非空字符应该为/。&lt;br /&gt;&lt;br /&gt;&lt;p style="background-color:black;"&gt;&lt;span style="color:rgb(255,255,255)"&gt;crontab -l | awk '{if(NF&gt;=6){if($6 ~/\//){for(i=6;i&lt;=NF;i++){ printf "%s ",$i;} printf "\n";}}}' | uniq -u&lt;/span&gt;&lt;br /&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5347288948477829359-1045838134215078218?l=yoblooc.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yoblooc.blogspot.com/feeds/1045838134215078218/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5347288948477829359&amp;postID=1045838134215078218' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5347288948477829359/posts/default/1045838134215078218'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5347288948477829359/posts/default/1045838134215078218'/><link rel='alternate' type='text/html' href='http://yoblooc.blogspot.com/2006/09/cron.html' title='调查cron程序数量'/><author><name>j.z</name><uri>http://www.blogger.com/profile/15855068428842751244</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5347288948477829359.post-4031838238808408613</id><published>2006-09-06T20:40:00.001-07:00</published><updated>2006-09-06T20:40:58.112-07:00</updated><title type='text'>记录sh历史命令</title><content type='html'>说明：&lt;br /&gt;纯粹的sh是没有历史命令功能的。下面是我写的一个测试。实现用户在登录shell为sh或从其它shell环境切换至sh后，将用户执行的所有命令记录下来。（当然，以上只是一般管理手段，不是针对恶意用户的。）&lt;br /&gt;适应环境： &lt;br /&gt;用户正常进入sh，执行系列命令后退出sh或登录session。 如果用户从远程终端登入，执行命令后，强制关闭终端窗口， 下面的脚本按测试结果看会丢失最后一个执行的命令。&lt;br /&gt;测试内容：&lt;br /&gt;&lt;p style="background-color: black;"&gt;&lt;span style="color:rgb(255,255,255);background-color:rgb(0,0,0);"&gt;#!/bin/sh&lt;br /&gt;#This script is a test script.&lt;br /&gt;#Check whether we can record command history of sh.&lt;br /&gt;#Create date: 2006-08-29&lt;br /&gt;&lt;br /&gt;#If sh is user's login shell, we can add following script in /etc/profile file or ~/.profile file&lt;br /&gt;#  ENV=thisscriptname; export ENV&lt;br /&gt;#If sh is just interactive shell, user switched to it from other shell, we must first set ENV &lt;br /&gt;#environment value under other shell before the user switched to sh shell.&lt;br /&gt;#Under csh/tcsh, like :&lt;br /&gt;#  setenv ENV thisscriptname&lt;br /&gt;#Under bash, like :&lt;br /&gt;#  ENV=thisscriptname; export ENV&lt;br /&gt;&lt;br /&gt;#Record as much commands history as we can. &lt;br /&gt;HISTSIZE=5000; export HISTSIZE&lt;br /&gt;&lt;br /&gt;##command record begin&lt;br /&gt;echo "`date` [`whoami` login]" &gt;&gt;/tmp/test.test&lt;br /&gt;##command record end&lt;br /&gt;trap "record" 0 1 2 3 6 15&lt;br /&gt;&lt;br /&gt;record ()&lt;br /&gt;{&lt;br /&gt;        fc -l &gt;&gt;/tmp/test.test &amp;&amp; echo "`date` [`whoami` logout]" &gt;&gt; /tmp/test.test&lt;br /&gt;        exit 0&lt;br /&gt;}&lt;/span&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5347288948477829359-4031838238808408613?l=yoblooc.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yoblooc.blogspot.com/feeds/4031838238808408613/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5347288948477829359&amp;postID=4031838238808408613' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5347288948477829359/posts/default/4031838238808408613'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5347288948477829359/posts/default/4031838238808408613'/><link rel='alternate' type='text/html' href='http://yoblooc.blogspot.com/2006/09/sh.html' title='记录sh历史命令'/><author><name>j.z</name><uri>http://www.blogger.com/profile/15855068428842751244</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5347288948477829359.post-7600358139298897195</id><published>2006-08-18T22:40:00.001-07:00</published><updated>2006-08-18T22:40:40.642-07:00</updated><title type='text'>csh 历史命令记录</title><content type='html'>alias precmd 'echo [ `date` ] $_ &gt;&gt; /tmp/csh.ht'&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5347288948477829359-7600358139298897195?l=yoblooc.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yoblooc.blogspot.com/feeds/7600358139298897195/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5347288948477829359&amp;postID=7600358139298897195' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5347288948477829359/posts/default/7600358139298897195'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5347288948477829359/posts/default/7600358139298897195'/><link rel='alternate' type='text/html' href='http://yoblooc.blogspot.com/2006/08/csh.html' title='csh 历史命令记录'/><author><name>j.z</name><uri>http://www.blogger.com/profile/15855068428842751244</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5347288948477829359.post-4405645881879319354</id><published>2006-08-18T19:18:00.000-07:00</published><updated>2006-08-18T19:30:04.279-07:00</updated><title type='text'>查看进程的执行时间</title><content type='html'>以前查看进程的执行时间&lt;br /&gt;[freebsd]&lt;br /&gt;&gt; ps wwxau&lt;br /&gt;USER         PID %CPU %MEM   VSZ   RSS  TT  STAT STARTED      TIME COMMAND&lt;br /&gt;root          11 99.0  0.0     0     8  ??  RL    5Aug06 17304:14.15 [idle]&lt;br /&gt;看看started, time两个列大概了解一下，详细的还得将这两个列计算一下。&lt;br /&gt;[linux]&lt;br /&gt;$ ps auxww&lt;br /&gt;USER       PID %CPU %MEM   VSZ  RSS TTY      STAT START   TIME COMMAND&lt;br /&gt;root             1          0.0      0.0      1372   84     ?                S        Jun12       0:04     init&lt;br /&gt;看看start, time两个列&lt;br /&gt;&lt;br /&gt;最近有些闲，将ps的参数又挖掘了一下，发现有参数可以明确表示出进程的执行时间。&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;选项：&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;    etime      elapsed running time&lt;/span&gt;&lt;br /&gt;测试如果如下：&lt;br /&gt;[freebsd]&lt;br /&gt;&gt;ps wwxa -oetime,command&lt;br /&gt;ELAPSED COMMAND&lt;br /&gt;14-08:37:04 [idle]    &lt;---运行了14天，8小时37分4秒&lt;br /&gt; [linux]&lt;br /&gt;$ ps wwxa -oetime,command&lt;br /&gt; ELAPSED COMMAND&lt;br /&gt;68-01:23:14 init       &lt;---运行了68天，1小时23分14秒 看上去一切都很美好。 &lt;br /&gt;&lt;br /&gt; 等等，在另一台freebsd机器上怎么？&lt;br /&gt; &gt;ps wwxa -oetime,command&lt;br /&gt;ps: etime: keyword not found&lt;br /&gt;COMMAND&lt;br /&gt;/sbin/init --&lt;br /&gt;&lt;br /&gt;晕。&lt;br /&gt;好用的freebsd&lt;br /&gt;&gt; uname -r&lt;br /&gt;5.4-RELEASE&lt;br /&gt;不好用的freebsd&lt;br /&gt;&gt;uname -r&lt;br /&gt;4.10-RELEASE-p5&lt;br /&gt;freebsd什么时候开始支持etime选项的呢？以后无聊时再查吧。&lt;br /&gt;&lt;br /&gt;看来通用性不大好，继续挖掘。&lt;br /&gt;选项：&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;    lstart  The exact time the command started, using the ``%c'' format&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;             described in strftime(3).&lt;br /&gt;&lt;/span&gt;[freebsd]&lt;span style="font-weight: bold;"&gt;&lt;br /&gt;&lt;/span&gt;&gt; ps wwxa -olstart,command&lt;br /&gt;STARTED                              COMMAND&lt;br /&gt;Sat Aug  5 02:51:21 2006     /sbin/init --&lt;br /&gt;[linux]&lt;br /&gt;$ ps wwxa -olstart,command&lt;br /&gt;STARTED                             COMMAND&lt;br /&gt;Mon Jun 12 09:05:13 2006 init&lt;br /&gt;能找到的几个版本freebsd都运行没有问题。虽然没有etime直观...&lt;span style="font-weight: bold;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5347288948477829359-4405645881879319354?l=yoblooc.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yoblooc.blogspot.com/feeds/4405645881879319354/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5347288948477829359&amp;postID=4405645881879319354' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5347288948477829359/posts/default/4405645881879319354'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5347288948477829359/posts/default/4405645881879319354'/><link rel='alternate' type='text/html' href='http://yoblooc.blogspot.com/2006/08/blog-post_7885.html' title='查看进程的执行时间'/><author><name>j.z</name><uri>http://www.blogger.com/profile/15855068428842751244</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5347288948477829359.post-8519862520606285786</id><published>2006-08-18T01:03:00.000-07:00</published><updated>2006-08-18T01:04:34.452-07:00</updated><title type='text'>处理Shift-Jis日文编码需要注意的问题(php)</title><content type='html'>&lt;span class="tpc_content"&gt;日文Shift-jis编码有一些缺陷，与ascii码有定义上的混淆。&lt;br /&gt;举个例子：&lt;br /&gt;用php写个小程序1.php，内容如下，字符集编码为Shift-jis。&lt;br /&gt;&lt;br /&gt;&lt;div class="quote" id="code1"&gt;&lt;br /&gt;&lt;?&lt;br /&gt;$str = "表";&lt;br /&gt;?&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;如果这个程序没有问题，那么IFLU。&lt;br /&gt;不只是这个字，还有{“―”,“ソ”,“Ы”,"Ⅸ","噂", ... 不愿意写了:) } 一共有47个字符，其中包括几个shift-jis -&gt; unicode 里没有的字符。&lt;br /&gt;什么原因？&lt;br /&gt;看一看下面的内容应该就清楚了。&lt;br /&gt;&lt;div style="font-size: 9px; margin-left: 5px;"&gt;&lt;b&gt;QUOTE:&lt;/b&gt;&lt;/div&gt;&lt;div class="quote"&gt;&lt;br /&gt;-&gt;od -t a 1.php&lt;br /&gt;0000000    &lt;   ?  nl   $   s   t   r   =   "  95   \   "   ;  nl   ?   &gt;&lt;br /&gt;0000020   nl  nl                                                       &lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;p&gt;究其根源，在于&lt;br /&gt;&lt;/p&gt;&lt;h2&gt;SHIFT JIS的2字节CODE（全角文字）表定义内的5c列。&lt;/h2&gt;在ascii码表中\0x5c代表的是\。&lt;br /&gt;所以shift-jis 2字节code的5c列在php解析时都被认为是\,　如果该文字在字符串中间倒也所谓，万一不幸是字符串最后一个字，想想看\' 代表什么意思？　不用我饶舌了吧。&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5347288948477829359-8519862520606285786?l=yoblooc.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yoblooc.blogspot.com/feeds/8519862520606285786/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5347288948477829359&amp;postID=8519862520606285786' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5347288948477829359/posts/default/8519862520606285786'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5347288948477829359/posts/default/8519862520606285786'/><link rel='alternate' type='text/html' href='http://yoblooc.blogspot.com/2006/08/shift-jisphp.html' title='处理Shift-Jis日文编码需要注意的问题(php)'/><author><name>j.z</name><uri>http://www.blogger.com/profile/15855068428842751244</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5347288948477829359.post-2270980318851984239</id><published>2006-08-18T00:32:00.000-07:00</published><updated>2006-08-18T00:34:40.304-07:00</updated><title type='text'>php发送邮件正文不换行问题</title><content type='html'>&lt;span class="tpc_title"&gt;邮件正文不换行问题&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="tpc_content"&gt;&lt;b&gt;问题如下：&lt;/b&gt; php发送日文邮件后，收到的邮件格式在不同邮件系统下显示不一样&lt;br /&gt;1、outlook 2003，没有换行&lt;br /&gt;2、thoundbird，每一个换行处比正常情况下多一个换行&lt;br /&gt;3、outlook express6，换行正常&lt;br /&gt;正确的：正常情况下应该是有换行，在有空行处显示一个换行。&lt;br /&gt;&lt;br /&gt;&lt;b&gt;经过检查，发现正文的换行符使用了'\r\n'形式，　将'\r\n' ---&gt;'\n'，上面的问题得到了解决。&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;结论：&lt;/b&gt;&lt;br /&gt;很奇怪的事情，'\r\n'是windows系统的标准换行符，自家的outlook竟然不认。又发现，如果在outlook下将原邮件按答复，表现的现象与thoundbird是一样的，多了一个换行。 看来开发outlook的人也认为'\n'才是标准的形式，但显示邮件正文与答复邮件的格式不一致，可能是因为使用了不同的类或控件引起的。&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5347288948477829359-2270980318851984239?l=yoblooc.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yoblooc.blogspot.com/feeds/2270980318851984239/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5347288948477829359&amp;postID=2270980318851984239' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5347288948477829359/posts/default/2270980318851984239'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5347288948477829359/posts/default/2270980318851984239'/><link rel='alternate' type='text/html' href='http://yoblooc.blogspot.com/2006/08/php.html' title='php发送邮件正文不换行问题'/><author><name>j.z</name><uri>http://www.blogger.com/profile/15855068428842751244</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5347288948477829359.post-4484055170585471802</id><published>2006-08-17T23:43:00.000-07:00</published><updated>2006-08-17T23:51:45.318-07:00</updated><title type='text'>如果远程登陆主机，运行一个程序，如果在运行过程中，把终端窗口关掉，程序还会继续运行吗？</title><content type='html'>昨天几个同事谈论起了这个话题。&lt;br /&gt;其实是如果终端窗口关掉，原来运行的程序怎样才能继续运行。&lt;br /&gt; 我以前用的是&lt;span style="font-weight: bold;"&gt;nohup command &amp;。&lt;br /&gt;&lt;/span&gt;有同事说&lt;span style="font-weight: bold;"&gt;&amp;&lt;/span&gt;也是可以的，并且也这样用过。&lt;br /&gt;我以前试过，不可以。这次又测试了一下：&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;yes &amp;  &lt;/span&gt; &lt;--第一个终端窗口运行&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;ps auxww | grep yes  &lt;/span&gt; &lt;--第二个终端窗口运行&lt;br /&gt;结论是第一个终端窗口关掉，第二个终端窗口查不到yes进程了。还是不好用。&lt;br /&gt;同事改了一下：&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;yes &gt;/dev/null &amp;  &lt;/span&gt; &lt;--第一个终端窗口运行&lt;br /&gt;&lt;span style="font-weight: bold;"&gt; ps auxww | grep yes &lt;/span&gt;  &lt;--第二个终端窗口运行&lt;br /&gt;这样，第一个终端窗口关掉后，第二个终端窗口仍然可以查到yes进程。&lt;br /&gt;&lt;br /&gt;哦，原来还可以这样，以前没有想到过。&lt;br /&gt;&lt;br /&gt;不过，还是&lt;span style="font-weight: bold;"&gt;nohup command &amp;&lt;/span&gt;最稳妥。&lt;br /&gt;&lt;blockquote&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5347288948477829359-4484055170585471802?l=yoblooc.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yoblooc.blogspot.com/feeds/4484055170585471802/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5347288948477829359&amp;postID=4484055170585471802' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5347288948477829359/posts/default/4484055170585471802'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5347288948477829359/posts/default/4484055170585471802'/><link rel='alternate' type='text/html' href='http://yoblooc.blogspot.com/2006/08/blog-post.html' title='如果远程登陆主机，运行一个程序，如果在运行过程中，把终端窗口关掉，程序还会继续运行吗？'/><author><name>j.z</name><uri>http://www.blogger.com/profile/15855068428842751244</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5347288948477829359.post-6905637209174270735</id><published>2006-08-17T19:51:00.000-07:00</published><updated>2006-08-17T19:55:50.682-07:00</updated><title type='text'>关于apache的优化</title><content type='html'>&lt;div style="text-align: center;"&gt;&lt;span style="font-weight: bold;font-size:130%;" &gt;关于apache的优化&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;span style="font-weight: bold;"&gt;apache1.3&lt;/span&gt;&lt;br /&gt;从网上找到Michael Radwin先生发表的一份演讲稿--《Hacking Apache HTTP Server at Yahoo!》。&lt;br /&gt;链接：&lt;a href="http://public.yahoo.com/%7Eradwin/talks/yapache-apachecon2005.htm"&gt;http://public.yahoo.com/~radwin/talks/yapache-apachecon2005.htm&lt;/a&gt;。&lt;br /&gt;文中讲述了yahoo在过去几年中应用apache1.3的经验及优化策略。&lt;br /&gt;里面讲到了freebsd下用了个内核参数SO_ACCEPTFILTER。&lt;a href="http://www.tkk.fi/WWW/TKK/Apache/misc/perf-bsd44.html"&gt;http://www.tkk.fi/WWW/TKK/Apache/misc/perf-bsd44.html&lt;/a&gt;是据此查到的一个链接。&lt;br /&gt;当然，《Hacking Apache HTTP Server at Yahoo!》里面讲了许多优化的方法及策略，只不过我现在只关注SO_ACCEPTFILTER而已。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5347288948477829359-6905637209174270735?l=yoblooc.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yoblooc.blogspot.com/feeds/6905637209174270735/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5347288948477829359&amp;postID=6905637209174270735' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5347288948477829359/posts/default/6905637209174270735'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5347288948477829359/posts/default/6905637209174270735'/><link rel='alternate' type='text/html' href='http://yoblooc.blogspot.com/2006/08/apache.html' title='关于apache的优化'/><author><name>j.z</name><uri>http://www.blogger.com/profile/15855068428842751244</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry></feed>
