﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>C++博客-Onway-随笔分类-码儿快跑</title><link>http://www.cppblog.com/Onway/category/18208.html</link><description>我是一只菜菜菜菜鸟...</description><language>zh-cn</language><lastBuildDate>Mon, 28 Nov 2016 03:31:34 GMT</lastBuildDate><pubDate>Mon, 28 Nov 2016 03:31:34 GMT</pubDate><ttl>60</ttl><item><title>goldendict的有道词典扩展程序：eyoudao-1.4</title><link>http://www.cppblog.com/Onway/archive/2016/02/15/212820.html</link><dc:creator>Onway</dc:creator><author>Onway</author><pubDate>Mon, 15 Feb 2016 11:57:00 GMT</pubDate><guid>http://www.cppblog.com/Onway/archive/2016/02/15/212820.html</guid><wfw:comment>http://www.cppblog.com/Onway/comments/212820.html</wfw:comment><comments>http://www.cppblog.com/Onway/archive/2016/02/15/212820.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.cppblog.com/Onway/comments/commentRss/212820.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/Onway/services/trackbacks/212820.html</trackback:ping><description><![CDATA[<div><span style="font-family: 'Times New Roman'; font-size: 14pt;">一晃N年过去了。<br /><br /></span></div><div><span style="font-family: 'Times New Roman'; font-size: 14pt;">windows的有道词典都不知道升级到哪个版本了。</span></div><div><span style="font-family: 'Times New Roman'; font-size: 14pt;">linux的有道词典官方版本也出来了。</span></div><div><span style="font-family: 'Times New Roman'; font-size: 14pt;">goldendict已经1.5版本了。<br /><br /></span></div><div></div><div><span style="font-family: 'Times New Roman'; font-size: 14pt;">博客上几个月前居然还有一条关于这个东西的评论。</span></div><div><span style="font-family: 'Times New Roman'; font-size: 14pt;">将代码找回来试了一下居然还能跑，有道的api和xml格式还是真是稳定啊。<br /><br /></span></div><div></div><div><span style="font-family: 'Times New Roman'; font-size: 14pt;">简单修改了一下install脚本，重写了README，收到github了：</span></div><div><a href="https://github.com/Onway/eyoudao"><span style="font-family: 'Times New Roman'; font-size: 14pt;">https://github.com/Onway/eyoudao</span></a></div><div><span style="font-family: 'Times New Roman'; font-size: 14pt;">原1.3版本：</span></div><div><a href="http://www.cppblog.com/Onway/archive/2012/10/22/193668.html"><span style="font-family: 'Times New Roman'; font-size: 14pt;">http://www.cppblog.com/Onway/archive/2012/10/22/193668.html</span></a></div><img src ="http://www.cppblog.com/Onway/aggbug/212820.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/Onway/" target="_blank">Onway</a> 2016-02-15 19:57 <a href="http://www.cppblog.com/Onway/archive/2016/02/15/212820.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>简单的socks5代理程序：ThisSocks</title><link>http://www.cppblog.com/Onway/archive/2016/02/12/212809.html</link><dc:creator>Onway</dc:creator><author>Onway</author><pubDate>Fri, 12 Feb 2016 09:50:00 GMT</pubDate><guid>http://www.cppblog.com/Onway/archive/2016/02/12/212809.html</guid><wfw:comment>http://www.cppblog.com/Onway/comments/212809.html</wfw:comment><comments>http://www.cppblog.com/Onway/archive/2016/02/12/212809.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/Onway/comments/commentRss/212809.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/Onway/services/trackbacks/212809.html</trackback:ping><description><![CDATA[<div><span style="font-family: 'Times New Roman'; font-size: 18pt;"><strong>背景</strong></span></div><div><span style="font-family: 'Times New Roman'; font-size: 14pt;">前段时间在digitalocean租了vps搭建shadowsocks，简单看了一下socks5协议，决定自己也造一个小轮子玩玩。</span></div><div><span style="font-family: 'Times New Roman'; font-size: 14pt;">春节在家整理了一下代码，大神轻拍。</span></div><div><a href="https://github.com/Onway/ThisSocks">https://github.com/Onway/ThisSocks<br /><br /></a></div><div></div><div><span style="font-family: 'Times New Roman'; font-size: 18pt;"><strong>功能</strong></span></div><div><span style="font-family: 'Times New Roman'; font-size: 14pt;">代码是c++，在linux基于perfork+select实现的，目前的功能有：</span></div><div><ul><li><span style="font-family: 'Times New Roman'; font-size: 14pt;">TCP代理</span></li><li><span style="font-family: 'Times New Roman'; font-size: 14pt;">远程DNS</span></li><li><span style="font-family: 'Times New Roman'; font-size: 14pt;">用户验证</span></li><li><span style="font-family: 'Times New Roman'; font-size: 14pt;">数据加密</span></li></ul></div><div><span style="font-family: 'Times New Roman'; font-size: 14pt;"><br /></span></div><div></div><div><span style="font-family: 'Times New Roman'; font-size: 18pt;"><strong>过程</strong></span></div><div><span style="font-family: 'Times New Roman'; font-size: 14pt;">开发调试的过程发现两点比较有意思：</span></div><div><ol><li><span style="font-family: 'Times New Roman'; font-size: 14pt;">偶尔会收到RST的数据包，查看代码日志，用tcpdump在两端抓包并无发现异常</span></li><li><span style="font-family: 'Times New Roman'; font-size: 14pt;">访问某些网站总是会收到RST数据包造成无法访问</span></li></ol></div><div><span style="font-family: 'Times New Roman'; font-size: 14pt;">对上述第二点加入了非常简单的数据加密后就解决了哈，shadowsocks的加密应该就是这么用的吧。<br /><br /></span></div><div></div><div><span style="font-family: 'Times New Roman'; font-size: 18pt;"><strong>缺陷</strong></span></div><div><span style="font-family: 'Times New Roman'; font-size: 14pt;">功能上没有支持UDP，ie和chrome浏览器似乎都不支持socks5，只能先用着firefox了。</span></div><div><span style="font-family: 'Times New Roman'; font-size: 14pt;">在windows也用c#做了一个客户端，但无暇顾及已经好久没更新了。<br /><br /></span></div><div></div><div><span style="font-family: 'Times New Roman'; font-size: 18pt;"><strong>其他</strong></span></div><div><span style="font-family: 'Times New Roman'; font-size: 14pt;">可能跟所用宽带有关，访问digitalocean的时延超过300ms，网站只能打开首页，登录页面都加载不全，慎用。</span></div><div><span style="font-family: 'Times New Roman'; font-size: 14pt;">前些天收到邮件说是vps出现流量异常被关闭了，还无法登录管理页面，用lantern也一直连不上。(T_T)</span></div><img src ="http://www.cppblog.com/Onway/aggbug/212809.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/Onway/" target="_blank">Onway</a> 2016-02-12 17:50 <a href="http://www.cppblog.com/Onway/archive/2016/02/12/212809.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>栅格化道路渲染</title><link>http://www.cppblog.com/Onway/archive/2015/07/19/211304.html</link><dc:creator>Onway</dc:creator><author>Onway</author><pubDate>Sun, 19 Jul 2015 05:31:00 GMT</pubDate><guid>http://www.cppblog.com/Onway/archive/2015/07/19/211304.html</guid><wfw:comment>http://www.cppblog.com/Onway/comments/211304.html</wfw:comment><comments>http://www.cppblog.com/Onway/archive/2015/07/19/211304.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/Onway/comments/commentRss/211304.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/Onway/services/trackbacks/211304.html</trackback:ping><description><![CDATA[<span style="font-family: 微软雅黑; widows: auto; font-size: 14pt; background-color: #ffffff;">需求：</span>
<div style="font-family: 微软雅黑; widows: auto; background-color: #ffffff;"><span style="font-size: 14pt;">地图上Grid对象表示一个40*40的栅格，除了经纬度以外，还有一个指标值如信号强度，以及一个根据指标值确定的渲染颜色。</span></div>
<div style="font-family: 微软雅黑; widows: auto; background-color: #ffffff;"><span style="font-size: 14pt;">Road对象是一条矢量道路，由多个经纬度点组成。</span></div>
<div style="font-family: 微软雅黑; widows: auto; background-color: #ffffff;"><span style="font-size: 14pt;">如果道路穿过某个栅格，则将穿过栅格的那一小段道路按栅格的颜色值画出来，没有穿过栅格的其他道路部分，用黑色渲染。</span></div>
<br />
<div style="font-family: 微软雅黑; widows: auto; background-color: #ffffff;"></div>
<div style="font-family: 微软雅黑; widows: auto; background-color: #ffffff;"><span style="font-size: 14pt;">第一次做法：</span></div>
<div style="font-family: 微软雅黑; widows: auto; background-color: #ffffff;"><span style="font-size: 14pt;">对道路进行预处理，将道路上的各个点归类到其所属的栅格内。</span></div>
<div style="font-family: 微软雅黑; widows: auto; background-color: #ffffff;"><span style="font-size: 14pt;">然后将栅格内的点用线连起来。</span></div>
<div style="font-family: 微软雅黑; widows: auto; background-color: #ffffff;"><span style="font-size: 14pt;">完成后一看地图，掉坑里面了。</span></div>
<div style="font-family: 微软雅黑; widows: auto; background-color: #ffffff;"><span style="font-size: 14pt;">1，一条道路穿过某个栅格，栅格内可能只有一个点，连不成线；</span></div>
<div style="font-family: 微软雅黑; widows: auto; background-color: #ffffff;"><span style="font-size: 14pt;">2，一条直线道路，只记录了开头和结尾，中间穿过的栅格就没点了</span></div>
<div style="font-family: 微软雅黑; widows: auto; background-color: #ffffff;"><span style="font-size: 14pt;">后来想到用补点的方式，两个点超过20米就补一个</span></div>
<div style="font-family: 微软雅黑; widows: auto; background-color: #ffffff;"><span style="font-size: 14pt;">简单试了一下，效果不好就开始用第二种方法</span></div>
<div style="font-family: 微软雅黑; widows: auto; background-color: #ffffff;"></div>
<br />
<div style="font-family: 微软雅黑; widows: auto; background-color: #ffffff;"><span style="font-size: 14pt;">第二次做法：</span></div>
<div style="font-family: 微软雅黑; widows: auto; background-color: #ffffff;"><span style="font-size: 14pt;">先将道路在空白bitmap上画出来，颜色用黑色；</span></div>
<div style="font-family: 微软雅黑; widows: auto; background-color: #ffffff;"><span style="font-size: 14pt;">再将栅格在另一空白的bitmap上画出来，颜色用原本的栅格颜色；</span></div>
<div style="font-family: 微软雅黑; widows: auto; background-color: #ffffff;"><span style="font-size: 14pt;">对比两张bitmap，像素同时不为0的就是相交像素，用栅格的像素颜色复制到道路的像素里面；</span></div>
<div style="font-family: 微软雅黑; widows: auto; background-color: #ffffff;"><span style="font-size: 14pt;">效果杠杠的。</span></div>
<div style="font-family: 微软雅黑; widows: auto; background-color: #ffffff;"></div>
<br />
<div style="font-family: 微软雅黑; widows: auto; background-color: #ffffff;"><span style="font-size: 14pt;">其他方法：</span></div>
<div style="font-family: 微软雅黑; widows: auto; background-color: #ffffff;"><span style="font-size: 14pt;">在讨论组里面说了以后，发现另一种是预处理做法</span></div>
<div style="font-family: 微软雅黑; widows: auto; background-color: #ffffff;"><span style="font-size: 14pt;">判断两点之间跟栅格的相交，将相交点记录到所在栅格里面，这比较适合后台。</span></div>
<div style="font-family: 微软雅黑; widows: auto; background-color: #ffffff;"></div>
<br />
<div style="font-family: 微软雅黑; widows: auto; background-color: #ffffff;"><span style="font-size: 18pt;">以后还是默默写博客吧！</span></div><img src ="http://www.cppblog.com/Onway/aggbug/211304.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/Onway/" target="_blank">Onway</a> 2015-07-19 13:31 <a href="http://www.cppblog.com/Onway/archive/2015/07/19/211304.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Visual Studio扩展开发：AutoProjectFiles</title><link>http://www.cppblog.com/Onway/archive/2015/07/11/211228.html</link><dc:creator>Onway</dc:creator><author>Onway</author><pubDate>Sat, 11 Jul 2015 11:39:00 GMT</pubDate><guid>http://www.cppblog.com/Onway/archive/2015/07/11/211228.html</guid><wfw:comment>http://www.cppblog.com/Onway/comments/211228.html</wfw:comment><comments>http://www.cppblog.com/Onway/archive/2015/07/11/211228.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/Onway/comments/commentRss/211228.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/Onway/services/trackbacks/211228.html</trackback:ping><description><![CDATA[<div style="font-family: 微软雅黑; widows: auto; background-color: #ffffff;"><div></div></div><div><span style="font-size: 18pt; font-family: 'Times New Roman';"></span></div><div><span style="font-family: 'Times New Roman'; font-size: 18pt;"><strong>说明</strong></span></div><div><span style="font-family: 'Times New Roman'; font-size: 14pt;">用于多人开发的项目且在不提交项目文件的情况下，自动将新增的源码文件加入到项目中或者将删除的文件从项目中移除。<br /><a href="https://github.com/Onway/AutoProjectFiles">https://github.com/Onway/AutoProjectFiles<br /></a><br /></span></div><div></div><div><span style="font-family: 'Times New Roman'; font-size: 18pt;"><strong>使用</strong></span></div><div><span style="font-family: 'Times New Roman'; font-size: 14pt;">安装后在资源管理器中右键项目名称节点，会看到&#8220;自动更新项目&#8221;和&#8220;创建快照...&#8221;两个选项。 &nbsp;</span></div><div><span style="font-family: 'Times New Roman'; font-size: 14pt;">&#8220;创建快照&#8221;是对项目中指定的源码目录建立一份已有文件列表，以便后续知道新增或者删除的文件。 &nbsp;</span></div><div><span style="font-family: 'Times New Roman'; font-size: 14pt;">&#8220;自动更新项目&#8221;之后，将会对新增或删除文件更新至项目，同时刷新文件快照列表。<br /><br /></span></div><div></div><div><span style="font-family: 'Times New Roman'; font-size: 18pt;"><strong>效果图<br /><img src="http://www.cppblog.com/images/cppblog_com/onway/solution.png" width="541" height="542" alt="" /><br /><img src="http://www.cppblog.com/images/cppblog_com/onway/snapshot_form.png" width="414" height="289" alt="" /><br /></strong></span></div><div><span style="font-family: 'Times New Roman';"></span></div><div style="font-family: 微软雅黑; widows: auto; background-color: #ffffff;"><a href="https://github.com/Onway/AutoProjectFiles" style="background-color: inherit; cursor: pointer;"></a></div><img src ="http://www.cppblog.com/Onway/aggbug/211228.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/Onway/" target="_blank">Onway</a> 2015-07-11 19:39 <a href="http://www.cppblog.com/Onway/archive/2015/07/11/211228.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>FtpWebRequest</title><link>http://www.cppblog.com/Onway/archive/2015/07/11/211226.html</link><dc:creator>Onway</dc:creator><author>Onway</author><pubDate>Sat, 11 Jul 2015 07:38:00 GMT</pubDate><guid>http://www.cppblog.com/Onway/archive/2015/07/11/211226.html</guid><wfw:comment>http://www.cppblog.com/Onway/comments/211226.html</wfw:comment><comments>http://www.cppblog.com/Onway/archive/2015/07/11/211226.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/Onway/comments/commentRss/211226.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/Onway/services/trackbacks/211226.html</trackback:ping><description><![CDATA[<div style="font-family: 微软雅黑; widows: auto; background-color: #ffffff;"><strong style="font-size: 14pt; background-color: inherit;">一，简介</strong></div>
<div style="font-family: 微软雅黑; widows: auto; background-color: #ffffff;"><span style="font-size: 14pt;">一个历史项目里面用了c# .net 2.0的FtpWebRequest进行文件上传；ftp server在各现场用的应该都是Filezilla。</span></div>
<div style="font-family: 微软雅黑; widows: auto; background-color: #ffffff;"><span style="font-size: 14pt;">因业务发展，需要上传大文件（500M以上吧），某现场就出现了上传失败的情况。</span></div>
<div style="font-family: 微软雅黑; widows: auto; background-color: #ffffff;"></div>
<br />
<div style="font-family: 微软雅黑; widows: auto; background-color: #ffffff;"><strong style="font-size: 14pt; background-color: inherit;">二，网络问题</strong></div>
<div style="font-family: 微软雅黑; widows: auto; background-color: #ffffff;"><span style="font-size: 14pt;">最开始的代码里面并没有记录上传失败的具体原因，或者说log记录没能准确定位问题。</span></div>
<div style="font-family: 微软雅黑; widows: auto; background-color: #ffffff;"><span style="font-size: 14pt;">代码修改后还是没能准确定位问题。</span></div>
<div style="font-family: 微软雅黑; widows: auto; background-color: #ffffff;"><span style="font-size: 14pt;">但从log判断，似乎是网络断开造成的。</span></div>
<div style="font-family: 微软雅黑; widows: auto; background-color: #ffffff;"><span style="font-size: 14pt;">这想到可能现场网络不稳定，有瞬断情况。</span></div>
<div style="font-family: 微软雅黑; widows: auto; background-color: #ffffff;"></div>
<br />
<div style="font-family: 微软雅黑; widows: auto; background-color: #ffffff;"><strong style="font-size: 14pt; background-color: inherit;">三，断点续传</strong></div>
<div style="font-family: 微软雅黑; widows: auto; background-color: #ffffff;"><span style="font-size: 14pt;">听过断点续传，在百度找了些代码，修改一下封装好嵌到项目里面。</span></div>
<div style="font-family: 微软雅黑; widows: auto; background-color: #ffffff;"><span style="font-size: 14pt;">当时只在网络畅通的情况下测试过，代码也没还checkin，发现场用户也试试。</span></div>
<div style="font-family: 微软雅黑; widows: auto; background-color: #ffffff;"><span style="font-size: 14pt;">反馈还是不行。</span></div>
<div style="font-family: 微软雅黑; widows: auto; background-color: #ffffff;"><span style="font-size: 14pt;">看log更加迷糊了，堆栈显示在FtpWebRequest.GetRequestStream.Close里面抛出来的异常。</span></div>
<div style="font-family: 微软雅黑; widows: auto; background-color: #ffffff;"><span style="font-size: 14pt;">想不明白啊。</span></div>
<div style="font-family: 微软雅黑; widows: auto; background-color: #ffffff;"></div>
<br />
<div style="font-family: 微软雅黑; widows: auto; background-color: #ffffff;"><strong style="font-size: 14pt; background-color: inherit;">四，重现烂网络</strong></div>
<div style="font-family: 微软雅黑; widows: auto; background-color: #ffffff;"><span style="font-size: 14pt;">去过现场出差的同事反应，现场的网络真的好烂。</span></div>
<div style="font-family: 微软雅黑; widows: auto; background-color: #ffffff;"><span style="font-size: 14pt;">这想到怎么去模拟一个烂网络出来。</span></div>
<div style="font-family: 微软雅黑; widows: auto; background-color: #ffffff;"><span style="font-size: 14pt;">找到一个程序叫clumsy，</span><a href="http://jagt.github.io/clumsy/" style="background-color: inherit; cursor: pointer;"><span style="font-size: 14pt;">http://jagt.github.io/clumsy/</span></a></div>
<div style="font-family: 微软雅黑; widows: auto; background-color: #ffffff;"><span style="font-size: 14pt;">设置延时50ms，50%的丢包率，丫的那个异常堆栈重现出来了。</span></div>
<div style="font-family: 微软雅黑; widows: auto; background-color: #ffffff;"><span style="font-size: 14pt;">异常信息如下：</span></div>
<div style="font-family: 微软雅黑; widows: auto; background-color: #ffffff;"><span style="font-size: 14pt;">这应该说的，连接已经断开了，再关的话就报错了。</span></div>
<div style="font-family: 微软雅黑; widows: auto; background-color: #ffffff;"><span style="font-size: 14pt;">程序调试进去发现，最早引发异常的是FtpWebRequest.GetRequestStream.Write，程序里面是有catch，但只是记录了失败的位置偏移以便下次重传，也没有去记录失败原因。</span></div>
<div style="font-family: 微软雅黑; widows: auto; background-color: #ffffff;"><span style="font-size: 14pt;">当时close的调用是放在finally块里面的，这个close引发的异常导致续传没能继续执行，log记录的堆栈也就是从这里开始。</span></div>
<div style="font-family: 微软雅黑; widows: auto; background-color: #ffffff;"></div>
<br />
<div style="font-family: 微软雅黑; widows: auto; background-color: #ffffff;"><strong style="font-size: 14pt; background-color: inherit;">五，重现了也没个屁用啊</strong></div>
<div style="font-family: 微软雅黑; widows: auto; background-color: #ffffff;"><span style="font-size: 14pt;">既然close不掉，那就直接跳到FtpWebRequest.GetResponse.Close好了。</span></div>
<div style="font-family: 微软雅黑; widows: auto; background-color: #ffffff;"><span style="font-size: 14pt;">还真不报异常了，GetResponse就直接阻塞了，一直塞到ftp server都超时断开了，还没返回。</span></div>
<div style="font-family: 微软雅黑; widows: auto; background-color: #ffffff;"><span style="font-size: 14pt;">看了一下msdn，说好的FtpWebRequest.Timeout咋的没生效呢？FtpWebRequest.ReadWriteTimeout可是好好的呢。</span></div>
<div style="font-family: 微软雅黑; widows: auto; background-color: #ffffff;"><span style="font-size: 14pt;">google+stackoverflow也没找到解决，倒是找到一些吐槽FtpWebRequest和Ftp库推荐的。</span></div>
<div style="font-family: 微软雅黑; widows: auto; background-color: #ffffff;"><span style="font-size: 14pt;">莫非还真得换库或者直接调些ftp命令？</span></div>
<div style="font-family: 微软雅黑; widows: auto; background-color: #ffffff;"><span style="font-size: 14pt;">同时stackoverflow发了第一个问题，我只想知道为什么不超时也不返回，因为我连GetResponse.Close都不调用就直接开始下一次重传的话，会报另一个异常如下：</span></div>
<div style="font-family: 微软雅黑; widows: auto; background-color: #ffffff;"><span style="font-size: 14pt;">不造是否英语太烂，或者是问题没到点子上，问题沉了。</span></div>
<div style="font-family: 微软雅黑; widows: auto; background-color: #ffffff;"></div>
<br />
<div style="font-family: 微软雅黑; widows: auto; background-color: #ffffff;"><strong style="font-size: 14pt; background-color: inherit;">6，似乎只能傻逼了</strong></div>
<div style="font-family: 微软雅黑; widows: auto; background-color: #ffffff;"><span style="font-size: 14pt;">下班路上想到，出现异常的时候，一个close也不调用，无论是否重新连接，因为网络已经不通了，server应该还hold住一个连接，把文件锁住了。</span></div>
<div style="font-family: 微软雅黑; widows: auto; background-color: #ffffff;"><span style="font-size: 14pt;">这应该就是上面异常的情况，文件被锁了，新连接就没法操作这个文件，看server log，确实有这个cann't access file的记录。</span></div>
<div style="font-family: 微软雅黑; widows: auto; background-color: #ffffff;"><span style="font-size: 14pt;">那很好，client出异常了，等一个足够长的时间，等到server将连接断开就好了，close也就不管了。</span></div>
<div style="font-family: 微软雅黑; widows: auto; background-color: #ffffff;"><span style="font-size: 14pt;">但想想这也太傻逼了啊，这得等到什么时候啊。</span></div>
<div style="font-family: 微软雅黑; widows: auto; background-color: #ffffff;"></div>
<br />
<div style="font-family: 微软雅黑; widows: auto; background-color: #ffffff;"><strong style="font-size: 14pt; background-color: inherit;">7，也算彻底解决了，反正可以交货了</strong></div>
<div style="font-family: 微软雅黑; widows: auto; background-color: #ffffff;"><span style="font-size: 14pt;">试了一下filezilla client，有断点续传功能，发现网络异常断开，开始续传连接开始之前，server那个连接总会很快断开。</span></div>
<div style="font-family: 微软雅黑; widows: auto; background-color: #ffffff;"><span style="font-size: 14pt;">这又是怎么解析呢，不是说网络都不通了，server那个连接是怎么放掉的呢？</span></div>
<div style="font-family: 微软雅黑; widows: auto; background-color: #ffffff;"><span style="font-size: 14pt;">google一下，stackoverflow上看到FtpWebRequest有个Abort函数，说是断开一个异步请求。</span></div>
<div style="font-family: 微软雅黑; widows: auto; background-color: #ffffff;"><span style="font-size: 14pt;">一试，我同步连接也能断开啊，网络异常，啥都不close，直接abort，server那个连接就断了，很快也就可以重传了呢。</span></div>
<div style="font-family: 微软雅黑; widows: auto; background-color: #ffffff;"></div>
<br />
<div style="font-family: 微软雅黑; widows: auto; background-color: #ffffff;"><strong style="font-size: 14pt; background-color: inherit;">8，来都来了</strong></div>
<div style="font-family: 微软雅黑; widows: auto; background-color: #ffffff;"><span style="font-size: 14pt;">这个abort做了什么鬼呢，想用wireshark抓个包看看，无奈不懂，十来分钟连个filter都没写好。</span></div>
<div style="font-family: 微软雅黑; widows: auto; background-color: #ffffff;"><span style="font-size: 14pt;">难道是50%的丢包不够强悍，abort还是有数据逃出去了？</span></div>
<div style="font-family: 微软雅黑; widows: auto; background-color: #ffffff;"><span style="font-size: 14pt;">后来百度知道wireshark在windows下要做特殊处理才能抓取本地数据包。</span></div>
<div style="font-family: 微软雅黑; widows: auto; background-color: #ffffff;"><a href="http://www.cnblogs.com/luminji/p/3503464.html" style="background-color: inherit; cursor: pointer;"><span style="font-size: 14pt;">http://www.cnblogs.com/luminji/p/3503464.html</span></a></div>
<div style="font-family: 微软雅黑; widows: auto; background-color: #ffffff;"><span style="font-size: 14pt;">无奈增加本机路由后filezilla server连不上了，最后下了个手机ftp server。</span></div>
<div style="font-family: 微软雅黑; widows: auto; background-color: #ffffff;"><span style="font-size: 14pt;">发现abort也没什么特殊的地方，只是通知ftp释放控制连接和数据连接然后马上返回，连接能不能断掉就听天由命了。</span></div>
<div style="font-family: 微软雅黑; widows: auto; background-color: #ffffff;"><span style="font-size: 14pt;">100%丢包率的时候，filezilla还真有连接会锁死文件。</span></div><img src ="http://www.cppblog.com/Onway/aggbug/211226.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/Onway/" target="_blank">Onway</a> 2015-07-11 15:38 <a href="http://www.cppblog.com/Onway/archive/2015/07/11/211226.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>python子进程时间限制</title><link>http://www.cppblog.com/Onway/archive/2013/05/10/200173.html</link><dc:creator>Onway</dc:creator><author>Onway</author><pubDate>Fri, 10 May 2013 13:26:00 GMT</pubDate><guid>http://www.cppblog.com/Onway/archive/2013/05/10/200173.html</guid><wfw:comment>http://www.cppblog.com/Onway/comments/200173.html</wfw:comment><comments>http://www.cppblog.com/Onway/archive/2013/05/10/200173.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/Onway/comments/commentRss/200173.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/Onway/services/trackbacks/200173.html</trackback:ping><description><![CDATA[<div>python程序里面需要执行一个系统命令程序，如果命令在限定时间之内结束，则python程序读取其输出（如果有）并马上返回，否则强行终止命令程序。</div><div>原本这个功能是用系统信号SIGALARM和python的异常解决的，但这不能用在多线程的环境里。然后考虑用threading.Timer进行计时，但这个计时是在一个单独线程进行的，如何将超时信息传给主线程也是一个问题。<br /></div><div>百度一下，用select可以解决需求：</div><div><a href="http://blog.163.com/yi_yixinyiyi/blog/static/136286889201152234648899/">http://blog.163.com/yi_yixinyiyi/blog/static/136286889201152234648899/</a><br /></div><div>但select并不完美，当命令程序输出的内容多于管道容量的时候，select就会返回，如果此时命令程序再进入阻塞，则时间限制就不起作用了。</div><div><br />select.py:<br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #0000FF; ">import</span>&nbsp;select<br /><span style="color: #0000FF; ">import</span>&nbsp;subprocess<br /><br />popen&nbsp;=&nbsp;subprocess.Popen(<span style="color: #800000; ">"</span><span style="color: #800000; ">./test.sh</span><span style="color: #800000; ">"</span>,&nbsp;stdout=subprocess.PIPE)<br />fs&nbsp;=&nbsp;select.select([popen.stdout],&nbsp;[],&nbsp;[],&nbsp;3)<br /><span style="color: #0000FF; ">if</span>&nbsp;popen.stdout&nbsp;<span style="color: #0000FF; ">in</span>&nbsp;fs[0]:<br />&nbsp;&nbsp;&nbsp;&nbsp;output&nbsp;=&nbsp;popen.stdout.read()<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">print</span>&nbsp;len(output)<br /><span style="color: #0000FF; ">else</span>:<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">print</span>&nbsp;<span style="color: #800000; ">"</span><span style="color: #800000; ">timeout</span><span style="color: #800000; ">"</span></div><br />test.sh:<br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #008000; ">#</span><span style="color: #008000; ">!/bin/bash<br /><br />#&nbsp;a.txt&nbsp;contains&nbsp;65536&nbsp;characters</span><span style="color: #008000; "><br /></span>cat&nbsp;a.txt<br /><span style="color: #0000FF; ">sleep</span>&nbsp;<span style="color: #800000; ">10</span><br />cat&nbsp;a.txt</div></div><img src ="http://www.cppblog.com/Onway/aggbug/200173.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/Onway/" target="_blank">Onway</a> 2013-05-10 21:26 <a href="http://www.cppblog.com/Onway/archive/2013/05/10/200173.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Linux进程资源在fork和execve前后的变化</title><link>http://www.cppblog.com/Onway/archive/2013/05/10/200172.html</link><dc:creator>Onway</dc:creator><author>Onway</author><pubDate>Fri, 10 May 2013 12:21:00 GMT</pubDate><guid>http://www.cppblog.com/Onway/archive/2013/05/10/200172.html</guid><wfw:comment>http://www.cppblog.com/Onway/comments/200172.html</wfw:comment><comments>http://www.cppblog.com/Onway/archive/2013/05/10/200172.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.cppblog.com/Onway/comments/commentRss/200172.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/Onway/services/trackbacks/200172.html</trackback:ping><description><![CDATA[<div></div><div>使用getrusage得到的资源统计的类型较多，测试代码是仅针对ru_utime, ru_stime, ru_minflt三种类型的资源。<br /></div><div>测试环境：Linux kubuntu 3.2.0-38-generic-pae #61-Ubuntu SMP Tue Feb 19 12:39:51 UTC 2013 i686 i686 i386 GNU/Linux<br /></div><div>结论：父进程fork得到的子进程的资源使用被重置，子进程使用execve之后的资源使用不变。<br /></div><div></div><div>parent.c:<br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->#include&nbsp;&lt;stdio.h&gt;<br />#include&nbsp;&lt;stdlib.h&gt;<br />#include&nbsp;&lt;unistd.h&gt;<br />#include&nbsp;&lt;sys/time.h&gt;<br />#include&nbsp;&lt;sys/resource.h&gt;<br /><br /><span style="color: #0000FF; ">void</span><br />print_rusage(<span style="color: #0000FF; ">const</span>&nbsp;<span style="color: #0000FF; ">char</span>&nbsp;*&nbsp;where)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">struct</span>&nbsp;rusage&nbsp;used;<br />&nbsp;&nbsp;&nbsp;&nbsp;getrusage(RUSAGE_SELF,&nbsp;&amp;used);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;printf("In&nbsp;%s:\n",&nbsp;where);<br />&nbsp;&nbsp;&nbsp;&nbsp;printf("user&nbsp;cpu&nbsp;time:&nbsp;%ld(ms)\n",<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;used.ru_utime.tv_sec&nbsp;*&nbsp;1000&nbsp;+&nbsp;used.ru_utime.tv_usec&nbsp;/&nbsp;1000);<br />&nbsp;&nbsp;&nbsp;&nbsp;printf("sys&nbsp;cpu&nbsp;time:&nbsp;%ld(ms)\n",<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;used.ru_stime.tv_sec&nbsp;*&nbsp;1000&nbsp;+&nbsp;used.ru_stime.tv_usec&nbsp;/&nbsp;1000);<br />&nbsp;&nbsp;&nbsp;&nbsp;printf("soft&nbsp;page&nbsp;faults:&nbsp;%ld\n",&nbsp;used.ru_minflt);<br />&nbsp;&nbsp;&nbsp;&nbsp;printf("\n");<br />}<br /><br /><span style="color: #0000FF; ">void</span><br />consume_rusage()<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;i,&nbsp;j,&nbsp;k;<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">char</span>&nbsp;*&nbsp;s&nbsp;=&nbsp;NULL;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">/*</span><span style="color: #008000; ">&nbsp;about&nbsp;3&nbsp;seconds&nbsp;user&nbsp;cpu&nbsp;time&nbsp;</span><span style="color: #008000; ">*/</span><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>&nbsp;(i&nbsp;=&nbsp;0;&nbsp;i&nbsp;&lt;&nbsp;1000;&nbsp;++i)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>&nbsp;(j&nbsp;=&nbsp;0;&nbsp;j&nbsp;&lt;&nbsp;1000;&nbsp;++j)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>&nbsp;(k&nbsp;=&nbsp;0;&nbsp;k&nbsp;&lt;&nbsp;1000;&nbsp;++k)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;i&nbsp;/&nbsp;(j&nbsp;+&nbsp;1)&nbsp;*&nbsp;k;<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">/*</span><span style="color: #008000; ">&nbsp;1000&nbsp;soft&nbsp;page&nbsp;faults&nbsp;</span><span style="color: #008000; ">*/</span><br />&nbsp;&nbsp;&nbsp;&nbsp;k&nbsp;=&nbsp;4096&nbsp;*&nbsp;1000;<br />&nbsp;&nbsp;&nbsp;&nbsp;s&nbsp;=&nbsp;(<span style="color: #0000FF; ">char</span>&nbsp;*)malloc(k);<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>&nbsp;(i&nbsp;=&nbsp;0;&nbsp;i&nbsp;&lt;&nbsp;k;&nbsp;++i)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;s[i]&nbsp;=&nbsp;'a';<br />}<br /><br /><span style="color: #0000FF; ">int</span><br />main(<span style="color: #0000FF; ">int</span>&nbsp;argc,&nbsp;<span style="color: #0000FF; ">char</span>&nbsp;*argv[])<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;consume_rusage();<br />&nbsp;&nbsp;&nbsp;&nbsp;print_rusage("parent&nbsp;process");<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(fork()&nbsp;==&nbsp;0)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;print_rusage("child&nbsp;process,&nbsp;after&nbsp;fork");<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf("consuming&nbsp;resource&nbsp;<img src="http://www.cppblog.com/Images/dot.gif" alt="" />\n\n");<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;consume_rusage();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;print_rusage("child&nbsp;process,&nbsp;before&nbsp;execve");<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf("excl&nbsp;child&nbsp;program&nbsp;now&nbsp;<img src="http://www.cppblog.com/Images/dot.gif" alt="" />\n\n");<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;execl("./child",&nbsp;"./child",&nbsp;(<span style="color: #0000FF; ">void</span>&nbsp;*)0);<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;wait(NULL);<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;0;<br />}</div><br />child.c:<br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->#include&nbsp;&lt;stdio.h&gt;<br />#include&nbsp;&lt;sys/time.h&gt;<br />#include&nbsp;&lt;sys/resource.h&gt;<br /><br /><span style="color: #0000FF; ">void</span><br />print_rusage(<span style="color: #0000FF; ">const</span>&nbsp;<span style="color: #0000FF; ">char</span>&nbsp;*&nbsp;where)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">struct</span>&nbsp;rusage&nbsp;used;<br />&nbsp;&nbsp;&nbsp;&nbsp;getrusage(RUSAGE_SELF,&nbsp;&amp;used);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;printf("In&nbsp;%s:\n",&nbsp;where);<br />&nbsp;&nbsp;&nbsp;&nbsp;printf("user&nbsp;cpu&nbsp;time:&nbsp;%ld(ms)\n",<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;used.ru_utime.tv_sec&nbsp;*&nbsp;1000&nbsp;+&nbsp;used.ru_utime.tv_usec&nbsp;/&nbsp;1000);<br />&nbsp;&nbsp;&nbsp;&nbsp;printf("sys&nbsp;cpu&nbsp;time:&nbsp;%ld(ms)\n",<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;used.ru_stime.tv_sec&nbsp;*&nbsp;1000&nbsp;+&nbsp;used.ru_stime.tv_usec&nbsp;/&nbsp;1000);<br />&nbsp;&nbsp;&nbsp;&nbsp;printf("soft&nbsp;page&nbsp;faults:&nbsp;%ld\n",&nbsp;used.ru_minflt);<br />&nbsp;&nbsp;&nbsp;&nbsp;printf("\n");<br />}<br /><br /><span style="color: #0000FF; ">int</span><br />main(<span style="color: #0000FF; ">int</span>&nbsp;argc,&nbsp;<span style="color: #0000FF; ">char</span>&nbsp;*argv[])<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;print_rusage("child&nbsp;program");<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;0;<br />} &nbsp;&nbsp;</div><br /><div>好久没写博客了，密码都快忘记了。写给自己的记忆。</div><div></div></div><img src ="http://www.cppblog.com/Onway/aggbug/200172.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/Onway/" target="_blank">Onway</a> 2013-05-10 20:21 <a href="http://www.cppblog.com/Onway/archive/2013/05/10/200172.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>goldendict有道扩展程序eyoudao 1.3</title><link>http://www.cppblog.com/Onway/archive/2012/10/22/193668.html</link><dc:creator>Onway</dc:creator><author>Onway</author><pubDate>Mon, 22 Oct 2012 05:52:00 GMT</pubDate><guid>http://www.cppblog.com/Onway/archive/2012/10/22/193668.html</guid><wfw:comment>http://www.cppblog.com/Onway/comments/193668.html</wfw:comment><comments>http://www.cppblog.com/Onway/archive/2012/10/22/193668.html#Feedback</comments><slash:comments>9</slash:comments><wfw:commentRss>http://www.cppblog.com/Onway/comments/commentRss/193668.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/Onway/services/trackbacks/193668.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 更新说明：<br>	a，去掉了本地单词本功能<br>	b，增加了simple选项查词<br>	c，detail选项查词更新到有道词典的5.1.38.3211版本<br>	d，收录skyhacker的pyfanyi（那是完全不一样的界面风格）<br>下载：<br>https://sourceforge.net/projects/eyoudao/files/&nbsp;&nbsp;<a href='http://www.cppblog.com/Onway/archive/2012/10/22/193668.html'>阅读全文</a><img src ="http://www.cppblog.com/Onway/aggbug/193668.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/Onway/" target="_blank">Onway</a> 2012-10-22 13:52 <a href="http://www.cppblog.com/Onway/archive/2012/10/22/193668.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>ACM Online Judge: anoj_0.2.0单机测试版</title><link>http://www.cppblog.com/Onway/archive/2012/09/18/191086.html</link><dc:creator>Onway</dc:creator><author>Onway</author><pubDate>Tue, 18 Sep 2012 03:44:00 GMT</pubDate><guid>http://www.cppblog.com/Onway/archive/2012/09/18/191086.html</guid><wfw:comment>http://www.cppblog.com/Onway/comments/191086.html</wfw:comment><comments>http://www.cppblog.com/Onway/archive/2012/09/18/191086.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/Onway/comments/commentRss/191086.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/Onway/services/trackbacks/191086.html</trackback:ping><description><![CDATA[<img src="http://www.cppblog.com/images/cppblog_com/onway/091810_x3A_34_x3A_10.png" border="0" alt="" width="900" height="210" /><br /><img src="http://www.cppblog.com/images/cppblog_com/onway/091810_x3A_34_x3A_41.png" border="0" alt="" width="900" height="236" /><br /><br /><br /><img src="http://www.cppblog.com/images/cppblog_com/onway/091810_x3A_33_x3A_22.png" width="900" height="427" alt="" /><br /><br /><br /><span style="font-size: 14pt; ">我以为自己已经上传过0.1.0的了，原来没有。</span><br /><br /><span style="font-size: 14pt; ">在原来那篇&#8220;<a href="http://www.cppblog.com/Onway/archive/2012/08/20/187707.html">OnlineJudge监测程序</a>&#8221;的基础上，添加了后台守护进程和单机测试网页。</span><br /><br /><span style="font-size: 14pt; ">信号处理和系统调用规则，依然不完善。</span><br /><span style="font-size: 14pt; ">依然没有使用chroot限制根目录，头文件，动态库这些内容还是不会限制。</span><br /><span style="font-size: 14pt; ">java程序的内存统计，依然包含了虚拟机内存。</span><br /><br /><span style="font-size: 14pt; ">在SourceForge捣鼓了好几天了，还是不太熟悉。</span><br /><span style="font-size: 14pt; ">下载地址：</span><a href="http://sourceforge.net/projects/anoj/files/"><span style="font-size: 14pt; ">http://sourceforge.net/projects/anoj/files/</span><br /></a><span style="font-size: 14pt; ">安装包里有依赖，安装等说明。</span><br /><br /><span style="font-size: 14pt; ">纯粹学习吧，跟HDOJ和POJ比，还差远着呢。</span><br /><span style="font-size: 14pt; ">如有建议，博客留言或联系aluohuai@126.com</span><img src ="http://www.cppblog.com/Onway/aggbug/191086.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/Onway/" target="_blank">Onway</a> 2012-09-18 11:44 <a href="http://www.cppblog.com/Onway/archive/2012/09/18/191086.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>OnlineJudge的监测程序</title><link>http://www.cppblog.com/Onway/archive/2012/08/20/187707.html</link><dc:creator>Onway</dc:creator><author>Onway</author><pubDate>Sun, 19 Aug 2012 16:35:00 GMT</pubDate><guid>http://www.cppblog.com/Onway/archive/2012/08/20/187707.html</guid><wfw:comment>http://www.cppblog.com/Onway/comments/187707.html</wfw:comment><comments>http://www.cppblog.com/Onway/archive/2012/08/20/187707.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cppblog.com/Onway/comments/commentRss/187707.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/Onway/services/trackbacks/187707.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 3，运行监测程序：<br>./a.out -t time -m memory -f fsize --basedir a_temp_working_directory --datadir input_answer_files_directory \<br> --who user_and_group_ID --magic a_random_string --end java Main<br>解释：<br>-t，时间限制，单位ms<br>-m，内存限制，单位kb<br>-f，输出限制，单位kb<br>--basedir，工作目录<br>--datadir，存放输入和答案文件的目录，必须包含了ojdlck生成的data.conf文件<br>--who，运行用户程序的用户ID和组ID，建议为系统的nobody用户<br>--magic，用于在工作目录产生输出的文件名<br>--end，标志所有的参数输入完毕，接下来的参数都会视为用户程序及其参数<br>例如：<br>./a.out -t 1000 -m 65536 -f 4096 --basedir /tmp --dat&nbsp;&nbsp;<a href='http://www.cppblog.com/Onway/archive/2012/08/20/187707.html'>阅读全文</a><img src ="http://www.cppblog.com/Onway/aggbug/187707.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/Onway/" target="_blank">Onway</a> 2012-08-20 00:35 <a href="http://www.cppblog.com/Onway/archive/2012/08/20/187707.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>goldendict有道扩展程序1.2版本</title><link>http://www.cppblog.com/Onway/archive/2012/06/08/178053.html</link><dc:creator>Onway</dc:creator><author>Onway</author><pubDate>Fri, 08 Jun 2012 03:11:00 GMT</pubDate><guid>http://www.cppblog.com/Onway/archive/2012/06/08/178053.html</guid><wfw:comment>http://www.cppblog.com/Onway/comments/178053.html</wfw:comment><comments>http://www.cppblog.com/Onway/archive/2012/06/08/178053.html#Feedback</comments><slash:comments>14</slash:comments><wfw:commentRss>http://www.cppblog.com/Onway/comments/commentRss/178053.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/Onway/services/trackbacks/178053.html</trackback:ping><description><![CDATA[<img alt="" src="http://www.cppblog.com/images/cppblog_com/onway/3.png" height="268" width="400" /><br />更新说明：<br /><div>&nbsp;&nbsp;&nbsp; a，result.xsl在&lt;body&gt;之后加入了两个html子元素。<br />&nbsp;&nbsp; &nbsp;b，classify.txt分类支持空格<br />&nbsp;&nbsp; &nbsp;c，选择单词分类不再使用zenity，而是直接在显示的网页中添加。<br />&nbsp;&nbsp; &nbsp;d，单词本复习支持短语，增加了两个模式，背诵模式是将选中的单词批量下载到一个文件，复习模式是显示单词和释义，不记入数据库。<br />&nbsp;&nbsp; &nbsp;e，改变了安装方式，不再从makefile文件编译，而是预先拷贝预先的编译好的可执行文件。（检测了ubuntu，fedora，centos三个系统，xslt程序使用的动态库都能在系统里找到）<br /></div>下载：<br /><a href="/Files/Onway/eyoudao-1.2.tar.gz.rar">/Files/Onway/eyoudao-1.2.tar.gz.rar</a><img src ="http://www.cppblog.com/Onway/aggbug/178053.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/Onway/" target="_blank">Onway</a> 2012-06-08 11:11 <a href="http://www.cppblog.com/Onway/archive/2012/06/08/178053.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>一些纠结的c代码</title><link>http://www.cppblog.com/Onway/archive/2012/05/28/176480.html</link><dc:creator>Onway</dc:creator><author>Onway</author><pubDate>Mon, 28 May 2012 03:52:00 GMT</pubDate><guid>http://www.cppblog.com/Onway/archive/2012/05/28/176480.html</guid><wfw:comment>http://www.cppblog.com/Onway/comments/176480.html</wfw:comment><comments>http://www.cppblog.com/Onway/archive/2012/05/28/176480.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/Onway/comments/commentRss/176480.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/Onway/services/trackbacks/176480.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: <br>摘自《c专家编程》，代码和答案都是基于gcc 4.6.1和32位linux系统。<br>某些解释不够全面和正确，如果是错误，请指正。<br><br>1，解释该声明的含义：<br>	char * const *(*next)();&nbsp;&nbsp;<a href='http://www.cppblog.com/Onway/archive/2012/05/28/176480.html'>阅读全文</a><img src ="http://www.cppblog.com/Onway/aggbug/176480.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/Onway/" target="_blank">Onway</a> 2012-05-28 11:52 <a href="http://www.cppblog.com/Onway/archive/2012/05/28/176480.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>goldendict的有道词典扩展程序1.1更新程序</title><link>http://www.cppblog.com/Onway/archive/2012/03/20/168442.html</link><dc:creator>Onway</dc:creator><author>Onway</author><pubDate>Tue, 20 Mar 2012 14:13:00 GMT</pubDate><guid>http://www.cppblog.com/Onway/archive/2012/03/20/168442.html</guid><wfw:comment>http://www.cppblog.com/Onway/comments/168442.html</wfw:comment><comments>http://www.cppblog.com/Onway/archive/2012/03/20/168442.html#Feedback</comments><slash:comments>4</slash:comments><wfw:commentRss>http://www.cppblog.com/Onway/comments/commentRss/168442.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/Onway/services/trackbacks/168442.html</trackback:ping><description><![CDATA[<div><div>7，附1.0到1.1的更新说明：</div><div><span style="white-space:pre">	</span>a，单词本使用了sqlite3数据库</div><div><span style="white-space:pre">	</span>b，添加单词会提示选择单词分类，可从~/.eyoudao/classify.txt进行修改，分类不能出现空格。</div><div><span style="white-space:pre">	</span>c，1.0的单词本~/.eyoudao/wordsbook被废弃，在该目录下多了两个文件classify.txt和wordbook.db</div><div><span style="white-space:pre">	</span>d，除了新添加的两个文件之外，修改的只有eyoudao脚本，另添加了一个单词本复习脚本review，并被连接到/usr/bin目录下</div><div></div><div>8，单词本复习脚本使用说明</div><div><span style="white-space:pre">	</span>a，复习分为三个模式，听写模式：只有发音，没有单词和释义显示；默写模式：只有释义显示，可自行使用发音;问答模式：给出单词，选择是否记得释义。</div><div><span style="white-space:pre">	</span>b，选定模式之后，是选择复习的单词，可按分类，加入时间，错误率三种或它们的组合进行选择。</div><div><span style="white-space:pre">	</span>c，复习过程中，非问答模式下，错误之后，会重新复习该单词，不会写入数据库，除非自行选择跳过该单词。</div><div><span style="white-space:pre">	</span>d，问答模式下，选择忘记，会跳过该单词，并写入数据库。</div></div><div><br /><a href="/Files/Onway/eyoudao-1.0-to-1.1.tar.gz.rar">/Files/Onway/eyoudao-1.0-to-1.1.tar.gz.rar</a></div><img src ="http://www.cppblog.com/Onway/aggbug/168442.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/Onway/" target="_blank">Onway</a> 2012-03-20 22:13 <a href="http://www.cppblog.com/Onway/archive/2012/03/20/168442.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>goldendict的网页版有道词典，失败了！</title><link>http://www.cppblog.com/Onway/archive/2012/03/17/168212.html</link><dc:creator>Onway</dc:creator><author>Onway</author><pubDate>Sat, 17 Mar 2012 09:38:00 GMT</pubDate><guid>http://www.cppblog.com/Onway/archive/2012/03/17/168212.html</guid><wfw:comment>http://www.cppblog.com/Onway/comments/168212.html</wfw:comment><comments>http://www.cppblog.com/Onway/archive/2012/03/17/168212.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/Onway/comments/commentRss/168212.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/Onway/services/trackbacks/168212.html</trackback:ping><description><![CDATA[其实在浏览器看到是正常的，但是通过goldendict访问就不行了，主要表现是导航条工作不正常，不能隐藏，和页面底下出现的一大片空白。如图：<br /><img alt="" src="http://www.cppblog.com/images/cppblog_com/onway/031717_x3A_16_x3A_26.png" height="206" width="327" />&nbsp; <img alt="" src="http://www.cppblog.com/images/cppblog_com/onway/031717_x3A_16_x3A_44.png" height="282" width="430" /><br /><br /><img alt="" src="http://www.cppblog.com/images/cppblog_com/onway/031717_x3A_11_x3A_15.png" height="297" width="492" /><br /><br /><br /><a href="/Files/Onway/eyoudao-web.tar.gz.rar">/Files/Onway/eyoudao-web.tar.gz.rar</a><br /><br /><br />gyd-server.c<br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #000000; ">#include&nbsp;</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">sys</span><span style="color: #000000; ">/</span><span style="color: #000000; ">types.h</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; "><br />#include&nbsp;</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">sys</span><span style="color: #000000; ">/</span><span style="color: #000000; ">socket.h</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; "><br />#include&nbsp;</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">sys</span><span style="color: #000000; ">/</span><span style="color: #000000; ">stat.h</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; "><br />#include&nbsp;</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">unistd.h</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; "><br />#include&nbsp;</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">stdio.h</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; "><br />#include&nbsp;</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">stdlib.h</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; "><br />#include&nbsp;</span><span style="color: #000000; ">&lt;</span><span style="color: #0000FF; ">string</span><span style="color: #000000; ">.h</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; "><br />#include&nbsp;</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">arpa</span><span style="color: #000000; ">/</span><span style="color: #000000; ">inet.h</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; "><br />#include&nbsp;</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">fcntl.h</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; "><br />#include&nbsp;</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">pthread.h</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; "><br /><br /></span><span style="color: #0000FF; ">#define</span><span style="color: #000000; ">&nbsp;PROT&nbsp;10000</span><span style="color: #000000; "><br /></span><span style="color: #0000FF; ">#define</span><span style="color: #000000; ">&nbsp;ADDRESS&nbsp;"127.0.0.1"</span><span style="color: #000000; "><br /></span><span style="color: #0000FF; ">#define</span><span style="color: #000000; ">&nbsp;BACKLOG&nbsp;20</span><span style="color: #000000; "><br /></span><span style="color: #0000FF; ">#define</span><span style="color: #000000; ">&nbsp;BUFSIZE&nbsp;4096</span><span style="color: #000000; "><br /><br /></span><span style="color: #008000; ">/*</span><span style="color: #008000; ">&nbsp;&nbsp;&nbsp;&nbsp;互斥量，用于各个线程的标准输出&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">*/</span><span style="color: #000000; "><br />pthread_mutex_t&nbsp;</span><span style="color: #0000FF; ">lock</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;PTHREAD_MUTEX_INITIALIZER;<br /></span><span style="color: #0000FF; ">struct</span><span style="color: #000000; ">&nbsp;clientinfo<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;sockfd;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">/*</span><span style="color: #008000; ">&nbsp;&nbsp;&nbsp;&nbsp;客户端套接字&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">*/</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;sockno;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">/*</span><span style="color: #008000; ">&nbsp;&nbsp;&nbsp;&nbsp;客户端请求顺序号&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">*/</span><span style="color: #000000; "><br />};<br /><br /></span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;create_server_socket();<br /></span><span style="color: #0000FF; ">void</span><span style="color: #000000; ">*</span><span style="color: #000000; ">&nbsp;handle_request(</span><span style="color: #0000FF; ">void</span><span style="color: #000000; ">*</span><span style="color: #000000; ">);<br /></span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;send_dynamic(</span><span style="color: #0000FF; ">struct</span><span style="color: #000000; ">&nbsp;clientinfo</span><span style="color: #000000; ">*</span><span style="color: #000000; ">,</span><span style="color: #0000FF; ">char</span><span style="color: #000000; ">*</span><span style="color: #000000; ">);&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">/*</span><span style="color: #008000; ">&nbsp;&nbsp;&nbsp;&nbsp;通过dynamic.bash返回的结果&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">*/</span><span style="color: #000000; "><br /></span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;send_static(</span><span style="color: #0000FF; ">struct</span><span style="color: #000000; ">&nbsp;clientinfo</span><span style="color: #000000; ">*</span><span style="color: #000000; ">,</span><span style="color: #0000FF; ">char</span><span style="color: #000000; ">*</span><span style="color: #000000; ">);&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">/*</span><span style="color: #008000; ">&nbsp;&nbsp;&nbsp;&nbsp;直接读文件发送&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">*/</span><span style="color: #000000; "><br /></span><span style="color: #0000FF; ">void</span><span style="color: #000000; ">&nbsp;print_msg(</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">,</span><span style="color: #0000FF; ">const</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">char</span><span style="color: #000000; ">*</span><span style="color: #000000; ">);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">/*</span><span style="color: #008000; ">&nbsp;&nbsp;&nbsp;&nbsp;标准输出&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">*/</span><span style="color: #000000; "><br /><br /><br /></span><span style="color: #0000FF; ">int</span><span style="color: #000000; "><br />main(</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;argc,</span><span style="color: #0000FF; ">char</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">*</span><span style="color: #000000; ">argv[])<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;serverfd;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;count&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">;<br />&nbsp;&nbsp;&nbsp;&nbsp;pthread_t&nbsp;ptid;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">struct</span><span style="color: #000000; ">&nbsp;clientinfo&nbsp;</span><span style="color: #000000; ">*</span><span style="color: #000000; ">cinfo;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">/*</span><span style="color: #008000; ">&nbsp;&nbsp;&nbsp;&nbsp;创建监听套接字&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">*/</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;serverfd&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;create_server_socket();<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">&nbsp;(serverfd&nbsp;</span><span style="color: #000000; ">==</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">-</span><span style="color: #000000; ">1</span><span style="color: #000000; ">)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">main():&nbsp;terminate\n</span><span style="color: #000000; ">"</span><span style="color: #000000; ">);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">return</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">-</span><span style="color: #000000; ">1</span><span style="color: #000000; ">;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">while</span><span style="color: #000000; ">&nbsp;(</span><span style="color: #000000; ">1</span><span style="color: #000000; ">)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cinfo&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;(</span><span style="color: #0000FF; ">struct</span><span style="color: #000000; ">&nbsp;clientinfo</span><span style="color: #000000; ">*</span><span style="color: #000000; ">)&nbsp;malloc&nbsp;(</span><span style="color: #0000FF; ">sizeof</span><span style="color: #000000; ">(</span><span style="color: #0000FF; ">struct</span><span style="color: #000000; ">&nbsp;clientinfo));<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cinfo</span><span style="color: #000000; ">-&gt;</span><span style="color: #000000; ">sockfd&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;accept(serverfd,NULL,NULL);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cinfo</span><span style="color: #000000; ">-&gt;</span><span style="color: #000000; ">sockno&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">++</span><span style="color: #000000; ">count;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pthread_create(</span><span style="color: #000000; ">&amp;</span><span style="color: #000000; ">ptid,NULL,handle_request,(</span><span style="color: #0000FF; ">void</span><span style="color: #000000; ">*</span><span style="color: #000000; ">)cinfo);<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">return</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">;<br />}<br /><br /></span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;<br />create_server_socket()<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;tmpfd&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;socket(AF_INET,SOCK_STREAM,</span><span style="color: #000000; ">0</span><span style="color: #000000; ">);<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">&nbsp;(tmpfd&nbsp;</span><span style="color: #000000; ">==</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">-</span><span style="color: #000000; ">1</span><span style="color: #000000; ">)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">create_server_socket():&nbsp;socket&nbsp;error\n</span><span style="color: #000000; ">"</span><span style="color: #000000; ">);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">return</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">-</span><span style="color: #000000; ">1</span><span style="color: #000000; ">;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">struct</span><span style="color: #000000; ">&nbsp;sockaddr_in&nbsp;svraddr;<br />&nbsp;&nbsp;&nbsp;&nbsp;bzero(</span><span style="color: #000000; ">&amp;</span><span style="color: #000000; ">svraddr,</span><span style="color: #0000FF; ">sizeof</span><span style="color: #000000; ">(svraddr));<br />&nbsp;&nbsp;&nbsp;&nbsp;svraddr.sin_family&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;AF_INET;<br />&nbsp;&nbsp;&nbsp;&nbsp;svraddr.sin_port&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;htons(PROT);<br />&nbsp;&nbsp;&nbsp;&nbsp;svraddr.sin_addr.s_addr&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;inet_addr(ADDRESS);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">&nbsp;(bind(tmpfd,(</span><span style="color: #0000FF; ">struct</span><span style="color: #000000; ">&nbsp;sockaddr</span><span style="color: #000000; ">*</span><span style="color: #000000; ">)</span><span style="color: #000000; ">&amp;</span><span style="color: #000000; ">svraddr,</span><span style="color: #0000FF; ">sizeof</span><span style="color: #000000; ">(svraddr))&nbsp;</span><span style="color: #000000; ">==</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">-</span><span style="color: #000000; ">1</span><span style="color: #000000; ">)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">create_server_socket():&nbsp;bind&nbsp;error\n</span><span style="color: #000000; ">"</span><span style="color: #000000; ">);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">return</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">-</span><span style="color: #000000; ">1</span><span style="color: #000000; ">;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">&nbsp;(listen(tmpfd,BACKLOG)&nbsp;</span><span style="color: #000000; ">==</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">-</span><span style="color: #000000; ">1</span><span style="color: #000000; ">)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">create_server_socket():&nbsp;listen&nbsp;error\n</span><span style="color: #000000; ">"</span><span style="color: #000000; ">);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">return</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">-</span><span style="color: #000000; ">1</span><span style="color: #000000; ">;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">return</span><span style="color: #000000; ">&nbsp;tmpfd;<br />}<br /><br /></span><span style="color: #0000FF; ">void</span><span style="color: #000000; ">*</span><span style="color: #000000; "><br />handle_request(</span><span style="color: #0000FF; ">void</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">*</span><span style="color: #000000; ">info)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">struct</span><span style="color: #000000; ">&nbsp;clientinfo&nbsp;</span><span style="color: #000000; ">*</span><span style="color: #000000; ">cinfo&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;(</span><span style="color: #0000FF; ">struct</span><span style="color: #000000; ">&nbsp;clientinfo</span><span style="color: #000000; ">*</span><span style="color: #000000; ">)&nbsp;info;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">char</span><span style="color: #000000; ">&nbsp;receive[BUFSIZE&nbsp;</span><span style="color: #000000; ">&lt;&lt;</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">1</span><span style="color: #000000; ">]&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">""</span><span style="color: #000000; ">;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">char</span><span style="color: #000000; ">&nbsp;method[BUFSIZE]&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">""</span><span style="color: #000000; ">,request[BUFSIZE]&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">""</span><span style="color: #000000; ">;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">char</span><span style="color: #000000; ">&nbsp;header[]&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">"</span><span style="color: #000000; ">HTTP/1.1&nbsp;200&nbsp;OK\r\nconnection:close\r\n\r\n</span><span style="color: #000000; ">"</span><span style="color: #000000; ">;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;i;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">&nbsp;(recv(cinfo</span><span style="color: #000000; ">-&gt;</span><span style="color: #000000; ">sockfd,receive,BUFSIZE&nbsp;</span><span style="color: #000000; ">&lt;&lt;</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">1</span><span style="color: #000000; ">,</span><span style="color: #000000; ">0</span><span style="color: #000000; ">)&nbsp;</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;print_msg(cinfo</span><span style="color: #000000; ">-&gt;</span><span style="color: #000000; ">sockno,</span><span style="color: #000000; ">"</span><span style="color: #000000; ">handle_request():&nbsp;recv&nbsp;error</span><span style="color: #000000; ">"</span><span style="color: #000000; ">);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">return</span><span style="color: #000000; ">&nbsp;(&nbsp;(</span><span style="color: #0000FF; ">void</span><span style="color: #000000; ">*</span><span style="color: #000000; ">)&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">);<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">/*</span><span style="color: #008000; ">&nbsp;&nbsp;&nbsp;&nbsp;回应报头&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">*/</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;write(cinfo</span><span style="color: #000000; ">-&gt;</span><span style="color: #000000; ">sockfd,header,strlen(header));<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">/*</span><span style="color: #008000; ">&nbsp;&nbsp;&nbsp;&nbsp;请求方法和参数的简单检测&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">*/</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;sscanf(receive,</span><span style="color: #000000; ">"</span><span style="color: #000000; ">%s%s</span><span style="color: #000000; ">"</span><span style="color: #000000; ">,method,request);<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">&nbsp;(strcmp(method,</span><span style="color: #000000; ">"</span><span style="color: #000000; ">GET</span><span style="color: #000000; ">"</span><span style="color: #000000; ">))&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;print_msg(cinfo</span><span style="color: #000000; ">-&gt;</span><span style="color: #000000; ">sockno,</span><span style="color: #000000; ">"</span><span style="color: #000000; ">handle_request():&nbsp;method&nbsp;is&nbsp;not&nbsp;GET</span><span style="color: #000000; ">"</span><span style="color: #000000; ">);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">return</span><span style="color: #000000; ">&nbsp;(&nbsp;(</span><span style="color: #0000FF; ">void</span><span style="color: #000000; ">*</span><span style="color: #000000; ">)&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">);<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">&nbsp;(strlen(request)&nbsp;</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">8</span><span style="color: #000000; ">)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;print_msg(cinfo</span><span style="color: #000000; ">-&gt;</span><span style="color: #000000; ">sockno,</span><span style="color: #000000; ">"</span><span style="color: #000000; ">handle_request():&nbsp;unknow&nbsp;request</span><span style="color: #000000; ">"</span><span style="color: #000000; ">);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">goto</span><span style="color: #000000; ">&nbsp;end;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;print_msg(cinfo</span><span style="color: #000000; ">-&gt;</span><span style="color: #000000; ">sockno,receive);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">/*</span><span style="color: #008000; ">&nbsp;&nbsp;&nbsp;&nbsp;请求dynamic.bash&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">*/</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">&nbsp;(strncmp(request,</span><span style="color: #000000; ">"</span><span style="color: #000000; ">/action?</span><span style="color: #000000; ">"</span><span style="color: #000000; ">,</span><span style="color: #000000; ">8</span><span style="color: #000000; ">)&nbsp;</span><span style="color: #000000; ">==</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;send_dynamic(cinfo,request);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">goto</span><span style="color: #000000; ">&nbsp;end;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;send_static(cinfo,request);<br /><br />end:<br />&nbsp;&nbsp;&nbsp;&nbsp;close(cinfo</span><span style="color: #000000; ">-&gt;</span><span style="color: #000000; ">sockfd);<br />&nbsp;&nbsp;&nbsp;&nbsp;free(cinfo);<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">return</span><span style="color: #000000; ">&nbsp;(&nbsp;(</span><span style="color: #0000FF; ">void</span><span style="color: #000000; ">*</span><span style="color: #000000; ">)&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">);<br />}<br /><br /></span><span style="color: #0000FF; ">int</span><span style="color: #000000; "><br />send_static(</span><span style="color: #0000FF; ">struct</span><span style="color: #000000; ">&nbsp;clientinfo&nbsp;</span><span style="color: #000000; ">*</span><span style="color: #000000; ">cinfo,</span><span style="color: #0000FF; ">char</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">*</span><span style="color: #000000; ">request)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;len&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;strlen(request);<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">char</span><span style="color: #000000; ">&nbsp;path[</span><span style="color: #000000; ">1024</span><span style="color: #000000; ">],buf[BUFSIZE];<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;fd,bytes;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">/*</span><span style="color: #008000; ">&nbsp;&nbsp;&nbsp;&nbsp;忽略开头的'/'符号&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">*/</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;sscanf(request,</span><span style="color: #000000; ">"</span><span style="color: #000000; ">%*c%s</span><span style="color: #000000; ">"</span><span style="color: #000000; ">,path);<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">/*</span><span style="color: #008000; ">&nbsp;&nbsp;&nbsp;&nbsp;文件读取&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">*/</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;fd&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;open(path,O_RDONLY);<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">&nbsp;(fd&nbsp;</span><span style="color: #000000; ">==</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">-</span><span style="color: #000000; ">1</span><span style="color: #000000; ">)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;print_msg(cinfo</span><span style="color: #000000; ">-&gt;</span><span style="color: #000000; ">sockno,</span><span style="color: #000000; ">"</span><span style="color: #000000; ">send_static():&nbsp;open&nbsp;error</span><span style="color: #000000; ">"</span><span style="color: #000000; ">);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">return</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">1</span><span style="color: #000000; ">;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">while</span><span style="color: #000000; ">&nbsp;((bytes&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;read(fd,buf,</span><span style="color: #000000; ">4096</span><span style="color: #000000; ">))&nbsp;</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;write(cinfo</span><span style="color: #000000; ">-&gt;</span><span style="color: #000000; ">sockfd,buf,bytes);<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;close(fd);<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">return</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">;<br />}<br /><br /></span><span style="color: #0000FF; ">int</span><span style="color: #000000; "><br />send_dynamic(</span><span style="color: #0000FF; ">struct</span><span style="color: #000000; ">&nbsp;clientinfo&nbsp;</span><span style="color: #000000; ">*</span><span style="color: #000000; ">cinfo,</span><span style="color: #0000FF; ">char</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">*</span><span style="color: #000000; ">request)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">char</span><span style="color: #000000; ">&nbsp;cmd[BUFSIZE],arg[</span><span style="color: #000000; ">1024</span><span style="color: #000000; ">],line[BUFSIZE];<br />&nbsp;&nbsp;&nbsp;&nbsp;FILE&nbsp;</span><span style="color: #000000; ">*</span><span style="color: #000000; ">fpin;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">/*</span><span style="color: #008000; ">&nbsp;&nbsp;&nbsp;&nbsp;忽略action?&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">*/</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;sscanf(request,</span><span style="color: #000000; ">"</span><span style="color: #000000; ">%*[^?]%*c%s</span><span style="color: #000000; ">"</span><span style="color: #000000; ">,arg);<br />&nbsp;&nbsp;&nbsp;&nbsp;sprintf(cmd,</span><span style="color: #000000; ">"</span><span style="color: #000000; ">./dynamic.bash&nbsp;\</span><span style="color: #000000; ">"</span><span style="color: #000000; ">%</span><span style="color: #000000; ">s\</span><span style="color: #000000; ">""</span><span style="color: #000000; ">,arg);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">/*</span><span style="color: #008000; ">&nbsp;&nbsp;&nbsp;&nbsp;从popen返回的FILE指针读取内容发送&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">*/</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;cnt&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">&nbsp;((fpin&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;popen(cmd,</span><span style="color: #000000; ">"</span><span style="color: #000000; ">r</span><span style="color: #000000; ">"</span><span style="color: #000000; ">))&nbsp;</span><span style="color: #000000; ">==</span><span style="color: #000000; ">&nbsp;NULL)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;print_msg(cinfo</span><span style="color: #000000; ">-&gt;</span><span style="color: #000000; ">sockno,</span><span style="color: #000000; ">"</span><span style="color: #000000; ">send_dynamic():&nbsp;popen&nbsp;error</span><span style="color: #000000; ">"</span><span style="color: #000000; ">);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">return</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">1</span><span style="color: #000000; ">;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">while</span><span style="color: #000000; ">&nbsp;(fgets(line,BUFSIZE,fpin)&nbsp;</span><span style="color: #000000; ">!=</span><span style="color: #000000; ">&nbsp;NULL)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;write(cinfo</span><span style="color: #000000; ">-&gt;</span><span style="color: #000000; ">sockfd,line,strlen(line));<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;pclose(fpin);<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">return</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">;<br />}<br /><br /></span><span style="color: #0000FF; ">void</span><span style="color: #000000; "><br />print_msg(</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;no,</span><span style="color: #0000FF; ">const</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">char</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">*</span><span style="color: #000000; ">msg)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;pthread_mutex_lock(</span><span style="color: #000000; ">&amp;</span><span style="color: #0000FF; ">lock</span><span style="color: #000000; ">);<br />&nbsp;&nbsp;&nbsp;&nbsp;printf(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">request:&nbsp;%d\n%s\n\n</span><span style="color: #000000; ">"</span><span style="color: #000000; ">,no,msg);<br />&nbsp;&nbsp;&nbsp;&nbsp;pthread_mutex_unlock(</span><span style="color: #000000; ">&amp;</span><span style="color: #0000FF; ">lock</span><span style="color: #000000; ">);<br />}<br /></span></div><br />dynamic.bash<br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #000000; ">#</span><span style="color: #000000; ">!/</span><span style="color: #000000; ">bin</span><span style="color: #000000; ">/</span><span style="color: #000000; ">bash<br /><br />xmldetail</span><span style="color: #000000; ">=</span><span style="color: #000000; ">"</span><span style="color: #000000; ">http://dict.youdao.com/search?keyfrom=deskdict.main&amp;xmlDetail=true&amp;doctype=xml&amp;xmlVersion=7.1&amp;dogVersion=1.0&amp;client=deskdict&amp;appVer=5.0.32.4695&amp;xslVer=3.0&amp;q=</span><span style="color: #000000; ">"</span><span style="color: #000000; "><br />xsldetail</span><span style="color: #000000; ">=</span><span style="color: #000000; ">"</span><span style="color: #000000; ">detail/result.xsl</span><span style="color: #000000; ">"</span><span style="color: #000000; "><br />xmlsimple</span><span style="color: #000000; ">=</span><span style="color: #000000; ">""</span><span style="color: #000000; "><br />xslsimple</span><span style="color: #000000; ">=</span><span style="color: #000000; ">""</span><span style="color: #000000; "><br /><br />check_in_book()&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;#&nbsp;截断开头结尾的空格，将中间的连续空格换成一个空格<br />&nbsp;&nbsp;&nbsp;&nbsp;word</span><span style="color: #000000; ">=</span><span style="color: #000000; ">"</span><span style="color: #000000; ">`echo&nbsp;$1&nbsp;|&nbsp;sed&nbsp;'s/^\(%20\)\+//g'&nbsp;|&nbsp;sed&nbsp;'s/\(%20\)\+$//g'&nbsp;|&nbsp;sed&nbsp;'s/\(%20\)\+/&nbsp;/g'`</span><span style="color: #000000; ">"</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;cut&nbsp;</span><span style="color: #000000; ">-</span><span style="color: #000000; ">d&nbsp;</span><span style="color: #000000; ">'</span><span style="color: #000000; ">;</span><span style="color: #000000; ">'</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">-</span><span style="color: #000000; ">f&nbsp;</span><span style="color: #000000; ">1</span><span style="color: #000000; ">&nbsp;wordsbook&nbsp;</span><span style="color: #000000; ">|</span><span style="color: #000000; ">&nbsp;grep&nbsp;</span><span style="color: #000000; ">-</span><span style="color: #000000; ">q&nbsp;</span><span style="color: #000000; ">"</span><span style="color: #000000; ">^$word$</span><span style="color: #000000; ">"</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;[&nbsp;$</span><span style="color: #000000; ">?</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">==</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">&nbsp;]&nbsp;</span><span style="color: #000000; ">&amp;&amp;</span><span style="color: #000000; ">&nbsp;echo&nbsp;</span><span style="color: #000000; ">1</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">||</span><span style="color: #000000; ">&nbsp;echo&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; "><br />}<br /><br />add_to_book()&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;word</span><span style="color: #000000; ">=</span><span style="color: #000000; ">"</span><span style="color: #000000; ">`echo&nbsp;$1&nbsp;|&nbsp;sed&nbsp;'s/^\(%20\)\+//g'&nbsp;|&nbsp;sed&nbsp;'s/\(%20\)\+$//g'&nbsp;|&nbsp;sed&nbsp;'s/\(%20\)\+/&nbsp;/g'`</span><span style="color: #000000; ">"</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;t</span><span style="color: #000000; ">=</span><span style="color: #000000; ">"</span><span style="color: #000000; ">`date&nbsp;+'%y-%m-%d&nbsp;%H:%M'`</span><span style="color: #000000; ">"</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;echo&nbsp;</span><span style="color: #000000; ">"</span><span style="color: #000000; ">$word;$t;</span><span style="color: #000000; ">"</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">&gt;&gt;</span><span style="color: #000000; ">&nbsp;wordsbook<br />&nbsp;&nbsp;&nbsp;&nbsp;echo&nbsp;</span><span style="color: #000000; ">1</span><span style="color: #000000; "><br />}<br /><br />send_response()&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;#&nbsp;$1为：inbook</span><span style="color: #000000; ">=</span><span style="color: #000000; ">queryword或者detail</span><span style="color: #000000; ">=</span><span style="color: #000000; ">queryword等形式<br />action</span><span style="color: #000000; ">=</span><span style="color: #000000; ">${</span><span style="color: #000000; ">1</span><span style="color: #000000; ">%=*</span><span style="color: #000000; ">}<br />target</span><span style="color: #000000; ">=</span><span style="color: #000000; ">${</span><span style="color: #000000; ">1</span><span style="color: #000000; ">#</span><span style="color: #000000; ">*=</span><span style="color: #000000; ">}<br /><br /></span><span style="color: #0000FF; ">case</span><span style="color: #000000; ">&nbsp;$action&nbsp;</span><span style="color: #0000FF; ">in</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000; ">"</span><span style="color: #000000; ">inbook</span><span style="color: #000000; ">"</span><span style="color: #000000; ">)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;check_in_book&nbsp;</span><span style="color: #000000; ">"</span><span style="color: #000000; ">$target</span><span style="color: #000000; ">"</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000; ">"</span><span style="color: #000000; ">tobook</span><span style="color: #000000; ">"</span><span style="color: #000000; ">)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;add_to_book&nbsp;</span><span style="color: #000000; ">"</span><span style="color: #000000; ">$target</span><span style="color: #000000; ">"</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000; ">"</span><span style="color: #000000; ">detail</span><span style="color: #000000; ">"</span><span style="color: #000000; ">)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.</span><span style="color: #000000; ">/</span><span style="color: #000000; ">xslt&nbsp;</span><span style="color: #000000; ">"</span><span style="color: #000000; ">-xmlapi</span><span style="color: #000000; ">"</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">"</span><span style="color: #000000; ">$xmldetail</span><span style="color: #000000; ">"</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">"</span><span style="color: #000000; ">-xslapi</span><span style="color: #000000; ">"</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">"</span><span style="color: #000000; ">$xsldetail</span><span style="color: #000000; ">"</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">"</span><span style="color: #000000; ">-keyword</span><span style="color: #000000; ">"</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">"</span><span style="color: #000000; ">$target</span><span style="color: #000000; ">"</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">|</span><span style="color: #000000; ">&nbsp;sed&nbsp;</span><span style="color: #000000; ">'</span><span style="color: #000000; ">$d</span><span style="color: #000000; ">'</span><span style="color: #000000; ">&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000; ">"</span><span style="color: #000000; ">simple</span><span style="color: #000000; ">"</span><span style="color: #000000; ">)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000; ">*</span><span style="color: #000000; ">)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;exit&nbsp;</span><span style="color: #000000; ">1</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;;<br />esac<br />}<br /><br />send_response&nbsp;</span><span style="color: #000000; ">"</span><span style="color: #000000; ">$1</span><span style="color: #000000; ">"</span><span style="color: #000000; "><br />exit&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; "><br /></span></div><img src ="http://www.cppblog.com/Onway/aggbug/168212.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/Onway/" target="_blank">Onway</a> 2012-03-17 17:38 <a href="http://www.cppblog.com/Onway/archive/2012/03/17/168212.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>goldendict的有道词典扩展程序第二版</title><link>http://www.cppblog.com/Onway/archive/2012/03/17/168134.html</link><dc:creator>Onway</dc:creator><author>Onway</author><pubDate>Fri, 16 Mar 2012 17:04:00 GMT</pubDate><guid>http://www.cppblog.com/Onway/archive/2012/03/17/168134.html</guid><wfw:comment>http://www.cppblog.com/Onway/comments/168134.html</wfw:comment><comments>http://www.cppblog.com/Onway/archive/2012/03/17/168134.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.cppblog.com/Onway/comments/commentRss/168134.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/Onway/services/trackbacks/168134.html</trackback:ping><description><![CDATA[下载：<a href="/Files/Onway/eyoudao-1.0.tar.gz.rar">/Files/Onway/eyoudao-1.0.tar.gz.rar</a>（不是rar文件，要删了rar后缀）<br />依然期待各路神牛的更改。<br /><img alt="" src="http://www.cppblog.com/images/cppblog_com/onway/031700_x3A_41_x3A_04.png" height="591" width="745" /><br /><br /><img alt="" src="http://www.cppblog.com/images/cppblog_com/onway/031700_x3A_41_x3A_36.png" height="278" width="362" /><br /><br /><div>linux环境goldendict词典的有道扩展程序eyoudao 1.0使用说明<br />（从第一版的youdaodict重新命名为eyoudao，版本为1.0，基于windows有道词典的5.0.32.4695版本）<br /><br /><br />一，安装：<br />1，安装goldendict和两个函数库（goldendict版本可能要求1.0.1以上才能使用扩展程序）：<br />sudo apt-get install goldendict libxml2-dev libxslt1-dev<br /><br />2，然后eyoudao目录下：<br />make<br />sudo make install<br /><br />3，最后打开goldendict词典，菜单栏的编辑选项 -&gt; Dictionaries -&gt; 词典来源 -&gt; Programs<br />添加一栏：<br />-&nbsp;&nbsp; &nbsp;Html&nbsp;&nbsp; &nbsp;eyoudao-detail&nbsp;&nbsp; &nbsp;eyoudao -detail "%GDWORD%"<br /><br /><br />二，卸载:<br />1，在/opt/eyoudao目录下执行：<br />sudo make uninstall<br />即可。<br />2，注意，在$HOME目录下的.eyoudao隐藏文件夹不会被删除，内含单词本wordsbook和一个临时查询文件query.tmp。<br /><br /><br />三，关于很多的bugs：<br />1，保存单词的时候，会导致goldendict在该单词前加上~后重新查询。这会影响其他词典的使用。<br />2，eyoudao-simple没有做了。个人2M的联通宽带，感觉速度还能接受。<br />3，查询单词出现's结尾的时候，看到返回的单词是错误的，无法添加到单词本。<br />其实这个错误在dict.youdao.com都是一样的，但what's和it's这些就没错。<br />4，如果还遇到各种的bugs，莫要惊慌，自己动手修改。<br /><br /><br /><br />四，版权声明：<br />xml数据和各种xsl,js,css,png文件都是修改或源自windows的有道词典安装文件，使用时注意版权问题。<br />xslt是仿照官网的一个demo改写的。<br />本扩展程序仅供学习交流之用。<br /><br /><br />五，关于本程序：<br />eyoudao 1.0 By Onway 2012-03-16<br />debug yourself or report to<br />aluohuai@126.com<br />www.cppblog.com/onway<br /><br /><br />六，有道词典安装文件的大致修改过程：<br />1，在windows有道词典的安装目录resultui下，拷贝出来三个文件夹：css,js,images,两个文件result.xsl和commonfile.xsl<br />2，js目录将all-min.js解压为default.js，删除wordBook.js<br />3，commonfile.xsl的修改：<br />&nbsp;&nbsp; &nbsp;a，将声音播放相关的函数调用改掉参数为this.getAttribute('ref')<br />&nbsp;&nbsp; &nbsp;b，删掉报错显示（不太厚道啊！）和flash检测<br />&nbsp;&nbsp; &nbsp;c，将所有的关于css/和images/目录文件的引用改为本地文件协议的绝对路径<br />&nbsp;&nbsp; &nbsp;d，去掉所有app:.*:<br />4，result.xsl的修改：<br />&nbsp;&nbsp; &nbsp;a，以本地文件协议的绝对路径加入default.css和default.js的引用<br />&nbsp;&nbsp; &nbsp;b，加入&lt;audio&gt;标签用作发音<br />&nbsp;&nbsp; &nbsp;c，将所有的app:.*:去掉<br />&nbsp;&nbsp; &nbsp;d，结尾加入一段javascript，调用三个函数<br />5，default.js的修改<br />&nbsp;&nbsp; &nbsp;a，加入全局变量INBOOK<br />&nbsp;&nbsp; &nbsp;b，ctlog函数直接返回false<br />&nbsp;&nbsp; &nbsp;c，修改所有window.external.loadString和window.external.saveString<br />&nbsp;&nbsp; &nbsp;d，将deskdict_main修改为results<br />&nbsp;&nbsp; &nbsp;e，注释掉window.selection.empty<br />&nbsp;&nbsp; &nbsp;f，playVoice函数更改内容<br />&nbsp;&nbsp; &nbsp;g，isFlashReady函数直接返回true<br />&nbsp;&nbsp; &nbsp;h，注释掉GetAdsByTimer函数的调用<br />&nbsp;&nbsp; &nbsp;i，注释掉dict.ugc.init的调用<br />&nbsp;&nbsp; &nbsp;j，在toggleFav函数加入一段关于本地单词本的代码<br />6，更详细的修改参见detail/diff-patch目录下的patch文件。<br /><br /><br />7，附：<br />其实为了保存单词，我还写了一个100行多点的多线程网络程序，以利用ajax跟本地程序通信。<br />但很郁闷的是，goldendict以访问网站得来的结果显示的时候有些bug。导航条不能用了，页面低下出现一大片空白。<br />从goldendict保存出来的html文件跟在浏览器看到明显不一样。<br />我之所以确定是goldendict的问题，是因为我试过将改好的网页文件从apache服务器发回goldendict都是出现同样的问题。<br />而从浏览器访问apache服务器则是正常的。<br /></div><img src ="http://www.cppblog.com/Onway/aggbug/168134.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/Onway/" target="_blank">Onway</a> 2012-03-17 01:04 <a href="http://www.cppblog.com/Onway/archive/2012/03/17/168134.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>查询学校空闲教室的小脚本</title><link>http://www.cppblog.com/Onway/archive/2012/03/09/167512.html</link><dc:creator>Onway</dc:creator><author>Onway</author><pubDate>Fri, 09 Mar 2012 10:52:00 GMT</pubDate><guid>http://www.cppblog.com/Onway/archive/2012/03/09/167512.html</guid><wfw:comment>http://www.cppblog.com/Onway/comments/167512.html</wfw:comment><comments>http://www.cppblog.com/Onway/archive/2012/03/09/167512.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cppblog.com/Onway/comments/commentRss/167512.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/Onway/services/trackbacks/167512.html</trackback:ping><description><![CDATA[<a href="/Files/Onway/free-rooms.bash.txt">/Files/Onway/free-rooms.bash.txt</a><br /><br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #000000; ">#</span><span style="color: #000000; ">!/</span><span style="color: #000000; ">bin</span><span style="color: #000000; ">/</span><span style="color: #000000; ">bash<br /><br />#&nbsp;查询学校空闲的教室<br />#&nbsp;原理：空闲的教室&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;整个学期开课的课室&nbsp;</span><span style="color: #000000; ">-</span><span style="color: #000000; ">&nbsp;查询时间开课的课室<br />#&nbsp;如果服务器查询参数不变，一个学期只需更新一次<br />#&nbsp;good&nbsp;good&nbsp;study&nbsp;,&nbsp;day&nbsp;day&nbsp;up&nbsp;</span><span style="color: #000000; ">!</span><span style="color: #000000; "><br />#&nbsp;Onway&nbsp;</span><span style="color: #000000; ">2012</span><span style="color: #000000; ">-</span><span style="color: #000000; ">03</span><span style="color: #000000; ">-</span><span style="color: #000000; ">09</span><span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;aluohuai@</span><span style="color: #000000; ">126</span><span style="color: #000000; ">.com<br /><br />roomline</span><span style="color: #000000; ">=</span><span style="color: #000000; ">10</span><span style="color: #000000; "><br />rooms</span><span style="color: #000000; ">=</span><span style="color: #000000; ">"</span><span style="color: #000000; ">黄浩川教学楼101&nbsp;黄浩川教学楼102&nbsp;黄浩川教学楼103&nbsp;黄浩川教学楼104&nbsp;黄浩川教学楼201&nbsp;黄浩川教学楼202&nbsp;黄浩川教学楼203&nbsp;黄浩川教学楼204&nbsp;黄浩川教学楼301&nbsp;黄浩川教学楼302&nbsp;黄浩川教学楼303&nbsp;黄浩川教学楼304&nbsp;黄浩川教学楼401&nbsp;黄浩川教学楼402&nbsp;黄浩川教学楼403&nbsp;黄浩川教学楼404&nbsp;黄浩川教学楼501&nbsp;黄浩川教学楼502&nbsp;黄浩川教学楼503&nbsp;黄浩川教学楼504&nbsp;黄浩川楼101&nbsp;黄浩川楼102&nbsp;黄浩川楼104&nbsp;黄浩川楼105&nbsp;黄浩川楼209&nbsp;黄浩川楼303&nbsp;黄浩川楼304&nbsp;黄浩川楼305&nbsp;黄浩川楼402&nbsp;黄浩川楼403&nbsp;黄浩川楼404&nbsp;黄浩川楼405&nbsp;继续教育学院101&nbsp;继续教育学院103&nbsp;继续教育学院201&nbsp;继续教育学院203&nbsp;继续教育学院205&nbsp;继续教育学院206&nbsp;继续教育学院301&nbsp;继续教育学院303&nbsp;继续教育学院306&nbsp;继续教育学院403&nbsp;继续教育学院405&nbsp;继续教育学院407&nbsp;继续教育学院505&nbsp;黎耀华楼108&nbsp;黎耀华楼212&nbsp;黎耀华楼306&nbsp;黎耀华楼313&nbsp;黎耀华楼402&nbsp;黎耀球楼301&nbsp;陆佑图书馆301&nbsp;陆佑图书馆302&nbsp;马兰芳教学楼101&nbsp;马兰芳教学楼102&nbsp;马兰芳教学楼103&nbsp;马兰芳教学楼104&nbsp;马兰芳教学楼201&nbsp;马兰芳教学楼202&nbsp;马兰芳教学楼203&nbsp;马兰芳教学楼204&nbsp;马兰芳教学楼301&nbsp;马兰芳教学楼302&nbsp;马兰芳教学楼303&nbsp;马兰芳教学楼304&nbsp;马兰芳教学楼401&nbsp;马兰芳教学楼402&nbsp;马兰芳教学楼403&nbsp;马兰芳教学楼404&nbsp;马兰芳教学楼501&nbsp;马兰芳教学楼502&nbsp;马兰芳教学楼503&nbsp;马兰芳教学楼504&nbsp;体育馆101&nbsp;体育馆102&nbsp;体育馆103&nbsp;体育馆104&nbsp;体育馆105&nbsp;体育馆106&nbsp;体育馆107&nbsp;体育馆108&nbsp;体育馆109&nbsp;体育馆110&nbsp;体育馆111&nbsp;体育馆131&nbsp;体育馆132&nbsp;体育馆133&nbsp;体育馆135&nbsp;体育馆136&nbsp;体育馆137&nbsp;体育馆138&nbsp;体育馆139&nbsp;体育馆140&nbsp;新会楼404&nbsp;主楼101&nbsp;主楼201&nbsp;主楼202&nbsp;主楼212&nbsp;主楼213&nbsp;主楼239&nbsp;主楼240&nbsp;主楼249&nbsp;主楼250&nbsp;主楼356&nbsp;主楼401&nbsp;主楼402&nbsp;主楼405&nbsp;主楼406&nbsp;主楼417&nbsp;主楼418&nbsp;主楼421&nbsp;主楼422&nbsp;主楼423&nbsp;主楼427&nbsp;主楼429&nbsp;主楼439&nbsp;主楼441&nbsp;主楼445&nbsp;主楼457&nbsp;主楼458&nbsp;主楼470&nbsp;主楼473&nbsp;主楼501&nbsp;主楼505&nbsp;主楼524&nbsp;主楼525&nbsp;主楼533&nbsp;主楼539&nbsp;主楼541&nbsp;主楼543&nbsp;主楼545&nbsp;主楼549&nbsp;主楼552&nbsp;主楼554&nbsp;主楼556&nbsp;主楼559&nbsp;主楼560&nbsp;主楼562&nbsp;主楼575&nbsp;综合实验大楼103&nbsp;综合实验大楼201&nbsp;综合实验大楼202&nbsp;综合实验大楼203&nbsp;综合实验大楼204&nbsp;综合实验大楼205&nbsp;综合实验大楼206&nbsp;综合实验大楼212&nbsp;综合实验大楼213&nbsp;综合实验大楼214&nbsp;综合实验大楼302&nbsp;综合实验大楼303&nbsp;综合实验大楼305&nbsp;综合实验大楼306&nbsp;综合实验大楼307&nbsp;综合实验大楼310&nbsp;综合实验大楼402&nbsp;综合实验大楼403&nbsp;综合实验大楼404&nbsp;综合实验大楼405&nbsp;综合实验大楼406&nbsp;综合实验大楼407&nbsp;综合实验大楼416&nbsp;综合实验大楼503&nbsp;综合实验大楼605&nbsp;综合实验楼605</span><span style="color: #000000; ">"</span><span style="color: #000000; "><br />update()&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;wget&nbsp;</span><span style="color: #000000; ">-</span><span style="color: #000000; ">O&nbsp;</span><span style="color: #000000; ">/</span><span style="color: #000000; ">tmp</span><span style="color: #000000; ">/</span><span style="color: #000000; ">query.asp&nbsp;http:</span><span style="color: #008000; ">//</span><span style="color: #008000; ">jwc.wyu.cn/everyday/query/indeft/query.asp&nbsp;--post-data&nbsp;"cnt=1&amp;wk=1&amp;wk=2&amp;wk=3&amp;wk=4&amp;wk=5&amp;wk=0&amp;cnt=2&amp;pt=1&amp;pt=2&amp;pt=3&amp;pt=4&amp;pt=5&amp;cc5=&amp;cc6=&amp;cc7=&amp;cc8=&amp;cc9=&amp;Submit=+%CC%E1%BD%BB+"</span><span style="color: #008000; "><br /></span><span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;iconv&nbsp;</span><span style="color: #000000; ">-</span><span style="color: #000000; ">f&nbsp;gb18030&nbsp;</span><span style="color: #000000; ">-</span><span style="color: #000000; ">t&nbsp;utf8&nbsp;</span><span style="color: #000000; ">/</span><span style="color: #000000; ">tmp</span><span style="color: #000000; ">/</span><span style="color: #000000; ">query</span><span style="color: #000000; ">-</span><span style="color: #000000; ">gb18030.tmp&nbsp;</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">/</span><span style="color: #000000; ">tmp</span><span style="color: #000000; ">/</span><span style="color: #000000; ">query</span><span style="color: #000000; ">-</span><span style="color: #000000; ">utf8.tmp<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">new</span><span style="color: #000000; ">=</span><span style="color: #000000; ">"</span><span style="color: #000000; ">rooms=\</span><span style="color: #000000; ">"</span><span style="color: #000000; ">$(grep&nbsp;</span><span style="color: #000000; ">'</span><span style="color: #000000; ">.*&lt;td&nbsp;align=\"left\"&gt;.*</span><span style="color: #000000; ">'</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">/</span><span style="color: #000000; ">tmp</span><span style="color: #000000; ">/</span><span style="color: #000000; ">query</span><span style="color: #000000; ">-</span><span style="color: #000000; ">utf8.tmp&nbsp;</span><span style="color: #000000; ">|</span><span style="color: #000000; ">&nbsp;sed&nbsp;</span><span style="color: #000000; ">-</span><span style="color: #000000; ">n&nbsp;</span><span style="color: #000000; ">'</span><span style="color: #000000; ">0~4p</span><span style="color: #000000; ">'</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">|</span><span style="color: #000000; ">&nbsp;grep&nbsp;</span><span style="color: #000000; ">-</span><span style="color: #000000; ">o&nbsp;</span><span style="color: #000000; ">'</span><span style="color: #000000; ">&gt;.*&lt;</span><span style="color: #000000; ">'</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">|</span><span style="color: #000000; ">&nbsp;tr&nbsp;</span><span style="color: #000000; ">-</span><span style="color: #000000; ">d&nbsp;</span><span style="color: #000000; ">'</span><span style="color: #000000; ">&gt;&lt;</span><span style="color: #000000; ">'</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">|</span><span style="color: #000000; ">&nbsp;sort&nbsp;</span><span style="color: #000000; ">-</span><span style="color: #000000; ">ub&nbsp;</span><span style="color: #000000; ">|</span><span style="color: #000000; ">&nbsp;grep&nbsp;</span><span style="color: #000000; ">-</span><span style="color: #000000; ">v&nbsp;</span><span style="color: #000000; ">'</span><span style="color: #000000; ">^$</span><span style="color: #000000; ">'</span><span style="color: #000000; ">)\</span><span style="color: #000000; ">""</span><span style="color: #000000; ">&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">new</span><span style="color: #000000; ">=</span><span style="color: #000000; ">$(echo&nbsp;$</span><span style="color: #0000FF; ">new</span><span style="color: #000000; ">)<br />&nbsp;&nbsp;&nbsp;&nbsp;rm&nbsp;</span><span style="color: #000000; ">/</span><span style="color: #000000; ">tmp</span><span style="color: #000000; ">/</span><span style="color: #000000; ">query</span><span style="color: #000000; ">-</span><span style="color: #000000; ">gb18030.tmp&nbsp;</span><span style="color: #000000; ">/</span><span style="color: #000000; ">tmp</span><span style="color: #000000; ">/</span><span style="color: #000000; ">query</span><span style="color: #000000; ">-</span><span style="color: #000000; ">utf8.tmp<br />&nbsp;&nbsp;&nbsp;&nbsp;sed&nbsp;</span><span style="color: #000000; ">"</span><span style="color: #000000; ">${roomline}c&nbsp;$new</span><span style="color: #000000; ">"</span><span style="color: #000000; ">&nbsp;$</span><span style="color: #000000; ">0</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">"</span><span style="color: #000000; ">/tmp/$0</span><span style="color: #000000; ">"</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;chmod&nbsp;u</span><span style="color: #000000; ">+</span><span style="color: #000000; ">x&nbsp;</span><span style="color: #000000; ">"</span><span style="color: #000000; ">/tmp/$0</span><span style="color: #000000; ">"</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;mv&nbsp;</span><span style="color: #000000; ">"</span><span style="color: #000000; ">/tmp/$0</span><span style="color: #000000; ">"</span><span style="color: #000000; ">&nbsp;$</span><span style="color: #000000; ">0</span><span style="color: #000000; "><br />}<br /><br />query()&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;arg</span><span style="color: #000000; ">=</span><span style="color: #000000; ">""</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;read&nbsp;</span><span style="color: #000000; ">-</span><span style="color: #000000; ">p&nbsp;</span><span style="color: #000000; ">"</span><span style="color: #000000; ">星期（0-5，0为周末，空格分开）：</span><span style="color: #000000; ">"</span><span style="color: #000000; ">&nbsp;day&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">&nbsp;[&nbsp;</span><span style="color: #000000; ">-</span><span style="color: #000000; ">n&nbsp;</span><span style="color: #000000; ">"</span><span style="color: #000000; ">$day</span><span style="color: #000000; ">"</span><span style="color: #000000; ">&nbsp;]&nbsp;;&nbsp;then<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;arg</span><span style="color: #000000; ">=</span><span style="color: #000000; ">"</span><span style="color: #000000; ">cnt=1&amp;</span><span style="color: #000000; ">"</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">for</span><span style="color: #000000; ">&nbsp;i&nbsp;</span><span style="color: #0000FF; ">in</span><span style="color: #000000; ">&nbsp;$day<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">do</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;arg</span><span style="color: #000000; ">=</span><span style="color: #000000; ">$arg</span><span style="color: #000000; ">"</span><span style="color: #000000; ">wk=$i&amp;</span><span style="color: #000000; ">"</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;done<br />&nbsp;&nbsp;&nbsp;&nbsp;fi<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;read&nbsp;</span><span style="color: #000000; ">-</span><span style="color: #000000; ">p&nbsp;</span><span style="color: #000000; ">"</span><span style="color: #000000; ">节次（大节，0-5，空格分开）：</span><span style="color: #000000; ">"</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">class</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">&nbsp;[&nbsp;</span><span style="color: #000000; ">-</span><span style="color: #000000; ">n&nbsp;</span><span style="color: #000000; ">"</span><span style="color: #000000; ">$class</span><span style="color: #000000; ">"</span><span style="color: #000000; ">&nbsp;]&nbsp;;&nbsp;then<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;arg</span><span style="color: #000000; ">=</span><span style="color: #000000; ">$arg</span><span style="color: #000000; ">"</span><span style="color: #000000; ">cnt=2&amp;</span><span style="color: #000000; ">"</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">for</span><span style="color: #000000; ">&nbsp;i&nbsp;</span><span style="color: #0000FF; ">in</span><span style="color: #000000; ">&nbsp;$</span><span style="color: #0000FF; ">class</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">do</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;arg</span><span style="color: #000000; ">=</span><span style="color: #000000; ">$arg</span><span style="color: #000000; ">"</span><span style="color: #000000; ">pt=$i&amp;</span><span style="color: #000000; ">"</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;done<br />&nbsp;&nbsp;&nbsp;&nbsp;fi<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;read&nbsp;</span><span style="color: #000000; ">-</span><span style="color: #000000; ">p&nbsp;</span><span style="color: #000000; ">"</span><span style="color: #000000; ">周次（1-19，空格分开）：</span><span style="color: #000000; ">"</span><span style="color: #000000; ">&nbsp;week<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">&nbsp;[&nbsp;</span><span style="color: #000000; ">-</span><span style="color: #000000; ">n&nbsp;</span><span style="color: #000000; ">"</span><span style="color: #000000; ">$week</span><span style="color: #000000; ">"</span><span style="color: #000000; ">&nbsp;]&nbsp;;&nbsp;then<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;arg</span><span style="color: #000000; ">=</span><span style="color: #000000; ">$arg</span><span style="color: #000000; ">"</span><span style="color: #000000; ">cnt=3&amp;</span><span style="color: #000000; ">"</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">for</span><span style="color: #000000; ">&nbsp;i&nbsp;</span><span style="color: #0000FF; ">in</span><span style="color: #000000; ">&nbsp;$</span><span style="color: #0000FF; ">class</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">do</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;arg</span><span style="color: #000000; ">=</span><span style="color: #000000; ">$arg</span><span style="color: #000000; ">"</span><span style="color: #000000; ">ew=$i&amp;</span><span style="color: #000000; ">"</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;done<br />&nbsp;&nbsp;&nbsp;&nbsp;fi<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">&nbsp;[&nbsp;</span><span style="color: #000000; ">-</span><span style="color: #000000; ">z&nbsp;</span><span style="color: #000000; ">"</span><span style="color: #000000; ">$arg</span><span style="color: #000000; ">"</span><span style="color: #000000; ">&nbsp;]&nbsp;;&nbsp;then<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;echo&nbsp;</span><span style="color: #000000; ">"</span><span style="color: #000000; ">what&nbsp;are&nbsp;you&nbsp;doing!</span><span style="color: #000000; ">"</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;exit&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;fi<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;arg</span><span style="color: #000000; ">=</span><span style="color: #000000; ">$arg</span><span style="color: #000000; ">"</span><span style="color: #000000; ">cc5=&amp;cc6=&amp;cc7=&amp;cc8=&amp;cc9=&amp;Submit=+%CC%E1%BD%BB+</span><span style="color: #000000; ">"</span><span style="color: #000000; "><br /><br />&nbsp;&nbsp;&nbsp;&nbsp;wget&nbsp;</span><span style="color: #000000; ">-</span><span style="color: #000000; ">O&nbsp;</span><span style="color: #000000; ">/</span><span style="color: #000000; ">tmp</span><span style="color: #000000; ">/</span><span style="color: #000000; ">query</span><span style="color: #000000; ">-</span><span style="color: #000000; ">gb18030.tmp&nbsp;http:</span><span style="color: #008000; ">//</span><span style="color: #008000; ">jwc.wyu.cn/everyday/query/indeft/query.asp&nbsp;--post-data&nbsp;"$arg"</span><span style="color: #008000; "><br /></span><span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;iconv&nbsp;</span><span style="color: #000000; ">-</span><span style="color: #000000; ">f&nbsp;gb18030&nbsp;</span><span style="color: #000000; ">-</span><span style="color: #000000; ">t&nbsp;utf8&nbsp;</span><span style="color: #000000; ">/</span><span style="color: #000000; ">tmp</span><span style="color: #000000; ">/</span><span style="color: #000000; ">query</span><span style="color: #000000; ">-</span><span style="color: #000000; ">gb18030.tmp&nbsp;</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">/</span><span style="color: #000000; ">tmp</span><span style="color: #000000; ">/</span><span style="color: #000000; ">query</span><span style="color: #000000; ">-</span><span style="color: #000000; ">utf8.tmp<br />&nbsp;&nbsp;&nbsp;&nbsp;used</span><span style="color: #000000; ">=</span><span style="color: #000000; ">"</span><span style="color: #000000; ">$(grep&nbsp;'.*&lt;td&nbsp;align=\</span><span style="color: #000000; ">"</span><span style="color: #000000; ">left\</span><span style="color: #000000; ">"</span><span style="color: #000000; ">&gt;.*'&nbsp;/tmp/query-utf8.tmp&nbsp;|&nbsp;sed&nbsp;-n&nbsp;'0~4p'&nbsp;|&nbsp;grep&nbsp;-o&nbsp;'&gt;.*&lt;'&nbsp;|&nbsp;tr&nbsp;-d&nbsp;'&gt;&lt;'&nbsp;|&nbsp;sort&nbsp;-ub&nbsp;|&nbsp;grep&nbsp;-v&nbsp;'^$')</span><span style="color: #000000; ">"</span><span style="color: #000000; ">&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;used</span><span style="color: #000000; ">=</span><span style="color: #000000; ">$(echo&nbsp;$used)<br />&nbsp;&nbsp;&nbsp;&nbsp;rm&nbsp;</span><span style="color: #000000; ">/</span><span style="color: #000000; ">tmp</span><span style="color: #000000; ">/</span><span style="color: #000000; ">query</span><span style="color: #000000; ">-</span><span style="color: #000000; ">gb18030.tmp&nbsp;</span><span style="color: #000000; ">/</span><span style="color: #000000; ">tmp</span><span style="color: #000000; ">/</span><span style="color: #000000; ">query</span><span style="color: #000000; ">-</span><span style="color: #000000; ">utf8.tmp<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">for</span><span style="color: #000000; ">&nbsp;i&nbsp;</span><span style="color: #0000FF; ">in</span><span style="color: #000000; ">&nbsp;$rooms<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">do</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sign</span><span style="color: #000000; ">=</span><span style="color: #000000; ">0</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">for</span><span style="color: #000000; ">&nbsp;j&nbsp;</span><span style="color: #0000FF; ">in</span><span style="color: #000000; ">&nbsp;$used<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">do</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">&nbsp;[&nbsp;</span><span style="color: #000000; ">"</span><span style="color: #000000; ">$i</span><span style="color: #000000; ">"</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">==</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">"</span><span style="color: #000000; ">$j</span><span style="color: #000000; ">"</span><span style="color: #000000; ">&nbsp;]&nbsp;;&nbsp;then<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sign</span><span style="color: #000000; ">=</span><span style="color: #000000; ">1</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">break</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fi<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;done<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">&nbsp;[&nbsp;</span><span style="color: #000000; ">"</span><span style="color: #000000; ">$sign</span><span style="color: #000000; ">"</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">==</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">"</span><span style="color: #000000; ">0</span><span style="color: #000000; ">"</span><span style="color: #000000; ">&nbsp;]&nbsp;;&nbsp;then<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;echo&nbsp;$i<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fi<br />&nbsp;&nbsp;&nbsp;&nbsp;done<br />}<br /><br /></span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">&nbsp;[&nbsp;$#&nbsp;</span><span style="color: #000000; ">==</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">&nbsp;]&nbsp;;&nbsp;then<br />&nbsp;&nbsp;&nbsp;&nbsp;query<br />elif&nbsp;[&nbsp;</span><span style="color: #000000; ">"</span><span style="color: #000000; ">$1</span><span style="color: #000000; ">"</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">==</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">"</span><span style="color: #000000; ">--update</span><span style="color: #000000; ">"</span><span style="color: #000000; ">&nbsp;]&nbsp;;&nbsp;then<br />&nbsp;&nbsp;&nbsp;&nbsp;update<br /></span><span style="color: #0000FF; ">else</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;echo&nbsp;</span><span style="color: #000000; ">-</span><span style="color: #000000; ">e&nbsp;</span><span style="color: #000000; ">"</span><span style="color: #000000; ">Usage:\n\t$0&nbsp;[--update]</span><span style="color: #000000; ">"</span><span style="color: #000000; "><br />fi<br />exit&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; "><br /></span></div><img src ="http://www.cppblog.com/Onway/aggbug/167512.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/Onway/" target="_blank">Onway</a> 2012-03-09 18:52 <a href="http://www.cppblog.com/Onway/archive/2012/03/09/167512.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>bash script写的gnome桌面小闹钟</title><link>http://www.cppblog.com/Onway/archive/2012/03/09/167510.html</link><dc:creator>Onway</dc:creator><author>Onway</author><pubDate>Fri, 09 Mar 2012 10:39:00 GMT</pubDate><guid>http://www.cppblog.com/Onway/archive/2012/03/09/167510.html</guid><wfw:comment>http://www.cppblog.com/Onway/comments/167510.html</wfw:comment><comments>http://www.cppblog.com/Onway/archive/2012/03/09/167510.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.cppblog.com/Onway/comments/commentRss/167510.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/Onway/services/trackbacks/167510.html</trackback:ping><description><![CDATA[上图好像没什么意思吧？zenity的界面。<br /><img alt="" src="http://www.cppblog.com/images/cppblog_com/onway/030712_x3A_17_x3A_05.png" height="223" width="304" />&nbsp;&nbsp; <img alt="" src="http://www.cppblog.com/images/cppblog_com/onway/030712_x3A_15_x3A_51.png" height="305" width="210" />&nbsp; <img alt="" src="http://www.cppblog.com/images/cppblog_com/onway/030712_x3A_16_x3A_33.png" height="433" width="300" />&nbsp; <img alt="" src="http://www.cppblog.com/images/cppblog_com/onway/030918_x3A_33_x3A_34.png" height="158" width="204" /><br /><br /><a href="/Files/Onway/oalarm.bash.txt">/Files/Onway/oalarm.bash.txt</a><br /><br /><div>oalarm文档<br /><br />概要：<br />&nbsp;&nbsp; &nbsp;oalarm是一个基于gnome,mplayer,at,date,zenity等命令的，使用bash script写成的简陋桌面闹钟。<br /><br />功能：<br />&nbsp;&nbsp; &nbsp;定时任务的新建，查看，延迟，删除，提醒。<br /><br />安装要求：<br />&nbsp;&nbsp; &nbsp;存在gnome-session进程，/usr/bin下存在at,zenity,mplayer程序，$HOME目录下存在.config/autostart和.local/share/applications两个目录。<br /><br />安装：<br />&nbsp;&nbsp; &nbsp;下载oalarm.bash之后，添加运行权限，在桌面图形环境下运行脚本（不需要root权限）。这时会检查zenity命令和gnome-session进程的存在。gnome-session的检查是为了保证能使用zenity命令创建界面。如果缺乏任何一个，则在标准输出后直接退出。<br /><br />&nbsp;&nbsp; &nbsp;首次运行脚本会出现安装选项。<br />&nbsp;&nbsp; &nbsp;安装过程会先在/usr/bin目录下检查at,mplayer,zenity三个命令，如果缺少任何一个，标准输出错误后退出。<br />&nbsp;&nbsp; &nbsp;安装过程还会检查两个目录：$HOME/.config/autostart和$HOME/.local/share/applications，如果缺乏任何一个，安装失败。在这两个目录会各写入一个.desktop文件，分别用于登录图形界面后运行一次脚本检查过期任务和在应用附件栏目添加运行图标。分别执行的命令是：<br />&nbsp;&nbsp; &nbsp;$HOME/.oalarm/oalarm.bash --check<br />&nbsp;&nbsp; &nbsp;$HOME/.oalarm/oalarm.bash --start<br /><br />&nbsp;&nbsp; &nbsp;其后会在$HOME目录下创建隐藏目录.oalarm和两个在子目录past,wait，分别用于存放过期任何和等待任务。oalarm.bash会复制自身到该目录下。<br /><br />&nbsp;&nbsp; &nbsp;如果存在/usr/share/sounds/gnome/default/alerts/bark.ogg该声音文件，则会被复制到.oalarm目录下并命名为voice，用于提示任务时使用mplayer进行播放。可以将voice文件替换为喜欢的提示声音。<br /><br />卸载：<br />&nbsp;&nbsp; &nbsp;安装后启动oalarm，会出现卸载选项。<br />&nbsp;&nbsp; &nbsp;卸载行为是：<br />&nbsp;&nbsp; &nbsp;删掉.oalarm目录和两个.desktop文件。记得为声音文件作备份。<br /><br />任务文件格式：<br />&nbsp;&nbsp; &nbsp;使用年月日时分命名。文件内第一行为任务标题，新建任务时必须填入，第二行至文件尾为任务内容，可选。<br /><br />原理：<br />&nbsp;&nbsp; &nbsp;下载的oalarm.bash，不带参数运行，是安装前使用，安装后之后可以删掉。<br />&nbsp;&nbsp; &nbsp;从应用程序-附件栏目的图标启动是带--start参数运行$HOME/.oalarm/oalarm.bash。用于新建，查看，延迟和删除任务。<br />&nbsp;&nbsp; &nbsp;登录图形界面后，带参数--check自动启动$HOME/.oalarm/oalarm.bash，用于检查关机或者登出图形界面期间到期的任务。延迟10秒之后开始检查。<br />&nbsp;&nbsp; &nbsp;图形界面登录期间，如果任务到期，则由atd守护进程带--check和任务文件名两个参数启动$HOME/.oalarm/oalarm.bash。然后oalarm.bash从wait目录下的文件提取信息进行提示。（如果voice文件不存在，则提示没有声音）<br /><br />&nbsp;&nbsp; &nbsp;两个重要的假定：<br />&nbsp;&nbsp; &nbsp;1，使用如下命令判断使用已经登录图形界面：<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;ps -eo ruid,comm | grep $UID.*gnome-session<br />&nbsp;&nbsp; &nbsp;2，$HOEM/.config/autostart下的.desktop文件指定的程序会在登录图形界面后自动运行。<br /><br />行为：<br />&nbsp;&nbsp; &nbsp;在任务提醒之后选择延迟和在等待任务中选择延迟是有区别的。如果选择延迟时间的时候取消了，则提醒之后的延迟会被放弃，任务被移到过期任务。<br /><br />bugs：<br />&nbsp;&nbsp; &nbsp;1，由于命名任务文件的时候没考虑到，同一个时间只能有一个任务，否则会被覆盖。<br />&nbsp;&nbsp; &nbsp;2，选择时间的方式有点别扭，但我也不知道怎么办。<br />&nbsp;&nbsp; &nbsp;3，延迟功能必须重新选择日期时间，有点不厚道<br /><br />关于：<br />&nbsp;&nbsp; &nbsp;oalarm 0.1.0<br />&nbsp;&nbsp; &nbsp;By Onway 2012-03-06<br /><br />&nbsp;&nbsp; &nbsp;debug yourself or report to:<br />&nbsp;&nbsp; &nbsp;blog: www.cppblog.com/onway<br />&nbsp;&nbsp; &nbsp;mail: aluohuai@126.com<br /><br />&nbsp;&nbsp; &nbsp;如果本程序让你错过了和女友的约会，或者把水烧干了，或者出现其他问题，本人概不负责</div><img src ="http://www.cppblog.com/Onway/aggbug/167510.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/Onway/" target="_blank">Onway</a> 2012-03-09 18:39 <a href="http://www.cppblog.com/Onway/archive/2012/03/09/167510.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>goldendict的有道词典扩展程序</title><link>http://www.cppblog.com/Onway/archive/2012/02/12/165425.html</link><dc:creator>Onway</dc:creator><author>Onway</author><pubDate>Sun, 12 Feb 2012 12:33:00 GMT</pubDate><guid>http://www.cppblog.com/Onway/archive/2012/02/12/165425.html</guid><wfw:comment>http://www.cppblog.com/Onway/comments/165425.html</wfw:comment><comments>http://www.cppblog.com/Onway/archive/2012/02/12/165425.html#Feedback</comments><slash:comments>6</slash:comments><wfw:commentRss>http://www.cppblog.com/Onway/comments/commentRss/165425.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/Onway/services/trackbacks/165425.html</trackback:ping><description><![CDATA[<img src="http://www.cppblog.com/images/cppblog_com/onway/021216_x3A_26_x3A_34.png" width="995" height="671" alt="" /><br /><br /><img src="http://www.cppblog.com/images/cppblog_com/onway/021216_x3A_28_x3A_23.png" width="638" height="591" alt="" /><br /><br /><br /><img src="http://www.cppblog.com/images/cppblog_com/onway/021216_x3A_52_x3A_52.png" width="295" height="228" alt="" /><br /><br /><br /><br /><br />由于有道词典的windows客户端是使用xsl将xml文件转换成html再显示的，而恰好goldendict内嵌了webkit，还可以添加扩展程序。<br />于是写了个小程序获取xml数据，再借用了一下有道的安装文件，打包发上来以此抛砖引玉，希望有兴趣的各路神牛可以修改得更好。<br /><a href="/Files/Onway/youdaodict.tar.gz.rar">/Files/Onway/youdaodict.tar.gz.rar</a><br /><a href="/Files/Onway/youdaodict.tar.gz.rar"><br /></a>其实文件不是rar压缩的，只是上传不了tar.gz的文件，rar只是加上去的。<br /><br />（之前上传那个，很不好意思的还有一个文件的路径没改过来，还有顺便说说，我的系统是ubuntu 11.10，gnome3桌面，godendict是1.0.1的版本，朋友说0.9那个版本没有扩展程序功能的）<br /><img src ="http://www.cppblog.com/Onway/aggbug/165425.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/Onway/" target="_blank">Onway</a> 2012-02-12 20:33 <a href="http://www.cppblog.com/Onway/archive/2012/02/12/165425.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>