﻿<?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++博客-长寿梦的编程日常</title><link>http://www.cppblog.com/changshoumeng/</link><description>2007年开始编程生涯，迄今已通多种语言，未来以期计算机技术结合某一专业领域，传授智慧给计算机智能辅助改进某一行业，成为顶级的领域处理专家。</description><language>zh-cn</language><lastBuildDate>Sun, 12 Apr 2026 19:18:58 GMT</lastBuildDate><pubDate>Sun, 12 Apr 2026 19:18:58 GMT</pubDate><ttl>60</ttl><item><title>使用valgrind，  VLD做内存泄漏的检查</title><link>http://www.cppblog.com/changshoumeng/archive/2017/01/04/214571.html</link><dc:creator>长寿梦</dc:creator><author>长寿梦</author><pubDate>Wed, 04 Jan 2017 02:17:00 GMT</pubDate><guid>http://www.cppblog.com/changshoumeng/archive/2017/01/04/214571.html</guid><wfw:comment>http://www.cppblog.com/changshoumeng/comments/214571.html</wfw:comment><comments>http://www.cppblog.com/changshoumeng/archive/2017/01/04/214571.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/changshoumeng/comments/commentRss/214571.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/changshoumeng/services/trackbacks/214571.html</trackback:ping><description><![CDATA[<div>http://www.cnblogs.com/lidabo/archive/2012/07/19/2599745.html<br /><br /><br /><div>http://blog.csdn.net/sdfgh2046/article/details/5830774</div></div><img src ="http://www.cppblog.com/changshoumeng/aggbug/214571.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/changshoumeng/" target="_blank">长寿梦</a> 2017-01-04 10:17 <a href="http://www.cppblog.com/changshoumeng/archive/2017/01/04/214571.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>文字图片，生成我的壁纸</title><link>http://www.cppblog.com/changshoumeng/archive/2016/12/31/214567.html</link><dc:creator>长寿梦</dc:creator><author>长寿梦</author><pubDate>Sat, 31 Dec 2016 08:39:00 GMT</pubDate><guid>http://www.cppblog.com/changshoumeng/archive/2016/12/31/214567.html</guid><wfw:comment>http://www.cppblog.com/changshoumeng/comments/214567.html</wfw:comment><comments>http://www.cppblog.com/changshoumeng/archive/2016/12/31/214567.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/changshoumeng/comments/commentRss/214567.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/changshoumeng/services/trackbacks/214567.html</trackback:ping><description><![CDATA[<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; ">!/usr/bin/python</span><span style="color: #008000; "><br />#</span><span style="color: #008000; ">&nbsp;-*-&nbsp;coding:&nbsp;utf-8&nbsp;-*-</span><span style="color: #008000; "><br /></span><br /><span style="color: #008000; ">#</span><span style="color: #008000; ">-*-&nbsp;coding:utf8&nbsp;-*-</span><span style="color: #008000; "><br /></span><span style="color: #0000FF; ">import</span>&nbsp;sys<br /><span style="color: #0000FF; ">from</span>&nbsp;PIL&nbsp;<span style="color: #0000FF; ">import</span>&nbsp;Image<br /><span style="color: #0000FF; ">from</span>&nbsp;PIL&nbsp;<span style="color: #0000FF; ">import</span>&nbsp;ImageDraw<br /><span style="color: #0000FF; ">from</span>&nbsp;PIL&nbsp;<span style="color: #0000FF; ">import</span>&nbsp;ImageFont<br /><br />line_list&nbsp;=&nbsp;[<span style="color: #800000; ">'</span><span style="color: #800000; ">龙头摆尾</span><span style="color: #800000; ">'</span>,<span style="color: #800000; ">"</span><span style="color: #800000; ">新高资改</span><span style="color: #800000; ">"</span>,<span style="color: #800000; ">"</span><span style="color: #800000; ">棋力三段</span><span style="color: #800000; ">"</span>,<span style="color: #800000; ">"</span><span style="color: #800000; ">方可投机</span><span style="color: #800000; ">"</span>]<br />idx&nbsp;=&nbsp;0<br />x=600<br />y=300<br /><br />font&nbsp;=&nbsp;ImageFont.truetype(<span style="color: #800000; ">'</span><span style="color: #800000; ">simsun.ttc</span><span style="color: #800000; ">'</span>,36,index=0)<br />im&nbsp;=&nbsp;Image.new(<span style="color: #800000; ">"</span><span style="color: #800000; ">RGBA</span><span style="color: #800000; ">"</span>,(1366,768),(0,0,0))<br />draw&nbsp;=&nbsp;ImageDraw.Draw(im)<br /><br /><span style="color: #0000FF; ">for</span>&nbsp;line&nbsp;<span style="color: #0000FF; ">in</span>&nbsp;line_list:<br />&nbsp;&nbsp;&nbsp;&nbsp;pos&nbsp;=&nbsp;(x,y+50*idx)<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">print</span>&nbsp;pos<br />&nbsp;&nbsp;&nbsp;&nbsp;draw.text(&nbsp;(x,y+50*idx),&nbsp;unicode(line,<span style="color: #800000; ">'</span><span style="color: #800000; ">UTF-8</span><span style="color: #800000; ">'</span>),&nbsp;font=font)<br />&nbsp;&nbsp;&nbsp;&nbsp;idx&nbsp;+=&nbsp;1<br /><span style="color: #0000FF; ">del</span>&nbsp;draw<br />im.save(r<span style="color: #800000; ">"</span><span style="color: #800000; ">d://test.png</span><span style="color: #800000; ">"</span>)</div><img src ="http://www.cppblog.com/changshoumeng/aggbug/214567.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/changshoumeng/" target="_blank">长寿梦</a> 2016-12-31 16:39 <a href="http://www.cppblog.com/changshoumeng/archive/2016/12/31/214567.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>curl url 自动解析到内网IP</title><link>http://www.cppblog.com/changshoumeng/archive/2016/12/30/214565.html</link><dc:creator>长寿梦</dc:creator><author>长寿梦</author><pubDate>Fri, 30 Dec 2016 02:26:00 GMT</pubDate><guid>http://www.cppblog.com/changshoumeng/archive/2016/12/30/214565.html</guid><wfw:comment>http://www.cppblog.com/changshoumeng/comments/214565.html</wfw:comment><comments>http://www.cppblog.com/changshoumeng/archive/2016/12/30/214565.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/changshoumeng/comments/commentRss/214565.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/changshoumeng/services/trackbacks/214565.html</trackback:ping><description><![CDATA[<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; ">&nbsp;-*-&nbsp;coding:&nbsp;utf-8&nbsp;-*-</span><span style="color: #008000; "><br />#</span><span style="color: #008000; ">!/usr/bin/env&nbsp;python</span><span style="color: #008000; "><br />#</span><span style="color: #008000; ">##################################################</span><span style="color: #008000; "><br />#</span><span style="color: #008000; ">Teach&nbsp;wisedom&nbsp;to&nbsp;my&nbsp;machine,please&nbsp;call&nbsp;me&nbsp;Croco#</span><span style="color: #008000; "><br />#</span><span style="color: #008000; ">&nbsp;定时更改/etc/hosts&nbsp;实现不修改程序的情况下，使得程序</span><span style="color: #008000; "><br />#</span><span style="color: #008000; ">&nbsp;curl&nbsp;url&nbsp;自动解析到内网IP</span><span style="color: #008000; "><br />#</span><span style="color: #008000; ">#################################################</span><span style="color: #008000; "><br /></span><span style="color: #0000FF; ">from</span>&nbsp;DebugLogger&nbsp;<span style="color: #0000FF; ">import</span>&nbsp;&nbsp;*<br />Logger.init(<span style="color: #800000; ">"</span><span style="color: #800000; ">updatehost</span><span style="color: #800000; ">"</span>)<br /><span style="color: #0000FF; ">import</span>&nbsp;os<br /><span style="color: #0000FF; ">import</span>&nbsp;sys<br /><span style="color: #0000FF; ">import</span>&nbsp;time<br /><span style="color: #0000FF; ">import</span>&nbsp;json<br /><span style="color: #0000FF; ">import</span>&nbsp;random<br /><br />special_host&nbsp;=&nbsp;<span style="color: #800000; ">"</span><span style="color: #800000; ">chelun.eclicks.cn</span><span style="color: #800000; ">"</span><br />last_data&nbsp;=&nbsp;<span style="color: #800000; ">""</span><br />last_line=<span style="color: #800000; ">""</span><br /><br /><br /><span style="color: #0000FF; ">def</span>&nbsp;selectAnotherIp(iplist,last_ip):<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;last_ip&nbsp;<span style="color: #0000FF; ">in</span>&nbsp;iplist:<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;iplist.remove(last_ip)<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;len(iplist)&nbsp;==&nbsp;0:<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;<span style="color: #800000; ">""</span><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;random.choice(iplist)<br /><br /><br /><br /><span style="color: #0000FF; ">def</span>&nbsp;readWebConfAndGetNewIp(last_ip):<br />&nbsp;&nbsp;&nbsp;&nbsp;file_name&nbsp;=&nbsp;<span style="color: #800000; ">"</span><span style="color: #800000; ">web.conf</span><span style="color: #800000; ">"</span><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;<span style="color: #0000FF; ">not</span>&nbsp;os.path.exists(file_name):<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;log(<span style="color: #800000; ">"</span><span style="color: #800000; ">not&nbsp;exits&nbsp;such&nbsp;file:{0}</span><span style="color: #800000; ">"</span>.format(file_name))<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sys.exit(0)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;&nbsp;<span style="color: #800000; ">""</span><br />&nbsp;&nbsp;&nbsp;&nbsp;old_data&nbsp;=&nbsp;<span style="color: #800000; ">""</span><br />&nbsp;&nbsp;&nbsp;&nbsp;with&nbsp;open(file_name,&nbsp;<span style="color: #800000; ">"</span><span style="color: #800000; ">r</span><span style="color: #800000; ">"</span>)&nbsp;as&nbsp;f:<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;old_data&nbsp;=&nbsp;f.read()<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;<span style="color: #0000FF; ">not</span>&nbsp;old_data:<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;log(<span style="color: #800000; ">"</span><span style="color: #800000; ">get&nbsp;empty&nbsp;file:{0}</span><span style="color: #800000; ">"</span>.format(file_name))<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;<span style="color: #800000; ">""</span><br />&nbsp;&nbsp;&nbsp;&nbsp;iplist&nbsp;=&nbsp;[]<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">try</span>:<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;js_obj&nbsp;=&nbsp;json.loads(old_data)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>&nbsp;item&nbsp;<span style="color: #0000FF; ">in</span>&nbsp;js_obj[<span style="color: #800000; ">"</span><span style="color: #800000; ">servers</span><span style="color: #800000; ">"</span>]:<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;item[<span style="color: #800000; ">"</span><span style="color: #800000; ">status</span><span style="color: #800000; ">"</span>]&nbsp;==&nbsp;<span style="color: #800000; ">"</span><span style="color: #800000; ">online</span><span style="color: #800000; ">"</span>:<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;iplist.append(item[<span style="color: #800000; ">"</span><span style="color: #800000; ">host</span><span style="color: #800000; ">"</span>])<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">except</span>:<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;log(<span style="color: #800000; ">"</span><span style="color: #800000; ">read&nbsp;failed&nbsp;from&nbsp;webserver_conf:</span><span style="color: #800000; ">"</span>&nbsp;+&nbsp;file_name&nbsp;+&nbsp;<span style="color: #800000; ">"</span><span style="color: #800000; ">data:</span><span style="color: #800000; ">"</span>&nbsp;+&nbsp;old_data)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;<span style="color: #800000; ">""</span><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;selectAnotherIp(iplist,last_ip)<br /><br /><br /><br /><br /><span style="color: #0000FF; ">def</span>&nbsp;task():<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">global</span>&nbsp;last_data<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">global</span>&nbsp;special_host<br />&nbsp;&nbsp;&nbsp;&nbsp;file_name&nbsp;=&nbsp;<span style="color: #800000; ">"</span><span style="color: #800000; ">hosts.conf</span><span style="color: #800000; ">"</span><br />&nbsp;&nbsp;&nbsp;&nbsp;file_bak_name&nbsp;=<span style="color: #800000; ">"</span><span style="color: #800000; ">hosts2.conf</span><span style="color: #800000; ">"</span><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;<span style="color: #0000FF; ">not</span>&nbsp;os.path.exists(file_name):<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;log(<span style="color: #800000; ">"</span><span style="color: #800000; ">not&nbsp;exits&nbsp;such&nbsp;file:{0}</span><span style="color: #800000; ">"</span>.format(file_name))<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sys.exit(0)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span><br />&nbsp;&nbsp;&nbsp;&nbsp;old_data&nbsp;=&nbsp;<span style="color: #800000; ">""</span><br />&nbsp;&nbsp;&nbsp;&nbsp;with&nbsp;open(file_name,<span style="color: #800000; ">"</span><span style="color: #800000; ">r</span><span style="color: #800000; ">"</span>)&nbsp;as&nbsp;f:<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;old_data&nbsp;=&nbsp;f.readlines()<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;<span style="color: #0000FF; ">not</span>&nbsp;old_data:<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;log(<span style="color: #800000; ">"</span><span style="color: #800000; ">get&nbsp;empty&nbsp;file:{0}</span><span style="color: #800000; ">"</span>.format(file_name))<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;last_data&nbsp;==&nbsp;old_data:<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span><br />&nbsp;&nbsp;&nbsp;&nbsp;line_list1=[]<br />&nbsp;&nbsp;&nbsp;&nbsp;line_list2&nbsp;=&nbsp;[]<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>&nbsp;line&nbsp;<span style="color: #0000FF; ">in</span>&nbsp;old_data:<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;line&nbsp;=&nbsp;line.strip()<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;<span style="color: #0000FF; ">not</span>&nbsp;line:<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">continue</span><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;<span style="color: #800000; ">"</span><span style="color: #800000; ">#</span><span style="color: #800000; ">"</span>&nbsp;<span style="color: #0000FF; ">in</span>&nbsp;line:<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;line_list1.append(line)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;line_list2.append(line)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">continue</span><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;special_host&nbsp;&nbsp;<span style="color: #0000FF; ">not</span>&nbsp;<span style="color: #0000FF; ">in</span>&nbsp;line:<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;line_list1.append(line)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;line_list2.append(line)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">continue</span><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;line_list1.append(line)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;arr=&nbsp;line.split(<span style="color: #800000; ">"</span><span style="color: #800000; ">&nbsp;</span><span style="color: #800000; ">"</span>)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;len(arr)&nbsp;!=&nbsp;2:<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;log(<span style="color: #800000; ">"</span><span style="color: #800000; ">error&nbsp;line:{0}</span><span style="color: #800000; ">"</span>.format(line))<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sys.exit(1)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ipaddr&nbsp;=&nbsp;arr[0]<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;newipaddr&nbsp;=&nbsp;readWebConfAndGetNewIp(ipaddr)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;<span style="color: #0000FF; ">not</span>&nbsp;newipaddr:<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;log(<span style="color: #800000; ">"</span><span style="color: #800000; ">not&nbsp;need&nbsp;to&nbsp;change</span><span style="color: #800000; ">"</span>)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;line&nbsp;=&nbsp;newipaddr+<span style="color: #800000; ">"</span><span style="color: #800000; ">&nbsp;</span><span style="color: #800000; ">"</span>+special_host<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;line_list2.append(line)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;log(<span style="color: #800000; ">"</span><span style="color: #800000; ">change&nbsp;ipaddr:{0}&nbsp;-&gt;&nbsp;newipaddr:{1}</span><span style="color: #800000; ">"</span>.format(ipaddr,newipaddr))<br /><br /><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;os.path.exists(file_bak_name):<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;os.remove(file_bak_name)<br />&nbsp;&nbsp;&nbsp;&nbsp;with&nbsp;open(file_bak_name,<span style="color: #800000; ">"</span><span style="color: #800000; ">w</span><span style="color: #800000; ">"</span>)&nbsp;as&nbsp;f:<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>&nbsp;line&nbsp;<span style="color: #0000FF; ">in</span>&nbsp;line_list1:<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;f.write(line)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;f.write(<span style="color: #800000; ">"</span><span style="color: #800000; ">\n</span><span style="color: #800000; ">"</span>)<br />&nbsp;&nbsp;&nbsp;&nbsp;os.remove(file_name)<br />&nbsp;&nbsp;&nbsp;&nbsp;with&nbsp;open(file_name,<span style="color: #800000; ">"</span><span style="color: #800000; ">w</span><span style="color: #800000; ">"</span>)&nbsp;as&nbsp;f:<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>&nbsp;line&nbsp;<span style="color: #0000FF; ">in</span>&nbsp;line_list2:<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;f.write(line)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;f.write(<span style="color: #800000; ">"</span><span style="color: #800000; ">\n</span><span style="color: #800000; ">"</span>)<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;<span style="color: #0000FF; ">not</span>&nbsp;os.path.exists(file_name):<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;log(<span style="color: #800000; ">"</span><span style="color: #800000; ">update&nbsp;failed,file:{0}</span><span style="color: #800000; ">"</span>.format(file_name),2)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span><br />&nbsp;&nbsp;&nbsp;&nbsp;log(<span style="color: #800000; ">"</span><span style="color: #800000; ">update&nbsp;succ,file:{0}</span><span style="color: #800000; ">"</span>.format(file_name))<br />&nbsp;&nbsp;&nbsp;&nbsp;with&nbsp;open(file_name,<span style="color: #800000; ">"</span><span style="color: #800000; ">r</span><span style="color: #800000; ">"</span>)&nbsp;as&nbsp;f:<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;last_data&nbsp;=&nbsp;f.readlines()<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">pass</span><br /><br /><br /><span style="color: #0000FF; ">def</span>&nbsp;main():<br />&nbsp;&nbsp;&nbsp;&nbsp;uid&nbsp;=&nbsp;os.getuid()<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;uid&nbsp;!=&nbsp;0:<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;log(<span style="color: #800000; ">"</span><span style="color: #800000; ">os.getuid()&nbsp;!=&nbsp;0,current&nbsp;uid:{0}</span><span style="color: #800000; ">"</span>.format(uid))<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">while</span>&nbsp;True:<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;task()<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;time.sleep(60)<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">pass</span><br /><br /><span style="color: #0000FF; ">if</span>&nbsp;<span style="color: #800080; ">__name__</span>&nbsp;==&nbsp;<span style="color: #800000; ">'</span><span style="color: #800000; ">__main__</span><span style="color: #800000; ">'</span>:<br />&nbsp;&nbsp;&nbsp;&nbsp;task()<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">#</span><span style="color: #008000; ">main()</span><span style="color: #008000; "><br /></span><br /></div><img src ="http://www.cppblog.com/changshoumeng/aggbug/214565.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/changshoumeng/" target="_blank">长寿梦</a> 2016-12-30 10:26 <a href="http://www.cppblog.com/changshoumeng/archive/2016/12/30/214565.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>两条技术发展主线与致力于服务的事业</title><link>http://www.cppblog.com/changshoumeng/archive/2016/10/18/214342.html</link><dc:creator>长寿梦</dc:creator><author>长寿梦</author><pubDate>Tue, 18 Oct 2016 11:20:00 GMT</pubDate><guid>http://www.cppblog.com/changshoumeng/archive/2016/10/18/214342.html</guid><wfw:comment>http://www.cppblog.com/changshoumeng/comments/214342.html</wfw:comment><comments>http://www.cppblog.com/changshoumeng/archive/2016/10/18/214342.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/changshoumeng/comments/commentRss/214342.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/changshoumeng/services/trackbacks/214342.html</trackback:ping><description><![CDATA[<div><div>两条技术发展主线：</div></div><div>1.熟悉PYTHON，让PYTHON成为一门利器，帮我斩断一切阻止通向互联网自由之路的障碍。</div><div>&nbsp; 为此，我必须尽可能掌握作为一名顶级黑客必备的技术列表。</div><div></div><div>2.建立在自然语言处理上，熟悉数据收集、存储、计算、分类、可视化等数据处理技术。</div><div>&nbsp;<br /><div>致力于服务的事业：</div></div><div></div><div>之后，我将独立自主研发，服务于金融投资的量化分析事业。</div><div></div><img src ="http://www.cppblog.com/changshoumeng/aggbug/214342.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/changshoumeng/" target="_blank">长寿梦</a> 2016-10-18 19:20 <a href="http://www.cppblog.com/changshoumeng/archive/2016/10/18/214342.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>GCC -O 优化选项的一次测试</title><link>http://www.cppblog.com/changshoumeng/archive/2016/10/14/214332.html</link><dc:creator>长寿梦</dc:creator><author>长寿梦</author><pubDate>Fri, 14 Oct 2016 03:48:00 GMT</pubDate><guid>http://www.cppblog.com/changshoumeng/archive/2016/10/14/214332.html</guid><wfw:comment>http://www.cppblog.com/changshoumeng/comments/214332.html</wfw:comment><comments>http://www.cppblog.com/changshoumeng/archive/2016/10/14/214332.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/changshoumeng/comments/commentRss/214332.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/changshoumeng/services/trackbacks/214332.html</trackback:ping><description><![CDATA[<table style="border-collapse:collapse;width:672.7000pt;"><tbody><tr><td width="434" valign="top" style="width:326.0500pt;padding:0.0000pt 5.4000pt 0.0000pt 5.4000pt ;border-left:1.0000pt solid windowtext;border-right:1.0000pt solid windowtext;border-top:1.0000pt solid windowtext;border-bottom:1.0000pt solid windowtext;"><p><span style="font-family: 宋体; font-size: 7.5pt;">GCC -O 优化选项说明</span></p></td><td width="150" valign="top" style="width:112.5500pt;padding:0.0000pt 5.4000pt 0.0000pt 5.4000pt ;border-left:none;;;border-right:1.0000pt solid windowtext;border-top:1.0000pt solid windowtext;border-bottom:1.0000pt solid windowtext;"><p><span style="mso-spacerun:'yes';font-family:宋体;mso-bidi-font-family:'Times New Roman';font-size:7.5000pt;">编译耗时</span></p></td><td width="106" valign="top" style="width:79.7500pt;padding:0.0000pt 5.4000pt 0.0000pt 5.4000pt ;border-left:none;;;border-right:1.0000pt solid windowtext;border-top:1.0000pt solid windowtext;border-bottom:1.0000pt solid windowtext;"><p><span style="mso-spacerun:'yes';font-family:宋体;mso-bidi-font-family:'Times New Roman';font-size:7.5000pt;">编译结果大小</span><span style="mso-spacerun:'yes';font-family:宋体;mso-bidi-font-family:'Times New Roman';font-size:7.5000pt;">(BYTES)</span></p></td><td width="205" valign="top" style="width:154.3500pt;padding:0.0000pt 5.4000pt 0.0000pt 5.4000pt ;border-left:none;;;border-right:1.0000pt solid windowtext;border-top:1.0000pt solid windowtext;border-bottom:1.0000pt solid windowtext;"><p><span style="mso-spacerun:'yes';font-family:宋体;mso-bidi-font-family:'Times New Roman';font-size:7.5000pt;">运行耗时</span></p></td></tr><tr><td width="434" valign="top" style="width:326.0500pt;padding:0.0000pt 5.4000pt 0.0000pt 5.4000pt ;border-left:1.0000pt solid windowtext;border-right:1.0000pt solid windowtext;border-top:none;;border-bottom:1.0000pt solid windowtext;"><p><span style="mso-spacerun:'yes';font-family:宋体;mso-bidi-font-family:'Times New Roman';font-size:7.5000pt;">不设置O选项</span></p></td><td width="150" valign="top" style="width:112.5500pt;padding:0.0000pt 5.4000pt 0.0000pt 5.4000pt ;border-left:none;;;border-right:1.0000pt solid windowtext;border-top:none;;border-bottom:1.0000pt solid windowtext;"><p><span style="mso-spacerun:'yes';font-family:宋体;mso-bidi-font-family:'Times New Roman';font-size:7.5000pt;">real</span><span style="font-family:宋体;mso-bidi-font-family:'Times New Roman';font-size:7.5000pt;">	</span><span style="mso-spacerun:'yes';font-family:宋体;mso-bidi-font-family:'Times New Roman';font-size:7.5000pt;">0m20.079s</span></p><p><span style="mso-spacerun:'yes';font-family:宋体;mso-bidi-font-family:'Times New Roman';font-size:7.5000pt;">user</span><span style="font-family:宋体;mso-bidi-font-family:'Times New Roman';font-size:7.5000pt;">	</span><span style="mso-spacerun:'yes';font-family:宋体;mso-bidi-font-family:'Times New Roman';font-size:7.5000pt;">0m18.943s</span></p><p><span style="mso-spacerun:'yes';font-family:宋体;mso-bidi-font-family:'Times New Roman';font-size:7.5000pt;">sys</span><span style="font-family:宋体;mso-bidi-font-family:'Times New Roman';font-size:7.5000pt;">	</span><span style="mso-spacerun:'yes';font-family:宋体;mso-bidi-font-family:'Times New Roman';font-size:7.5000pt;">0m1.030s</span></p></td><td width="106" valign="top" style="width:79.7500pt;padding:0.0000pt 5.4000pt 0.0000pt 5.4000pt ;border-left:none;;;border-right:1.0000pt solid windowtext;border-top:none;;border-bottom:1.0000pt solid windowtext;"><p><span style="mso-spacerun:'yes';font-family:宋体;mso-bidi-font-family:'Times New Roman';font-size:7.5000pt;">1590048</span></p></td><td width="205" valign="top" style="width:154.3500pt;padding:0.0000pt 5.4000pt 0.0000pt 5.4000pt ;border-left:none;;;border-right:1.0000pt solid windowtext;border-top:none;;border-bottom:1.0000pt solid windowtext;"><p><span style="mso-spacerun:'yes';font-family:宋体;mso-bidi-font-family:'Times New Roman';font-size:7.5000pt;">real</span><span style="font-family:宋体;mso-bidi-font-family:'Times New Roman';font-size:7.5000pt;">	</span><span style="mso-spacerun:'yes';font-family:宋体;mso-bidi-font-family:'Times New Roman';font-size:7.5000pt;">0m13.143s</span></p><p><span style="mso-spacerun:'yes';font-family:宋体;mso-bidi-font-family:'Times New Roman';font-size:7.5000pt;">user</span><span style="font-family:宋体;mso-bidi-font-family:'Times New Roman';font-size:7.5000pt;">	</span><span style="mso-spacerun:'yes';font-family:宋体;mso-bidi-font-family:'Times New Roman';font-size:7.5000pt;">0m12.996s</span></p><p><span style="mso-spacerun:'yes';font-family:宋体;mso-bidi-font-family:'Times New Roman';font-size:7.5000pt;">sys</span><span style="font-family:宋体;mso-bidi-font-family:'Times New Roman';font-size:7.5000pt;">	</span><span style="mso-spacerun:'yes';font-family:宋体;mso-bidi-font-family:'Times New Roman';font-size:7.5000pt;">0m0.124s</span></p></td></tr><tr><td width="434" valign="top" style="width:326.0500pt;padding:0.0000pt 5.4000pt 0.0000pt 5.4000pt ;border-left:1.0000pt solid windowtext;border-right:1.0000pt solid windowtext;border-top:none;;border-bottom:1.0000pt solid windowtext;"><p><span style="font-family: Arial; color: #333333; letter-spacing: 0pt; font-size: 7.5pt; background: #ffffff;">-O0：这个等级（字母&#8220;O&#8221;后面跟个零）关闭所有优化选项，也是CFLAGS或CXXFLAGS中没有设置-O等级时的默认等级。这样就不会优化代码，这通常不是我们想要的。</span>&nbsp;</p></td><td width="150" valign="top" style="width:112.5500pt;padding:0.0000pt 5.4000pt 0.0000pt 5.4000pt ;border-left:none;;;border-right:1.0000pt solid windowtext;border-top:none;;border-bottom:1.0000pt solid windowtext;"><p><span style="mso-spacerun:'yes';font-family:宋体;mso-bidi-font-family:'Times New Roman';font-size:7.5000pt;">real</span><span style="font-family:宋体;mso-bidi-font-family:'Times New Roman';font-size:7.5000pt;">	</span><span style="mso-spacerun:'yes';font-family:宋体;mso-bidi-font-family:'Times New Roman';font-size:7.5000pt;">0m19.957s</span></p><p><span style="mso-spacerun:'yes';font-family:宋体;mso-bidi-font-family:'Times New Roman';font-size:7.5000pt;">user</span><span style="font-family:宋体;mso-bidi-font-family:'Times New Roman';font-size:7.5000pt;">	</span><span style="mso-spacerun:'yes';font-family:宋体;mso-bidi-font-family:'Times New Roman';font-size:7.5000pt;">0m18.521s</span></p><p><span style="mso-spacerun:'yes';font-family:宋体;mso-bidi-font-family:'Times New Roman';font-size:7.5000pt;">sys</span><span style="font-family:宋体;mso-bidi-font-family:'Times New Roman';font-size:7.5000pt;">	</span><span style="mso-spacerun:'yes';font-family:宋体;mso-bidi-font-family:'Times New Roman';font-size:7.5000pt;">0m1.406s</span></p></td><td width="106" valign="top" style="width:79.7500pt;padding:0.0000pt 5.4000pt 0.0000pt 5.4000pt ;border-left:none;;;border-right:1.0000pt solid windowtext;border-top:none;;border-bottom:1.0000pt solid windowtext;"><p><span style="mso-spacerun:'yes';font-family:宋体;mso-bidi-font-family:'Times New Roman';font-size:7.5000pt;">1590048</span></p></td><td width="205" valign="top" style="width:154.3500pt;padding:0.0000pt 5.4000pt 0.0000pt 5.4000pt ;border-left:none;;;border-right:1.0000pt solid windowtext;border-top:none;;border-bottom:1.0000pt solid windowtext;"><p><span style="mso-spacerun:'yes';font-family:宋体;mso-bidi-font-family:'Times New Roman';font-size:7.5000pt;">real</span><span style="font-family:宋体;mso-bidi-font-family:'Times New Roman';font-size:7.5000pt;">	</span><span style="mso-spacerun:'yes';font-family:宋体;mso-bidi-font-family:'Times New Roman';font-size:7.5000pt;">0m12.816s</span></p><p><span style="mso-spacerun:'yes';font-family:宋体;mso-bidi-font-family:'Times New Roman';font-size:7.5000pt;">user</span><span style="font-family:宋体;mso-bidi-font-family:'Times New Roman';font-size:7.5000pt;">	</span><span style="mso-spacerun:'yes';font-family:宋体;mso-bidi-font-family:'Times New Roman';font-size:7.5000pt;">0m12.661s</span></p><p><span style="mso-spacerun:'yes';font-family:宋体;mso-bidi-font-family:'Times New Roman';font-size:7.5000pt;">sys</span><span style="font-family:宋体;mso-bidi-font-family:'Times New Roman';font-size:7.5000pt;">	</span><span style="mso-spacerun:'yes';font-family:宋体;mso-bidi-font-family:'Times New Roman';font-size:7.5000pt;">0m0.138s</span></p></td></tr><tr><td width="434" valign="top" style="width:326.0500pt;padding:0.0000pt 5.4000pt 0.0000pt 5.4000pt ;border-left:1.0000pt solid windowtext;border-right:1.0000pt solid windowtext;border-top:none;;border-bottom:1.0000pt solid windowtext;"><p><span style="font-family: Arial; color: #333333; letter-spacing: 0pt; font-size: 7.5pt; background: #ffffff;">-O1：这是最基本的优化等级。编译器会在不花费太多编译时间的同时试图生成更快更小的代码。这些优化是非常基础的，但一般这些任务肯定能顺利完成。</span>&nbsp;</p></td><td width="150" valign="top" style="width:112.5500pt;padding:0.0000pt 5.4000pt 0.0000pt 5.4000pt ;border-left:none;;;border-right:1.0000pt solid windowtext;border-top:none;;border-bottom:1.0000pt solid windowtext;"><p><span style="mso-spacerun:'yes';font-family:宋体;mso-bidi-font-family:'Times New Roman';font-size:7.5000pt;">real</span><span style="font-family:宋体;mso-bidi-font-family:'Times New Roman';font-size:7.5000pt;">	</span><span style="mso-spacerun:'yes';font-family:宋体;mso-bidi-font-family:'Times New Roman';font-size:7.5000pt;">0m22.782s</span></p><p><span style="mso-spacerun:'yes';font-family:宋体;mso-bidi-font-family:'Times New Roman';font-size:7.5000pt;">user</span><span style="font-family:宋体;mso-bidi-font-family:'Times New Roman';font-size:7.5000pt;">	</span><span style="mso-spacerun:'yes';font-family:宋体;mso-bidi-font-family:'Times New Roman';font-size:7.5000pt;">0m21.750s</span></p><p><span style="mso-spacerun:'yes';font-family:宋体;mso-bidi-font-family:'Times New Roman';font-size:7.5000pt;">sys</span><span style="font-family:宋体;mso-bidi-font-family:'Times New Roman';font-size:7.5000pt;">	</span><span style="mso-spacerun:'yes';font-family:宋体;mso-bidi-font-family:'Times New Roman';font-size:7.5000pt;">0m0.978s</span></p></td><td width="106" valign="top" style="width:79.7500pt;padding:0.0000pt 5.4000pt 0.0000pt 5.4000pt ;border-left:none;;;border-right:1.0000pt solid windowtext;border-top:none;;border-bottom:1.0000pt solid windowtext;"><p><span style="mso-spacerun:'yes';font-family:宋体;mso-bidi-font-family:'Times New Roman';font-size:7.5000pt;">599306</span></p></td><td width="205" valign="top" style="width:154.3500pt;padding:0.0000pt 5.4000pt 0.0000pt 5.4000pt ;border-left:none;;;border-right:1.0000pt solid windowtext;border-top:none;;border-bottom:1.0000pt solid windowtext;"><p><span style="mso-spacerun:'yes';font-family:宋体;mso-bidi-font-family:'Times New Roman';font-size:7.5000pt;">real</span><span style="font-family:宋体;mso-bidi-font-family:'Times New Roman';font-size:7.5000pt;">	</span><span style="mso-spacerun:'yes';font-family:宋体;mso-bidi-font-family:'Times New Roman';font-size:7.5000pt;">0m5.074s</span></p><p><span style="mso-spacerun:'yes';font-family:宋体;mso-bidi-font-family:'Times New Roman';font-size:7.5000pt;">user</span><span style="font-family:宋体;mso-bidi-font-family:'Times New Roman';font-size:7.5000pt;">	</span><span style="mso-spacerun:'yes';font-family:宋体;mso-bidi-font-family:'Times New Roman';font-size:7.5000pt;">0m4.951s</span></p><p><span style="mso-spacerun:'yes';font-family:宋体;mso-bidi-font-family:'Times New Roman';font-size:7.5000pt;">sys</span><span style="font-family:宋体;mso-bidi-font-family:'Times New Roman';font-size:7.5000pt;">	</span><span style="mso-spacerun:'yes';font-family:宋体;mso-bidi-font-family:'Times New Roman';font-size:7.5000pt;">0m0.115s</span></p><p>&nbsp;</p></td></tr><tr><td width="434" valign="top" style="width:326.0500pt;padding:0.0000pt 5.4000pt 0.0000pt 5.4000pt ;border-left:1.0000pt solid windowtext;border-right:1.0000pt solid windowtext;border-top:none;;border-bottom:1.0000pt solid windowtext;"><p><span style="font-family: Arial; color: #333333; letter-spacing: 0pt; font-size: 7.5pt; background: #ffffff;">-O2：-O1的进阶。这是推荐的优化等级，除非你有特殊的需求。-O2会比-O1启用多一些标记。设置了-O2后，编译器会试图提高代码性能而不会增大体积和大量占用的编译时间。</span>&nbsp;</p></td><td width="150" valign="top" style="width:112.5500pt;padding:0.0000pt 5.4000pt 0.0000pt 5.4000pt ;border-left:none;;;border-right:1.0000pt solid windowtext;border-top:none;;border-bottom:1.0000pt solid windowtext;"><p><span style="mso-spacerun:'yes';font-family:宋体;mso-bidi-font-family:'Times New Roman';font-size:7.5000pt;">real</span><span style="font-family:宋体;mso-bidi-font-family:'Times New Roman';font-size:7.5000pt;">	</span><span style="mso-spacerun:'yes';font-family:宋体;mso-bidi-font-family:'Times New Roman';font-size:7.5000pt;">0m26.258s</span></p><p><span style="mso-spacerun:'yes';font-family:宋体;mso-bidi-font-family:'Times New Roman';font-size:7.5000pt;">user</span><span style="font-family:宋体;mso-bidi-font-family:'Times New Roman';font-size:7.5000pt;">	</span><span style="mso-spacerun:'yes';font-family:宋体;mso-bidi-font-family:'Times New Roman';font-size:7.5000pt;">0m25.313s</span></p><p><span style="mso-spacerun:'yes';font-family:宋体;mso-bidi-font-family:'Times New Roman';font-size:7.5000pt;">sys</span><span style="font-family:宋体;mso-bidi-font-family:'Times New Roman';font-size:7.5000pt;">	</span><span style="mso-spacerun:'yes';font-family:宋体;mso-bidi-font-family:'Times New Roman';font-size:7.5000pt;">0m0.887s</span></p></td><td width="106" valign="top" style="width:79.7500pt;padding:0.0000pt 5.4000pt 0.0000pt 5.4000pt ;border-left:none;;;border-right:1.0000pt solid windowtext;border-top:none;;border-bottom:1.0000pt solid windowtext;"><p><span style="mso-spacerun:'yes';font-family:宋体;mso-bidi-font-family:'Times New Roman';font-size:7.5000pt;">594456</span></p></td><td width="205" valign="top" style="width:154.3500pt;padding:0.0000pt 5.4000pt 0.0000pt 5.4000pt ;border-left:none;;;border-right:1.0000pt solid windowtext;border-top:none;;border-bottom:1.0000pt solid windowtext;"><p><span style="mso-spacerun:'yes';font-family:宋体;mso-bidi-font-family:'Times New Roman';font-size:7.5000pt;">real</span><span style="font-family:宋体;mso-bidi-font-family:'Times New Roman';font-size:7.5000pt;">	</span><span style="mso-spacerun:'yes';font-family:宋体;mso-bidi-font-family:'Times New Roman';font-size:7.5000pt;">0m4.621s</span></p><p><span style="mso-spacerun:'yes';font-family:宋体;mso-bidi-font-family:'Times New Roman';font-size:7.5000pt;">user</span><span style="font-family:宋体;mso-bidi-font-family:'Times New Roman';font-size:7.5000pt;">	</span><span style="mso-spacerun:'yes';font-family:宋体;mso-bidi-font-family:'Times New Roman';font-size:7.5000pt;">0m4.491s</span></p><p><span style="mso-spacerun:'yes';font-family:宋体;mso-bidi-font-family:'Times New Roman';font-size:7.5000pt;">sys</span><span style="font-family:宋体;mso-bidi-font-family:'Times New Roman';font-size:7.5000pt;">	</span><span style="mso-spacerun:'yes';font-family:宋体;mso-bidi-font-family:'Times New Roman';font-size:7.5000pt;">0m0.123s</span></p></td></tr><tr><td width="434" valign="top" style="width:326.0500pt;padding:0.0000pt 5.4000pt 0.0000pt 5.4000pt ;border-left:1.0000pt solid windowtext;border-right:1.0000pt solid windowtext;border-top:none;;border-bottom:1.0000pt solid windowtext;"><p><span style="font-family: Arial; color: #333333; letter-spacing: 0pt; font-size: 7.5pt; background: #ffffff;">-O3：这是最高最危险的优化等级。用这个选项会延长编译代码的时间，并且在使用gcc4.x的系统里不应全局启用。自从3.x版本以来gcc的行为已经有了极大地改变。在3.x，-O3生成的代码也只是比-O2快一点点而已，而gcc4.x中还未必更快。用-O3来编译所有的软件包将产生更大体积更耗内存的二进制文件，大大增加编译失败的机会或不可预知的程序行为（包括错误）。这样做将得不偿失，记住过犹不及。在gcc 4.x.中使用-O3是不推荐的。</span>&nbsp;</p></td><td width="150" valign="top" style="width:112.5500pt;padding:0.0000pt 5.4000pt 0.0000pt 5.4000pt ;border-left:none;;;border-right:1.0000pt solid windowtext;border-top:none;;border-bottom:1.0000pt solid windowtext;"><p><span style="mso-spacerun:'yes';font-family:宋体;mso-bidi-font-family:'Times New Roman';font-size:7.5000pt;">real</span><span style="font-family:宋体;mso-bidi-font-family:'Times New Roman';font-size:7.5000pt;">	</span><span style="mso-spacerun:'yes';font-family:宋体;mso-bidi-font-family:'Times New Roman';font-size:7.5000pt;">0m29.642s</span></p><p><span style="mso-spacerun:'yes';font-family:宋体;mso-bidi-font-family:'Times New Roman';font-size:7.5000pt;">user</span><span style="font-family:宋体;mso-bidi-font-family:'Times New Roman';font-size:7.5000pt;">	</span><span style="mso-spacerun:'yes';font-family:宋体;mso-bidi-font-family:'Times New Roman';font-size:7.5000pt;">0m28.671s</span></p><p><span style="mso-spacerun:'yes';font-family:宋体;mso-bidi-font-family:'Times New Roman';font-size:7.5000pt;">sys</span><span style="font-family:宋体;mso-bidi-font-family:'Times New Roman';font-size:7.5000pt;">	</span><span style="mso-spacerun:'yes';font-family:宋体;mso-bidi-font-family:'Times New Roman';font-size:7.5000pt;">0m0.852s</span></p></td><td width="106" valign="top" style="width:79.7500pt;padding:0.0000pt 5.4000pt 0.0000pt 5.4000pt ;border-left:none;;;border-right:1.0000pt solid windowtext;border-top:none;;border-bottom:1.0000pt solid windowtext;"><p><span style="mso-spacerun:'yes';font-family:宋体;mso-bidi-font-family:'Times New Roman';font-size:7.5000pt;">659664</span></p></td><td width="205" valign="top" style="width:154.3500pt;padding:0.0000pt 5.4000pt 0.0000pt 5.4000pt ;border-left:none;;;border-right:1.0000pt solid windowtext;border-top:none;;border-bottom:1.0000pt solid windowtext;"><p><span style="mso-spacerun:'yes';font-family:宋体;mso-bidi-font-family:'Times New Roman';font-size:7.5000pt;">real</span><span style="font-family:宋体;mso-bidi-font-family:'Times New Roman';font-size:7.5000pt;">	</span><span style="mso-spacerun:'yes';font-family:宋体;mso-bidi-font-family:'Times New Roman';font-size:7.5000pt;">0m4.669s</span></p><p><span style="mso-spacerun:'yes';font-family:宋体;mso-bidi-font-family:'Times New Roman';font-size:7.5000pt;">user</span><span style="font-family:宋体;mso-bidi-font-family:'Times New Roman';font-size:7.5000pt;">	</span><span style="mso-spacerun:'yes';font-family:宋体;mso-bidi-font-family:'Times New Roman';font-size:7.5000pt;">0m4.521s</span></p><p><span style="mso-spacerun:'yes';font-family:宋体;mso-bidi-font-family:'Times New Roman';font-size:7.5000pt;">sys</span><span style="font-family:宋体;mso-bidi-font-family:'Times New Roman';font-size:7.5000pt;">	</span><span style="mso-spacerun:'yes';font-family:宋体;mso-bidi-font-family:'Times New Roman';font-size:7.5000pt;">0m0.141s</span></p></td></tr><tr><td width="434" valign="top" style="width:326.0500pt;padding:0.0000pt 5.4000pt 0.0000pt 5.4000pt ;border-left:1.0000pt solid windowtext;border-right:1.0000pt solid windowtext;border-top:none;;border-bottom:1.0000pt solid windowtext;"><p><span style="font-family: 宋体; color: #333333; letter-spacing: 0pt; font-size: 7.5pt; background: #ffffff;">-O4 </span><span style="font-family: 宋体; color: #333333; letter-spacing: 0pt; font-size: 7.5pt; background: #ffffff;">等价于</span><span style="font-family: Arial; color: #333333; letter-spacing: 0pt; font-size: 7.5pt; background: #ffffff;">-O3</span></p><p><span style="font-family: 宋体; color: #333333; letter-spacing: 0pt; font-size: 7.5pt; background: #ffffff;">-O5 等价于</span><span style="font-family: Arial; color: #333333; letter-spacing: 0pt; font-size: 7.5pt; background: #ffffff;">-O3</span></p><p><span style="font-family: 宋体; color: #333333; letter-spacing: 0pt; font-size: 7.5pt; background: #ffffff;">....</span></p></td><td width="150" valign="top" style="width:112.5500pt;padding:0.0000pt 5.4000pt 0.0000pt 5.4000pt ;border-left:none;;;border-right:1.0000pt solid windowtext;border-top:none;;border-bottom:1.0000pt solid windowtext;"><p><span style="mso-spacerun:'yes';font-family:宋体;mso-bidi-font-family:'Times New Roman';font-size:7.5000pt;">real</span><span style="font-family:宋体;mso-bidi-font-family:'Times New Roman';font-size:7.5000pt;">	</span><span style="mso-spacerun:'yes';font-family:宋体;mso-bidi-font-family:'Times New Roman';font-size:7.5000pt;">0m30.264s</span></p><p><span style="mso-spacerun:'yes';font-family:宋体;mso-bidi-font-family:'Times New Roman';font-size:7.5000pt;">user</span><span style="font-family:宋体;mso-bidi-font-family:'Times New Roman';font-size:7.5000pt;">	</span><span style="mso-spacerun:'yes';font-family:宋体;mso-bidi-font-family:'Times New Roman';font-size:7.5000pt;">0m29.236s</span></p><p><span style="mso-spacerun:'yes';font-family:宋体;mso-bidi-font-family:'Times New Roman';font-size:7.5000pt;">sys</span><span style="font-family:宋体;mso-bidi-font-family:'Times New Roman';font-size:7.5000pt;">	</span><span style="mso-spacerun:'yes';font-family:宋体;mso-bidi-font-family:'Times New Roman';font-size:7.5000pt;">0m0.969s</span></p></td><td width="106" valign="top" style="width:79.7500pt;padding:0.0000pt 5.4000pt 0.0000pt 5.4000pt ;border-left:none;;;border-right:1.0000pt solid windowtext;border-top:none;;border-bottom:1.0000pt solid windowtext;"><p><span style="mso-spacerun:'yes';font-family:宋体;mso-bidi-font-family:'Times New Roman';font-size:7.5000pt;">659664</span></p></td><td width="205" valign="top" style="width:154.3500pt;padding:0.0000pt 5.4000pt 0.0000pt 5.4000pt ;border-left:none;;;border-right:1.0000pt solid windowtext;border-top:none;;border-bottom:1.0000pt solid windowtext;"><p><span style="mso-spacerun:'yes';font-family:宋体;mso-bidi-font-family:'Times New Roman';font-size:7.5000pt;">real</span><span style="font-family:宋体;mso-bidi-font-family:'Times New Roman';font-size:7.5000pt;">	</span><span style="mso-spacerun:'yes';font-family:宋体;mso-bidi-font-family:'Times New Roman';font-size:7.5000pt;">0m4.481s</span></p><p><span style="mso-spacerun:'yes';font-family:宋体;mso-bidi-font-family:'Times New Roman';font-size:7.5000pt;">user</span><span style="font-family:宋体;mso-bidi-font-family:'Times New Roman';font-size:7.5000pt;">	</span><span style="mso-spacerun:'yes';font-family:宋体;mso-bidi-font-family:'Times New Roman';font-size:7.5000pt;">0m4.331s</span></p><p><span style="mso-spacerun:'yes';font-family:宋体;mso-bidi-font-family:'Times New Roman';font-size:7.5000pt;">sys</span><span style="font-family:宋体;mso-bidi-font-family:'Times New Roman';font-size:7.5000pt;">	</span><span style="mso-spacerun:'yes';font-family:宋体;mso-bidi-font-family:'Times New Roman';font-size:7.5000pt;">0m0.144s</span></p><p>&nbsp;</p></td></tr><tr><td width="434" valign="top" style="width:326.0500pt;padding:0.0000pt 5.4000pt 0.0000pt 5.4000pt ;border-left:1.0000pt solid windowtext;border-right:1.0000pt solid windowtext;border-top:none;;border-bottom:1.0000pt solid windowtext;"><p><span style="font-family: Arial; color: #333333; letter-spacing: 0pt; font-size: 7.5pt; background: #ffffff;">-Os：这个等级用来优化代码尺寸。其中启用了-O2中不会增加磁盘空间占用的代码生成选项。这对于</span><strong><span style="font-family: Arial; color: #333333; letter-spacing: 0pt; font-size: 7.5pt; background: #ffffff;">磁盘空间极其紧张或者CPU缓存较小的机器</span></strong><span style="font-family: Arial; color: #333333; letter-spacing: 0pt; font-size: 7.5pt; background: #ffffff;">非常有用。但也可能产生些许问题，因此软件树中的大部分ebuild都过滤掉这个等级的优化。使用-Os是不推荐的。</span>&nbsp;</p></td><td width="150" valign="top" style="width:112.5500pt;padding:0.0000pt 5.4000pt 0.0000pt 5.4000pt ;border-left:none;;;border-right:1.0000pt solid windowtext;border-top:none;;border-bottom:1.0000pt solid windowtext;"><p><span style="mso-spacerun:'yes';font-family:宋体;mso-bidi-font-family:'Times New Roman';font-size:7.5000pt;">real</span><span style="font-family:宋体;mso-bidi-font-family:'Times New Roman';font-size:7.5000pt;">	</span><span style="mso-spacerun:'yes';font-family:宋体;mso-bidi-font-family:'Times New Roman';font-size:7.5000pt;">0m24.206s</span></p><p><span style="mso-spacerun:'yes';font-family:宋体;mso-bidi-font-family:'Times New Roman';font-size:7.5000pt;">user</span><span style="font-family:宋体;mso-bidi-font-family:'Times New Roman';font-size:7.5000pt;">	</span><span style="mso-spacerun:'yes';font-family:宋体;mso-bidi-font-family:'Times New Roman';font-size:7.5000pt;">0m23.285s</span></p><p><span style="mso-spacerun:'yes';font-family:宋体;mso-bidi-font-family:'Times New Roman';font-size:7.5000pt;">sys</span><span style="font-family:宋体;mso-bidi-font-family:'Times New Roman';font-size:7.5000pt;">	</span><span style="mso-spacerun:'yes';font-family:宋体;mso-bidi-font-family:'Times New Roman';font-size:7.5000pt;">0m0.855s</span></p><p>&nbsp;</p></td><td width="106" valign="top" style="width:79.7500pt;padding:0.0000pt 5.4000pt 0.0000pt 5.4000pt ;border-left:none;;;border-right:1.0000pt solid windowtext;border-top:none;;border-bottom:1.0000pt solid windowtext;"><p><span style="mso-spacerun:'yes';font-family:宋体;mso-bidi-font-family:'Times New Roman';font-size:7.5000pt;">519903</span></p></td><td width="205" valign="top" style="width:154.3500pt;padding:0.0000pt 5.4000pt 0.0000pt 5.4000pt ;border-left:none;;;border-right:1.0000pt solid windowtext;border-top:none;;border-bottom:1.0000pt solid windowtext;"><p><span style="mso-spacerun:'yes';font-family:宋体;mso-bidi-font-family:'Times New Roman';font-size:7.5000pt;">real</span><span style="font-family:宋体;mso-bidi-font-family:'Times New Roman';font-size:7.5000pt;">	</span><span style="mso-spacerun:'yes';font-family:宋体;mso-bidi-font-family:'Times New Roman';font-size:7.5000pt;">0m5.188s</span></p><p><span style="mso-spacerun:'yes';font-family:宋体;mso-bidi-font-family:'Times New Roman';font-size:7.5000pt;">user</span><span style="font-family:宋体;mso-bidi-font-family:'Times New Roman';font-size:7.5000pt;">	</span><span style="mso-spacerun:'yes';font-family:宋体;mso-bidi-font-family:'Times New Roman';font-size:7.5000pt;">0m5.050s</span></p><p><span style="mso-spacerun:'yes';font-family:宋体;mso-bidi-font-family:'Times New Roman';font-size:7.5000pt;">sys</span><span style="font-family:宋体;mso-bidi-font-family:'Times New Roman';font-size:7.5000pt;">	</span><span style="mso-spacerun:'yes';font-family:宋体;mso-bidi-font-family:'Times New Roman';font-size:7.5000pt;">0m0.132s</span></p></td></tr></tbody></table><img src ="http://www.cppblog.com/changshoumeng/aggbug/214332.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/changshoumeng/" target="_blank">长寿梦</a> 2016-10-14 11:48 <a href="http://www.cppblog.com/changshoumeng/archive/2016/10/14/214332.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>HOW TO MAKE PASSWORD</title><link>http://www.cppblog.com/changshoumeng/archive/2016/08/04/214107.html</link><dc:creator>长寿梦</dc:creator><author>长寿梦</author><pubDate>Thu, 04 Aug 2016 02:56:00 GMT</pubDate><guid>http://www.cppblog.com/changshoumeng/archive/2016/08/04/214107.html</guid><wfw:comment>http://www.cppblog.com/changshoumeng/comments/214107.html</wfw:comment><comments>http://www.cppblog.com/changshoumeng/archive/2016/08/04/214107.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/changshoumeng/comments/commentRss/214107.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/changshoumeng/services/trackbacks/214107.html</trackback:ping><description><![CDATA[<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; ">&nbsp;-*-&nbsp;coding:&nbsp;utf-8&nbsp;-*-</span><span style="color: #008000; "><br />#</span><span style="color: #008000; ">HOW&nbsp;TO&nbsp;MAKE&nbsp;PASSWORD</span><span style="color: #008000; "><br />#</span><span style="color: #008000; ">BY&nbsp;ZHANGTAO</span><span style="color: #008000; "><br /></span><span style="color: #0000FF; ">import</span>&nbsp;random,sys,time<br /><br /><span style="color: #0000FF; ">def</span>&nbsp;main():<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;len(sys.argv)&nbsp;!=&nbsp;2:<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">print</span>&nbsp;<span style="color: #800000; ">"</span><span style="color: #800000; ">usage:python&nbsp;{0}&nbsp;length_of_password</span><span style="color: #800000; ">"</span>.format(sys.argv[0])<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span><br />&nbsp;&nbsp;&nbsp;&nbsp;c=sys.argv[1]<br />&nbsp;&nbsp;&nbsp;&nbsp;c=int(c)<br />&nbsp;&nbsp;&nbsp;&nbsp;a1=<span style="color: #800000; ">"</span><span style="color: #800000; ">123456789</span><span style="color: #800000; ">"</span><br />&nbsp;&nbsp;&nbsp;&nbsp;a2=<span style="color: #800000; ">"</span><span style="color: #800000; ">qwertyuipasdfghjklzxcvbnm</span><span style="color: #800000; ">"</span><br />&nbsp;&nbsp;&nbsp;&nbsp;a3=<span style="color: #800000; ">"</span><span style="color: #800000; ">QWERTYUIOPADFGHJKLZXCBNM</span><span style="color: #800000; ">"</span><br />&nbsp;&nbsp;&nbsp;&nbsp;a4=<span style="color: #800000; ">"</span><span style="color: #800000; ">@$&amp;</span><span style="color: #800000; ">"</span><br />&nbsp;&nbsp;&nbsp;&nbsp;aList=[a1,a2,a3,a4]<br />&nbsp;&nbsp;&nbsp;&nbsp;s=<span style="color: #800000; ">""</span><br />&nbsp;&nbsp;&nbsp;&nbsp;aLast=5<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>&nbsp;i&nbsp;<span style="color: #0000FF; ">in</span>&nbsp;xrange(c):<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">while</span>&nbsp;True:<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;a&nbsp;=&nbsp;random.choice(aList)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;len(a)&nbsp;!=&nbsp;aLast:<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;aLast=len(a)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;aLast&nbsp;==&nbsp;len(a4):<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;aList&nbsp;=&nbsp;[a1,&nbsp;a2,&nbsp;a3]<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">break</span><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;time.sleep(0.1)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;s&nbsp;+=&nbsp;random.choice(a)<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">print</span>&nbsp;<span style="color: #800000; ">"</span><span style="color: #800000; ">make&nbsp;password:</span><span style="color: #800000; ">"</span>,s<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">print</span>&nbsp;<span style="color: #800000; ">"</span><span style="color: #800000; ">len&nbsp;:</span><span style="color: #800000; ">"</span>,len(s)<br /><br /><br /><span style="color: #0000FF; ">if</span>&nbsp;<span style="color: #800080; ">__name__</span>==<span style="color: #800000; ">"</span><span style="color: #800000; ">__main__</span><span style="color: #800000; ">"</span>:<br />&nbsp;&nbsp;&nbsp;&nbsp;main()</div><img src ="http://www.cppblog.com/changshoumeng/aggbug/214107.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/changshoumeng/" target="_blank">长寿梦</a> 2016-08-04 10:56 <a href="http://www.cppblog.com/changshoumeng/archive/2016/08/04/214107.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>监控文件变化，通知服务更新配置</title><link>http://www.cppblog.com/changshoumeng/archive/2016/07/28/214063.html</link><dc:creator>长寿梦</dc:creator><author>长寿梦</author><pubDate>Thu, 28 Jul 2016 05:46:00 GMT</pubDate><guid>http://www.cppblog.com/changshoumeng/archive/2016/07/28/214063.html</guid><wfw:comment>http://www.cppblog.com/changshoumeng/comments/214063.html</wfw:comment><comments>http://www.cppblog.com/changshoumeng/archive/2016/07/28/214063.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/changshoumeng/comments/commentRss/214063.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/changshoumeng/services/trackbacks/214063.html</trackback:ping><description><![CDATA[<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; ">!/usr/bin/env&nbsp;python</span><span style="color: #008000; "><br />#</span><span style="color: #008000; ">&nbsp;encoding:utf-8</span><span style="color: #008000; "><br />#</span><span style="color: #008000; ">&nbsp;zhangtao&nbsp;2016/07-28</span><span style="color: #008000; "><br />#</span><span style="color: #008000; ">&nbsp;monit&nbsp;the&nbsp;change&nbsp;of&nbsp;file;</span><span style="color: #008000; "><br />#</span><span style="color: #008000; ">if&nbsp;file&nbsp;is&nbsp;modified,send&nbsp;httpGet&nbsp;request&nbsp;to&nbsp;service,then&nbsp;service&nbsp;reload&nbsp;config</span><span style="color: #008000; "><br />#</span><span style="color: #008000; ">############################################&nbsp;</span><span style="color: #008000; "><br /></span><span style="color: #0000FF; ">import</span>&nbsp;os<br /><span style="color: #0000FF; ">import</span>&nbsp;urllib2<br /><span style="color: #0000FF; ">from</span>&nbsp;urllib2&nbsp;<span style="color: #0000FF; ">import</span>&nbsp;URLError,&nbsp;HTTPError<br /><span style="color: #0000FF; ">from</span>&nbsp;&nbsp;pyinotify&nbsp;<span style="color: #0000FF; ">import</span>&nbsp;&nbsp;WatchManager,&nbsp;Notifier,&nbsp;ProcessEvent,IN_DELETE,&nbsp;IN_CREATE,IN_MODIFY<br /><span style="color: #0000FF; ">import</span>&nbsp;threading<br /><span style="color: #0000FF; ">from</span>&nbsp;&nbsp;debuglogger&nbsp;<span style="color: #0000FF; ">import</span>&nbsp;*&nbsp;<br /><br />config_urls=[<span style="color: #800000; ">"</span><span style="color: #800000; ">http://127.0.0.1:6001/chelun?query=reload1</span><span style="color: #800000; ">"</span>,<span style="color: #800000; ">"</span><span style="color: #800000; ">http://127.0.0.1:6001/chelun?query=reload2</span><span style="color: #800000; ">"</span>,<span style="color: #800000; ">"</span><span style="color: #800000; ">http://127.0.0.1:6001/chelun?query=reload3</span><span style="color: #800000; ">"</span>]<br />config_files=[<span style="color: #800000; ">"</span><span style="color: #800000; ">service:dispatch.conf</span><span style="color: #800000; ">"</span>,<span style="color: #800000; ">"</span><span style="color: #800000; ">service:proxy.conf</span><span style="color: #800000; ">"</span>,<span style="color: #800000; ">"</span><span style="color: #800000; ">service:qc.conf</span><span style="color: #800000; ">"</span>]<br />config_flags=[0,0,0]<br />config_timer=0<br />pid_file=<span style="color: #800000; ">"</span><span style="color: #800000; ">run/daemon.pid</span><span style="color: #800000; ">"</span><br /><br /><span style="color: #0000FF; ">def</span>&nbsp;doGet(url):&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;request&nbsp;=&nbsp;urllib2.Request(url)<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">try</span>:<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;response&nbsp;=&nbsp;urllib2.urlopen(request,&nbsp;timeout=10)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;page&nbsp;=&nbsp;response.read()<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;page&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">except</span>&nbsp;URLError,&nbsp;e:<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;hasattr(e,&nbsp;<span style="color: #800000; ">'</span><span style="color: #800000; ">code</span><span style="color: #800000; ">'</span>):<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;s=<span style="color: #800000; ">'</span><span style="color: #800000; ">The&nbsp;server&nbsp;couldn\</span><span style="color: #800000; ">'</span>t&nbsp;fulfill&nbsp;the&nbsp;request.&nbsp;errorcode:{0}&nbsp;url:{1}<span style="color: #800000; ">'</span><span style="color: #800000; ">.format(e.code,url)</span><span style="color: #800000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;s<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">elif</span>&nbsp;hasattr(e,&nbsp;<span style="color: #800000; ">'</span><span style="color: #800000; ">reason</span><span style="color: #800000; ">'</span>):<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;s=<span style="color: #800000; ">'</span><span style="color: #800000; ">We&nbsp;failed&nbsp;to&nbsp;reach&nbsp;a&nbsp;server.&nbsp;reason:{0}&nbsp;url:{1}</span><span style="color: #800000; ">'</span>.format(e.reason,url)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;s<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;<span style="color: #800000; ">"</span><span style="color: #800000; ">Error</span><span style="color: #800000; ">"</span><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /><br /><span style="color: #0000FF; ">def</span>&nbsp;func():<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">global</span>&nbsp;config_files<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">global</span>&nbsp;config_flags<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">global</span>&nbsp;config_urls<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">global</span>&nbsp;config_timer<br />&nbsp;&nbsp;&nbsp;&nbsp;config_timer=0<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>&nbsp;i&nbsp;<span style="color: #0000FF; ">in</span>&nbsp;xrange(3):<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;1==config_flags[i]:<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;result=doGet(config_urls[i])<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;config_flags[i]=0<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;s=<span style="color: #800000; ">"</span><span style="color: #800000; ">fileChange:{0}&nbsp;triggerUrl:{1}&nbsp;rspResult:{2}</span><span style="color: #800000; ">"</span>.format(&nbsp;config_files[i],config_urls[i],result&nbsp;&nbsp;)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Logger.dumplog(s)<br /><br /><span style="color: #0000FF; ">def</span>&nbsp;startTimer():<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">global</span>&nbsp;config_timer<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;config_timer&nbsp;!=&nbsp;0:<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span><br />&nbsp;&nbsp;&nbsp;&nbsp;config_timer=1<br />&nbsp;&nbsp;&nbsp;&nbsp;timer&nbsp;=&nbsp;threading.Timer(5,&nbsp;func)<br />&nbsp;&nbsp;&nbsp;&nbsp;timer.start()<br /><br /><span style="color: #0000FF; ">class</span>&nbsp;EventHandler(ProcessEvent):<br />&nbsp;&nbsp;<span style="color: #800000; ">"""</span><span style="color: #800000; ">事件处理</span><span style="color: #800000; ">"""</span><br />&nbsp;&nbsp;<span style="color: #0000FF; ">def</span>&nbsp;process_IN_CREATE(self,&nbsp;event):<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">#</span><span style="color: #008000; ">print&nbsp;&nbsp;&nbsp;"Create&nbsp;file:&nbsp;%s&nbsp;"&nbsp;&nbsp;%&nbsp;&nbsp;&nbsp;os.path.join(event.path,event.name)</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">pass</span><br />&nbsp;<br />&nbsp;&nbsp;<span style="color: #0000FF; ">def</span>&nbsp;process_IN_DELETE(self,&nbsp;event):<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">#</span><span style="color: #008000; ">print&nbsp;&nbsp;&nbsp;"Delete&nbsp;file:&nbsp;%s&nbsp;"&nbsp;&nbsp;%&nbsp;&nbsp;&nbsp;os.path.join(event.path,event.name)</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">pass</span><br /><br />&nbsp;&nbsp;<span style="color: #0000FF; ">def</span>&nbsp;process_IN_MODIFY(self,&nbsp;event):<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">#</span><span style="color: #008000; ">print&nbsp;&nbsp;&nbsp;"Modify&nbsp;file:&nbsp;%s&nbsp;"&nbsp;&nbsp;%&nbsp;&nbsp;&nbsp;os.path.join(event.path,event.name)</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">pass</span><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;&nbsp;&nbsp;<span style="color: #800000; ">"</span><span style="color: #800000; ">service:dispatch.conf</span><span style="color: #800000; ">"</span>&nbsp;==&nbsp;event.name:<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;config_flags[0]&nbsp;=&nbsp;1<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;startTimer()<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">elif</span>&nbsp;<span style="color: #800000; ">"</span><span style="color: #800000; ">service:proxy.conf</span><span style="color: #800000; ">"</span>&nbsp;==&nbsp;event.name:<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;config_flags[1]&nbsp;=&nbsp;1<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;startTimer()<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">elif</span>&nbsp;<span style="color: #800000; ">"</span><span style="color: #800000; ">service:qc.conf</span><span style="color: #800000; ">"</span>&nbsp;==&nbsp;event.name:<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;config_flags[2]&nbsp;=&nbsp;1<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;startTimer()<br />&nbsp;<br /><span style="color: #0000FF; ">def</span>&nbsp;FSMonitor(path=<span style="color: #800000; ">'</span><span style="color: #800000; ">.</span><span style="color: #800000; ">'</span>):<br />&nbsp;&nbsp;&nbsp;&nbsp;wm&nbsp;=&nbsp;WatchManager()&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">#</span><span style="color: #008000; ">mask&nbsp;=&nbsp;IN_DELETE&nbsp;|&nbsp;IN_CREATE&nbsp;|IN_MODIFY</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;mask&nbsp;=&nbsp;IN_MODIFY<br />&nbsp;&nbsp;&nbsp;&nbsp;notifier&nbsp;=&nbsp;Notifier(wm,&nbsp;EventHandler())<br />&nbsp;&nbsp;&nbsp;&nbsp;wm.add_watch(path,&nbsp;mask,auto_add=True,rec=True)<br />&nbsp;&nbsp;&nbsp;&nbsp;s=&nbsp;<span style="color: #800000; ">'</span><span style="color: #800000; ">now&nbsp;starting&nbsp;monitor&nbsp;%s</span><span style="color: #800000; ">'</span>%(path)<br />&nbsp;&nbsp;&nbsp;&nbsp;Logger.dumplog(s)<br />&nbsp;&nbsp;&nbsp;&nbsp;pid=str(&nbsp;os.getpid()&nbsp;)<br />&nbsp;&nbsp;&nbsp;&nbsp;with&nbsp;open(pid_file,<span style="color: #800000; ">"</span><span style="color: #800000; ">w</span><span style="color: #800000; ">"</span>)&nbsp;as&nbsp;f:<br />&nbsp;&nbsp;&nbsp;&nbsp;f.write(&nbsp;pid&nbsp;&nbsp;)&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;s=<span style="color: #800000; ">"</span><span style="color: #800000; ">pid:{0}</span><span style="color: #800000; ">"</span>.format(pid)<br />&nbsp;&nbsp;&nbsp;&nbsp;Logger.dumplog(&nbsp;s)<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">while</span>&nbsp;True:<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">try</span>:<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;notifier.process_events()<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;notifier.check_events():<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;notifier.read_events()<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">except</span>&nbsp;KeyboardInterrupt:<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;notifier.stop()<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">break</span><br /><br /><br /><span style="color: #0000FF; ">if</span>&nbsp;<span style="color: #800080; ">__name__</span>&nbsp;==&nbsp;<span style="color: #800000; ">"</span><span style="color: #800000; ">__main__</span><span style="color: #800000; ">"</span>:<br />&nbsp;&nbsp;FSMonitor(<span style="color: #800000; ">'</span><span style="color: #800000; ">/data/config/</span><span style="color: #800000; ">'</span>)</div><img src ="http://www.cppblog.com/changshoumeng/aggbug/214063.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/changshoumeng/" target="_blank">长寿梦</a> 2016-07-28 13:46 <a href="http://www.cppblog.com/changshoumeng/archive/2016/07/28/214063.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>mysql库表的导出 导入</title><link>http://www.cppblog.com/changshoumeng/archive/2016/07/27/214052.html</link><dc:creator>长寿梦</dc:creator><author>长寿梦</author><pubDate>Wed, 27 Jul 2016 02:19:00 GMT</pubDate><guid>http://www.cppblog.com/changshoumeng/archive/2016/07/27/214052.html</guid><wfw:comment>http://www.cppblog.com/changshoumeng/comments/214052.html</wfw:comment><comments>http://www.cppblog.com/changshoumeng/archive/2016/07/27/214052.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/changshoumeng/comments/commentRss/214052.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/changshoumeng/services/trackbacks/214052.html</trackback:ping><description><![CDATA[<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; ">&nbsp;-*-&nbsp;coding:&nbsp;utf-8&nbsp;-*-</span><span style="color: #008000; "><br />#</span><span style="color: #008000; ">&nbsp;http://blog.csdn.net/zcyhappy1314/article/details/8283717</span><span style="color: #008000; "><br /></span><span style="color: #0000FF; ">import</span>&nbsp;MySQLdb<br /><span style="color: #0000FF; ">import</span>&nbsp;sys<br /><span style="color: #0000FF; ">import</span>&nbsp;os<br /><span style="color: #0000FF; ">import</span>&nbsp;time<br /><br />mysql&nbsp;=&nbsp;r<span style="color: #800000; ">"</span><span style="color: #800000; ">/usr/bin/mysql</span><span style="color: #800000; ">"</span><br />mysqldump&nbsp;=&nbsp;r<span style="color: #800000; ">"</span><span style="color: #800000; ">/usr/bin/mysqldump</span><span style="color: #800000; ">"</span><br />mysql_host&nbsp;=&nbsp;<span style="color: #800000; ">"</span><span style="color: #800000; ">127.0.0.1</span><span style="color: #800000; ">"</span><br />mysql_port&nbsp;=&nbsp;3306<br />mysql_user&nbsp;=&nbsp;<span style="color: #800000; ">"</span><span style="color: #800000; ">root</span><span style="color: #800000; ">"</span><br />mysql_pwd&nbsp;=&nbsp;<span style="color: #800000; ">"</span><span style="color: #800000; ">"</span><br />save_dir&nbsp;=&nbsp;<span style="color: #800000; ">"</span><span style="color: #800000; ">temp</span><span style="color: #800000; ">"</span><br /><br /><br /><span style="color: #0000FF; ">def</span>&nbsp;mkdir(path):<br />&nbsp;&nbsp;&nbsp;&nbsp;path&nbsp;=&nbsp;path.strip()<br />&nbsp;&nbsp;&nbsp;&nbsp;path&nbsp;=&nbsp;path.rstrip(<span style="color: #800000; ">"</span><span style="color: #800000; ">\\</span><span style="color: #800000; ">"</span>)<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;<span style="color: #0000FF; ">not</span>&nbsp;os.path.exists(path):<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;os.makedirs(path)<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;path<br /><br /><span style="color: #0000FF; ">def</span>&nbsp;pause():<br />&nbsp;&nbsp;&nbsp;&nbsp;raw_input(<span style="color: #800000; ">"</span><span style="color: #800000; ">please&nbsp;enter&nbsp;to&nbsp;continue!</span><span style="color: #800000; ">"</span>)<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">print</span>&nbsp;<span style="color: #800000; ">"</span><span style="color: #800000; ">doing..</span><span style="color: #800000; ">"</span><br /><br /><br /><span style="color: #008000; ">#</span><span style="color: #008000; ">&nbsp;dump&nbsp;database&nbsp;,only&nbsp;db-struct,</span><span style="color: #008000; "><br /></span><span style="color: #0000FF; ">def</span>&nbsp;dumpDatabaseOnlyStruct(dbName=<span style="color: #800000; ">""</span>,dbCount=0):<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">print</span>&nbsp;<span style="color: #800000; ">"</span><span style="color: #800000; ">dumpDatabaseOnlyStruct:</span><span style="color: #800000; ">"</span>,dbName,dbCount<br />&nbsp;&nbsp;&nbsp;&nbsp;databases=<span style="color: #800000; ">""</span><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;dbCount==0:<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;databases=dbName<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">else</span>:<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>&nbsp;i&nbsp;<span style="color: #0000FF; ">in</span>&nbsp;xrange(dbCount):<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;databases&nbsp;+=&nbsp;<span style="color: #800000; ">"</span><span style="color: #800000; ">{0}_{1}&nbsp;</span><span style="color: #800000; ">"</span>.format(dbName,i)<br />&nbsp;&nbsp;&nbsp;&nbsp;dbFile&nbsp;=&nbsp;r<span style="color: #800000; ">"</span><span style="color: #800000; ">{0}/{1}.sql</span><span style="color: #800000; ">"</span>.format(save_dir,&nbsp;dbName)<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;os.path.exists(dbFile):<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">print</span>&nbsp;<span style="color: #800000; ">"</span><span style="color: #800000; ">remove&nbsp;file:</span><span style="color: #800000; ">"</span>,&nbsp;dbFile<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;os.remove(dbFile)<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">#</span><span style="color: #008000; ">#######################</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;cmdStr&nbsp;=&nbsp;<span style="color: #800000; ">"</span><span style="color: #800000; ">{0}&nbsp;-h{1}&nbsp;-u{2}&nbsp;-p{3}&nbsp;-d&nbsp;-B&nbsp;{4}&nbsp;&gt;&nbsp;{5}</span><span style="color: #800000; ">"</span>.format(mysqldump,&nbsp;mysql_host,&nbsp;mysql_user,&nbsp;mysql_pwd,&nbsp;databases,dbFile)<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">print</span>&nbsp;<span style="color: #800000; ">"</span><span style="color: #800000; ">------------------dumpDatabaseOnlyStruct---------------</span><span style="color: #800000; ">"</span><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">print</span>&nbsp;cmdStr<br />&nbsp;&nbsp;&nbsp;&nbsp;pause()<br />&nbsp;&nbsp;&nbsp;&nbsp;t1&nbsp;=&nbsp;time.time()<br />&nbsp;&nbsp;&nbsp;&nbsp;result&nbsp;=&nbsp;os.system(cmdStr)<br />&nbsp;&nbsp;&nbsp;&nbsp;t2&nbsp;=&nbsp;time.time()<br />&nbsp;&nbsp;&nbsp;&nbsp;t3&nbsp;=&nbsp;t2&nbsp;-&nbsp;t1<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">print</span>&nbsp;<span style="color: #800000; ">"</span><span style="color: #800000; ">dumpDatabaseOnlyStruct&nbsp;cmd:{0}&nbsp;\n&gt;&gt;result:{1}&nbsp;useTime:{2}&nbsp;file:{3}</span><span style="color: #800000; ">"</span>.format(cmdStr,&nbsp;result,&nbsp;t3,&nbsp;dbFile)<br /><br /><br /><span style="color: #008000; ">#</span><span style="color: #008000; ">&nbsp;dump&nbsp;database&nbsp;,&nbsp;db-struct,+&nbsp;db-data</span><span style="color: #008000; "><br />#</span><span style="color: #008000; ">db_im_msg_record</span><span style="color: #008000; "><br /></span><span style="color: #0000FF; ">def</span>&nbsp;dumpDatabaseStructAndData(dbName=<span style="color: #800000; ">""</span>,dbCount=0):<br />&nbsp;&nbsp;&nbsp;&nbsp;databases=<span style="color: #800000; ">""</span><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;dbCount==0:<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;databases=dbName<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">else</span>:<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>&nbsp;i&nbsp;<span style="color: #0000FF; ">in</span>&nbsp;xrange(dbCount):<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;databases&nbsp;+=&nbsp;<span style="color: #800000; ">"</span><span style="color: #800000; ">{0}_{1}&nbsp;</span><span style="color: #800000; ">"</span>.format(dbName,i)<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;dbFile&nbsp;=&nbsp;r<span style="color: #800000; ">"</span><span style="color: #800000; ">{0}/{1}.sql</span><span style="color: #800000; ">"</span>.format(save_dir,&nbsp;dbName)<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;os.path.exists(dbFile):<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">print</span>&nbsp;<span style="color: #800000; ">"</span><span style="color: #800000; ">remove&nbsp;file:</span><span style="color: #800000; ">"</span>,&nbsp;dbFile<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;os.remove(dbFile)<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">#</span><span style="color: #008000; ">#######################</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;cmdStr&nbsp;=&nbsp;<span style="color: #800000; ">"</span><span style="color: #800000; ">{0}&nbsp;-h{1}&nbsp;-u{2}&nbsp;-p{3}&nbsp;-B&nbsp;{4}&nbsp;&gt;&nbsp;{5}</span><span style="color: #800000; ">"</span>.format(mysqldump,&nbsp;mysql_host,&nbsp;mysql_user,&nbsp;mysql_pwd,&nbsp;databases,&nbsp;dbFile)<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">print</span>&nbsp;<span style="color: #800000; ">"</span><span style="color: #800000; ">------------------dumpDatabaseStructAndData---------------</span><span style="color: #800000; ">"</span><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">print</span>&nbsp;cmdStr<br />&nbsp;&nbsp;&nbsp;&nbsp;pause()<br />&nbsp;&nbsp;&nbsp;&nbsp;t1&nbsp;=&nbsp;time.time()<br />&nbsp;&nbsp;&nbsp;&nbsp;result&nbsp;=&nbsp;os.system(cmdStr)<br />&nbsp;&nbsp;&nbsp;&nbsp;t2&nbsp;=&nbsp;time.time()<br />&nbsp;&nbsp;&nbsp;&nbsp;t3&nbsp;=&nbsp;t2&nbsp;-&nbsp;t1<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">print</span>&nbsp;<span style="color: #800000; ">"</span><span style="color: #800000; ">dumpDatabaseOnlyStruct&nbsp;cmd:{0}&nbsp;\n&gt;&gt;result:{1}&nbsp;useTime:{2}&nbsp;file:{3}</span><span style="color: #800000; ">"</span>.format(cmdStr,&nbsp;result,&nbsp;t3,&nbsp;dbFile)<br /><br /><br /><span style="color: #008000; ">#</span><span style="color: #008000; ">&nbsp;recover&nbsp;from&nbsp;mysql_dump_sql_file</span><span style="color: #008000; "><br /></span><span style="color: #0000FF; ">def</span>&nbsp;recoverMysqlFromDumpfile(dbName):<br />&nbsp;&nbsp;&nbsp;&nbsp;dbFile&nbsp;=&nbsp;r<span style="color: #800000; ">"</span><span style="color: #800000; ">{0}/{1}.sql</span><span style="color: #800000; ">"</span>.format(save_dir,&nbsp;dbName)<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;<span style="color: #0000FF; ">not</span>&nbsp;os.path.exists(dbFile):<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">print</span>&nbsp;<span style="color: #800000; ">"</span><span style="color: #800000; ">recoverMysqlFromDumpfile,but&nbsp;not&nbsp;find&nbsp;file:{0}</span><span style="color: #800000; ">"</span>.format(dbFile)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sys.exit(-1)<br />&nbsp;&nbsp;&nbsp;&nbsp;cmdStr&nbsp;=&nbsp;<span style="color: #800000; ">'</span><span style="color: #800000; ">{0}&nbsp;-h{1}&nbsp;-u{2}&nbsp;-p{3}&nbsp;-e&nbsp;"source&nbsp;{4}"</span><span style="color: #800000; ">'</span>.format(mysql,&nbsp;mysql_host,&nbsp;mysql_user,&nbsp;mysql_pwd,&nbsp;dbFile)<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">print</span>&nbsp;<span style="color: #800000; ">"</span><span style="color: #800000; ">------------------recoverMysqlFromDumpfile---------------</span><span style="color: #800000; ">"</span><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">print</span>&nbsp;cmdStr<br />&nbsp;&nbsp;&nbsp;&nbsp;pause()<br />&nbsp;&nbsp;&nbsp;&nbsp;t1&nbsp;=&nbsp;time.time()<br />&nbsp;&nbsp;&nbsp;&nbsp;result&nbsp;=&nbsp;os.system(cmdStr)<br />&nbsp;&nbsp;&nbsp;&nbsp;t2&nbsp;=&nbsp;time.time()<br />&nbsp;&nbsp;&nbsp;&nbsp;t3&nbsp;=&nbsp;t2&nbsp;-&nbsp;t1<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">print</span>&nbsp;<span style="color: #800000; ">"</span><span style="color: #800000; ">recoverMysqlFromDumpfile&nbsp;cmd:{0}&nbsp;result:{1}&nbsp;useTime:{2}</span><span style="color: #800000; ">"</span>.format(cmdStr,&nbsp;result,&nbsp;t3)<br /><br /><br /><span style="color: #0000FF; ">def</span>&nbsp;dumpMysqlDB():<br />&nbsp;&nbsp;&nbsp;&nbsp;dumpDatabaseOnlyStruct(<span style="color: #800000; ">"</span><span style="color: #800000; ">db_im_msg_record</span><span style="color: #800000; ">"</span>,8)<br />&nbsp;&nbsp;&nbsp;&nbsp;dumpDatabaseOnlyStruct(<span style="color: #800000; ">"</span><span style="color: #800000; ">db_im_user_msg</span><span style="color: #800000; ">"</span>,&nbsp;4)<br />&nbsp;&nbsp;&nbsp;&nbsp;dumpDatabaseOnlyStruct(<span style="color: #800000; ">"</span><span style="color: #800000; ">db_im_group</span><span style="color: #800000; ">"</span>,&nbsp;8)<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">#</span><span style="color: #008000; ">dumpDatabaseStructAndData("db_im_msg_record",8)</span><span style="color: #008000; "><br /></span><br /><br /><span style="color: #0000FF; ">def</span>&nbsp;recoverMysqlDB():<br />&nbsp;&nbsp;&nbsp;&nbsp;recoverMysqlFromDumpfile(<span style="color: #800000; ">"</span><span style="color: #800000; ">db_im_msg_record</span><span style="color: #800000; ">"</span>)<br />&nbsp;&nbsp;&nbsp;&nbsp;recoverMysqlFromDumpfile(<span style="color: #800000; ">"</span><span style="color: #800000; ">db_im_user_msg</span><span style="color: #800000; ">"</span>)<br />&nbsp;&nbsp;&nbsp;&nbsp;recoverMysqlFromDumpfile(<span style="color: #800000; ">"</span><span style="color: #800000; ">db_im_group</span><span style="color: #800000; ">"</span>)<br /><br /><span style="color: #0000FF; ">if</span>&nbsp;<span style="color: #800080; ">__name__</span>&nbsp;==&nbsp;<span style="color: #800000; ">"</span><span style="color: #800000; ">__main__</span><span style="color: #800000; ">"</span>:<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">print</span>&nbsp;<span style="color: #800000; ">"</span><span style="color: #800000; ">-------begin--------</span><span style="color: #800000; ">"</span><br />&nbsp;&nbsp;&nbsp;&nbsp;mkdir(save_dir)<br />&nbsp;&nbsp;&nbsp;&nbsp;dumpMysqlDB()<br />&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">#</span><span style="color: #008000; ">&nbsp;recoverMysqlDB()</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">print</span>&nbsp;<span style="color: #800000; ">"</span><span style="color: #800000; ">-------done---------</span><span style="color: #800000; ">"</span></div><img src ="http://www.cppblog.com/changshoumeng/aggbug/214052.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/changshoumeng/" target="_blank">长寿梦</a> 2016-07-27 10:19 <a href="http://www.cppblog.com/changshoumeng/archive/2016/07/27/214052.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>python实现的LAN文件传输服务</title><link>http://www.cppblog.com/changshoumeng/archive/2016/06/19/213755.html</link><dc:creator>长寿梦</dc:creator><author>长寿梦</author><pubDate>Sun, 19 Jun 2016 03:20:00 GMT</pubDate><guid>http://www.cppblog.com/changshoumeng/archive/2016/06/19/213755.html</guid><wfw:comment>http://www.cppblog.com/changshoumeng/comments/213755.html</wfw:comment><comments>http://www.cppblog.com/changshoumeng/archive/2016/06/19/213755.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cppblog.com/changshoumeng/comments/commentRss/213755.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/changshoumeng/services/trackbacks/213755.html</trackback:ping><description><![CDATA[<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; ">&nbsp;-*-&nbsp;coding:&nbsp;utf-8&nbsp;-*-</span><span style="color: #008000; "><br />#</span><span style="color: #008000; ">Give&nbsp;wisdom&nbsp;to&nbsp;the&nbsp;machine,By&nbsp;ChangShouMeng\</span><span style="color: #008000; "><br />#</span><span style="color: #008000; ">定义传输的上下文，client与server通用的上下文</span><span style="color: #008000; "><br /></span><span style="color: #0000FF; ">import</span>&nbsp;time<br /><span style="color: #0000FF; ">import</span>&nbsp;os,sys,traceback<br /><br /><span style="color: #0000FF; ">class</span>&nbsp;FileTransferContext(object):<br />&nbsp;&nbsp;&nbsp;&nbsp;TRANSFER_TYPE_SEND=0<br />&nbsp;&nbsp;&nbsp;&nbsp;TRANSFER_TYPE_RECV=1<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">def</span>&nbsp;<span style="color: #800080; ">__init__</span>(self):<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.transferType=0<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.filePath&nbsp;=&nbsp;<span style="color: #800000; ">""</span>&nbsp;&nbsp;<span style="color: #008000; ">#</span><span style="color: #008000; ">&nbsp;absolute&nbsp;path,send</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.fileTotalSize&nbsp;=&nbsp;0<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.fileChunkSize=1024<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.contextName=<span style="color: #800000; ">"</span><span style="color: #800000; ">-</span><span style="color: #800000; ">"</span><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.fileBaseName=<span style="color: #800000; ">""</span><span style="color: #008000; ">#</span><span style="color: #008000; ">only&nbsp;filename,recv</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.fileHandle&nbsp;=&nbsp;None<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.transferedSize=0<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.transferMsgId&nbsp;=&nbsp;0<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.transferSeqNum&nbsp;=&nbsp;0<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.transferSeqNumUpLimit&nbsp;=&nbsp;0<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.transferSeqChunkSize&nbsp;=&nbsp;10<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.transferBeginTime&nbsp;=&nbsp;0<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.tmpdir=<span style="color: #800000; ">"</span><span style="color: #800000; ">temp</span><span style="color: #800000; ">"</span><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.workStatus=0<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">def</span>&nbsp;<span style="color: #800080; ">__del__</span>(self):<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.finiTransInfo()<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">def</span>&nbsp;initTransferInfo(self):<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">print</span>&nbsp;<span style="color: #800000; ">"</span><span style="color: #800000; ">---begin----init&nbsp;transfer&nbsp;info</span><span style="color: #800000; ">"</span><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">try</span>:<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;&nbsp;self.transferType==&nbsp;FileTransferContext.TRANSFER_TYPE_SEND:<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.contextName=<span style="color: #800000; ">"</span><span style="color: #800000; ">snd&gt;&gt;</span><span style="color: #800000; ">"</span><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.fileTotalSize&nbsp;=&nbsp;os.path.getsize(self.filePath)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.fileBaseName&nbsp;=&nbsp;os.path.basename(self.filePath)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.fileHandle=open(self.filePath,<span style="color: #800000; ">'</span><span style="color: #800000; ">rb</span><span style="color: #800000; ">'</span>)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">else</span>:<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.contextName=<span style="color: #800000; ">"</span><span style="color: #800000; ">rcv&lt;&lt;</span><span style="color: #800000; ">"</span><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tmp_fn&nbsp;=&nbsp;r<span style="color: #800000; ">"</span><span style="color: #800000; ">{0}/{1}_tmp</span><span style="color: #800000; ">"</span>.format(self.tmpdir,&nbsp;self.fileBaseName)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.fileHandle=open(tmp_fn,<span style="color: #800000; ">'</span><span style="color: #800000; ">wb</span><span style="color: #800000; ">'</span>)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">print</span>&nbsp;tmp_fn<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">assert</span>&nbsp;self.fileHandle<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.transferBeginTime=&nbsp;(int)(time.time())<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.transferedSize=0<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.transferSeqNumUpLimit=self.fileTotalSize/self.fileChunkSize&nbsp;+&nbsp;1<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.workStatus=1<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">print</span>&nbsp;<span style="color: #800000; ">"</span><span style="color: #800000; ">initTransferInfo&nbsp;{0}&nbsp;fileName:{1}&nbsp;fileSize:{2}</span><span style="color: #800000; ">"</span>.format(self.contextName,self.fileBaseName,self.fileTotalSize)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;True<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">except</span>:<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">print</span>&nbsp;<span style="color: #800000; ">"</span><span style="color: #800000; ">initTransferinfo&nbsp;failed:</span><span style="color: #800000; ">"</span>,traceback.print_exc()<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">print</span>&nbsp;<span style="color: #800000; ">"</span><span style="color: #800000; ">init&nbsp;filepath&nbsp;is:</span><span style="color: #800000; ">"</span>,self.filePath<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;False<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">def</span>&nbsp;&nbsp;finiTransInfo(self):<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;<span style="color: #0000FF; ">not</span>&nbsp;self.fileHandle:<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">try</span>:<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;self.transferType&nbsp;==&nbsp;FileTransferContext.TRANSFER_TYPE_RECV:<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.fileHandle.flush()<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.fileHandle.close()<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.fileHandle=None<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">except</span>:<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">print</span>&nbsp;<span style="color: #800000; ">"</span><span style="color: #800000; ">finiTransInfo&nbsp;failed:</span><span style="color: #800000; ">"</span>,&nbsp;traceback.print_exc()<br /><br /><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">def</span>&nbsp;traceTransferInfo(self):<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;self.transferedSize&nbsp;==&nbsp;self.fileTotalSize:<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.workStatus=2<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;self.transferSeqNum&nbsp;&gt;&nbsp;5&nbsp;<span style="color: #0000FF; ">and</span>&nbsp;(self.transferSeqNum&nbsp;%&nbsp;self.transferSeqChunkSize)&nbsp;!=&nbsp;0:<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;useTime&nbsp;&nbsp;=&nbsp;int(time.time())&nbsp;-&nbsp;self.transferBeginTime<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;speed&nbsp;=&nbsp;<span style="color: #800000; ">""</span><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;progress&nbsp;=&nbsp;float(self.transferedSize)&nbsp;/&nbsp;float(self.fileTotalSize)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;useTime&nbsp;&gt;&nbsp;0:<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;speedint&nbsp;=&nbsp;float(self.transferedSize)&nbsp;/&nbsp;float(useTime&nbsp;*&nbsp;1024)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;speedint&nbsp;&gt;=&nbsp;1024:<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;speedint=&nbsp;&nbsp;float(speedint)/&nbsp;float(1024)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;speed=<span style="color: #800000; ">"</span><span style="color: #800000; ">{:.2f}mb/s</span><span style="color: #800000; ">"</span>.format(speedint)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">else</span>:<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;speed=<span style="color: #800000; ">"</span><span style="color: #800000; ">{:.2f}kb/s</span><span style="color: #800000; ">"</span>.format(speedint)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">pass</span><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">print</span>&nbsp;<span style="color: #800000; ">"</span><span style="color: #800000; ">{0}msgid:{1}&nbsp;total:{2}byte&nbsp;tranfered:{3}byte&nbsp;speed:{4}&nbsp;progress:{5:.2f}&nbsp;use-time:{6}s</span><span style="color: #800000; ">"</span>.format(<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.contextName,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.transferMsgId,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.fileTotalSize,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.transferedSize,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;speed,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;progress,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;useTime)<br /><br /><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">def</span>&nbsp;readBuffer(self):<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">try</span>:<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;self.fileHandle.read(self.fileChunkSize)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">except</span>:<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">print</span>&nbsp;<span style="color: #800000; ">"</span><span style="color: #800000; ">readBuffer&nbsp;err:</span><span style="color: #800000; ">"</span>,traceback.print_exc()<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;<span style="color: #800000; ">""</span><br /><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">def</span>&nbsp;writeBuffer(self,buffer):<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">try</span>:<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.fileHandle.write(buffer)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(self.transferSeqNum&nbsp;%&nbsp;self.transferSeqChunkSize)&nbsp;==&nbsp;0:<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.fileHandle.flush()<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.transferedSize&nbsp;+=&nbsp;len(buffer)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">#</span><span style="color: #008000; ">print&nbsp;self.transferedSize,self.fileTotalSize</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;self.transferedSize&nbsp;==&nbsp;self.fileTotalSize:<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.fileHandle.flush()<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.fileHandle.close()<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.fileHandle=None<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tmp_fn&nbsp;=&nbsp;<span style="color: #800000; ">"</span><span style="color: #800000; ">{0}/{1}_tmp</span><span style="color: #800000; ">"</span>.format(self.tmpdir,&nbsp;self.fileBaseName)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;real_fn&nbsp;=&nbsp;<span style="color: #800000; ">"</span><span style="color: #800000; ">{0}/{1}</span><span style="color: #800000; ">"</span>.format(self.tmpdir,&nbsp;self.fileBaseName)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">print</span>&nbsp;<span style="color: #800000; ">"</span><span style="color: #800000; ">-</span><span style="color: #800000; ">"</span>*80<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">print</span>&nbsp;<span style="color: #800000; ">"</span><span style="color: #800000; ">tmp_fn:</span><span style="color: #800000; ">"</span>,tmp_fn<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">print</span>&nbsp;<span style="color: #800000; ">"</span><span style="color: #800000; ">real_fn:</span><span style="color: #800000; ">"</span>,real_fn<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;os.path.exists(real_fn):<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;os.remove(real_fn)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;os.rename(tmp_fn,real_fn)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.workStatus=2<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">except</span>:<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">print</span>&nbsp;<span style="color: #800000; ">"</span><span style="color: #800000; ">writeBuffer&nbsp;err:</span><span style="color: #800000; ">"</span>,traceback.print_exc()<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span><br /><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">def</span>&nbsp;isFinished(self):<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;self.workStatus&nbsp;&lt;=&nbsp;1:<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;False<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;True<br /></div>--<br /><br />代码下载： &nbsp;https://github.com/changshoumeng/python_local-network_file-transfer-service<br />--<br /><br /><br /><br />--<img src ="http://www.cppblog.com/changshoumeng/aggbug/213755.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/changshoumeng/" target="_blank">长寿梦</a> 2016-06-19 11:20 <a href="http://www.cppblog.com/changshoumeng/archive/2016/06/19/213755.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>破解某城市的验证</title><link>http://www.cppblog.com/changshoumeng/archive/2016/06/14/213710.html</link><dc:creator>长寿梦</dc:creator><author>长寿梦</author><pubDate>Tue, 14 Jun 2016 12:35:00 GMT</pubDate><guid>http://www.cppblog.com/changshoumeng/archive/2016/06/14/213710.html</guid><wfw:comment>http://www.cppblog.com/changshoumeng/comments/213710.html</wfw:comment><comments>http://www.cppblog.com/changshoumeng/archive/2016/06/14/213710.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cppblog.com/changshoumeng/comments/commentRss/213710.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/changshoumeng/services/trackbacks/213710.html</trackback:ping><description><![CDATA[<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; ">&nbsp;-*-&nbsp;coding:&nbsp;utf-8&nbsp;-*-</span><span style="color: #008000; "><br />#</span><span style="color: #008000; ">zhangtao&nbsp;2016/06/14</span><span style="color: #008000; "><br />#</span><span style="color: #008000; ">QQ&nbsp;406878851</span><span style="color: #008000; "><br /></span><br /><span style="color: #0000FF; ">from</span>&nbsp;PIL&nbsp;<span style="color: #0000FF; ">import</span>&nbsp;*<br /><span style="color: #0000FF; ">import</span>&nbsp;&nbsp;Image<br /><span style="color: #0000FF; ">import</span>&nbsp;numpy&nbsp;as&nbsp;np<br /><span style="color: #0000FF; ">import</span>&nbsp;os<br /><br /><span style="color: #008000; ">#</span><span style="color: #008000; ">#######################################################################################</span><span style="color: #008000; "><br />#</span><span style="color: #008000; ">#######################################################################################</span><span style="color: #008000; "><br /></span><span style="color: #0000FF; ">class</span>&nbsp;PixHelper(object):<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">def</span>&nbsp;<span style="color: #800080; ">__init__</span>(self&nbsp;,(r&nbsp;,g&nbsp;,b)):<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.&nbsp;r&nbsp;=r<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.&nbsp;g&nbsp;=g<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.&nbsp;b&nbsp;=b<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">def</span>&nbsp;grayVal(self):<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;(self.r&nbsp;*&nbsp;30&nbsp;+self.g&nbsp;*&nbsp;59&nbsp;+&nbsp;self.b&nbsp;*&nbsp;11)&nbsp;/&nbsp;100<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">def</span>&nbsp;validPix(self):<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;self.isBackgroundPix():<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;self.grayVal()&nbsp;!=&nbsp;255:<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">pass</span><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">#</span><span style="color: #008000; ">&nbsp;print&nbsp;self.grayVal()</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;255<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;0<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">def</span>&nbsp;isBackgroundPix(self):<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;background&nbsp;=&nbsp;PixHelper((150,&nbsp;150,&nbsp;150))<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;background_grayVal&nbsp;=&nbsp;background.grayVal()<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;self.grayVal()&nbsp;&gt;&nbsp;background_grayVal<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">def</span>&nbsp;isNeetPix(self):<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;False&nbsp;==&nbsp;self.isBackgroundPix()<br /><br /><span style="color: #008000; ">#</span><span style="color: #008000; ">#######################################################################################</span><span style="color: #008000; "><br />#</span><span style="color: #008000; ">#######################################################################################</span><span style="color: #008000; "><br /></span><span style="color: #0000FF; ">class</span>&nbsp;ImageHelper(object):<br />&nbsp;&nbsp;&nbsp;&nbsp;model_file=<span style="color: #800000; ">"</span><span style="color: #800000; ">svm.model</span><span style="color: #800000; ">"</span><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">def</span>&nbsp;<span style="color: #800080; ">__init__</span>(self,&nbsp;image):<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.image&nbsp;=&nbsp;image<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.width&nbsp;=&nbsp;image.size[0]<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.height&nbsp;=&nbsp;image.size[1]<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.subWidth=16<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.subHeight=self.height<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">#</span><span style="color: #008000; ">二值图</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">def</span>&nbsp;convertGrayImage(self):<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>&nbsp;x&nbsp;<span style="color: #0000FF; ">in</span>&nbsp;xrange(self.width):<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>&nbsp;y&nbsp;<span style="color: #0000FF; ">in</span>&nbsp;xrange(self.height):<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pix&nbsp;=&nbsp;self.image.getpixel((x,&nbsp;y))<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pixhelper&nbsp;=&nbsp;PixHelper(pix)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pix2&nbsp;=&nbsp;pixhelper.validPix()<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.image.putpixel((x,&nbsp;y),&nbsp;(pix2,&nbsp;pix2,&nbsp;pix2))<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">def</span>&nbsp;fixCropSubImages(self):<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;boxList&nbsp;=&nbsp;[]<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;box0&nbsp;=&nbsp;(7,&nbsp;0,&nbsp;20,&nbsp;self.height)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;box1&nbsp;=&nbsp;(20,&nbsp;0,&nbsp;34,&nbsp;self.height)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;box2&nbsp;=&nbsp;(34,&nbsp;0,&nbsp;46,&nbsp;self.height)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;box3&nbsp;=&nbsp;(46,&nbsp;0,&nbsp;59,&nbsp;self.height)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;box4&nbsp;=&nbsp;(59,&nbsp;0,&nbsp;72,&nbsp;self.height)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;box5&nbsp;=&nbsp;(72,&nbsp;0,&nbsp;88,&nbsp;self.height)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;boxList.append(box0)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;boxList.append(box1)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;boxList.append(box2)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;boxList.append(box3)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;boxList.append(box4)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;boxList.append(box5)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;subList&nbsp;=&nbsp;[]<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>&nbsp;box&nbsp;<span style="color: #0000FF; ">in</span>&nbsp;boxList:<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sub&nbsp;=&nbsp;self.image.crop(box)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;subList.append(sub)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;subList<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">def</span>&nbsp;getRect(self,block):<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;minx&nbsp;=&nbsp;self.width<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;maxx&nbsp;=&nbsp;0<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;miny&nbsp;=&nbsp;self.height<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;maxy&nbsp;=&nbsp;0<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>&nbsp;p&nbsp;<span style="color: #0000FF; ">in</span>&nbsp;block:<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">#</span><span style="color: #008000; ">&nbsp;print&nbsp;p</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;minx&nbsp;=&nbsp;min(minx,&nbsp;p[0])<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;maxx&nbsp;=&nbsp;max(maxx,&nbsp;p[0])<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;miny&nbsp;=&nbsp;min(miny,&nbsp;p[1])<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;maxy&nbsp;=&nbsp;max(maxy,&nbsp;p[1])<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;(minx,&nbsp;miny,&nbsp;maxx&nbsp;-&nbsp;minx&nbsp;+&nbsp;1,&nbsp;maxy&nbsp;-&nbsp;miny&nbsp;+&nbsp;1)<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">def</span>&nbsp;getValidPoints(self):<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;points&nbsp;=&nbsp;list()<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>&nbsp;x&nbsp;<span style="color: #0000FF; ">in</span>&nbsp;xrange(self.width):<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>&nbsp;y&nbsp;<span style="color: #0000FF; ">in</span>&nbsp;xrange(self.height):<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;p&nbsp;=&nbsp;(x,&nbsp;y)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pix&nbsp;=&nbsp;self.image.getpixel(p)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pixhelper&nbsp;=&nbsp;PixHelper(pix)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;pixhelper.isNeetPix():<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;points.append(p)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">pass</span><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;points<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">def</span>&nbsp;getDataListWithOffset(self):<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;points&nbsp;=&nbsp;self.getValidPoints()<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(left,&nbsp;top,&nbsp;width,&nbsp;height)&nbsp;=&nbsp;self.getRect(points)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dataList&nbsp;=&nbsp;list()<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">#</span><span style="color: #008000; ">&nbsp;if&nbsp;1&nbsp;==&nbsp;0:</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">#</span><span style="color: #008000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;data&nbsp;=&nbsp;self.getData()</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">#</span><span style="color: #008000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dataList.append(data)</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">#</span><span style="color: #008000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;dataList</span><span style="color: #008000; "><br /></span><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;xBegin&nbsp;=&nbsp;0&nbsp;-&nbsp;left<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;xEnd&nbsp;=&nbsp;self.subWidth&nbsp;-&nbsp;(left&nbsp;+&nbsp;width)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;yBegin&nbsp;=&nbsp;0&nbsp;-&nbsp;top<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;yEnd&nbsp;=&nbsp;self.subHeight&nbsp;-&nbsp;(top&nbsp;+&nbsp;height)<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;h_i&nbsp;=&nbsp;0<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;w_i&nbsp;=&nbsp;0<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">#</span><span style="color: #008000; ">&nbsp;print&nbsp;"######################"</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>&nbsp;h_i&nbsp;<span style="color: #0000FF; ">in</span>&nbsp;xrange(yBegin,&nbsp;yEnd,&nbsp;1):<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>&nbsp;w_i&nbsp;<span style="color: #0000FF; ">in</span>&nbsp;xrange(xBegin,&nbsp;xEnd,&nbsp;1):<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;data&nbsp;=&nbsp;[0]&nbsp;*&nbsp;(self.subWidth&nbsp;*&nbsp;self.subHeight)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>&nbsp;p&nbsp;<span style="color: #0000FF; ">in</span>&nbsp;points:<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(x,&nbsp;y)&nbsp;=&nbsp;p<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(x2,&nbsp;y2)&nbsp;=&nbsp;(x&nbsp;+&nbsp;w_i,&nbsp;y&nbsp;+&nbsp;h_i)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;x2&nbsp;&gt;=&nbsp;self.subWidth&nbsp;&nbsp;<span style="color: #0000FF; ">or</span>&nbsp;y2&nbsp;&gt;=&nbsp;self.subHeight:<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">continue</span><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;idx&nbsp;=&nbsp;x2&nbsp;+&nbsp;y2&nbsp;*&nbsp;self.subWidth<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;data[idx]&nbsp;=&nbsp;1<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dataList.append(data)<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;dataList<br /><br /><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">def</span>&nbsp;getData(self):<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;points&nbsp;=&nbsp;self.getValidPoints()<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(left,&nbsp;top,&nbsp;width,&nbsp;height)&nbsp;=&nbsp;self.getRect(points)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;data&nbsp;=&nbsp;[0]&nbsp;*&nbsp;(self.subWidth&nbsp;*&nbsp;self.subHeight)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>&nbsp;p&nbsp;<span style="color: #0000FF; ">in</span>&nbsp;points:<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(x,&nbsp;y)&nbsp;=&nbsp;p<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;idx&nbsp;=&nbsp;x&nbsp;+&nbsp;y&nbsp;*&nbsp;self.subWidth<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;data[idx]&nbsp;=&nbsp;1<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;data</div><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: #008000; ">#</span><span style="color: #008000; ">&nbsp;-*-&nbsp;coding:&nbsp;utf-8&nbsp;-*-</span><span style="color: #008000; "><br />#</span><span style="color: #008000; ">zhangtao&nbsp;2016/06/14</span><span style="color: #008000; "><br />#</span><span style="color: #008000; ">QQ&nbsp;406878851</span><span style="color: #008000; "><br /></span><span style="color: #0000FF; ">import</span>&nbsp;os<br /><span style="color: #0000FF; ">import</span>&nbsp;numpy&nbsp;as&nbsp;np<br /><span style="color: #0000FF; ">import</span>&nbsp;mlpy<br /><span style="color: #0000FF; ">import</span>&nbsp;sys<br /><span style="color: #0000FF; ">import</span>&nbsp;time<br /><span style="color: #0000FF; ">from</span>&nbsp;PIL&nbsp;<span style="color: #0000FF; ">import</span>&nbsp;Image<br /><span style="color: #0000FF; ">from</span>&nbsp;ImageHelper&nbsp;<span style="color: #0000FF; ">import</span>&nbsp;*<br /><span style="color: #0000FF; ">from</span>&nbsp;common&nbsp;<span style="color: #0000FF; ">import</span>&nbsp;*<br /><br /><span style="color: #0000FF; ">def</span>&nbsp;checkSampleSucc(train_label,&nbsp;test_result):<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;len(train_label)&nbsp;!=&nbsp;len(test_result):<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">print</span>&nbsp;<span style="color: #800000; ">"</span><span style="color: #800000; ">checkSampleSucc&nbsp;shape&nbsp;no&nbsp;match</span><span style="color: #800000; ">"</span><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span><br /><br />&nbsp;&nbsp;&nbsp;&nbsp;total&nbsp;=&nbsp;len(train_label)<br />&nbsp;&nbsp;&nbsp;&nbsp;succ&nbsp;=&nbsp;0<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>&nbsp;i&nbsp;<span style="color: #0000FF; ">in</span>&nbsp;xrange(total):<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;item1&nbsp;=&nbsp;test_result[i]<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;item2&nbsp;=&nbsp;train_label[i]<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;int(item1)&nbsp;==&nbsp;int(item2):<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;succ&nbsp;+=&nbsp;1<br />&nbsp;&nbsp;&nbsp;&nbsp;succRate&nbsp;=&nbsp;float(succ)&nbsp;/&nbsp;float(total)<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">print</span>&nbsp;<span style="color: #800000; ">"</span><span style="color: #800000; ">checkSampleSucc&nbsp;:&nbsp;</span><span style="color: #800000; ">"</span>,&nbsp;(succ,&nbsp;total),&nbsp;succRate<br /><br /><br /><br /><span style="color: #0000FF; ">def</span>&nbsp;getDataListFromFile(srcfilepath):<br />&nbsp;&nbsp;&nbsp;&nbsp;im&nbsp;=&nbsp;Image.open(srcfilepath).convert(<span style="color: #800000; ">'</span><span style="color: #800000; ">RGB</span><span style="color: #800000; ">'</span>)<br />&nbsp;&nbsp;&nbsp;&nbsp;helper&nbsp;=&nbsp;ImageHelper(im)<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;helper.getDataListWithOffset()<br /><br /><br /><br /><br /><span style="color: #0000FF; ">def</span>&nbsp;loadSampleFromDir(label,&nbsp;srcdir,&nbsp;x,&nbsp;y):<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">print</span>&nbsp;<span style="color: #800000; ">"</span><span style="color: #800000; ">load&nbsp;..</span><span style="color: #800000; ">"</span>,&nbsp;srcdir<br />&nbsp;&nbsp;&nbsp;&nbsp;srcfiles&nbsp;=&nbsp;os.listdir(srcdir)<br />&nbsp;&nbsp;&nbsp;&nbsp;tm&nbsp;=&nbsp;int(time.time())<br />&nbsp;&nbsp;&nbsp;&nbsp;k&nbsp;=&nbsp;0<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>&nbsp;srcfilename&nbsp;<span style="color: #0000FF; ">in</span>&nbsp;srcfiles:<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;srcfilepath&nbsp;=&nbsp;os.path.join(srcdir,&nbsp;srcfilename)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;srcfilename[0]&nbsp;==&nbsp;<span style="color: #800000; ">'</span><span style="color: #800000; ">a</span><span style="color: #800000; ">'</span>:<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">pass</span><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">#</span><span style="color: #008000; ">&nbsp;continue</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">#</span><span style="color: #008000; ">&nbsp;print&nbsp;srcfilename</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dataList&nbsp;=&nbsp;getDataListFromFile(srcfilepath)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;idx&nbsp;=&nbsp;0<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>&nbsp;data&nbsp;<span style="color: #0000FF; ">in</span>&nbsp;dataList:<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;x.append(data)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;y.append(label)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">#</span><span style="color: #008000; ">&nbsp;createImageFromData(srcdir,data,idx)</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;idx&nbsp;+=&nbsp;1<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;newfilename&nbsp;=&nbsp;<span style="color: #800000; ">"</span><span style="color: #800000; ">{0}\\{1}.png</span><span style="color: #800000; ">"</span>.format(srcdir,&nbsp;k&nbsp;+&nbsp;tm)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;os.rename(srcfilepath,newfilename)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;k&nbsp;+=&nbsp;1<br /><br /><br /><br /><span style="color: #0000FF; ">def</span>&nbsp;loadSampleFiles():<br />&nbsp;&nbsp;&nbsp;&nbsp;x&nbsp;=&nbsp;[]<br />&nbsp;&nbsp;&nbsp;&nbsp;y&nbsp;=&nbsp;[]<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;label_count&nbsp;=&nbsp;0<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>&nbsp;c&nbsp;<span style="color: #0000FF; ">in</span>&nbsp;xrange(ord(<span style="color: #800000; ">'</span><span style="color: #800000; ">a</span><span style="color: #800000; ">'</span>),&nbsp;ord(<span style="color: #800000; ">'</span><span style="color: #800000; ">z</span><span style="color: #800000; ">'</span>)&nbsp;+&nbsp;1,&nbsp;1):<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;c&nbsp;==&nbsp;ord(<span style="color: #800000; ">'</span><span style="color: #800000; ">i</span><span style="color: #800000; ">'</span>):<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">pass</span><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">#</span><span style="color: #008000; ">continue</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;srcdir&nbsp;=&nbsp;r<span style="color: #800000; ">'</span><span style="color: #800000; ">sample\{0}</span><span style="color: #800000; ">'</span>.format(chr(c))<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">#</span><span style="color: #008000; ">mkdir(srcdir)</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;loadSampleFromDir(c,&nbsp;srcdir,&nbsp;x,&nbsp;y)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;label_count&nbsp;+=&nbsp;1<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>&nbsp;i&nbsp;&nbsp;<span style="color: #0000FF; ">in</span>&nbsp;xrange(1,10,1):<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;srcdir=r<span style="color: #800000; ">'</span><span style="color: #800000; ">sample\{0}</span><span style="color: #800000; ">'</span>.format(&nbsp;&nbsp;i&nbsp;)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">#</span><span style="color: #008000; ">mkdir(srcdir)</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;loadSampleFromDir(i,srcdir,x,y)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;label_count&nbsp;+=&nbsp;1<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">print</span>&nbsp;<span style="color: #800000; ">"</span><span style="color: #800000; ">label_count:</span><span style="color: #800000; ">"</span>,label_count<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;(x,&nbsp;y)<br /><br /><br /><span style="color: #0000FF; ">def</span>&nbsp;train():<br />&nbsp;&nbsp;&nbsp;&nbsp;(x,&nbsp;y)&nbsp;=&nbsp;loadSampleFiles()<br />&nbsp;&nbsp;&nbsp;&nbsp;train_data&nbsp;=&nbsp;np.array(x,&nbsp;dtype=<span style="color: #800000; ">'</span><span style="color: #800000; ">float32</span><span style="color: #800000; ">'</span>)<br />&nbsp;&nbsp;&nbsp;&nbsp;train_label&nbsp;=&nbsp;np.array(y,&nbsp;dtype=<span style="color: #800000; ">'</span><span style="color: #800000; ">int32</span><span style="color: #800000; ">'</span>)<br />&nbsp;&nbsp;&nbsp;&nbsp;svm&nbsp;=&nbsp;mlpy.LibSvm(svm_type=<span style="color: #800000; ">'</span><span style="color: #800000; ">c_svc</span><span style="color: #800000; ">'</span>,&nbsp;kernel_type=<span style="color: #800000; ">'</span><span style="color: #800000; ">poly</span><span style="color: #800000; ">'</span>,&nbsp;gamma=10,&nbsp;probability=True)<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">print</span>&nbsp;<span style="color: #800000; ">"</span><span style="color: #800000; ">svm&nbsp;learn&nbsp;<img src="http://www.cppblog.com/Images/dot.gif"  alt="" />.</span><span style="color: #800000; ">"</span><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">print</span>&nbsp;<span style="color: #800000; ">"</span><span style="color: #800000; ">len(x):</span><span style="color: #800000; ">"</span>,len(x)<br />&nbsp;&nbsp;&nbsp;&nbsp;svm.learn(train_data,&nbsp;train_label)<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">print</span>&nbsp;<span style="color: #800000; ">"</span><span style="color: #800000; ">svm&nbsp;learn&nbsp;done!</span><span style="color: #800000; ">"</span><br />&nbsp;&nbsp;&nbsp;&nbsp;result&nbsp;=&nbsp;svm.pred(train_data)<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">print</span>&nbsp;result<br />&nbsp;&nbsp;&nbsp;&nbsp;checkSampleSucc(y,&nbsp;result)<br />&nbsp;&nbsp;&nbsp;&nbsp;svm.save_model(ImageHelper.model_file)<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">#</span><span style="color: #008000; ">&nbsp;print&nbsp;result</span><span style="color: #008000; "><br /></span><br /><br /><span style="color: #0000FF; ">def</span>&nbsp;main():<br />&nbsp;&nbsp;&nbsp;&nbsp;begin&nbsp;=&nbsp;time.time()<br />&nbsp;&nbsp;&nbsp;&nbsp;train()<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">#</span><span style="color: #008000; ">test()</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;end&nbsp;=&nbsp;time.time()<br />&nbsp;&nbsp;&nbsp;&nbsp;t&nbsp;=&nbsp;end&nbsp;-&nbsp;begin<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">print</span>&nbsp;<span style="color: #800000; ">"</span><span style="color: #800000; ">done:</span><span style="color: #800000; ">"</span>,&nbsp;t,&nbsp;t&nbsp;/&nbsp;(60)<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">#</span><span style="color: #008000; ">&nbsp;test2()</span><span style="color: #008000; "><br /></span><br /><br /><span style="color: #0000FF; ">if</span>&nbsp;<span style="color: #800080; ">__name__</span>&nbsp;==&nbsp;<span style="color: #800000; ">"</span><span style="color: #800000; ">__main__</span><span style="color: #800000; ">"</span>:<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">print</span>&nbsp;&nbsp;<span style="color: #800080; ">__file__</span><br />&nbsp;&nbsp;&nbsp;&nbsp;main()<br /><br /></div>----<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; ">&nbsp;-*-&nbsp;coding:&nbsp;utf-8&nbsp;-*-</span><span style="color: #008000; "><br />#</span><span style="color: #008000; ">zhangtao&nbsp;2016/06/14</span><span style="color: #008000; "><br />#</span><span style="color: #008000; ">QQ&nbsp;406878851</span><span style="color: #008000; "><br /></span><br /><span style="color: #0000FF; ">import</span>&nbsp;os<br /><span style="color: #0000FF; ">import</span>&nbsp;numpy&nbsp;as&nbsp;np<br /><span style="color: #0000FF; ">import</span>&nbsp;mlpy<br /><span style="color: #0000FF; ">import</span>&nbsp;sys<br /><span style="color: #0000FF; ">import</span>&nbsp;time<br /><span style="color: #0000FF; ">from</span>&nbsp;PIL&nbsp;<span style="color: #0000FF; ">import</span>&nbsp;Image<br /><span style="color: #0000FF; ">from</span>&nbsp;ImageHelper&nbsp;<span style="color: #0000FF; ">import</span>&nbsp;*<br /><span style="color: #0000FF; ">from</span>&nbsp;common&nbsp;<span style="color: #0000FF; ">import</span>&nbsp;*<br /><br />testDir=<span style="color: #800000; ">"</span><span style="color: #800000; ">test</span><span style="color: #800000; ">"</span><br /><br /><span style="color: #0000FF; ">def</span>&nbsp;processOne(i):<br />&nbsp;&nbsp;&nbsp;&nbsp;dataList=[]<br />&nbsp;&nbsp;&nbsp;&nbsp;fn=r<span style="color: #800000; ">'</span><span style="color: #800000; ">img/{0}.jpg</span><span style="color: #800000; ">'</span>.format(i)<br />&nbsp;&nbsp;&nbsp;&nbsp;fn2=r<span style="color: #800000; ">'</span><span style="color: #800000; ">img2/{0}.bmp</span><span style="color: #800000; ">'</span>.format(i)<br />&nbsp;&nbsp;&nbsp;&nbsp;im&nbsp;=&nbsp;Image.open(fn)<br />&nbsp;&nbsp;&nbsp;&nbsp;helper&nbsp;=&nbsp;ImageHelper(im)<br />&nbsp;&nbsp;&nbsp;&nbsp;helper.convertGrayImage()<br />&nbsp;&nbsp;&nbsp;&nbsp;im.save(fn2)<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;subList=helper.fixCropSubImages()<br />&nbsp;&nbsp;&nbsp;&nbsp;count&nbsp;=&nbsp;len(subList)<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>&nbsp;j&nbsp;<span style="color: #0000FF; ">in</span>&nbsp;xrange(count):<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fn3=r<span style="color: #800000; ">'</span><span style="color: #800000; ">img3/{0}_{1}.bmp</span><span style="color: #800000; ">'</span>.format(i,j)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sub&nbsp;=&nbsp;subList[j]<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sub.save(fn3)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;subHelper=ImageHelper(sub)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;data=subHelper.getData()<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dataList.append(data)<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;dataList<br /><br /><br /><span style="color: #0000FF; ">def</span>&nbsp;savePredictResult(result_list):<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">global</span>&nbsp;testDir<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">print</span>&nbsp;<span style="color: #800000; ">"</span><span style="color: #800000; ">savePredictResult</span><span style="color: #800000; ">"</span><br />&nbsp;&nbsp;&nbsp;&nbsp;count=len(result_list)<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;count&nbsp;&gt;&nbsp;0:<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;with&nbsp;open(<span style="color: #800000; ">"</span><span style="color: #800000; ">data.txt</span><span style="color: #800000; ">"</span>,<span style="color: #800000; ">'</span><span style="color: #800000; ">w</span><span style="color: #800000; ">'</span>)&nbsp;as&nbsp;file:<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>&nbsp;i&nbsp;<span style="color: #0000FF; ">in</span>&nbsp;xrange(0,count,1):<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;item=result_list[i]<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;file.write(str(i)+<span style="color: #800000; ">"</span><span style="color: #800000; ">:</span><span style="color: #800000; ">"</span>)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;file.write(item)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;file.write(<span style="color: #800000; ">"</span><span style="color: #800000; ">\n</span><span style="color: #800000; ">"</span>)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">#</span><span style="color: #008000; ">print&nbsp;i,&nbsp;item</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;lines1=[]<br />&nbsp;&nbsp;&nbsp;&nbsp;lines2=[]<br />&nbsp;&nbsp;&nbsp;&nbsp;with&nbsp;open(<span style="color: #800000; ">"</span><span style="color: #800000; ">data.txt</span><span style="color: #800000; ">"</span>,<span style="color: #800000; ">'</span><span style="color: #800000; ">r</span><span style="color: #800000; ">'</span>)&nbsp;as&nbsp;f:<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;lines1=f.readlines()<br />&nbsp;&nbsp;&nbsp;&nbsp;with&nbsp;open(r<span style="color: #800000; ">"</span><span style="color: #800000; ">{0}/data.txt</span><span style="color: #800000; ">"</span>.format(testDir),<span style="color: #800000; ">'</span><span style="color: #800000; ">r</span><span style="color: #800000; ">'</span>)&nbsp;as&nbsp;f:<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;lines2=f.readlines()<br />&nbsp;&nbsp;&nbsp;&nbsp;count1=len(lines1)<br />&nbsp;&nbsp;&nbsp;&nbsp;count2=len(lines2)<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;count1&nbsp;!=&nbsp;count2&nbsp;:<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">print</span>&nbsp;<span style="color: #800000; ">"</span><span style="color: #800000; ">no&nbsp;match&nbsp;:</span><span style="color: #800000; ">"</span>,count1,count2<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span><br />&nbsp;&nbsp;&nbsp;&nbsp;succ=0<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>&nbsp;i&nbsp;<span style="color: #0000FF; ">in</span>&nbsp;xrange(count1):<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;line1=lines1[i].strip()<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;line2=lines2[i].strip()<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;line1&nbsp;!=&nbsp;line2:<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">print</span>&nbsp;<span style="color: #800000; ">"</span><span style="color: #800000; ">!=</span><span style="color: #800000; ">"</span>,line1,line2<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">else</span>:<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;succ&nbsp;+=&nbsp;1<br />&nbsp;&nbsp;&nbsp;&nbsp;rate=&nbsp;float(succ)/float(count1)<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">print</span>&nbsp;<span style="color: #800000; ">"</span><span style="color: #800000; ">result:</span><span style="color: #800000; ">"</span>,(succ,count1),rate<br /><br /><span style="color: #0000FF; ">def</span>&nbsp;main():<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">print</span>&nbsp;<span style="color: #800000; ">"</span><span style="color: #800000; ">-----------test---------------------</span><span style="color: #800000; ">"</span><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;False&nbsp;==&nbsp;os.path.exists(ImageHelper.model_file):<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">print</span>&nbsp;<span style="color: #800000; ">"</span><span style="color: #800000; ">s.path.exists&nbsp;,faild&nbsp;</span><span style="color: #800000; ">"</span>,&nbsp;ImageHelper.model_file<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span><br />&nbsp;&nbsp;&nbsp;&nbsp;svm&nbsp;=&nbsp;mlpy.LibSvm.load_model(ImageHelper.model_file)<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">#</span><span style="color: #008000; ">print&nbsp;'nclasses:',&nbsp;svm.nclasses()</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">#</span><span style="color: #008000; ">print&nbsp;'labels:',&nbsp;svm.labels()</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;test_list=[]<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>&nbsp;i&nbsp;<span style="color: #0000FF; ">in</span>&nbsp;xrange(100):<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dataList=processOne(i)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;labels=[]<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>&nbsp;data&nbsp;<span style="color: #0000FF; ">in</span>&nbsp;dataList:<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;input_data&nbsp;=&nbsp;np.array(data,&nbsp;dtype=<span style="color: #800000; ">'</span><span style="color: #800000; ">float32</span><span style="color: #800000; ">'</span>)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;result_label&nbsp;=&nbsp;int(svm.pred(input_data))<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;labels.append(result_label)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;result_string=parseLabels(labels)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">print</span>&nbsp;<span style="color: #800000; ">"</span><span style="color: #800000; ">{0}:{1}</span><span style="color: #800000; ">"</span>.format(i,result_string)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;test_list.append(result_string)<br />&nbsp;&nbsp;&nbsp;&nbsp;savePredictResult(test_list)<br /><br /><br /><span style="color: #0000FF; ">if</span>&nbsp;<span style="color: #800080; ">__name__</span>&nbsp;==&nbsp;<span style="color: #800000; ">"</span><span style="color: #800000; ">__main__</span><span style="color: #800000; ">"</span>:<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">print</span>&nbsp;&nbsp;<span style="color: #800080; ">__file__</span><br />&nbsp;&nbsp;&nbsp;&nbsp;main()<br /></div>---<br />---<img src="http://www.cppblog.com/images/cppblog_com/changshoumeng/0.jpg" border="0" alt="" />&nbsp;&nbsp;<img src="http://www.cppblog.com/images/cppblog_com/changshoumeng/2.jpg" border="0" alt="" /><img src ="http://www.cppblog.com/changshoumeng/aggbug/213710.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/changshoumeng/" target="_blank">长寿梦</a> 2016-06-14 20:35 <a href="http://www.cppblog.com/changshoumeng/archive/2016/06/14/213710.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>针对libzip库，封装了两个接口，compressString 压缩字符串</title><link>http://www.cppblog.com/changshoumeng/archive/2016/06/13/213701.html</link><dc:creator>长寿梦</dc:creator><author>长寿梦</author><pubDate>Mon, 13 Jun 2016 10:52:00 GMT</pubDate><guid>http://www.cppblog.com/changshoumeng/archive/2016/06/13/213701.html</guid><wfw:comment>http://www.cppblog.com/changshoumeng/comments/213701.html</wfw:comment><comments>http://www.cppblog.com/changshoumeng/archive/2016/06/13/213701.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/changshoumeng/comments/commentRss/213701.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/changshoumeng/services/trackbacks/213701.html</trackback:ping><description><![CDATA[<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 />--><br /><span style="color: #008000; ">/*</span><span style="color: #008000; "><br />简单说明：<br />针对libzip库，封装了两个接口，compressString&nbsp;压缩字符串&nbsp;，uncompressString&nbsp;解压字符串<br />zhangtao&nbsp;/2016/06/13&nbsp;&nbsp;&nbsp;使用者请联系406878851@qq.com<br />测试代码：<br />char&nbsp;inbuf[]="HELLOWORLD";<br />int&nbsp;&nbsp;inLen=strlen(inbuf);<br />char&nbsp;outbuf[8192];<br />int&nbsp;outLen=0;&nbsp;&nbsp;&nbsp;&nbsp;<br />compressString(inbuf,inLen,outbuf,8192,&amp;outLen)&nbsp;;&nbsp;&nbsp;&nbsp;<br /><br />char&nbsp;outbuf2[8192];<br />int&nbsp;outLen2=0;&nbsp;&nbsp;&nbsp;&nbsp;<br />uncompressString(outbuf,outLen,outbuf2,8192,&amp;outLen2);<br />printf("uncompressString&nbsp;%d&nbsp;%s\n",outLen2,outbuf2);<br /></span><span style="color: #008000; ">*/</span><br /><span style="color: #0000FF; ">static</span>&nbsp;<span style="color: #0000FF; ">const</span>&nbsp;<span style="color: #0000FF; ">char</span>*&nbsp;ziparchive="data.zip";<br /><span style="color: #0000FF; ">static</span>&nbsp;<span style="color: #0000FF; ">const</span>&nbsp;<span style="color: #0000FF; ">char</span>*&nbsp;archive="data";<br /><br /><span style="color: #0000FF; ">static</span>&nbsp;<span style="color: #0000FF; ">void</span>&nbsp;saveZip(<span style="color: #0000FF; ">char</span>*&nbsp;apOutBuf,<span style="color: #0000FF; ">int</span>&nbsp;auOutBufSize)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;FILE*&nbsp;fp;<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;((fp=fopen(ziparchive,&nbsp;"wb"))&nbsp;==&nbsp;NULL)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fprintf(stderr,&nbsp;"fopen&nbsp;failed:&nbsp;%s\n",&nbsp;strerror(errno));&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;printf("fwrite&nbsp;size:%d\n",auOutBufSize);<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(fwrite(apOutBuf,&nbsp;auOutBufSize,&nbsp;1,&nbsp;fp)&nbsp;&lt;&nbsp;1)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fprintf(stderr,&nbsp;"fwrite&nbsp;failed:&nbsp;%s\n",&nbsp;strerror(errno));&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fclose(fp);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(fclose(fp)&nbsp;!=&nbsp;0)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fprintf(stderr,&nbsp;"fclose&nbsp;failed:&nbsp;%s\n",&nbsp;strerror(errno));<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />}<br /><br /><span style="color: #0000FF; ">static</span>&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;compressString(<span style="color: #0000FF; ">const</span>&nbsp;<span style="color: #0000FF; ">char</span>*&nbsp;apData,<span style="color: #0000FF; ">int</span>&nbsp;auDataSize,<span style="color: #0000FF; ">char</span>*&nbsp;apOutBuf,<span style="color: #0000FF; ">int</span>&nbsp;auOutBufSize,<span style="color: #0000FF; ">int</span>*&nbsp;apOutBufLen)<br />{&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;ret=-1;<br />&nbsp;&nbsp;&nbsp;&nbsp;*apOutBufLen=0;<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;zip_t&nbsp;*za;<br />&nbsp;&nbsp;&nbsp;&nbsp;zip_source_t&nbsp;*zs;<br />&nbsp;&nbsp;&nbsp;&nbsp;zip_stat_t&nbsp;zst;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">struct</span>&nbsp;stat&nbsp;st;<br />&nbsp;&nbsp;&nbsp;&nbsp;zip_source_t&nbsp;*src;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;zip_error_t&nbsp;error;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;err;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">do</span>&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;src&nbsp;=&nbsp;zip_source_buffer_create(NULL,0,&nbsp;0,&nbsp;&amp;error);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(src&nbsp;==&nbsp;NULL)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;err&nbsp;=&nbsp;zip_error_code_zip(&amp;error);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;errno&nbsp;=&nbsp;zip_error_code_system(&amp;error);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fprintf(stderr,&nbsp;"zip_source_buffer_create&nbsp;faild:&nbsp;%d\n",err);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">break</span>;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;za&nbsp;=&nbsp;zip_open_from_source(src,&nbsp;1,&nbsp;&amp;error);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(za&nbsp;==&nbsp;NULL)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;err&nbsp;=&nbsp;zip_error_code_zip(&amp;error);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;errno&nbsp;=&nbsp;zip_error_code_system(&amp;error);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fprintf(stderr,&nbsp;"zip_open_from_source&nbsp;faild:&nbsp;%d\n",err);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">break</span>;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;zip_source_keep(src);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;((zs=zip_source_buffer(za,&nbsp;apData,&nbsp;auDataSize,&nbsp;0))&nbsp;==&nbsp;NULL)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fprintf(stderr,&nbsp;"can't&nbsp;create&nbsp;zip_source&nbsp;from&nbsp;buffer:&nbsp;%s\n",&nbsp;zip_strerror(za));<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">break</span>;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(zip_add(za,&nbsp;archive,&nbsp;zs)&nbsp;==&nbsp;-1)&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fprintf(stderr,&nbsp;"can't&nbsp;add&nbsp;file&nbsp;'%s':&nbsp;%s\n",&nbsp;archive,&nbsp;zip_strerror(za));<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">break</span>;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(zip_close(za)&nbsp;==&nbsp;-1)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fprintf(stderr,&nbsp;"can't&nbsp;close&nbsp;zip&nbsp;archive&nbsp;'%s':&nbsp;%s\n",&nbsp;archive,&nbsp;zip_strerror(za));<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">break</span>;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;za=NULL;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(zip_source_stat(src,&nbsp;&amp;zst)&nbsp;&lt;&nbsp;0)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fprintf(stderr,&nbsp;"zip_source_stat&nbsp;on&nbsp;buffer&nbsp;failed:&nbsp;%s\n",&nbsp;zip_error_strerror(zip_source_error(src)));<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">break</span>;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(zst.size&nbsp;&lt;=0){<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf("&nbsp;size&nbsp;error&nbsp;000\n");<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">break</span>;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(zst.size&nbsp;&gt;=&nbsp;auOutBufSize){<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf("&nbsp;size&nbsp;error&nbsp;111\n");<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">break</span>;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(zip_source_open(src)&nbsp;&lt;&nbsp;0)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(zip_error_code_zip(zip_source_error(src))&nbsp;==&nbsp;ZIP_ER_DELETED)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(unlink(archive)&nbsp;&lt;&nbsp;0&nbsp;&amp;&amp;&nbsp;errno&nbsp;!=&nbsp;ENOENT)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fprintf(stderr,&nbsp;"unlink&nbsp;failed:&nbsp;%s\n",&nbsp;strerror(errno));<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">break</span>;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">break</span>;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fprintf(stderr,&nbsp;"zip_source_open&nbsp;on&nbsp;buffer&nbsp;failed:&nbsp;%s\n",&nbsp;zip_error_strerror(zip_source_error(src)));<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">break</span>;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(zip_source_read(src,&nbsp;apOutBuf,&nbsp;zst.size)&nbsp;&lt;&nbsp;(zip_int64_t)zst.size)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fprintf(stderr,&nbsp;"zip_source_read&nbsp;on&nbsp;buffer&nbsp;failed:&nbsp;%s\n",&nbsp;zip_error_strerror(zip_source_error(src)));<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;zip_source_close(src);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">break</span>;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;zip_source_close(src);&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*apOutBufLen&nbsp;=&nbsp;(<span style="color: #0000FF; ">int</span>)(zst.size);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ret=0;&nbsp;&nbsp;&nbsp;&nbsp;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">saveZip(apOutBuf,*apOutBufLen&nbsp;);</span><span style="color: #008000; "><br /></span><br />&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<span style="color: #0000FF; ">while</span>&nbsp;(0);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(NULL&nbsp;!=&nbsp;src)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;zip_source_free(src);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;src=NULL;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(NULL&nbsp;!=&nbsp;za)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;zip_close(za);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;za=NULL;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br /><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;ret;<br />}<br /><br /><br /><span style="color: #0000FF; ">static</span>&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;uncompressString(<span style="color: #0000FF; ">const</span>&nbsp;<span style="color: #0000FF; ">char</span>*&nbsp;apData,<span style="color: #0000FF; ">int</span>&nbsp;auDataSize,<span style="color: #0000FF; ">char</span>*&nbsp;apOutBuf,<span style="color: #0000FF; ">int</span>&nbsp;auOutBufSize,<span style="color: #0000FF; ">int</span>*&nbsp;apOutBufLen)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;ret=-1;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;*apOutBufLen=0;<br />&nbsp;&nbsp;&nbsp;&nbsp;zip_error_t&nbsp;error;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;err=0;<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">char</span>*&nbsp;buf=apOutBuf;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;&nbsp;&nbsp;totalSize=0;<br />&nbsp;&nbsp;&nbsp;&nbsp;zip_int64_t&nbsp;n&nbsp;=&nbsp;0;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;zip_source_t&nbsp;*src=NULL;<br />&nbsp;&nbsp;&nbsp;&nbsp;zip_t&nbsp;*za=NULL;<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">struct</span>&nbsp;zip_file&nbsp;*f=NULL;<br /><br /><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">do</span>&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;zip_error_init(&amp;error);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">/*</span><span style="color: #008000; ">&nbsp;create&nbsp;source&nbsp;from&nbsp;buffer&nbsp;</span><span style="color: #008000; ">*/</span><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;((src&nbsp;=&nbsp;zip_source_buffer_create(apData,&nbsp;auDataSize,&nbsp;1,&nbsp;&amp;error))&nbsp;==&nbsp;NULL)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fprintf(stderr,&nbsp;"can't&nbsp;create&nbsp;source:&nbsp;%s\n",&nbsp;zip_error_strerror(&amp;error));&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;zip_error_fini(&amp;error);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">break</span>;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">/*</span><span style="color: #008000; ">&nbsp;open&nbsp;zip&nbsp;archive&nbsp;from&nbsp;source&nbsp;</span><span style="color: #008000; ">*/</span><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;((za&nbsp;=&nbsp;zip_open_from_source(src,&nbsp;0,&nbsp;&amp;error))&nbsp;==&nbsp;NULL)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fprintf(stderr,&nbsp;"can't&nbsp;open&nbsp;zip&nbsp;from&nbsp;source:&nbsp;%s\n",&nbsp;zip_error_strerror(&amp;error));&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;zip_error_fini(&amp;error);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">break</span>;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;zip_error_fini(&amp;error);&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;zip_source_keep(src);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;zip_int64_t&nbsp;&nbsp;c&nbsp;=&nbsp;zip_get_num_entries(za,&nbsp;ZIP_FL_UNCHANGED);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(&nbsp;c&nbsp;!=&nbsp;1)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf("zip_get_num_entries&nbsp;0&nbsp;\n");<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">break</span>;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">const</span>&nbsp;<span style="color: #0000FF; ">char</span>&nbsp;*&nbsp;name&nbsp;=&nbsp;zip_get_name(za,&nbsp;0,&nbsp;ZIP_FL_ENC_GUESS);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(NULL&nbsp;==&nbsp;name)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf("zip_get_name&nbsp;0&nbsp;\n");<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">break</span>;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;f&nbsp;=&nbsp;zip_fopen(za,&nbsp;name,&nbsp;0);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(NULL&nbsp;==&nbsp;f)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf("zip_fopen&nbsp;0&nbsp;\n");<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">break</span>;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(&nbsp;auOutBufSize&nbsp;&lt;&nbsp;4096)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf("auOutBufSize&nbsp;&lt;&nbsp;4096&nbsp;\n");<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">break</span>;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;totalSize=0;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">while</span>(&nbsp;totalSize&nbsp;&lt;&nbsp;auOutBufSize)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;buf&nbsp;=&nbsp;apOutBuf+&nbsp;totalSize;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;n&nbsp;=&nbsp;zip_fread(f,&nbsp;buf,&nbsp;4096);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(n&nbsp;&lt;=0&nbsp;)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">break</span>;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;totalSize&nbsp;+=&nbsp;n;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(totalSize&nbsp;&gt;=&nbsp;auOutBufSize)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf("totalSize&nbsp;too&nbsp;big&nbsp;\n");<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">break</span>;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*apOutBufLen=totalSize;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ret=0;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<span style="color: #0000FF; ">while</span>&nbsp;(0);<br />&nbsp;&nbsp;&nbsp;&nbsp;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(NULL&nbsp;!=&nbsp;f)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;zip_fclose(f);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;f=NULL;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(NULL&nbsp;!=&nbsp;za)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">lt-in-memory:&nbsp;free():&nbsp;invalid&nbsp;pointer:&nbsp;0x00007fff9c75c6d0&nbsp;***<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">zip_close(za);</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;za=NULL;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(NULL&nbsp;!=&nbsp;src)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;zip_source_free(src);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;src=NULL;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;ret;<br />}</div><img src ="http://www.cppblog.com/changshoumeng/aggbug/213701.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/changshoumeng/" target="_blank">长寿梦</a> 2016-06-13 18:52 <a href="http://www.cppblog.com/changshoumeng/archive/2016/06/13/213701.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>python AES  PKCS7填充 加解密</title><link>http://www.cppblog.com/changshoumeng/archive/2016/05/16/213523.html</link><dc:creator>长寿梦</dc:creator><author>长寿梦</author><pubDate>Mon, 16 May 2016 06:18:00 GMT</pubDate><guid>http://www.cppblog.com/changshoumeng/archive/2016/05/16/213523.html</guid><wfw:comment>http://www.cppblog.com/changshoumeng/comments/213523.html</wfw:comment><comments>http://www.cppblog.com/changshoumeng/archive/2016/05/16/213523.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/changshoumeng/comments/commentRss/213523.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/changshoumeng/services/trackbacks/213523.html</trackback:ping><description><![CDATA[<div style="font-size: 13px; border: 1px solid #cccccc; padding: 4px 5px 4px 4px; width: 98%; word-break: break-all; background-color: #eeeeee;"><!--<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; ">coding:&nbsp;utf8</span><span style="color: #008000; "><br /></span><span style="color: #0000FF; ">import</span>&nbsp;sys<br /><span style="color: #0000FF; ">from</span>&nbsp;Crypto.Cipher&nbsp;<span style="color: #0000FF; ">import</span>&nbsp;AES<br /><span style="color: #0000FF; ">from</span>&nbsp;binascii&nbsp;<span style="color: #0000FF; ">import</span>&nbsp;b2a_hex,&nbsp;a2b_hex<br /><span style="color: #0000FF; ">import</span>&nbsp;base64<br /><br /><span style="color: #0000FF; ">def</span>&nbsp;printMemLog2(mem):&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;byteData=bytearray(mem)<br />&nbsp;&nbsp;&nbsp;&nbsp;byteLen&nbsp;=len(byteData)<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">print</span>&nbsp;<span style="color: #800000; ">"</span><span style="color: #800000; ">printMemLog&nbsp;begin&nbsp;<img src="http://www.cppblog.com/Images/dot.gif"  alt="" /><img src="http://www.cppblog.com/Images/dot.gif"  alt="" />.byteLen:{0}</span><span style="color: #800000; ">"</span>.format(byteLen)<br />&nbsp;&nbsp;&nbsp;&nbsp;i=0<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">while</span>&nbsp;i&nbsp;&lt;=byteLen-1:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;a=byteData[i]<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;i&nbsp;==&nbsp;byteLen-1:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">print</span>&nbsp;<span style="color: #800000; ">"</span><span style="color: #800000; ">%02x&nbsp;</span><span style="color: #800000; ">"</span>%(&nbsp;a&nbsp;)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">break</span>;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;i&nbsp;+=1&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;b=byteData[i]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">print</span>&nbsp;<span style="color: #800000; ">"</span><span style="color: #800000; ">%02x%02x&nbsp;</span><span style="color: #800000; ">"</span>%(&nbsp;a,b),&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;i&nbsp;+=1<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;i%64&nbsp;==&nbsp;0&nbsp;:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">print</span><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">print</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">print</span>&nbsp;<span style="color: #800000; ">"</span><span style="color: #800000; ">*</span><span style="color: #800000; ">"</span>*10&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">pass</span><br /><br /><br /><span style="color: #008000; ">#</span><span style="color: #008000; ">将text按照byteAlignLen字节对齐，如果不对齐，按照差数填充</span><span style="color: #008000; "><br /></span><span style="color: #0000FF; ">def</span>&nbsp;bytePad(text,byteAlignLen=16):&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;count=len(text)&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;mod_num=count%byteAlignLen<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;&nbsp;mod_num==0:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;text&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;add_num=byteAlignLen-mod_num<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">print</span>&nbsp;<span style="color: #800000; ">"</span><span style="color: #800000; ">bytePad:</span><span style="color: #800000; ">"</span>&nbsp;,add_num&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;text+chr(add_num)*add_num&nbsp;&nbsp;&nbsp;&nbsp;<br /><br /><span style="color: #0000FF; ">def</span>&nbsp;byteUnpad(text,byteAlignLen=16):<br />&nbsp;&nbsp;&nbsp;&nbsp;count=len(text)&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">print</span>&nbsp;<span style="color: #800000; ">"</span><span style="color: #800000; ">byteUnpad:</span><span style="color: #800000; ">"</span>,count<br />&nbsp;&nbsp;&nbsp;&nbsp;mod_num=count%byteAlignLen<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">assert</span>&nbsp;mod_num==0<br />&nbsp;&nbsp;&nbsp;&nbsp;lastChar=text[-1]&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;lastLen=ord(lastChar)<br />&nbsp;&nbsp;&nbsp;&nbsp;lastChunk=text[-lastLen:]<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;lastChunk==chr(lastLen)*lastLen:<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">#</span><span style="color: #008000; ">print&nbsp;"byteUnpad"</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;text[:-lastLen]<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;text&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /><br /><br /><br />&nbsp;<br /><span style="color: #0000FF; ">class</span>&nbsp;prpcrypt():<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">def</span>&nbsp;<span style="color: #800080; ">__init__</span>(self,&nbsp;key):<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.key&nbsp;=&nbsp;key<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.mode&nbsp;=&nbsp;AES.MODE_ECB<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.iv&nbsp;=&nbsp;<span style="color: #800000; ">'</span><span style="color: #800000; ">\0</span><span style="color: #800000; ">'</span>&nbsp;*&nbsp;16<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">#</span><span style="color: #008000; ">加密函数，如果text不是16的倍数【加密文本text必须为16的倍数！】，那就补足为16的倍数</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">def</span>&nbsp;encrypt(self,&nbsp;text):<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cryptor&nbsp;=&nbsp;AES.new(self.key,&nbsp;self.mode,&nbsp;self.iv&nbsp;)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">#</span><span style="color: #008000; ">这里密钥key&nbsp;长度必须为16（AES-128）、24（AES-192）、或32（AES-256）Bytes&nbsp;长度.目前AES-128足够用</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">#</span><span style="color: #008000; ">length&nbsp;=&nbsp;16</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;text=bytePad(text,16)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">#</span><span style="color: #008000; ">add&nbsp;=&nbsp;length&nbsp;-&nbsp;(count&nbsp;%&nbsp;length)</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">#</span><span style="color: #008000; ">text&nbsp;=&nbsp;text&nbsp;+&nbsp;('\0'&nbsp;*&nbsp;add)</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.ciphertext&nbsp;=&nbsp;cryptor.encrypt(text)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">#</span><span style="color: #008000; ">因为AES加密时候得到的字符串不一定是ascii字符集的，输出到终端或者保存时候可能存在问题</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">#</span><span style="color: #008000; ">所以这里统一把加密后的字符串转化为16进制字符串</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;self.ciphertext<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">#</span><span style="color: #008000; ">return&nbsp;b2a_hex(self.ciphertext)</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">#</span><span style="color: #008000; ">解密后，去掉补足的空格用strip()&nbsp;去掉</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">def</span>&nbsp;decrypt(self,&nbsp;text):&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cryptor&nbsp;=&nbsp;AES.new(self.key,&nbsp;self.mode,&nbsp;self.iv&nbsp;)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">#</span><span style="color: #008000; ">plain_text&nbsp;=&nbsp;cryptor.decrypt(a2b_hex(text))</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;plain_text&nbsp;=&nbsp;cryptor.decrypt(text)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">#</span><span style="color: #008000; ">printMemLog2(plain_text)</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">#</span><span style="color: #008000; ">print&nbsp;plain_text</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;byteUnpad(plain_text)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;</div><img src ="http://www.cppblog.com/changshoumeng/aggbug/213523.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/changshoumeng/" target="_blank">长寿梦</a> 2016-05-16 14:18 <a href="http://www.cppblog.com/changshoumeng/archive/2016/05/16/213523.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>使用libgif库把gif动画转换为序列帧</title><link>http://www.cppblog.com/changshoumeng/archive/2016/04/29/213390.html</link><dc:creator>长寿梦</dc:creator><author>长寿梦</author><pubDate>Fri, 29 Apr 2016 10:34:00 GMT</pubDate><guid>http://www.cppblog.com/changshoumeng/archive/2016/04/29/213390.html</guid><wfw:comment>http://www.cppblog.com/changshoumeng/comments/213390.html</wfw:comment><comments>http://www.cppblog.com/changshoumeng/archive/2016/04/29/213390.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/changshoumeng/comments/commentRss/213390.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/changshoumeng/services/trackbacks/213390.html</trackback:ping><description><![CDATA[<div>#ifndef __GIF_WRAPPER_H__</div><div>#define __GIF_WRAPPER_H__</div><div>//基于giflib的c++对象封装</div><div>#include "gif_lib.h"</div><div>#include "rectimage.h"</div><div></div><div></div><div></div><div></div><div>#include &lt;vector&gt;</div><div>using namespace std;</div><div></div><div>class CGifImage</div><div>{</div><div>public:</div><div><span style="white-space:pre">	</span>CGifImage();</div><div><span style="white-space:pre">	</span>~CGifImage();</div><div><span style="white-space:pre">	</span>bool open(const char* gif_path);</div><div><span style="white-space:pre">	</span>void close();</div><div><span style="white-space:pre">	</span>const vector&lt;RECT_IMAGE*&gt;&amp; getFrames() const { return frameArray ;};</div><div>private:</div><div><span style="white-space:pre">	</span>void dumpCurrentFrame();</div><div><span style="white-space:pre">	</span>GifFileType *mpGifFile;//<span style="white-space:pre">	</span>gif文件句柄</div><div><span style="white-space:pre">	</span>GifRowType *mpScreenBuffer;//GifRowType 实际是一个char* 类型;ScreenBuffer[0]表示指向第0行的像素列表的指针，ScreenBuffer[0][2]表示第0行第2个像素</div><div><span style="white-space:pre">	</span>vector&lt;RECT_IMAGE*&gt; frameArray;</div><div><span style="white-space:pre">	</span>ColorMapObject *ColorMap;</div><div></div><div>};</div><div></div><div></div><div>/*</div><div>测试例子:看 cpp文件里的main</div><div></div><div>*/</div><div><br /><br /><br /></div><div></div><div></div><div>#endif//__GIF_WRAPPER_H__<br /><br /><div>// &nbsp; g++ gif_wrapper.cpp -o testgif -L./lib -lgif -I./lib -I./</div><div></div><div>#include &lt;stdlib.h&gt;</div><div>#include &lt;stdio.h&gt;</div><div>#include &lt;ctype.h&gt;</div><div>#include &lt;string.h&gt;</div><div>#include &lt;stdbool.h&gt;</div><div>#include &lt;fcntl.h&gt;</div><div>#include "gif_wrapper.h"</div><div></div><div></div><div></div><div>CGifImage::CGifImage():mpGifFile(NULL),mpScreenBuffer(NULL),ColorMap(NULL)</div><div>{</div><div></div><div>}</div><div></div><div>CGifImage::~CGifImage()</div><div>{</div><div><span style="white-space:pre">	</span>close();</div><div>}</div><div></div><div>void CGifImage::close()</div><div>{</div><div><span style="white-space:pre">	</span>if (NULL != mpScreenBuffer)</div><div><span style="white-space:pre">	</span>{</div><div><span style="white-space:pre">		</span>(void)free(mpScreenBuffer);</div><div><span style="white-space:pre">		</span>mpScreenBuffer=NULL;</div><div><span style="white-space:pre">	</span>}</div><div><span style="white-space:pre">	</span>if (NULL != mpGifFile)</div><div><span style="white-space:pre">	</span>{</div><div><span style="white-space:pre">		</span>int Error=0;</div><div><span style="white-space:pre">		</span>DGifCloseFile(mpGifFile);</div><div><span style="white-space:pre">		</span>mpGifFile=NULL;</div><div><span style="white-space:pre">	</span>}<span style="white-space:pre">	</span></div><div></div><div><span style="white-space:pre">	</span>int count = frameArray.size();</div><div><span style="white-space:pre">	</span>for (int i=0 ;i &lt; count;++i)</div><div><span style="white-space:pre">	</span>{</div><div><span style="white-space:pre">		</span>RECT_IMAGE* p = frameArray[i];</div><div><span style="white-space:pre">		</span>if (NULL != p)</div><div><span style="white-space:pre">		</span>{</div><div><span style="white-space:pre">			</span>delete p;</div><div><span style="white-space:pre">			</span>p = NULL;</div><div><span style="white-space:pre">		</span>}</div><div><span style="white-space:pre">		</span></div><div><span style="white-space:pre">	</span>}</div><div><span style="white-space:pre">	</span>frameArray.clear() ;</div><div><span style="white-space:pre">	</span></div><div>}</div><div></div><div>void &nbsp;CGifImage::dumpCurrentFrame()</div><div>{<span style="white-space:pre">	</span></div><div></div><div><span style="white-space:pre">	</span>RECT_IMAGE* &nbsp;rectImage = new RECT_IMAGE();</div><div><span style="white-space:pre">	</span>if (NULL == rectImage)</div><div><span style="white-space:pre">	</span>{</div><div><span style="white-space:pre">		</span>return ;</div><div><span style="white-space:pre">	</span>}</div><div></div><div><span style="white-space:pre">	</span>rectImage-&gt;init( mpGifFile-&gt;SWidth,mpGifFile-&gt;SHeight ,NULL);</div><div></div><div><span style="white-space:pre">	</span>GifRowType GifRow;</div><div><span style="white-space:pre">	</span>GifColorType *ColorMapEntry;</div><div><span style="white-space:pre">	</span>for (int i = 0; i &lt; mpGifFile-&gt;SHeight; i++)</div><div><span style="white-space:pre">	</span>{</div><div><span style="white-space:pre">		</span>GifRow = mpScreenBuffer[i];</div><div><span style="white-space:pre">		</span>for (int j = 0; j &lt; mpGifFile-&gt;SWidth; j++)</div><div><span style="white-space:pre">		</span>{</div><div><span style="white-space:pre">			</span>ColorMapEntry = &amp;ColorMap-&gt;Colors[GifRow[j]];</div><div><span style="white-space:pre">			</span>rectImage-&gt;putPixel(j,i, __RGB(ColorMapEntry-&gt;Red,ColorMapEntry-&gt;Green,ColorMapEntry-&gt;Blue));<span style="white-space:pre">			</span></div><div><span style="white-space:pre">		</span>}</div><div><span style="white-space:pre">	</span>}</div><div></div><div><span style="white-space:pre">	</span>frameArray.push_back(rectImage);</div><div></div><div>}</div><div></div><div></div><div></div><div>bool CGifImage::open( const char* gif_path )</div><div>{</div><div><span style="white-space:pre">	</span>GifFileType *GifFile=NULL;</div><div><span style="white-space:pre">	</span>GifRowType * ScreenBuffer=NULL;<span style="white-space:pre">	</span></div><div></div><div><span style="white-space:pre">	</span>if (NULL != mpGifFile)</div><div><span style="white-space:pre">	</span>{</div><div><span style="white-space:pre">		</span>close();<span style="white-space:pre">		</span></div><div><span style="white-space:pre">	</span>}</div><div><span style="white-space:pre">	</span></div><div></div><div><span style="white-space:pre">	</span>int i, j, Size, Row, Col, Width, Height, ExtCode, Count,Error;</div><div></div><div><span style="white-space:pre">	</span>GifRecordType RecordType;</div><div><span style="white-space:pre">	</span>GifByteType *Extension;</div><div><span style="white-space:pre">	</span>int ImageNum = 0;</div><div><span style="white-space:pre">	</span>int<span style="white-space:pre">	</span>InterlacedOffset[] = { 0, 4, 2, 1 }; &nbsp;/* The way Interlaced image should. */</div><div><span style="white-space:pre">	</span>int<span style="white-space:pre">	</span>InterlacedJumps[] = { 8, 8, 4, 2 }; &nbsp; &nbsp;/* be read - offsets and jumps... */</div><div></div><div><span style="white-space:pre">	</span>if ((GifFile = DGifOpenFileName(gif_path)) == NULL)</div><div><span style="white-space:pre">	</span>{</div><div><span style="white-space:pre">		</span>close();</div><div><span style="white-space:pre">		</span>return false;</div><div><span style="white-space:pre">	</span>}</div><div></div><div></div><div><span style="white-space:pre">	</span>//printf("GifFile-&gt;ImageCount : %d &nbsp;GifFile-&gt;Image.Interlace:%d\n",GifFile-&gt;ImageCount,GifFile-&gt;Image.Interlace);</div><div></div><div><span style="white-space:pre">	</span>////*&nbsp;</div><div><span style="white-space:pre">	</span>////* * Allocate the screen as vector of column of rows. Note this</div><div><span style="white-space:pre">	</span>////* * screen is device independent - it's the screen defined by the</div><div><span style="white-space:pre">	</span>////* * GIF file parameters.</div><div><span style="white-space:pre">	</span>////* */</div><div><span style="white-space:pre">	</span>if ((ScreenBuffer = (GifRowType *)malloc(GifFile-&gt;SHeight * sizeof(GifRowType))) == NULL)</div><div><span style="white-space:pre">	</span>{</div><div><span style="white-space:pre">		</span>//GIF_EXIT("Failed to allocate memory required, aborted.");</div><div><span style="white-space:pre">		</span>close();</div><div><span style="white-space:pre">		</span>return false;</div><div><span style="white-space:pre">	</span>}</div><div></div><div><span style="white-space:pre">	</span>Size = GifFile-&gt;SWidth * sizeof(GifPixelType);/* Size in bytes one row.*/</div><div><span style="white-space:pre">	</span>if ((ScreenBuffer[0] = (GifRowType) malloc(Size)) == NULL) /* First row. */</div><div><span style="white-space:pre">	</span>{</div><div><span style="white-space:pre">		</span>//GIF_EXIT("Failed to allocate memory required, aborted.");</div><div><span style="white-space:pre">		</span>close();</div><div><span style="white-space:pre">		</span>return false;</div><div><span style="white-space:pre">	</span>}</div><div></div><div><span style="white-space:pre">	</span>for (i = 0; i &lt; GifFile-&gt;SWidth; i++) &nbsp;/* Set its color to BackGround. */</div><div><span style="white-space:pre">		</span>ScreenBuffer[0][i] = GifFile-&gt;SBackGroundColor;</div><div></div><div></div><div><span style="white-space:pre">	</span>for (i = 1; i &lt; GifFile-&gt;SHeight; i++)</div><div><span style="white-space:pre">	</span>{</div><div><span style="white-space:pre">		</span>/* Allocate the other rows, and set their color to background too: */</div><div><span style="white-space:pre">		</span>if ((ScreenBuffer[i] = (GifRowType) malloc(Size)) == NULL)</div><div><span style="white-space:pre">		</span>{</div><div><span style="white-space:pre">			</span>//GIF_EXIT("Failed to allocate memory required, aborted.");</div><div><span style="white-space:pre">			</span>close();</div><div><span style="white-space:pre">			</span>return false;</div><div><span style="white-space:pre">		</span>}</div><div><span style="white-space:pre">		</span>memcpy(ScreenBuffer[i], ScreenBuffer[0], Size);</div><div><span style="white-space:pre">	</span>}</div><div></div><div><span style="white-space:pre">	</span>//////* Scan the content of the GIF file and load the image(s) in: */</div><div></div><div><span style="white-space:pre">	</span>mpGifFile=GifFile;</div><div><span style="white-space:pre">	</span>mpScreenBuffer=ScreenBuffer;</div><div></div><div><span style="white-space:pre">	</span>ColorMap = (mpGifFile-&gt;Image.ColorMap? mpGifFile-&gt;Image.ColorMap: mpGifFile-&gt;SColorMap);</div><div><span style="white-space:pre">	</span>if (NULL == ColorMap)</div><div><span style="white-space:pre">	</span>{</div><div><span style="white-space:pre">		</span>close();</div><div><span style="white-space:pre">		</span>return false;</div><div><span style="white-space:pre">	</span>}</div><div></div><div><span style="white-space:pre">	</span>do&nbsp;</div><div><span style="white-space:pre">	</span>{</div><div><span style="white-space:pre">		</span>if (DGifGetRecordType(GifFile, &amp;RecordType) == GIF_ERROR)&nbsp;</div><div><span style="white-space:pre">		</span>{</div><div><span style="white-space:pre">			</span>//PrintGifError(GifFile-&gt;Error);</div><div><span style="white-space:pre">			</span>//exit(EXIT_FAILURE);</div><div><span style="white-space:pre">			</span>close();</div><div><span style="white-space:pre">			</span>return false;</div><div><span style="white-space:pre">		</span>}</div><div></div><div><span style="white-space:pre">		</span>switch (RecordType)&nbsp;</div><div><span style="white-space:pre">		</span>{</div><div><span style="white-space:pre">		</span>case IMAGE_DESC_RECORD_TYPE:</div><div><span style="white-space:pre">			</span></div><div><span style="white-space:pre">			</span>if (DGifGetImageDesc(GifFile) == GIF_ERROR)&nbsp;</div><div><span style="white-space:pre">			</span>{</div><div><span style="white-space:pre">				</span>//PrintGifError(GifFile-&gt;Error);</div><div><span style="white-space:pre">				</span>//exit(EXIT_FAILURE);</div><div><span style="white-space:pre">				</span>close();</div><div><span style="white-space:pre">				</span>return false;</div><div><span style="white-space:pre">			</span>}</div><div><span style="white-space:pre">			</span>Row = GifFile-&gt;Image.Top; /* Image Position relative to Screen. */</div><div><span style="white-space:pre">			</span>Col = GifFile-&gt;Image.Left;</div><div><span style="white-space:pre">			</span>Width = GifFile-&gt;Image.Width;</div><div><span style="white-space:pre">			</span>Height = GifFile-&gt;Image.Height;</div><div><span style="white-space:pre">			</span>//printf("\n%s: Image %d at (%d, %d) [%dx%d]: &nbsp; &nbsp; ",<span style="white-space:pre">	</span>"record ", count, Col, Row, Width, Height);</div><div></div><div><span style="white-space:pre">			</span>if (GifFile-&gt;Image.Left + GifFile-&gt;Image.Width &gt; GifFile-&gt;SWidth ||</div><div><span style="white-space:pre">				</span>GifFile-&gt;Image.Top + GifFile-&gt;Image.Height &gt; GifFile-&gt;SHeight)</div><div><span style="white-space:pre">			</span>{</div><div><span style="white-space:pre">				</span>//fprintf(stderr, "Image %d is not confined to screen dimension, aborted.\n",ImageNum);</div><div><span style="white-space:pre">				</span>//exit(EXIT_FAILURE);</div><div><span style="white-space:pre">				</span>close();</div><div><span style="white-space:pre">				</span>return false;</div><div><span style="white-space:pre">			</span>}</div><div></div><div></div><div><span style="white-space:pre">			</span>if (GifFile-&gt;Image.Interlace)</div><div><span style="white-space:pre">			</span>{</div><div><span style="white-space:pre">				</span>/* Need to perform 4 passes on the images: */</div><div><span style="white-space:pre">				</span>for (Count = i = 0; i &lt; 4; i++)</div><div><span style="white-space:pre">					</span>for (j = Row + InterlacedOffset[i]; j &lt; Row + Height;j += InterlacedJumps[i])&nbsp;</div><div><span style="white-space:pre">					</span>{</div><div><span style="white-space:pre">						</span>//GifQprintf("\b\b\b\b%-4d", Count++);</div><div><span style="white-space:pre">						</span>if (DGifGetLine(GifFile, &amp;ScreenBuffer[j][Col],Width) == GIF_ERROR)</div><div><span style="white-space:pre">						</span>{</div><div><span style="white-space:pre">							</span>//PrintGifError(GifFile-&gt;Error);</div><div><span style="white-space:pre">							</span>//exit(EXIT_FAILURE);</div><div><span style="white-space:pre">							</span>close();</div><div><span style="white-space:pre">							</span>return false;</div><div><span style="white-space:pre">						</span>}</div><div><span style="white-space:pre">					</span>}</div><div><span style="white-space:pre">			</span>}</div><div><span style="white-space:pre">			</span>else</div><div><span style="white-space:pre">			</span>{</div><div></div><div><span style="white-space:pre">				</span>for (i = 0; i &lt; Height; i++)&nbsp;</div><div><span style="white-space:pre">				</span>{</div><div><span style="white-space:pre">					</span>//GifQprintf("\b\b\b\b%-4d", i);</div><div><span style="white-space:pre">					</span>if (DGifGetLine(GifFile, &amp;ScreenBuffer[Row++][Col],Width) == GIF_ERROR)&nbsp;</div><div><span style="white-space:pre">					</span>{</div><div><span style="white-space:pre">						</span>//PrintGifError(GifFile-&gt;Error);</div><div><span style="white-space:pre">						</span>//exit(EXIT_FAILURE);</div><div><span style="white-space:pre">						</span>close();</div><div><span style="white-space:pre">						</span>return false;</div><div><span style="white-space:pre">					</span>}</div><div><span style="white-space:pre">				</span>}</div><div></div><div></div><div><span style="white-space:pre">			</span>}</div><div><span style="white-space:pre">			</span>dumpCurrentFrame();</div><div><span style="white-space:pre">			</span>//count++ ;</div><div><span style="white-space:pre">			</span>break;</div><div></div><div><span style="white-space:pre">			</span></div><div><span style="white-space:pre">		</span>case EXTENSION_RECORD_TYPE:</div><div><span style="white-space:pre">			</span>/* Skip any extension blocks in file: */</div><div><span style="white-space:pre">			</span>if (DGifGetExtension(GifFile, &amp;ExtCode, &amp;Extension) == GIF_ERROR)</div><div><span style="white-space:pre">			</span>{</div><div><span style="white-space:pre">				</span>//PrintGifError(GifFile-&gt;Error);</div><div><span style="white-space:pre">				</span>//exit(EXIT_FAILURE);</div><div><span style="white-space:pre">				</span>close();</div><div><span style="white-space:pre">				</span>return false;</div><div><span style="white-space:pre">			</span>}</div><div><span style="white-space:pre">			</span>while (Extension != NULL)&nbsp;</div><div><span style="white-space:pre">			</span>{</div><div><span style="white-space:pre">				</span>if (DGifGetExtensionNext(GifFile, &amp;Extension) == GIF_ERROR)</div><div><span style="white-space:pre">				</span>{</div><div><span style="white-space:pre">					</span>//PrintGifError(GifFile-&gt;Error);</div><div><span style="white-space:pre">					</span>//exit(EXIT_FAILURE);</div><div><span style="white-space:pre">					</span>close();</div><div><span style="white-space:pre">					</span>return false;</div><div><span style="white-space:pre">				</span>}</div><div><span style="white-space:pre">			</span>}</div><div><span style="white-space:pre">			</span>break;</div><div><span style="white-space:pre">		</span>case TERMINATE_RECORD_TYPE:</div><div><span style="white-space:pre">			</span>break;</div><div><span style="white-space:pre">		</span>default:<span style="white-space:pre">		</span> &nbsp; &nbsp;/* Should be trapped by DGifGetRecordType. */</div><div><span style="white-space:pre">			</span>break;</div><div><span style="white-space:pre">		</span>}</div><div></div><div><span style="white-space:pre">		</span></div><div><span style="white-space:pre">	</span>} while (RecordType != TERMINATE_RECORD_TYPE);<span style="white-space:pre">	</span></div><div></div><div><span style="white-space:pre">	</span>//printf("open finish:GifFile=%x width=%d,height=%d ScreenBuffer=%x\n",GifFile,GifFile-&gt;SWidth,GifFile-&gt;SHeight,ScreenBuffer);</div><div><span style="white-space:pre">	</span>//printf("Extension:%p \n",Extension);</div><div><span style="white-space:pre">	</span>//printf("count:%d\n",count);</div><div></div><div><span style="white-space:pre">	</span>//printf("SColorResolution=%d,SBackGroundColor=%d SavedImages=%p\n",GifFile-&gt;SColorResolution,GifFile-&gt;SBackGroundColor,GifFile-&gt;SavedImages);</div><div></div><div></div><div><span style="white-space:pre">	</span>//printf("Left=%d Top=%d Width=%d Height=%d Interlace=%d \n",GifFile-&gt;Image.Left,GifFile-&gt;Image.Top,GifFile-&gt;Image.Width,GifFile-&gt;Image.Height,GifFile-&gt;Image.Interlace);</div><div></div><div><span style="white-space:pre">	</span>return true;</div><div>}</div><div></div><br /><br /><br /><br /><br /></div><img src ="http://www.cppblog.com/changshoumeng/aggbug/213390.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/changshoumeng/" target="_blank">长寿梦</a> 2016-04-29 18:34 <a href="http://www.cppblog.com/changshoumeng/archive/2016/04/29/213390.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>通过分析日志文件，对比redis的数据，更新redis的数据</title><link>http://www.cppblog.com/changshoumeng/archive/2016/04/18/213304.html</link><dc:creator>长寿梦</dc:creator><author>长寿梦</author><pubDate>Mon, 18 Apr 2016 08:13:00 GMT</pubDate><guid>http://www.cppblog.com/changshoumeng/archive/2016/04/18/213304.html</guid><wfw:comment>http://www.cppblog.com/changshoumeng/comments/213304.html</wfw:comment><comments>http://www.cppblog.com/changshoumeng/archive/2016/04/18/213304.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/changshoumeng/comments/commentRss/213304.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/changshoumeng/services/trackbacks/213304.html</trackback:ping><description><![CDATA[<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; ">-*-coding:utf-8-*-&nbsp;</span><span style="color: #008000; "><br />#</span><span style="color: #008000; ">20160418&nbsp;&nbsp;通过分析日志文件，对比redis的数据，更新redis的数据</span><span style="color: #008000; "><br /></span><span style="color: #0000FF; ">import</span>&nbsp;os<br /><span style="color: #0000FF; ">import</span>&nbsp;redis<br /><br /><span style="color: #0000FF; ">import</span>&nbsp;sys&nbsp;&nbsp;&nbsp;&nbsp;<br />reload(sys)&nbsp;&nbsp;&nbsp;&nbsp;<br /><br /><br />sys.setdefaultencoding(<span style="color: #800000; ">'</span><span style="color: #800000; ">utf-8</span><span style="color: #800000; ">'</span>)<br /><br />r=None<br /><br /><span style="color: #0000FF; ">def</span>&nbsp;byRedis(groupId,msgId):<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">global</span>&nbsp;r<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;r==None:<br />&nbsp;&nbsp;&nbsp;&nbsp;r&nbsp;=&nbsp;redis.Redis(host=<span style="color: #800000; ">'</span><span style="color: #800000; ">192.168.1.227</span><span style="color: #800000; ">'</span>,port=6382,db=0)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">print</span>&nbsp;<span style="color: #800000; ">"</span><span style="color: #800000; ">--------------------------------------&gt;redis</span><span style="color: #800000; ">"</span><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;<span style="color: #0000FF; ">not</span>&nbsp;r.ping()&nbsp;:<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">print</span>&nbsp;<span style="color: #800000; ">"</span><span style="color: #800000; ">cannot&nbsp;ping&nbsp;redis</span><span style="color: #800000; ">"</span><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span><br />&nbsp;&nbsp;&nbsp;&nbsp;key=&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #800000; ">'</span><span style="color: #800000; ">groupmsgcounter_{0}</span><span style="color: #800000; ">'</span>.format(groupId)<br />&nbsp;&nbsp;&nbsp;&nbsp;oldmsgId=r.get(&nbsp;key&nbsp;&nbsp;&nbsp;)<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;oldmsgId&nbsp;==&nbsp;None:<br />&nbsp;&nbsp;&nbsp;&nbsp;oldmsgId=0<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">#</span><span style="color: #008000; ">print&nbsp;"redis&nbsp;error:",key,oldmsgId,msgId</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;oldmsgId=long(oldmsgId)<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">#</span><span style="color: #008000; ">print&nbsp;"redis:",key,oldmsgId,msgId</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;oldmsgId&nbsp;&lt;&nbsp;msgId:<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">print</span>&nbsp;<span style="color: #800000; ">"</span><span style="color: #800000; ">less:</span><span style="color: #800000; ">"</span>,key,oldmsgId,msgId<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span><br />&nbsp;&nbsp;&nbsp;&nbsp;newmsgId=max(msgId,oldmsgId&nbsp;)&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;newmsgId&nbsp;==&nbsp;0&nbsp;:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">print</span>&nbsp;newmsgId<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">#</span><span style="color: #008000; ">r.set(key,newmsgId)</span><span style="color: #008000; "><br /></span><br /><br /><br /><span style="color: #800000; ">'''</span><span style="color: #800000; "><br />&nbsp;cli-groupmsgid:124&nbsp;svr-groupmsgid:124<br />&nbsp;groupid:72057594037938371<br /></span><span style="color: #800000; ">'''</span><br /><br /><span style="color: #0000FF; ">def</span>&nbsp;parse1(lineData):<br />&nbsp;&nbsp;&nbsp;&nbsp;flag1=<span style="color: #800000; ">'</span><span style="color: #800000; ">cli-groupmsgid:</span><span style="color: #800000; ">'</span><br />&nbsp;&nbsp;&nbsp;&nbsp;flag2=<span style="color: #800000; ">'</span><span style="color: #800000; ">svr-groupmsgid:</span><span style="color: #800000; ">'</span><br />&nbsp;&nbsp;&nbsp;&nbsp;flag3=<span style="color: #800000; ">'</span><span style="color: #800000; ">lpContext:</span><span style="color: #800000; ">'</span><br />&nbsp;&nbsp;&nbsp;&nbsp;flag4=<span style="color: #800000; ">'</span><span style="color: #800000; ">groupid:</span><span style="color: #800000; ">'</span><br />&nbsp;&nbsp;&nbsp;&nbsp;flag5=<span style="color: #800000; ">'</span><span style="color: #800000; ">grouprealid:</span><span style="color: #800000; ">'</span><br />&nbsp;&nbsp;&nbsp;&nbsp;s=lineData<br />&nbsp;&nbsp;&nbsp;&nbsp;n1=s.find(flag1)<br />&nbsp;&nbsp;&nbsp;&nbsp;n2=s.find(flag2)<br />&nbsp;&nbsp;&nbsp;&nbsp;n3=s.find(flag3)<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;n4=s.find(flag4)<br />&nbsp;&nbsp;&nbsp;&nbsp;n5=s.find(flag5)<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">#</span><span style="color: #008000; ">&nbsp;print&nbsp;lineData</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;a=s[n1+len(flag1):n2]<br />&nbsp;&nbsp;&nbsp;&nbsp;b=s[n2++len(flag2):n3]<br />&nbsp;&nbsp;&nbsp;&nbsp;c=s[n4+len(flag4):n5]<br />&nbsp;&nbsp;&nbsp;&nbsp;a=long(a)<br />&nbsp;&nbsp;&nbsp;&nbsp;b=long(b)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;c=long&nbsp;(c)<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;(c,max(a,b))<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">#</span><span style="color: #008000; ">print&nbsp;n1,n2,n3</span><span style="color: #008000; "><br /></span><br /><br /><span style="color: #0000FF; ">def</span>&nbsp;paseFile(fileName):<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;result=dict()<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;with&nbsp;open(fileName)&nbsp;&nbsp;as&nbsp;f:<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;lines=f.readlines()<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>&nbsp;line&nbsp;<span style="color: #0000FF; ">in</span>&nbsp;lines:<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;lineData=line.strip()<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(groupId,msgId)&nbsp;=&nbsp;&nbsp;parse1(lineData)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;msgId2=msgId<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;groupId&nbsp;<span style="color: #0000FF; ">in</span>&nbsp;result:<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;msgId2=max(result[groupId],msgId)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;result[groupId]=msgId2<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">#</span><span style="color: #008000; ">&nbsp;break</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;result&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /><span style="color: #0000FF; ">def</span>&nbsp;testTwoDict(&nbsp;result1,result2):<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>&nbsp;(d,x)&nbsp;<span style="color: #0000FF; ">in</span>&nbsp;result1.items():<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;msgId=x<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;d&nbsp;<span style="color: #0000FF; ">in</span>&nbsp;result2:<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;msgId&nbsp;&lt;&nbsp;result2[d]&nbsp;:<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;msgId=result2[d]<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">#</span><span style="color: #008000; ">print&nbsp;"find:",d,x,msgId</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;byRedis(d,msgId)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /><br /><br />&nbsp;&nbsp;<br /><span style="color: #0000FF; ">def</span>&nbsp;main():<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;result1=paseFile(<span style="color: #800000; ">"</span><span style="color: #800000; ">test1.txt</span><span style="color: #800000; ">"</span>)&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;result2=paseFile(<span style="color: #800000; ">"</span><span style="color: #800000; ">test2.txt</span><span style="color: #800000; ">"</span>)&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;result3=dict()<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;testTwoDict(&nbsp;result1,result2)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;testTwoDict(&nbsp;result2,result1)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /><br /><br />main()&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /></div><img src ="http://www.cppblog.com/changshoumeng/aggbug/213304.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/changshoumeng/" target="_blank">长寿梦</a> 2016-04-18 16:13 <a href="http://www.cppblog.com/changshoumeng/archive/2016/04/18/213304.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>破解广州交管所验证码之主流程</title><link>http://www.cppblog.com/changshoumeng/archive/2015/09/23/211893.html</link><dc:creator>长寿梦</dc:creator><author>长寿梦</author><pubDate>Wed, 23 Sep 2015 02:59:00 GMT</pubDate><guid>http://www.cppblog.com/changshoumeng/archive/2015/09/23/211893.html</guid><wfw:comment>http://www.cppblog.com/changshoumeng/comments/211893.html</wfw:comment><comments>http://www.cppblog.com/changshoumeng/archive/2015/09/23/211893.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/changshoumeng/comments/commentRss/211893.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/changshoumeng/services/trackbacks/211893.html</trackback:ping><description><![CDATA[<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 />--><br /><br />inline&nbsp;<span style="color: #0000FF; ">void</span>&nbsp;image2text2(&nbsp;RECT_IMAGE*&nbsp;rawImage,svm_model&nbsp;*model,<span style="color: #0000FF; ">char</span>*&nbsp;outbuf)<br />{&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">static</span>&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;g_index=0;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;RECT_IMAGE&nbsp;&nbsp;tempImage;<br />&nbsp;&nbsp;&nbsp;&nbsp;tempImage.init(rawImage-&gt;w,rawImage-&gt;h,NULL);<br />&nbsp;&nbsp;&nbsp;&nbsp;RECT_IMAGE*&nbsp;grayImage&nbsp;=&nbsp;&amp;tempImage;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;convert2GrayImage(rawImage,grayImage);<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">writeRectImage("gray.bmp",grayImage);</span><span style="color: #008000; "><br /></span><br />&nbsp;&nbsp;&nbsp;&nbsp;std::list&lt;&nbsp;std::<span style="color: #0000FF; ">set</span>&lt;XYPOINT&gt;&nbsp;&gt;&nbsp;connGraps;<br />&nbsp;&nbsp;&nbsp;&nbsp;getConnectedGraphs(grayImage,connGraps);<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(&nbsp;connGraps.size()==0){<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;errlog("&nbsp;connGraps.size()&nbsp;is&nbsp;0");<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br /><br />&nbsp;&nbsp;&nbsp;&nbsp;l_uint32&nbsp;width=55;<br />&nbsp;&nbsp;&nbsp;&nbsp;l_uint32&nbsp;height=55;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;i=0;<br /><br /><br />&nbsp;&nbsp;&nbsp;&nbsp;std::list&lt;&nbsp;std::<span style="color: #0000FF; ">set</span>&lt;XYPOINT&gt;&nbsp;&gt;::iterator&nbsp;it&nbsp;=&nbsp;connGraps.begin();<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>&nbsp;(&nbsp;;&nbsp;it&nbsp;!=&nbsp;connGraps.end()&nbsp;;++it)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;RECT_IMAGE&nbsp;&nbsp;subImage;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;subImage.init(width,height,NULL);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;std::<span style="color: #0000FF; ">set</span>&lt;XYPOINT&gt;&amp;&nbsp;connGrap&nbsp;=&nbsp;*it;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;std::vector&lt;XYPOINT&gt;&nbsp;conList(connGrap.begin(),connGrap.end());<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;std::vector&lt;XYPOINT&gt;&nbsp;outList<span style="color: #008000; ">/*</span><span style="color: #008000; ">(connGrap.begin(),connGrap.end())</span><span style="color: #008000; ">*/</span>;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">去除左边缘噪点</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;processSubImage(rawImage,conList,outList);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;l_uint32&nbsp;x0=0;l_uint32&nbsp;y0=0;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;getOffsetPos(outList,x0,y0);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">左上角对齐&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;std::vector&lt;XYPOINT&gt;::iterator&nbsp;pos&nbsp;=&nbsp;outList.begin();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>&nbsp;(&nbsp;;&nbsp;pos&nbsp;!=&nbsp;outList.end()&nbsp;;&nbsp;++pos){<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;l_uint32&nbsp;x&nbsp;=&nbsp;pos-&gt;x;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;l_uint32&nbsp;y&nbsp;=&nbsp;pos-&gt;y;&nbsp;&nbsp;&nbsp;&nbsp;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;l_uint32&nbsp;color&nbsp;=&nbsp;rawImage-&gt;getPixel(x,y);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;l_uint32&nbsp;x1&nbsp;=&nbsp;x-x0;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;l_uint32&nbsp;y1&nbsp;=&nbsp;y-y0;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(x1&nbsp;&gt;=&nbsp;width){<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;x1=&nbsp;width-1;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(&nbsp;y1&nbsp;&gt;=&nbsp;height){<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;y1=&nbsp;height-1&nbsp;&nbsp;;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;subImage.putPixel(x1,y1,color);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">char&nbsp;fn[512];<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">sprintf(fn,"result\\%d.bmp",g_index++);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">writeRectImage(fn,&amp;subImage);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">return;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">预测得到结果</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;svm_problem&nbsp;prob;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pickupFeatureDataFromRectImage(prob,&amp;subImage);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">double</span>&nbsp;v&nbsp;=&nbsp;svm_predict(model,&nbsp;prob.x[0]);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;svm_problem_release(&amp;prob);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sprintf(outbuf+i,"%c",<span style="color: #0000FF; ">int</span>(v));<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;i++;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br /><br />}</div><img src ="http://www.cppblog.com/changshoumeng/aggbug/211893.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/changshoumeng/" target="_blank">长寿梦</a> 2015-09-23 10:59 <a href="http://www.cppblog.com/changshoumeng/archive/2015/09/23/211893.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>定时刷新页面，比如定时拉取你所关注的股票行情</title><link>http://www.cppblog.com/changshoumeng/archive/2015/07/29/211406.html</link><dc:creator>长寿梦</dc:creator><author>长寿梦</author><pubDate>Wed, 29 Jul 2015 07:54:00 GMT</pubDate><guid>http://www.cppblog.com/changshoumeng/archive/2015/07/29/211406.html</guid><wfw:comment>http://www.cppblog.com/changshoumeng/comments/211406.html</wfw:comment><comments>http://www.cppblog.com/changshoumeng/archive/2015/07/29/211406.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cppblog.com/changshoumeng/comments/commentRss/211406.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/changshoumeng/services/trackbacks/211406.html</trackback:ping><description><![CDATA[<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 />-->&lt;?php<br />&nbsp;&nbsp;&nbsp;<span style="color: #800080; ">$content</span>&nbsp;=&nbsp;<span style="color: #008080; ">file_get_contents</span>('http://www.baidu.com/s?wd=zhongguoyihang&amp;cl=3');<br />&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">shangzhengzhishu<br />&nbsp;&nbsp;&nbsp;//zhongguoyinhang</span><span style="color: #008000; "><br /></span>?&gt;<br />&lt;!DOCTYPE&nbsp;html&gt;<br />&lt;html&gt;<br />&lt;head&nbsp;lang="en"&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&lt;meta&nbsp;charset="UTF-8"&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&lt;meta&nbsp;content="text/html;&nbsp;charset=utf-8"&nbsp;http-equiv="Content-Type"/&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&lt;meta&nbsp;content="no-cache,must-revalidate"&nbsp;http-equiv="Cache-Control"&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&lt;meta&nbsp;content="no-cache"&nbsp;http-equiv="pragma"&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&lt;meta&nbsp;content="0"&nbsp;http-equiv="expires"&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&lt;title&gt;zthome&lt;/title&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&lt;script&nbsp;type="text/javascript"&nbsp;&nbsp;src="resources/jquery/jquery-2.1.4.min.js"&gt;&lt;/script&gt;<br /><br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&lt;script&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$(document).ready(<span style="color: #0000FF; ">function</span>&nbsp;()&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$("#date").text((<span style="color: #0000FF; ">new</span>&nbsp;<span style="color: #008080; ">Date</span>()).toString());&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;setInterval("startRequest()",3000);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;});<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">function</span>&nbsp;startRequest()<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;window.location.reload();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&lt;/script&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&lt;style&nbsp;type="text/css"&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">#</span><span style="color: #008000; ">gupiao&nbsp;{&nbsp;</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;width&nbsp;:200px;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;<br />&lt;/style&gt;<br /><br />&lt;/head&gt;<br />&lt;body&gt;<br />&lt;div&nbsp;id="date"&gt;<br />&lt;/div&gt;<br />&lt;div&nbsp;id="gupiao"&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&lt;?php&nbsp;<span style="color: #0000FF; ">echo</span>&nbsp;<span style="color: #800080; ">$content</span>&nbsp;;&nbsp;?&gt;<br />&lt;/div&gt;<br />&lt;/body&gt;<br />&lt;/html&gt;</div><img src ="http://www.cppblog.com/changshoumeng/aggbug/211406.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/changshoumeng/" target="_blank">长寿梦</a> 2015-07-29 15:54 <a href="http://www.cppblog.com/changshoumeng/archive/2015/07/29/211406.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>抓取QQ空间里某个号码的日志，python的乱码是个问题啊</title><link>http://www.cppblog.com/changshoumeng/archive/2015/07/16/211279.html</link><dc:creator>长寿梦</dc:creator><author>长寿梦</author><pubDate>Thu, 16 Jul 2015 13:49:00 GMT</pubDate><guid>http://www.cppblog.com/changshoumeng/archive/2015/07/16/211279.html</guid><wfw:comment>http://www.cppblog.com/changshoumeng/comments/211279.html</wfw:comment><comments>http://www.cppblog.com/changshoumeng/archive/2015/07/16/211279.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/changshoumeng/comments/commentRss/211279.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/changshoumeng/services/trackbacks/211279.html</trackback:ping><description><![CDATA[<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; ">&nbsp;-*-&nbsp;coding:&nbsp;utf-8&nbsp;-*-</span><span style="color: #008000; "><br /></span><br /><br /><br /><span style="color: #0000FF; ">from</span>&nbsp;HttpRequestModule&nbsp;<span style="color: #0000FF; ">import</span>&nbsp;*&nbsp;<br /><br /><span style="color: #0000FF; ">import</span>&nbsp;os<br /><span style="color: #0000FF; ">import</span>&nbsp;json<br /><span style="color: #0000FF; ">import</span>&nbsp;traceback<br /><br /><span style="color: #0000FF; ">import</span>&nbsp;codecs<br /><span style="color: #0000FF; ">from</span>&nbsp;lxml&nbsp;<span style="color: #0000FF; ">import</span>&nbsp;etree<br /><span style="color: #0000FF; ">import</span>&nbsp;StringIO,&nbsp;gzip&nbsp;<br /><span style="color: #0000FF; ">import</span>&nbsp;sys<br />reload(sys)<br />sys.setdefaultencoding(<span style="color: #800000; ">'</span><span style="color: #800000; ">utf-8</span><span style="color: #800000; ">'</span>)<br /><br /><span style="color: #0000FF; ">def</span>&nbsp;write_file(file_name,file_data,encoding):<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;len(file_data)&nbsp;==&nbsp;0&nbsp;:<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">print</span>&nbsp;<span style="color: #800000; ">"</span><span style="color: #800000; ">file_data&nbsp;is&nbsp;zero</span><span style="color: #800000; ">"</span><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span><br />&nbsp;&nbsp;&nbsp;&nbsp;file_dir&nbsp;=&nbsp;r<span style="color: #800000; ">"</span><span style="color: #800000; ">D:\fs\test_data\qqzone</span><span style="color: #800000; ">"</span><br />&nbsp;&nbsp;&nbsp;&nbsp;file_path=os.path.join(file_dir,file_name)<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">print</span>&nbsp;file_path&nbsp;&nbsp;&nbsp;<br /><span style="color: #008000; ">#</span><span style="color: #008000; ">&nbsp;&nbsp;&nbsp;&nbsp;fp=open(file_path,"w")</span><span style="color: #008000; "><br />#</span><span style="color: #008000; ">&nbsp;&nbsp;&nbsp;&nbsp;fp.write(file_data)</span><span style="color: #008000; "><br />#</span><span style="color: #008000; ">&nbsp;&nbsp;&nbsp;&nbsp;fp.flush()</span><span style="color: #008000; "><br />#</span><span style="color: #008000; ">&nbsp;&nbsp;&nbsp;&nbsp;fp.close()</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;with&nbsp;codecs.open(file_path,<span style="color: #800000; ">"</span><span style="color: #800000; ">w</span><span style="color: #800000; ">"</span>,encoding)&nbsp;as&nbsp;f:<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;f.write(file_data)<br /><br /><br /><span style="color: #0000FF; ">def</span>&nbsp;decodeJson(json_string):<br />&nbsp;&nbsp;&nbsp;&nbsp;decode_json=None<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">try</span>:<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;decode_json=json.loads(json_string)&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;decode_json<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">except</span>&nbsp;(TypeError,&nbsp;ValueError)&nbsp;as&nbsp;err:<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">print</span>(&nbsp;<span style="color: #800000; ">'</span><span style="color: #800000; ">TypeError&nbsp;or&nbsp;ValueError:{0}</span><span style="color: #800000; ">'</span>.format(err)&nbsp;)<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">except</span>&nbsp;&nbsp;Exception,e:<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">print</span>(&nbsp;traceback.format_exc()&nbsp;)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">pass</span><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;decode_json<br /><br /><br /><br /><span style="color: #0000FF; ">def</span>&nbsp;getUserBlogList():<br />&nbsp;&nbsp;&nbsp;&nbsp;blog_list=[]<br />&nbsp;&nbsp;&nbsp;&nbsp;diray_url=<span style="color: #800000; ">'''</span><span style="color: #800000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;http://b1.qzone.qq.com/cgi-bin/blognew/get_abs?hostUin=859226880&amp;blogType=0&amp;cateName=&amp;cateHex=&amp;statYear=2015&amp;reqInfo=7&amp;pos=0&amp;num=15&amp;sortType=0&amp;absType=0&amp;source=0&amp;rand=0.6346770680975169&amp;ref=qzone&amp;g_tk=1611717761&amp;verbose=1<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #800000; ">'''</span>&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;data=doGet(diray_url)&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;data_len&nbsp;=&nbsp;len(data)<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;data_len&nbsp;==&nbsp;0&nbsp;:<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">print</span>&nbsp;<span style="color: #800000; ">"</span><span style="color: #800000; ">data&nbsp;len&nbsp;is&nbsp;0</span><span style="color: #800000; ">"</span><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;blog_list<br />&nbsp;&nbsp;&nbsp;&nbsp;data_json&nbsp;=&nbsp;data[10:data_len-2]&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">#</span><span style="color: #008000; ">write_file('bloglist.txt',data_json,'utf-8')&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;decode_json=decodeJson(data_json.decode(<span style="color: #800000; ">"</span><span style="color: #800000; ">gbk</span><span style="color: #800000; ">"</span>))<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;decode_json&nbsp;==&nbsp;None&nbsp;:<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">print</span>&nbsp;<span style="color: #800000; ">"</span><span style="color: #800000; ">decode_json&nbsp;is&nbsp;None</span><span style="color: #800000; ">"</span><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;[]<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;decode_json[<span style="color: #800000; ">'</span><span style="color: #800000; ">code</span><span style="color: #800000; ">'</span>]&nbsp;!=&nbsp;0:<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">print</span>&nbsp;<span style="color: #800000; ">"</span><span style="color: #800000; ">server&nbsp;response&nbsp;code&nbsp;is&nbsp;</span><span style="color: #800000; ">"</span>+decode_json[<span style="color: #800000; ">'</span><span style="color: #800000; ">code</span><span style="color: #800000; ">'</span>]<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;[]<br />&nbsp;&nbsp;&nbsp;&nbsp;data&nbsp;=decode_json[<span style="color: #800000; ">'</span><span style="color: #800000; ">data</span><span style="color: #800000; ">'</span>]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;data[<span style="color: #800000; ">'</span><span style="color: #800000; ">totalNum</span><span style="color: #800000; ">'</span>]&nbsp;&lt;=0&nbsp;:<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">print</span>&nbsp;<span style="color: #800000; ">"</span><span style="color: #800000; ">server&nbsp;response&nbsp;totalnum&nbsp;is&nbsp;</span><span style="color: #800000; ">"</span>+data[<span style="color: #800000; ">'</span><span style="color: #800000; ">totalNum</span><span style="color: #800000; ">'</span>]<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;[]<br />&nbsp;&nbsp;&nbsp;&nbsp;blog_list=data[<span style="color: #800000; ">'</span><span style="color: #800000; ">list</span><span style="color: #800000; ">'</span>]&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;blog_list<br /><br /><span style="color: #0000FF; ">def</span>&nbsp;getUserBlog(uin,blogid):<br />&nbsp;&nbsp;&nbsp;&nbsp;url=<span style="color: #800000; ">'''</span><span style="color: #800000; ">&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;http://b1.qzone.qq.com/cgi-bin/blognew/blog_output_data?uin=%(uin)s&amp;blogid=%(blogid)s&amp;styledm=ctc.qzonestyle.gtimg.cn&amp;imgdm=ctc.qzs.qq.com&amp;bdm=b.qzone.qq.com&amp;mode=2&amp;numperpage=15&amp;timestamp=1437033537&amp;dprefix=&amp;inCharset=gb2312&amp;outCharset=gb2312&amp;ref=qzone<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #800000; ">'''</span>%{<span style="color: #800000; ">'</span><span style="color: #800000; ">uin</span><span style="color: #800000; ">'</span>:uin,<span style="color: #800000; ">'</span><span style="color: #800000; ">blogid</span><span style="color: #800000; ">'</span>:blogid}<br />&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;my_headers={<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #800000; ">"</span><span style="color: #800000; ">Accept-Encoding</span><span style="color: #800000; ">"</span>:<span style="color: #800000; ">"</span><span style="color: #800000; ">gzip,deflate,sdch</span><span style="color: #800000; ">"</span>,<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #800000; ">"</span><span style="color: #800000; ">Accept-Language</span><span style="color: #800000; ">"</span>:&nbsp;<span style="color: #800000; ">"</span><span style="color: #800000; ">zh-CN,zh;q=0.8,en;q=0.6</span><span style="color: #800000; ">"</span>&nbsp;,<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #800000; ">"</span><span style="color: #800000; ">User-Agent</span><span style="color: #800000; ">"</span>:&nbsp;<span style="color: #800000; ">"</span><span style="color: #800000; ">Mozilla/5.0&nbsp;(Windows&nbsp;NT&nbsp;6.1;&nbsp;WOW64)&nbsp;AppleWebKit/537.36&nbsp;(KHTML,&nbsp;like&nbsp;Gecko)&nbsp;Chrome/38.0.2125.104&nbsp;Safari/537.36</span><span style="color: #800000; ">"</span>&nbsp;,<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #800000; ">"</span><span style="color: #800000; ">Accept</span><span style="color: #800000; ">"</span>:&nbsp;<span style="color: #800000; ">"</span><span style="color: #800000; ">text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8</span><span style="color: #800000; ">"</span>&nbsp;,<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #800000; ">"</span><span style="color: #800000; ">Referer</span><span style="color: #800000; ">"</span>:&nbsp;<span style="color: #800000; ">"</span><span style="color: #800000; ">http://ctc.qzs.qq.com/qzone/newblog/blogcanvas.html</span><span style="color: #800000; ">"</span>&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;request&nbsp;=&nbsp;urllib2.Request(url,headers=my_headers)<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">try</span>:<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;response&nbsp;=&nbsp;urllib2.urlopen(request)&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">except</span>&nbsp;URLError,e:&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;hasattr(e,&nbsp;<span style="color: #800000; ">'</span><span style="color: #800000; ">code</span><span style="color: #800000; ">'</span>):&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">print</span>(<span style="color: #800000; ">'</span><span style="color: #800000; ">The&nbsp;server&nbsp;couldn\</span><span style="color: #800000; ">'</span>t&nbsp;fulfill&nbsp;the&nbsp;request.&nbsp;errorcode:{0}<span style="color: #800000; ">'</span><span style="color: #800000; ">.format(e.code&nbsp;))&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #800000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">elif</span>&nbsp;hasattr(e,&nbsp;<span style="color: #800000; ">'</span><span style="color: #800000; ">reason</span><span style="color: #800000; ">'</span>):&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">print</span>(<span style="color: #800000; ">'</span><span style="color: #800000; ">We&nbsp;failed&nbsp;to&nbsp;reach&nbsp;a&nbsp;server.&nbsp;reason:{0}</span><span style="color: #800000; ">'</span>.format(e.reason&nbsp;))&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">else</span>:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;page&nbsp;=&nbsp;response.read()&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;page&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;<span style="color: #800000; ">""</span><br /><br /><span style="color: #0000FF; ">def</span>&nbsp;getText(elem):<br />&nbsp;&nbsp;&nbsp;&nbsp;rc&nbsp;=&nbsp;[]<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>&nbsp;node&nbsp;<span style="color: #0000FF; ">in</span>&nbsp;elem.itertext():<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;rc.append(node.strip())<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;<span style="color: #800000; ">''</span>.join(rc)<br /><br /><span style="color: #0000FF; ">def</span>&nbsp;gzdecode(data)&nbsp;:<br />&nbsp;&nbsp;&nbsp;&nbsp;compressedstream&nbsp;=&nbsp;StringIO.StringIO(data)<br />&nbsp;&nbsp;&nbsp;&nbsp;gziper&nbsp;=&nbsp;gzip.GzipFile(fileobj=compressedstream)&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;data2&nbsp;=&nbsp;gziper.read()&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">#</span><span style="color: #008000; ">&nbsp;读取解压缩后数据&nbsp;</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;data2&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;<br /><span style="color: #0000FF; ">def</span>&nbsp;test(blogid):<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">print</span>&nbsp;blogid<br />&nbsp;&nbsp;&nbsp;&nbsp;blog_data=getUserBlog(<span style="color: #800000; ">'</span><span style="color: #800000; ">859226880</span><span style="color: #800000; ">'</span>,blogid)<br />&nbsp;&nbsp;&nbsp;&nbsp;blog_data=gzdecode(blog_data)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">#</span><span style="color: #008000; ">write_file(&nbsp;blogid+'.html',blog_data&nbsp;)</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">#</span><span style="color: #008000; ">return</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">try</span>:&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;content=blog_data.decode(<span style="color: #800000; ">'</span><span style="color: #800000; ">utf-8</span><span style="color: #800000; ">'</span>)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tree=etree.HTML(content)&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;node=tree.xpath(<span style="color: #800000; ">"</span><span style="color: #800000; ">//div[@id='blogDetailDiv']</span><span style="color: #800000; ">"</span>)[0]<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tgt_data=getText(node)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">print</span>&nbsp;<span style="color: #800000; ">"</span><span style="color: #800000; ">*</span><span style="color: #800000; ">"</span>*30<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">print</span>&nbsp;tgt_data<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;write_file(&nbsp;blogid+<span style="color: #800000; ">'</span><span style="color: #800000; ">.txt</span><span style="color: #800000; ">'</span>,tgt_data,&nbsp;<span style="color: #800000; ">'</span><span style="color: #800000; ">gbk</span><span style="color: #800000; ">'</span>)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">except</span>&nbsp;&nbsp;Exception,ex&nbsp;:<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">print</span>&nbsp;<span style="color: #800000; ">"</span><span style="color: #800000; ">111</span><span style="color: #800000; ">"</span>,Exception,<span style="color: #800000; ">"</span><span style="color: #800000; ">:</span><span style="color: #800000; ">"</span>,ex<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">try</span>:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;content=blog_data.decode(<span style="color: #800000; ">'</span><span style="color: #800000; ">gbk</span><span style="color: #800000; ">'</span>)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tree=etree.HTML(content)&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;node=tree.xpath(<span style="color: #800000; ">"</span><span style="color: #800000; ">//div[@id='blogDetailDiv']</span><span style="color: #800000; ">"</span>)[0]<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tgt_data=getText(node)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">print</span>&nbsp;<span style="color: #800000; ">"</span><span style="color: #800000; ">_</span><span style="color: #800000; ">"</span>*30<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">print</span>&nbsp;tgt_data<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;write_file(&nbsp;blogid+<span style="color: #800000; ">'</span><span style="color: #800000; ">.txt</span><span style="color: #800000; ">'</span>,tgt_data&nbsp;,<span style="color: #800000; ">'</span><span style="color: #800000; ">utf-8</span><span style="color: #800000; ">'</span>)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">except</span>&nbsp;&nbsp;Exception,ex&nbsp;:<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">print</span>&nbsp;<span style="color: #800000; ">"</span><span style="color: #800000; ">222</span><span style="color: #800000; ">"</span>,Exception,<span style="color: #800000; ">"</span><span style="color: #800000; ">:</span><span style="color: #800000; ">"</span>,ex&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;<br /><span style="color: #0000FF; ">def</span>&nbsp;main():<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">print</span>&nbsp;<span style="color: #800000; ">"</span><span style="color: #800000; ">main</span><span style="color: #800000; ">"</span><br />&nbsp;&nbsp;&nbsp;&nbsp;test(<span style="color: #800000; ">"</span><span style="color: #800000; ">1288281044</span><span style="color: #800000; ">"</span>)<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">#</span><span style="color: #008000; ">return&nbsp;</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;blog_list=getUserBlogList()<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>&nbsp;blog_item&nbsp;<span style="color: #0000FF; ">in</span>&nbsp;blog_list:<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;blogId=blog_item[<span style="color: #800000; ">'</span><span style="color: #800000; ">blogId</span><span style="color: #800000; ">'</span>]<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">print</span>&nbsp;blogId<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;test(&nbsp;str(blogId)&nbsp;)<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">pass</span><br />&nbsp;&nbsp;&nbsp;&nbsp;<br /><br /><br />main()</div><img src ="http://www.cppblog.com/changshoumeng/aggbug/211279.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/changshoumeng/" target="_blank">长寿梦</a> 2015-07-16 21:49 <a href="http://www.cppblog.com/changshoumeng/archive/2015/07/16/211279.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>一个启动服务的SHELL脚本</title><link>http://www.cppblog.com/changshoumeng/archive/2015/06/19/210994.html</link><dc:creator>长寿梦</dc:creator><author>长寿梦</author><pubDate>Fri, 19 Jun 2015 10:48:00 GMT</pubDate><guid>http://www.cppblog.com/changshoumeng/archive/2015/06/19/210994.html</guid><wfw:comment>http://www.cppblog.com/changshoumeng/comments/210994.html</wfw:comment><comments>http://www.cppblog.com/changshoumeng/archive/2015/06/19/210994.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/changshoumeng/comments/commentRss/210994.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/changshoumeng/services/trackbacks/210994.html</trackback:ping><description><![CDATA[<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 />-->#!/bin/bash<br />#zhangtao<br /><br />PROCESS_NAME="msgdbgate"<br />LOG_FILE="run.log"<br />PID_FILE="$PROCESS_NAME.pid"<br /><br />BASE_DIR=""<br />RUN_DIR=""<br />LIB_DIR=""<br /><br /><br /><span style="color: #0000FF; ">function</span>&nbsp;timeStamp(){<br />&nbsp;&nbsp;&nbsp;&nbsp;date&nbsp;+'%Y/%m/%d&nbsp;%H:%M:%S'<br />}<br /><br /><span style="color: #0000FF; ">function</span>&nbsp;logMessage(){<br />&nbsp;&nbsp;&nbsp;&nbsp;echo&nbsp;$(timeStamp)&nbsp;$@&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;echo&nbsp;$(timeStamp)&nbsp;$@&gt;&gt;$RUN_DIR/$LOG_FILE<br />}<br /><br /><br /><span style="color: #0000FF; ">function</span>&nbsp;setEnv(){<br />&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;[&nbsp;-z&nbsp;"$BASE_DIR"&nbsp;]&nbsp;;&nbsp;then&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PRG="$0"<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">while</span>&nbsp;[&nbsp;-h&nbsp;"$PRG"&nbsp;]&nbsp;;&nbsp;<span style="color: #0000FF; ">do</span><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ls=`ls&nbsp;-ld&nbsp;"$PRG"`<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;link=`expr&nbsp;"$ls"&nbsp;:&nbsp;'.*-&gt;&nbsp;\(.*\)$'`<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;expr&nbsp;"$link"&nbsp;:&nbsp;'/.*'&nbsp;&gt;&nbsp;/dev/<span style="color: #0000FF; ">null</span>;&nbsp;then<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PRG="$link"<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">else</span><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PRG="`dirname&nbsp;"$PRG"`/$link"<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fi<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;done<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;BASE_DIR=`dirname&nbsp;"$PRG"`/..<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;BASE_DIR=`cd&nbsp;"$BASE_DIR"&nbsp;&amp;&amp;&nbsp;pwd`<br />&nbsp;&nbsp;&nbsp;fi<br />&nbsp;&nbsp;&nbsp;RUN_DIR=$BASE_DIR/bin/run<br />&nbsp;&nbsp;&nbsp;BIN_DIR=$BASE_DIR/bin<br />&nbsp;&nbsp;&nbsp;LIB_DIR=$BASE_DIR/lib<br />&nbsp;&nbsp;&nbsp;mkdir&nbsp;-p&nbsp;&nbsp;$RUN_DIR&nbsp;&nbsp;&nbsp;&nbsp;<br />}<br /><br /><br /><span style="color: #0000FF; ">function</span>&nbsp;excuteCmdAndreportLog(){<br />&nbsp;&nbsp;&nbsp;&nbsp;`eval&nbsp;$@`&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;logMessage&nbsp;$@<br />}<br /><br /><br /><span style="color: #0000FF; ">function</span>&nbsp;running(){<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;[&nbsp;-f&nbsp;"$RUN_DIR/$PID_FILE"&nbsp;];&nbsp;then<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pid=$(cat&nbsp;"$RUN_DIR/$PID_FILE")<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#logMessage&nbsp;"check&nbsp;:&nbsp;&nbsp;pid=$pid&nbsp;"<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;process=`ps&nbsp;aux&nbsp;|&nbsp;grep&nbsp;"&nbsp;$pid&nbsp;"&nbsp;|&nbsp;grep&nbsp;-v&nbsp;grep`;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#logMessage&nbsp;"result:&nbsp;$process"<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;[&nbsp;"$process"&nbsp;==&nbsp;""&nbsp;];&nbsp;then<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;1;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">else</span><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;0;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fi<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">else</span><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;1<br />&nbsp;&nbsp;&nbsp;&nbsp;fi<br />}<br /><br /><br /><span style="color: #0000FF; ">function</span>&nbsp;start_server(){&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;running&nbsp;;then<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;logMessage&nbsp;"$PROCESS_NAME&nbsp;is&nbsp;running&nbsp;<img src="http://www.cppblog.com/Images/dot.gif"  alt="" />"<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;exit&nbsp;1<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fi<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;logMessage&nbsp;"----------------------------------&gt;&nbsp;start_server&nbsp;&nbsp;&nbsp;&nbsp;$PROCESS_NAME&nbsp;"&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;logMessage&nbsp;"nohup&nbsp;$BIN_DIR/$PROCESS_NAME&nbsp;&nbsp;2&gt;&amp;1&nbsp;1&gt;&amp;/dev/null&nbsp;&nbsp;&amp;"&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;export&nbsp;LD_LIBRARY_PATH=../lib:/usr/local/mysql/lib/:$LD_LIBRARY_PATH<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;chmod&nbsp;a+x&nbsp;$BIN_DIR/$PROCESS_NAME<br />&nbsp;&nbsp;&nbsp;&nbsp;nohup&nbsp;$BIN_DIR/$PROCESS_NAME&nbsp;&nbsp;2&gt;&amp;1&nbsp;1&gt;&amp;/dev/<span style="color: #0000FF; ">null</span>&nbsp;&nbsp;&amp;<br />&nbsp;&nbsp;&nbsp;&nbsp;echo&nbsp;$!&nbsp;&gt;$RUN_DIR/$PID_FILE<br />&nbsp;&nbsp;&nbsp;&nbsp;excuteCmdAndreportLog&nbsp;"chmod&nbsp;755&nbsp;$RUN_DIR/$PID_FILE"<br />&nbsp;&nbsp;&nbsp;&nbsp;sleep&nbsp;2<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;running&nbsp;;then<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;logMessage&nbsp;"$PROCESS_NAME&nbsp;is&nbsp;running&nbsp;<img src="http://www.cppblog.com/Images/dot.gif"  alt="" />&nbsp;&nbsp;&nbsp;"<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;exit&nbsp;1<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fi<br />&nbsp;&nbsp;&nbsp;&nbsp;logMessage&nbsp;"$PROCESS_NAME&nbsp;start&nbsp;failed&nbsp;!"<br />&nbsp;&nbsp;&nbsp;&nbsp;#tail&nbsp;-f&nbsp;$LOG_DIR/$LOG_FILE<br />}<br /><br /><span style="color: #0000FF; ">function</span>&nbsp;stop_server(){<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;!&nbsp;running;then<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;logMessage&nbsp;"$PROCESS_NAME&nbsp;was&nbsp;not&nbsp;running"<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;exit&nbsp;1<br />&nbsp;&nbsp;&nbsp;&nbsp;fi<br />&nbsp;&nbsp;&nbsp;&nbsp;count=0<br />&nbsp;&nbsp;&nbsp;&nbsp;pid=$(&nbsp;cat&nbsp;$RUN_DIR/$PID_FILE)<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">while</span>&nbsp;running;&nbsp;<span style="color: #0000FF; ">do</span><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;let&nbsp;count=$count+1<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;logMessage&nbsp;"stopping&nbsp;$PROCESS_NAME&nbsp;$count&nbsp;times&nbsp;!!!"<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;[&nbsp;$count&nbsp;-gt&nbsp;5&nbsp;]&nbsp;;then<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;excuteCmdAndreportLog&nbsp;"kill&nbsp;-9&nbsp;$pid"<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">else</span><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sleep&nbsp;1<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;excuteCmdAndreportLog&nbsp;"kill&nbsp;&nbsp;$pid"<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fi<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sleep&nbsp;2<br />&nbsp;&nbsp;&nbsp;&nbsp;done<br />&nbsp;&nbsp;&nbsp;&nbsp;logMessage&nbsp;"-----------&gt;&nbsp;stop&nbsp;$PROCESS_NAME&nbsp;successfully&nbsp;&lt;------------"<br />&nbsp;&nbsp;&nbsp;&nbsp;excuteCmdAndreportLog&nbsp;"rm&nbsp;$RUN_DIR/$PID_FILE"<br />}<br /><br /><span style="color: #0000FF; ">function</span>&nbsp;monit_server(){<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;running&nbsp;;then&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;exit&nbsp;1<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fi&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;chmod&nbsp;a+x&nbsp;$BIN_DIR/$PROCESS_NAME<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;nohup&nbsp;$BIN_DIR/$PROCESS_NAME&nbsp;&nbsp;2&gt;&amp;1&nbsp;1&gt;&amp;/dev/<span style="color: #0000FF; ">null</span>&nbsp;&nbsp;&amp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;echo&nbsp;$!&nbsp;&gt;$RUN_DIR/$PID_FILE<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;chmod&nbsp;755&nbsp;$RUN_DIR/$PID_FILE&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />}<br /><br /><span style="color: #0000FF; ">function</span>&nbsp;status(){<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;running;&nbsp;then<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;logMessage&nbsp;"$PROCESS_NAME&nbsp;is&nbsp;running.";<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;exit&nbsp;0;<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">else</span><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;logMessage&nbsp;"$PROCESS_NAME&nbsp;was&nbsp;stopped.";<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;exit&nbsp;1;<br />&nbsp;&nbsp;&nbsp;&nbsp;fi<br />}<br /><br /><br />SERVER_NAME=$PROCESS_NAME<br /><span style="color: #0000FF; ">function</span>&nbsp;help()&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;echo&nbsp;"------------------------------------------------------------------------------"<br />&nbsp;&nbsp;&nbsp;&nbsp;echo&nbsp;"Usage:&nbsp;server.sh&nbsp;{start|status|stop|restart|logback}"&nbsp;&gt;&amp;2<br />&nbsp;&nbsp;&nbsp;&nbsp;echo&nbsp;"&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;start:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;start&nbsp;the&nbsp;$SERVER_NAME&nbsp;server"<br />&nbsp;&nbsp;&nbsp;&nbsp;echo&nbsp;"&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;stop:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;stop&nbsp;the&nbsp;$SERVER_NAME&nbsp;server"<br />&nbsp;&nbsp;&nbsp;&nbsp;echo&nbsp;"&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;restart:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;restart&nbsp;the&nbsp;$SERVER_NAME&nbsp;server"<br />&nbsp;&nbsp;&nbsp;&nbsp;echo&nbsp;"&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;logback:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;reload&nbsp;logback&nbsp;config&nbsp;file"<br />&nbsp;&nbsp;&nbsp;&nbsp;echo&nbsp;"&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;status:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;get&nbsp;$SERVER_NAME&nbsp;current&nbsp;status,running&nbsp;or&nbsp;stopped."<br />&nbsp;&nbsp;&nbsp;&nbsp;echo&nbsp;"-----------------------------------------------------------------------------"<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />}<br /><br /><span style="color: #0000FF; ">function</span>&nbsp;getOpts(){&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;command=$1&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;shift&nbsp;1<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">case</span>&nbsp;$command&nbsp;<span style="color: #0000FF; ">in</span><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;start)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;start_server&nbsp;$@;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;stop)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;stop_server&nbsp;$@;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;logback)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;reload_logback_config&nbsp;$@;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;status)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;status&nbsp;$@;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;monit)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;monit_server&nbsp;$@;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;restart)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$0&nbsp;stop&nbsp;$@<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$0&nbsp;start&nbsp;$@<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;help)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;help;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;help;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;exit&nbsp;1;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;;<br />&nbsp;&nbsp;&nbsp;&nbsp;esac<br />}<br /><br /><span style="color: #0000FF; ">function</span>&nbsp;main(){<br />&nbsp;&nbsp;&nbsp;&nbsp;#logMessage&nbsp;"--------&gt;&nbsp;&nbsp;begin&nbsp;&lt;-------------"<br />&nbsp;&nbsp;&nbsp;&nbsp;setEnv&nbsp;$@<br />&nbsp;&nbsp;&nbsp;&nbsp;#logMessage&nbsp;"BASE_DIR:$BASE_DIR"&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;getOpts&nbsp;$@<br />&nbsp;&nbsp;&nbsp;&nbsp;#logMessage&nbsp;"--------&gt;&nbsp;&nbsp;end&nbsp;"<br /><br />}<br /><br /><br /><br />main&nbsp;$@</div><img src ="http://www.cppblog.com/changshoumeng/aggbug/210994.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/changshoumeng/" target="_blank">长寿梦</a> 2015-06-19 18:48 <a href="http://www.cppblog.com/changshoumeng/archive/2015/06/19/210994.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>长轮询的Jquery代码</title><link>http://www.cppblog.com/changshoumeng/archive/2015/05/20/210695.html</link><dc:creator>长寿梦</dc:creator><author>长寿梦</author><pubDate>Wed, 20 May 2015 07:37:00 GMT</pubDate><guid>http://www.cppblog.com/changshoumeng/archive/2015/05/20/210695.html</guid><wfw:comment>http://www.cppblog.com/changshoumeng/comments/210695.html</wfw:comment><comments>http://www.cppblog.com/changshoumeng/archive/2015/05/20/210695.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/changshoumeng/comments/commentRss/210695.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/changshoumeng/services/trackbacks/210695.html</trackback:ping><description><![CDATA[<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 />-->&nbsp; &nbsp;&nbsp;&lt;script&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(<span style="color: #0000FF; ">function</span>&nbsp;($,&nbsp;undefined)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">var</span>&nbsp;defaults&nbsp;=&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'type':&nbsp;'GET',<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'url':&nbsp;'',<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'data':&nbsp;{},<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'timeout':&nbsp;60&nbsp;*&nbsp;1000&nbsp;,<span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;60秒超时，通常你的服务器端间隔要短于这个时间</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'xhrFields':&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'withCredentials':&nbsp;<span style="color: #0000FF; ">true</span>&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;应对跨域的情况</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;options&nbsp;保持和&nbsp;$.ajax&nbsp;的api一致</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$.poll&nbsp;=&nbsp;<span style="color: #0000FF; ">function</span>&nbsp;(options,&nbsp;fn)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">function</span>&nbsp;onMessage&nbsp;(data)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;alert("onMessage");<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fn(data)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$.poll(options,fn)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">function</span>&nbsp;onError&nbsp;()&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;alert("onError");<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;如果遇到错误，就两秒后重试</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;setTimeout(<span style="color: #0000FF; ">function</span>(){<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$.poll(options,&nbsp;fn)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;},&nbsp;2000)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$.ajax(options)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.done(onMessage).fail(onError)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;})(jQuery)<br /><br /><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;使用方法：</span><span style="color: #008000; "><br />//</span><span style="color: #008000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$.poll({'url':&nbsp;'/server'},&nbsp;function&nbsp;(data)&nbsp;{</span><span style="color: #008000; "><br />//</span><span style="color: #008000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;process(data)</span><span style="color: #008000; "><br />//</span><span style="color: #008000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;})</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;&lt;/script&gt;</div><img src ="http://www.cppblog.com/changshoumeng/aggbug/210695.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/changshoumeng/" target="_blank">长寿梦</a> 2015-05-20 15:37 <a href="http://www.cppblog.com/changshoumeng/archive/2015/05/20/210695.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>测试SESSION分配与浏览器的关系</title><link>http://www.cppblog.com/changshoumeng/archive/2015/04/21/210408.html</link><dc:creator>长寿梦</dc:creator><author>长寿梦</author><pubDate>Tue, 21 Apr 2015 03:14:00 GMT</pubDate><guid>http://www.cppblog.com/changshoumeng/archive/2015/04/21/210408.html</guid><wfw:comment>http://www.cppblog.com/changshoumeng/comments/210408.html</wfw:comment><comments>http://www.cppblog.com/changshoumeng/archive/2015/04/21/210408.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/changshoumeng/comments/commentRss/210408.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/changshoumeng/services/trackbacks/210408.html</trackback:ping><description><![CDATA[<p><strong><span style="font-family: 宋体;">测试目的：测试</span>SESSION</strong><strong><span style="font-family:宋体;">分配与浏览器的关系</span></strong></p>  <p>&nbsp;</p>  <p><strong><span style="font-family:宋体;">测试代码：</span></strong></p>  <p>&nbsp;</p>  <p align="left" style="background: white;"><span style="font-size: 12pt; font-family: 宋体;"></span>pasting<span style="font-size: 12pt; font-family: 宋体;"></span></p><pre style="font-family: 宋体; font-size: 12pt; background-color: #ffffff;"><span style="color:#808000;">@RequestMapping</span>(value ={<span style="color:#008000;font-weight:bold;">"index.html"</span>})<br /><span style="color:#000080;font-weight:bold;">public </span><span style="background-color:#e4e4ff;">String</span> index2(HttpServletRequest request,ModelMap model) {<br />    <span style="background-color:#e4e4ff;">String</span> remoteIp = UserAddrUtils.<span style="font-style:italic;">getRemoteIp</span>(request);<br />    HttpSession oldSession = request.getSession(<span style="color:#000080;font-weight:bold;">false</span>);<br />    HttpSession newSession = request.getSession();<br />    <span style="background-color:#e4e4ff;">String</span>   oldSessionId = (<span style="color:#000080;font-weight:bold;">null</span>==oldSession)?<span style="color:#008000;font-weight:bold;">"null"</span>:oldSession.getId();<br />    <span style="background-color:#e4e4ff;">String</span>   newSessionId = (<span style="color:#000080;font-weight:bold;">null</span>==newSession)?<span style="color:#008000;font-weight:bold;">"null"</span>:newSession.getId();<br />    System.<span style="color:#660e7a;font-weight:bold;font-style:italic;">out</span>.println(<span style="color:#008000;font-weight:bold;">" oldSessiondId:"</span>+oldSessionId);<br />    System.<span style="color:#660e7a;font-weight:bold;font-style:italic;">out</span>.println(<span style="color:#008000;font-weight:bold;">" newSessionId:"</span>+newSessionId);<br />    model.addAttribute(<span style="color:#008000;font-weight:bold;">"oldSessiondId"</span>,oldSessionId);<br />    model.addAttribute(<span style="color:#008000;font-weight:bold;">"newSessionId"</span>,newSessionId);<br />    model.addAttribute(<span style="color:#008000;font-weight:bold;">"remoteIp"</span>,remoteIp);<br />    <span style="color:#660e7a;font-weight:bold;">logger</span>.log(Level.<span style="color:#660e7a;font-weight:bold;font-style:italic;">INFO</span>,<span style="color:#008000;font-weight:bold;">"index.html remoteIp:"</span>+remoteIp);<br />    <span style="color:#000080;font-weight:bold;">return </span><span style="color:#008000;font-weight:bold;">"index"</span>;<br />}<br /><br /></pre>  <p>&nbsp;</p>  <p>&nbsp;</p>  <p>&nbsp;</p>  <p>&nbsp;</p>  <p><strong><span style="font-family:宋体;">测试结果：</span></strong></p>  <table border="1" cellspacing="0" cellpadding="0" style="border-collapse: collapse; border: none;">  <tbody><tr>   <td width="243" valign="top" style="width: 182.6pt; border: 1pt solid black; padding: 0cm 5.4pt;">   <p><span style="font-family:宋体;">操作步骤</span></p>   </td>   <td width="255" valign="top" style="width: 191.35pt; border-style: solid solid solid none; border-top-color: black; border-right-color: black; border-bottom-color: black; border-top-width: 1pt; border-right-width: 1pt; border-bottom-width: 1pt; padding: 0cm 5.4pt;">   <p><strong>oldSessiondId</strong></p>   </td>   <td width="248" valign="top" style="width: 185.75pt; border-style: solid solid solid none; border-top-color: black; border-right-color: black; border-bottom-color: black; border-top-width: 1pt; border-right-width: 1pt; border-bottom-width: 1pt; padding: 0cm 5.4pt;">   <p><strong>newSessionId</strong></p>   </td>  </tr>  <tr>   <td width="243" valign="top" style="width: 182.6pt; border-style: none solid solid; border-right-color: black; border-bottom-color: black; border-left-color: black; border-right-width: 1pt; border-bottom-width: 1pt; border-left-width: 1pt; padding: 0cm 5.4pt;">   <p><span style="font-family:宋体;">启动一个</span>IE<span style="font-family:宋体;">，打开</span>url</p>   </td>   <td width="255" valign="top" style="width:191.35pt;border-top:none;border-left:   none;border-bottom:solid black 1.0pt;   border-right:solid black 1.0pt;padding:0cm 5.4pt 0cm 5.4pt">   <p>null</p>   </td>   <td width="248" valign="top" style="width:185.75pt;border-top:none;border-left:   none;border-bottom:solid black 1.0pt;   border-right:solid black 1.0pt;padding:0cm 5.4pt 0cm 5.4pt">   <p>85731566EA8FBE5C14E5C339F9C77439</p>   </td>  </tr>  <tr>   <td width="243" valign="top" style="width: 182.6pt; border-style: none solid solid; border-right-color: black; border-bottom-color: black; border-left-color: black; border-right-width: 1pt; border-bottom-width: 1pt; border-left-width: 1pt; padding: 0cm 5.4pt;">   <p>F5<span style="font-family:宋体;">刷新</span></p>   </td>   <td width="255" valign="top" style="width:191.35pt;border-top:none;border-left:   none;border-bottom:solid black 1.0pt;   border-right:solid black 1.0pt;padding:0cm 5.4pt 0cm 5.4pt">   <p>85731566EA8FBE5C14E5C339F9C77439</p>   </td>   <td width="248" valign="top" style="width:185.75pt;border-top:none;border-left:   none;border-bottom:solid black 1.0pt;   border-right:solid black 1.0pt;padding:0cm 5.4pt 0cm 5.4pt">   <p>85731566EA8FBE5C14E5C339F9C77439</p>   </td>  </tr>  <tr>   <td width="243" valign="top" style="width: 182.6pt; border-style: none solid solid; border-right-color: black; border-bottom-color: black; border-left-color: black; border-right-width: 1pt; border-bottom-width: 1pt; border-left-width: 1pt; padding: 0cm 5.4pt;">   <p><span style="font-family:宋体;">新建标签，打开</span>url</p>   </td>   <td width="255" valign="top" style="width:191.35pt;border-top:none;border-left:   none;border-bottom:solid black 1.0pt;   border-right:solid black 1.0pt;padding:0cm 5.4pt 0cm 5.4pt">   <p>85731566EA8FBE5C14E5C339F9C77439</p>   </td>   <td width="248" valign="top" style="width:185.75pt;border-top:none;border-left:   none;border-bottom:solid black 1.0pt;   border-right:solid black 1.0pt;padding:0cm 5.4pt 0cm 5.4pt">   <p>85731566EA8FBE5C14E5C339F9C77439</p>   </td>  </tr>  <tr>   <td width="243" valign="top" style="width: 182.6pt; border-style: none solid solid; border-right-color: black; border-bottom-color: black; border-left-color: black; border-right-width: 1pt; border-bottom-width: 1pt; border-left-width: 1pt; padding: 0cm 5.4pt;">   <p><span style="font-family:宋体;">关闭所有的</span>IE<span style="font-family:宋体;">，启动一个</span>IE<span style="font-family:宋体;">，打开</span>URL</p>   </td>   <td width="255" valign="top" style="width:191.35pt;border-top:none;border-left:   none;border-bottom:solid black 1.0pt;   border-right:solid black 1.0pt;padding:0cm 5.4pt 0cm 5.4pt">   <p>null</p>   </td>   <td width="248" valign="top" style="width:185.75pt;border-top:none;border-left:   none;border-bottom:solid black 1.0pt;   border-right:solid black 1.0pt;padding:0cm 5.4pt 0cm 5.4pt">   <p>E122FD375611B2CBEB734B6FAFA3FA2F</p>   </td>  </tr>  <tr>   <td width="243" valign="top" style="width: 182.6pt; border-style: none solid solid; border-right-color: black; border-bottom-color: black; border-left-color: black; border-right-width: 1pt; border-bottom-width: 1pt; border-left-width: 1pt; padding: 0cm 5.4pt;">   <p><span style="font-family:宋体;">启动一个</span>chrome<span style="font-family:宋体;">，打开</span>URL</p>   </td>   <td width="255" valign="top" style="width:191.35pt;border-top:none;border-left:   none;border-bottom:solid black 1.0pt;   border-right:solid black 1.0pt;padding:0cm 5.4pt 0cm 5.4pt">   <p>null&nbsp;</p>   </td>   <td width="248" valign="top" style="width:185.75pt;border-top:none;border-left:   none;border-bottom:solid black 1.0pt;   border-right:solid black 1.0pt;padding:0cm 5.4pt 0cm 5.4pt">   <p>D180295DFAED11C2639EBD9D897BCEF1&nbsp;</p>   </td>  </tr>  <tr>   <td width="243" valign="top" style="width: 182.6pt; border-style: none solid solid; border-right-color: black; border-bottom-color: black; border-left-color: black; border-right-width: 1pt; border-bottom-width: 1pt; border-left-width: 1pt; padding: 0cm 5.4pt;">   <p><span style="font-family:宋体;">新建一个</span>chrome<span style="font-family:宋体;">，打开</span>URL</p>   </td>   <td width="255" valign="top" style="width:191.35pt;border-top:none;border-left:   none;border-bottom:solid black 1.0pt;   border-right:solid black 1.0pt;padding:0cm 5.4pt 0cm 5.4pt">   <p>D180295DFAED11C2639EBD9D897BCEF1&nbsp;</p>   </td>   <td width="248" valign="top" style="width:185.75pt;border-top:none;border-left:   none;border-bottom:solid black 1.0pt;   border-right:solid black 1.0pt;padding:0cm 5.4pt 0cm 5.4pt">   <p>D180295DFAED11C2639EBD9D897BCEF1&nbsp;</p>   </td>  </tr>  <tr>   <td width="243" valign="top" style="width: 182.6pt; border-style: none solid solid; border-right-color: black; border-bottom-color: black; border-left-color: black; border-right-width: 1pt; border-bottom-width: 1pt; border-left-width: 1pt; padding: 0cm 5.4pt;">   <p><span style="font-family:宋体;">关闭所有的</span>chrome<span style="font-family:宋体;">，启动一个</span>chrome<span style="font-family:宋体;">，打开</span>url</p>   </td>   <td width="255" valign="top" style="width:191.35pt;border-top:none;border-left:   none;border-bottom:solid black 1.0pt;   border-right:solid black 1.0pt;padding:0cm 5.4pt 0cm 5.4pt">   <p>null</p>   </td>   <td width="248" valign="top" style="width:185.75pt;border-top:none;border-left:   none;border-bottom:solid black 1.0pt;   border-right:solid black 1.0pt;padding:0cm 5.4pt 0cm 5.4pt">   <p>A433F39D84685FF1E10BE194F834B535</p>   </td>  </tr> </tbody></table>  <p>&nbsp;</p>  <p><strong><span style="font-family:宋体;">测试结论：</span></strong></p>  <p><span style="font-family:宋体;">打开一种浏览器，访问</span>url<span style="font-family:宋体;">，服务端建立一个</span>SESSION<span style="font-family:宋体;">，直到该种浏览器所启动的全部进程都关闭掉，该</span>SESSION<span style="font-family:宋体;">才释放，然后</span></p>  <p><span style="font-family:宋体;">再打开浏览器，访问所分配的</span>SESSION<span style="font-family:宋体;">是一个新的</span>SESSION<span style="font-family:宋体;">。</span></p><img src ="http://www.cppblog.com/changshoumeng/aggbug/210408.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/changshoumeng/" target="_blank">长寿梦</a> 2015-04-21 11:14 <a href="http://www.cppblog.com/changshoumeng/archive/2015/04/21/210408.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>mongodb的测试报告</title><link>http://www.cppblog.com/changshoumeng/archive/2015/04/13/210328.html</link><dc:creator>长寿梦</dc:creator><author>长寿梦</author><pubDate>Mon, 13 Apr 2015 09:34:00 GMT</pubDate><guid>http://www.cppblog.com/changshoumeng/archive/2015/04/13/210328.html</guid><wfw:comment>http://www.cppblog.com/changshoumeng/comments/210328.html</wfw:comment><comments>http://www.cppblog.com/changshoumeng/archive/2015/04/13/210328.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/changshoumeng/comments/commentRss/210328.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/changshoumeng/services/trackbacks/210328.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;                                 &nbsp; &nbsp; &nbsp; 注意：测试方法或者推算思路，可能有问题，欢迎批评与指正。 &nbsp;&nbsp;Mongodb的版本:&nbsp;执行命令mongod --version得到&nbsp;&nbsp; "version" :"3.0.1",&n...&nbsp;&nbsp;<a href='http://www.cppblog.com/changshoumeng/archive/2015/04/13/210328.html'>阅读全文</a><img src ="http://www.cppblog.com/changshoumeng/aggbug/210328.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/changshoumeng/" target="_blank">长寿梦</a> 2015-04-13 17:34 <a href="http://www.cppblog.com/changshoumeng/archive/2015/04/13/210328.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>mongodb的主从测试与复制集测试的实验（附带测试的配置文件）</title><link>http://www.cppblog.com/changshoumeng/archive/2015/04/13/210327.html</link><dc:creator>长寿梦</dc:creator><author>长寿梦</author><pubDate>Mon, 13 Apr 2015 09:27:00 GMT</pubDate><guid>http://www.cppblog.com/changshoumeng/archive/2015/04/13/210327.html</guid><wfw:comment>http://www.cppblog.com/changshoumeng/comments/210327.html</wfw:comment><comments>http://www.cppblog.com/changshoumeng/archive/2015/04/13/210327.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/changshoumeng/comments/commentRss/210327.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/changshoumeng/services/trackbacks/210327.html</trackback:ping><description><![CDATA[<div><span style="font-size: 12px;">1.mongodb 的版本</span></div><div><span style="font-size: 12px;">&nbsp; v3.0.1</span></div><div><span style="font-size: 12px;">&nbsp;&nbsp;</span></div><div><span style="font-size: 12px;">2.mongodb的用户权限分配</span></div><div><span style="font-size: 12px;"><br /></span></div><div><span style="font-size: 12px;">//创建超级管理用户</span></div><div><span style="font-size: 12px;">use admin</span></div><div><span style="font-size: 12px;">db.createUser(</span></div><div><span style="font-size: 12px;">&nbsp; {</span></div><div><span style="font-size: 12px;">&nbsp; &nbsp; user:"superuser",</span></div><div><span style="font-size: 12px;">&nbsp; &nbsp; pwd:"superuser@nMhU3x",</span></div><div><span style="font-size: 12px;">&nbsp; &nbsp; roles:["root"]</span></div><div><span style="font-size: 12px;">&nbsp; }</span></div><div><span style="font-size: 12px;">)</span></div><div><span style="font-size: 12px;"><br /></span></div><div><span style="font-size: 12px;"><span style="white-space:pre">	</span>参考文档：http://demo.netfoucs.com/xuzheng_java/article/details/42550653</span></div><div><span style="white-space: pre; font-size: 12px;">	</span></div><div><span style="font-size: 12px;">3. mongodb 初次启动时，观察其占用的磁盘空间。发现占用了20G空间，这与mongodb为了提高写性能，</span></div><div><span style="font-size: 12px;">&nbsp; &nbsp;与分配数据有关。</span></div><div><span style="font-size: 12px;">&nbsp; &nbsp;</span></div><div><span style="font-size: 12px;">&nbsp; &nbsp;原因：</span></div><div><span style="font-size: 12px;">&nbsp; &nbsp;oplogSize：指定的复制操作日志（OPLOG）的最大大小。mongod创建一个OPLOG的大小基于最大可用</span></div><div><span style="font-size: 12px;">&nbsp; &nbsp;空间量。对于64位系统，OPLOG通常是5％的可用磁盘空间。一旦mongod第一次创建OPLOG，改变oplog</span></div><div><span style="font-size: 12px;">&nbsp; &nbsp;Size将不会影响OPLOG的大小。</span></div><div><span style="font-size: 12px;">&nbsp; &nbsp;</span></div><div><span style="font-size: 12px;">&nbsp; &nbsp;我把oplogSize配置为1G发现，初始化时生成了一个local.1，大小为1G。</span></div><div><span style="font-size: 12px;">&nbsp; &nbsp;</span></div><div><span style="font-size: 12px;">4. 针对mongodb的warnning的系统级别的优化：</span></div><div><span style="font-size: 12px;">&nbsp; &nbsp; &nbsp;&nbsp;</span></div><div><span style="font-size: 12px;">&nbsp; &nbsp;第一步：</span></div><div><span style="font-size: 12px;">&nbsp; 使用root用户权限登录：</span></div><div><span style="font-size: 12px;">&nbsp;&nbsp;</span></div><div><span style="font-size: 12px;">&nbsp; &nbsp;echo "never" &gt; /sys/kernel/mm/transparent_hugepage/enabled</span></div><div><span style="font-size: 12px;">&nbsp; &nbsp;echo "never" &gt; /sys/kernel/mm/transparent_hugepage/defrag</span></div><div><span style="font-size: 12px;"><br /></span></div><div><span style="font-size: 12px;">&nbsp; &nbsp;第二步：</span></div><div><span style="font-size: 12px;">&nbsp; &nbsp;使用root用户权限登录：</span></div><div><span style="font-size: 12px;">&nbsp;&nbsp;</span></div><div><span style="font-size: 12px;">&nbsp; &nbsp;vim /etc/profile</span></div><div><span style="font-size: 12px;"><br /></span></div><div><span style="font-size: 12px;">&nbsp; &nbsp;添加以下命令：</span></div><div><span style="font-size: 12px;"><br /></span></div><div><span style="font-size: 12px;">&nbsp; ulimit -f unlimited</span></div><div><span style="font-size: 12px;">&nbsp; ulimit -t unlimited</span></div><div><span style="font-size: 12px;">&nbsp; ulimit -v unlimited</span></div><div><span style="font-size: 12px;">&nbsp; ulimit -n 64000</span></div><div><span style="font-size: 12px;">&nbsp; ulimit -m unlimited</span></div><div><span style="font-size: 12px;">&nbsp; ulimit -u 32000</span></div><div><span style="font-size: 12px;"><br /></span></div><div><span style="font-size: 12px;">5. &nbsp;在做mongodb主从复制时，在没有开启--auth模式时，运行正常。</span></div><div><span style="font-size: 12px;">&nbsp; &nbsp; 然后，开启主库 --auth模式，</span></div><div><span style="font-size: 12px;">&nbsp; &nbsp; 发现从库遇到验证问题，数据不能同步成功。</span></div><div><span style="font-size: 12px;">&nbsp; &nbsp; 在这种情况下，做实验失败，尚末解决。</span></div><div><span style="font-size: 12px;"><br /></span></div><div><span style="font-size: 12px;">6. &nbsp;发现mongodb初始化时，data占用物理空间是23G;然后插入1KW条数据后，占用空间是29G；</span></div><div><span style="font-size: 12px;">&nbsp; &nbsp; 若插入2KW条数据，占用空间是30G<span style="white-space:pre">	</span></span></div><div><span style="font-size: 12px;">&nbsp; &nbsp;</span></div><div><span style="font-size: 12px;">&nbsp; 30601 LBSUser &nbsp; 20 &nbsp; 0 56.9g(VIRT) 2.8g(RES) 2.4g S &nbsp;0.0 &nbsp;9.0 &nbsp; 0:14.47 mongod&nbsp;</span></div><div><span style="font-size: 12px;">&nbsp;&nbsp;</span></div><div><span style="font-size: 12px;">&nbsp;&nbsp;</span></div><div><span style="font-size: 12px;">7. &nbsp; mongodb主从复制的配置文件见：</span></div><div><span style="font-size: 12px;"><br /></span></div><div><span style="font-size: 12px;">&nbsp; &nbsp; &nbsp;mongodb-master-slave.tar</span></div><div><span style="font-size: 12px;"><br /></span></div><div><span style="font-size: 12px;">&nbsp; &nbsp; &nbsp;配置文件的说明：</span></div><div><span style="font-size: 12px;">&nbsp; &nbsp; &nbsp;参考：http://www.it165.net/database/html/201402/5303.html</span></div><div><span style="font-size: 12px;"><br /></span></div><div><span style="font-size: 12px;">8. &nbsp; mongodb副本集的配置文件见：</span></div><div><span style="font-size: 12px;">&nbsp; &nbsp; &nbsp;mongodb-replset.tar.gz<span style="white-space:pre">	  </span>&nbsp;</span><a title="配置文件" href="/Files/changshoumeng/mongodb-replset.tar.zip">配置文件<br /></a></div><div><span style="font-size: 12px;">&nbsp; &nbsp;</span>mongodb-master-slave.tar.zip&nbsp;<a title="配置文件" href="/Files/changshoumeng/mongodb-master-slave.tar.zip" style="font-size: 12px;">配置文件</a></div><div><span style="font-size: 12px;"><br /></span></div><div><span style="font-size: 12px;">&nbsp; &nbsp;</span></div><div><span style="font-size: 12px;">&nbsp; &nbsp;</span></div><div><span style="font-size: 12px;">&nbsp;&nbsp;</span></div><img src ="http://www.cppblog.com/changshoumeng/aggbug/210327.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/changshoumeng/" target="_blank">长寿梦</a> 2015-04-13 17:27 <a href="http://www.cppblog.com/changshoumeng/archive/2015/04/13/210327.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>对数据库索引的一点总结</title><link>http://www.cppblog.com/changshoumeng/archive/2015/02/11/209789.html</link><dc:creator>长寿梦</dc:creator><author>长寿梦</author><pubDate>Wed, 11 Feb 2015 03:16:00 GMT</pubDate><guid>http://www.cppblog.com/changshoumeng/archive/2015/02/11/209789.html</guid><wfw:comment>http://www.cppblog.com/changshoumeng/comments/209789.html</wfw:comment><comments>http://www.cppblog.com/changshoumeng/archive/2015/02/11/209789.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/changshoumeng/comments/commentRss/209789.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/changshoumeng/services/trackbacks/209789.html</trackback:ping><description><![CDATA[<div></div><div></div><div>问题：mysql 多列索引的最左前缀&nbsp;</div><div>参考：http://blog.sina.com.cn/s/blog_4deb16580100i8v2.html</div><div>结论：索引文件是根据最左边的一列进行排序的，然后按照二分查找法查找的。</div><div></div><div></div><div>问题：索引的类型：普通索引、唯一性索引、主键、全文索引</div><div>参考：http://opq149766320.iteye.com/blog/561183</div><div>结论：</div><div></div><div></div><div></div><div>问题： MySQL Hash索引和B-Tree索引的区别</div><div>参考：http://database.51cto.com/art/201010/229525.htm</div><div>结论：映射规则导致的缺点、冲突导致的缺点</div><div>&nbsp; &nbsp; &nbsp;</div><img src ="http://www.cppblog.com/changshoumeng/aggbug/209789.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/changshoumeng/" target="_blank">长寿梦</a> 2015-02-11 11:16 <a href="http://www.cppblog.com/changshoumeng/archive/2015/02/11/209789.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>im的难点</title><link>http://www.cppblog.com/changshoumeng/archive/2015/02/10/209778.html</link><dc:creator>长寿梦</dc:creator><author>长寿梦</author><pubDate>Tue, 10 Feb 2015 07:31:00 GMT</pubDate><guid>http://www.cppblog.com/changshoumeng/archive/2015/02/10/209778.html</guid><wfw:comment>http://www.cppblog.com/changshoumeng/comments/209778.html</wfw:comment><comments>http://www.cppblog.com/changshoumeng/archive/2015/02/10/209778.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/changshoumeng/comments/commentRss/209778.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/changshoumeng/services/trackbacks/209778.html</trackback:ping><description><![CDATA[im的架构，不是难在消息的转发，而是难在<br />1.用户状态的维护<br />2.用户社交网络的构造<img src ="http://www.cppblog.com/changshoumeng/aggbug/209778.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/changshoumeng/" target="_blank">长寿梦</a> 2015-02-10 15:31 <a href="http://www.cppblog.com/changshoumeng/archive/2015/02/10/209778.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>如果一个无序的序列里，有且有一个值，出现了重复。那么如何以N的复杂度找出这个重复值</title><link>http://www.cppblog.com/changshoumeng/archive/2015/02/07/209762.html</link><dc:creator>长寿梦</dc:creator><author>长寿梦</author><pubDate>Sat, 07 Feb 2015 02:31:00 GMT</pubDate><guid>http://www.cppblog.com/changshoumeng/archive/2015/02/07/209762.html</guid><wfw:comment>http://www.cppblog.com/changshoumeng/comments/209762.html</wfw:comment><comments>http://www.cppblog.com/changshoumeng/archive/2015/02/07/209762.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/changshoumeng/comments/commentRss/209762.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/changshoumeng/services/trackbacks/209762.html</trackback:ping><description><![CDATA[如果一个无序的序列里，有且有一个值，出现了重复。那么如何以N的复杂度找出这个重复值？<br /><br /><div><span style="font-size: 12px;"><br /></span></div><div><span style="font-size: 12px;"><br /></span></div><div><span style="font-size: 12px;">0,1,2,..x,x,..98,99 &nbsp;设其为序列s1，其中x重复一次，假设重复的那个x，覆盖了y</span></div><div><span style="font-size: 12px;">0,1,2,..x,y,..98,99 &nbsp;设其为序列s2,是正确的序列</span></div><div><span style="font-size: 12px;"><br /></span></div><div><span style="font-size: 12px;">通过：</span></div><div><span style="font-size: 12px;">sum(s1)-sum(s2)=x-y</span></div><div><span style="font-size: 12px;">求乘积(s1) / 求乘积(s2) = x/y</span></div><div><span style="font-size: 12px;">求得：</span></div><div><span style="font-size: 12px;">x,y</span></div><div><span style="font-size: 12px;"><br /></span></div><div><span style="font-size: 12px;">for item in s1:</span></div><div><span style="font-size: 12px;"><span style="white-space:pre">	</span>if (x==item) :</span></div><div><span style="font-size: 12px;"><span style="white-space:pre">	</span> &nbsp; &nbsp;x是重复值;return;</span></div><div><span style="font-size: 12px;"><span style="white-space:pre">	</span>if (y==item) :</span></div><div><span style="font-size: 12px;"><span style="white-space:pre">	</span> &nbsp; &nbsp;y是重复值;return;<span style="white-space:pre">	</span></span></div><div><span style="white-space: pre; font-size: 12px;">		</span></div><div><span style="font-size: 12px;">复杂度：</span></div><div><span style="font-size: 12px;">&nbsp; &nbsp;N<span style="white-space:pre">		</span></span></div><div style="font-family: Tahoma; font-size: 11px;"></div><img src ="http://www.cppblog.com/changshoumeng/aggbug/209762.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/changshoumeng/" target="_blank">长寿梦</a> 2015-02-07 10:31 <a href="http://www.cppblog.com/changshoumeng/archive/2015/02/07/209762.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>服务端的白名单里允许局域网ip通过的方法</title><link>http://www.cppblog.com/changshoumeng/archive/2015/02/06/209750.html</link><dc:creator>长寿梦</dc:creator><author>长寿梦</author><pubDate>Fri, 06 Feb 2015 01:53:00 GMT</pubDate><guid>http://www.cppblog.com/changshoumeng/archive/2015/02/06/209750.html</guid><wfw:comment>http://www.cppblog.com/changshoumeng/comments/209750.html</wfw:comment><comments>http://www.cppblog.com/changshoumeng/archive/2015/02/06/209750.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/changshoumeng/comments/commentRss/209750.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/changshoumeng/services/trackbacks/209750.html</trackback:ping><description><![CDATA[<div style="font-size: 13px; border: 1px solid #cccccc; padding: 4px 5px 4px 4px; width: 98%; word-break: break-all; background-color: #eeeeee;"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #0000FF; ">static</span>&nbsp;<span style="color: #0000FF; ">bool</span>&nbsp;allowLocalNetworksegment(uint32&nbsp;uSourceIP&nbsp;)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">*允许192.168.x.x网段<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">*43200由inet_addr(&nbsp;"192.168"&nbsp;)&nbsp;得到整型值，然后计算取其低16位得到</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(&nbsp;43200&nbsp;&nbsp;&nbsp;==&nbsp;&nbsp;&nbsp;(uSourceIP&amp;0x0000ffff)&nbsp;&nbsp;&nbsp;)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;<span style="color: #0000FF; ">true</span>;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;<span style="color: #0000FF; ">false</span>;<br />}<br /><br /><span style="color: #0000FF; ">static</span>&nbsp;<span style="color: #0000FF; ">bool</span>&nbsp;allowSpecialNetWorksegment(uint32&nbsp;uSourceIP&nbsp;)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">*允许配置文件里写的网段</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>&nbsp;(&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;uint32&nbsp;i=0;&nbsp;&nbsp;i&nbsp;&lt;&nbsp;&nbsp;CConfigFile::instance()-&gt;m_uIPNum&nbsp;;&nbsp;++i)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(uSourceIP&nbsp;==&nbsp;CConfigFile::instance()-&gt;m_uIP[i]&nbsp;)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;<span style="color: #0000FF; ">true</span>;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;<span style="color: #0000FF; ">false</span>;<br />}</div><img src ="http://www.cppblog.com/changshoumeng/aggbug/209750.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/changshoumeng/" target="_blank">长寿梦</a> 2015-02-06 09:53 <a href="http://www.cppblog.com/changshoumeng/archive/2015/02/06/209750.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>python ip与整型 的转换，各种字节序的转换</title><link>http://www.cppblog.com/changshoumeng/archive/2015/02/02/209709.html</link><dc:creator>长寿梦</dc:creator><author>长寿梦</author><pubDate>Mon, 02 Feb 2015 12:57:00 GMT</pubDate><guid>http://www.cppblog.com/changshoumeng/archive/2015/02/02/209709.html</guid><wfw:comment>http://www.cppblog.com/changshoumeng/comments/209709.html</wfw:comment><comments>http://www.cppblog.com/changshoumeng/archive/2015/02/02/209709.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/changshoumeng/comments/commentRss/209709.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/changshoumeng/services/trackbacks/209709.html</trackback:ping><description><![CDATA[<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 />--><br /><span style="color: #0000FF; ">import</span>&nbsp;socket<br /><span style="color: #0000FF; ">import</span>&nbsp;struct<br /><br /><br /><span style="color: #0000FF; ">def</span>&nbsp;IpStr2NetInt(IpStr):<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;struct.unpack(&nbsp;<span style="color: #800000; ">"</span><span style="color: #800000; ">I</span><span style="color: #800000; ">"</span>,socket.inet_aton(IpStr)&nbsp;&nbsp;)[0]<br /><br /><span style="color: #0000FF; ">def</span>&nbsp;IpStr2HostInt(IpStr):<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;socket.ntohl(&nbsp;&nbsp;IpStr2NetInt(IpStr)&nbsp;&nbsp;)&nbsp;&nbsp;&nbsp;&nbsp;<br /><span style="color: #0000FF; ">def</span>&nbsp;NetInt2IpStr(NetInt):<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">#</span><span style="color: #008000; ">return&nbsp;HostInt2IpStr(&nbsp;socket.ntohl(NetInt)&nbsp;)</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;socket.inet_ntoa(&nbsp;struct.pack(<span style="color: #800000; ">'</span><span style="color: #800000; ">I</span><span style="color: #800000; ">'</span>,NetInt)&nbsp;&nbsp;)&nbsp;&nbsp;&nbsp;<br /><span style="color: #0000FF; ">def</span>&nbsp;HostInt2IpStr(HostInt):&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;NetInt2IpStr(&nbsp;socket.htonl(HostInt)&nbsp;&nbsp;)&nbsp;&nbsp;&nbsp;<br /><br /><span style="color: #0000FF; ">def</span>&nbsp;main():<br />&nbsp;&nbsp;&nbsp;ip=<span style="color: #800000; ">"</span><span style="color: #800000; ">127.0.0.1</span><span style="color: #800000; ">"</span><br />&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">print</span>&nbsp;IpStr2NetInt(ip)<br />&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">print</span>&nbsp;IpStr2HostInt(ip)<br />&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">print</span>&nbsp;NetInt2IpStr(&nbsp;16777343)<br />&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">print</span>&nbsp;HostInt2IpStr(&nbsp;2130706433)<br />main()</div><img src ="http://www.cppblog.com/changshoumeng/aggbug/209709.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/changshoumeng/" target="_blank">长寿梦</a> 2015-02-02 20:57 <a href="http://www.cppblog.com/changshoumeng/archive/2015/02/02/209709.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>带确认提示的关闭服务的脚本</title><link>http://www.cppblog.com/changshoumeng/archive/2015/01/29/209663.html</link><dc:creator>长寿梦</dc:creator><author>长寿梦</author><pubDate>Thu, 29 Jan 2015 06:19:00 GMT</pubDate><guid>http://www.cppblog.com/changshoumeng/archive/2015/01/29/209663.html</guid><wfw:comment>http://www.cppblog.com/changshoumeng/comments/209663.html</wfw:comment><comments>http://www.cppblog.com/changshoumeng/archive/2015/01/29/209663.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/changshoumeng/comments/commentRss/209663.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/changshoumeng/services/trackbacks/209663.html</trackback:ping><description><![CDATA[<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 />-->#!/bin/bash<br />#date:2015-01-29<br />#author:zhangtao<br />#desc:stop&nbsp;the&nbsp;service&nbsp;by&nbsp;given&nbsp;service-name<br />######################################################<br />SERVICE_NAME=imgate<br />WATCHDOG_NAME=startimgate.sh<br />#######################################<br />function&nbsp;stopService()<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PROCESS_NAME=$1<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PIDS=`ps&nbsp;axu&nbsp;|&nbsp;grep&nbsp;$PROCESS_NAME&nbsp;|&nbsp;grep&nbsp;-v&nbsp;"grep"&nbsp;|&nbsp;awk&nbsp;'{print&nbsp;$2}'`<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PIDNUM=0<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>&nbsp;PID&nbsp;in&nbsp;$PIDS<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">do</span><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;echo&nbsp;"IsKilled&nbsp;:&nbsp;$PROCESS_NAME&nbsp;:&nbsp;$PID"<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;kill&nbsp;-9&nbsp;$PID<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;let&nbsp;PIDNUM=$PIDNUM+1<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;done<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;[&nbsp;$PIDNUM&nbsp;==&nbsp;0&nbsp;]&nbsp;;then<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;echo&nbsp;"NotFound&nbsp;:&nbsp;$PROCESS_NAME"<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">else</span><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;echo&nbsp;"FoundNum&nbsp;:&nbsp;$PROCESS_NAME&nbsp;:&nbsp;$PIDNUM"<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fi<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;echo&nbsp;"-------"&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span><br />}<br />####################################<br />function&nbsp;printPrompt()<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;read&nbsp;-p&nbsp;"&gt;&gt;&gt;:you&nbsp;must&nbsp;input&nbsp;'yes'&nbsp;to&nbsp;continue:"&nbsp;choice<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[&nbsp;"$choice"&nbsp;!=&nbsp;"yes"&nbsp;]&nbsp;&amp;&amp;&nbsp;echo&nbsp;"&gt;&gt;&gt;:&nbsp;not&nbsp;yes,so&nbsp;exit"&nbsp;&amp;&amp;&nbsp;exit&nbsp;0<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;echo&nbsp;"&gt;&gt;&gt;:yes,continue<img src="http://www.cppblog.com/Images/dot.gif"  alt="" />"<br />}<br /><br />#####################################<br />function&nbsp;main()<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printPrompt<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#set&nbsp;-x<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;echo&nbsp;"<img src="http://www.cppblog.com/Images/dot.gif"  alt="" /><img src="http://www.cppblog.com/Images/dot.gif"  alt="" /><img src="http://www.cppblog.com/Images/dot.gif"  alt="" /><img src="http://www.cppblog.com/Images/dot.gif"  alt="" />"<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PROCESS_ARRAY=($WATCHDOG_NAME&nbsp;$SERVICE_NAME)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;echo&nbsp;"length&nbsp;of&nbsp;process_array&nbsp;:${#PROCESS_ARRAY[@]}"<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;echo&nbsp;"============"&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>&nbsp;PROCESS&nbsp;in&nbsp;${PROCESS_ARRAY[@]};<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">do</span><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;stopService&nbsp;$PROCESS<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;done<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;echo&nbsp;"----&gt;finished"<br /><br />}<br /><br />main</div><img src ="http://www.cppblog.com/changshoumeng/aggbug/209663.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/changshoumeng/" target="_blank">长寿梦</a> 2015-01-29 14:19 <a href="http://www.cppblog.com/changshoumeng/archive/2015/01/29/209663.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>概率论的总结1</title><link>http://www.cppblog.com/changshoumeng/archive/2015/01/27/209651.html</link><dc:creator>长寿梦</dc:creator><author>长寿梦</author><pubDate>Tue, 27 Jan 2015 10:07:00 GMT</pubDate><guid>http://www.cppblog.com/changshoumeng/archive/2015/01/27/209651.html</guid><wfw:comment>http://www.cppblog.com/changshoumeng/comments/209651.html</wfw:comment><comments>http://www.cppblog.com/changshoumeng/archive/2015/01/27/209651.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/changshoumeng/comments/commentRss/209651.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/changshoumeng/services/trackbacks/209651.html</trackback:ping><description><![CDATA[<img src="http://www.cppblog.com/images/cppblog_com/changshoumeng/gailvlun2.jpg" width="537" height="848" alt="" /><img src ="http://www.cppblog.com/changshoumeng/aggbug/209651.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/changshoumeng/" target="_blank">长寿梦</a> 2015-01-27 18:07 <a href="http://www.cppblog.com/changshoumeng/archive/2015/01/27/209651.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>关于自己写linux c++的网络服务的tps上限的一次不严格的测试</title><link>http://www.cppblog.com/changshoumeng/archive/2015/01/20/209593.html</link><dc:creator>长寿梦</dc:creator><author>长寿梦</author><pubDate>Tue, 20 Jan 2015 09:41:00 GMT</pubDate><guid>http://www.cppblog.com/changshoumeng/archive/2015/01/20/209593.html</guid><wfw:comment>http://www.cppblog.com/changshoumeng/comments/209593.html</wfw:comment><comments>http://www.cppblog.com/changshoumeng/archive/2015/01/20/209593.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.cppblog.com/changshoumeng/comments/commentRss/209593.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/changshoumeng/services/trackbacks/209593.html</trackback:ping><description><![CDATA[<div><span style="font-size: 12px;">测试机： amd 两核心 ，客户端与服务端都在本机上跑。</span></div><div><span style="font-size: 12px;"><br /></span></div><div><span style="font-size: 12px;">网络层：A类epoll线程处理accept的被动连接；</span></div><div><span style="font-size: 12px;">B类epoll线程处理connect的主动连接；</span></div><div><span style="font-size: 12px;">C类epoll线程把A或B类epoll线程得到的连接分配到某个线程，专门处理send和recv操作；</span></div><div><span style="font-size: 12px;">D类线程池处理C类抛出来的数据，处理完之后，再投递到C类线程做send操作。</span></div><div><span style="font-size: 12px;"><br /></span></div><div><span style="font-size: 12px;">用ab测试短连接</span></div><div><span style="font-size: 12px;">ab -n 1000 -c 150 http://127.0.0.1:8090/</span></div><div><span style="font-size: 12px;">测试20次之后，得到一个峰值tps=6000</span></div><div><span style="font-size: 12px;"><br /></span></div><div><span style="font-size: 12px;"><br /></span></div><div><span style="font-size: 12px;"><br /></span></div><div><span style="font-size: 12px;">用字节的写的基于数据echo测试的压力测试程序测试长连接：</span></div><div><span style="font-size: 12px;">client发出64字节数据，echosvrd返回64字节，client又发出64字节。</span></div><div><span style="font-size: 12px;"><br /></span></div><div><span style="font-size: 12px;">每次传输网络传输数据在64字节以下的情况下：&nbsp;</span></div><div><span style="font-size: 12px;">./stree_client 127.0.0.1 8090 100 &nbsp; &nbsp;得到tps=13851</span></div><div><span style="font-size: 12px;">./stree_client 127.0.0.1 8090 1000 &nbsp; 得到tps=16641</span></div><div><span style="font-size: 12px;">./stree_client 127.0.0.1 8090 10000 &nbsp;得到tps=16600 service cpu跑到90%，始终在90%以下；stree_client的cpu跑到32%左右；</span></div><div><span style="font-size: 12px;">./stree_client 127.0.0.1 8090 20000 &nbsp;stree_client的cpu跑到100%告终</span></div><div><span style="font-size: 12px;">./stree_client 127.0.0.1 8090 15000 &nbsp;stree_client的cpu跑到100%告终</span></div><div><span style="font-size: 12px;"><br /></span></div><div><span style="font-size: 12px;">把日志的输出级别调到1，此时基本无日志输出：</span></div><div><span style="font-size: 12px;">./stree_client 127.0.0.1 8090 10000 &nbsp;得到tps=29436 service cpu跑到70%；stree_client的cpu跑到48%左右；</span></div><div><span style="font-size: 12px;">./stree_client 127.0.0.1 8090 15000 &nbsp;stree_client的cpu跑到100%告终</span></div><div><span style="font-size: 12px;"><br /></span></div><div><span style="font-size: 12px;">再把网络传输的字节调整为128字节左右：</span></div><div><span style="font-size: 12px;">./stree_client 127.0.0.1 8090 10000 &nbsp;得到tps=29179 service cpu跑到68%；stree_client的cpu跑到45%左右；</span></div><div><span style="font-size: 12px;"><br /></span></div><div><span style="font-size: 12px;">结论：</span></div><div><span style="font-size: 12px;">在本机测试，就忽略了网络io时延，得到网络引擎cpu跑到100%时的tps是 不超过30000，或者不偏离30000很远，</span></div><div><span style="font-size: 12px;">此时并发连接数在10000</span></div><img src ="http://www.cppblog.com/changshoumeng/aggbug/209593.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/changshoumeng/" target="_blank">长寿梦</a> 2015-01-20 17:41 <a href="http://www.cppblog.com/changshoumeng/archive/2015/01/20/209593.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>算法随想</title><link>http://www.cppblog.com/changshoumeng/archive/2014/12/10/209148.html</link><dc:creator>长寿梦</dc:creator><author>长寿梦</author><pubDate>Wed, 10 Dec 2014 10:44:00 GMT</pubDate><guid>http://www.cppblog.com/changshoumeng/archive/2014/12/10/209148.html</guid><wfw:comment>http://www.cppblog.com/changshoumeng/comments/209148.html</wfw:comment><comments>http://www.cppblog.com/changshoumeng/archive/2014/12/10/209148.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/changshoumeng/comments/commentRss/209148.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/changshoumeng/services/trackbacks/209148.html</trackback:ping><description><![CDATA[<div>算法随想</div><div></div><div></div><div>摘抄于《算法之道》省略若干字。</div><div></div><div>事实上，算法如人生，人生也如算法。它由许多过程所构成，又因这些过程而改变。<span style="color: red;">虽然不能肯定结果正确，但求解过程却可以合理。</span>透过算法的本质，我们可以看到芸芸众生，各色人相，多彩的生活。只要愿意，每个人都能寻找一个属于自己一生的独特&#8220;算法&#8221;，为自己的将来绘出一张或简单或复杂、或单调或反复、或直接或递归、或串行或并行、或随机或确定、或成功或失败（假如世界上存在所谓的成功和失败）的蓝图。<br /></div><div>如果生活是一个难解的数学问题，那么，每个人都在寻找一个适合自己的算法。<span style="color: red;">有人天生喜欢&#8220;遍历&#8221;，踏遍千山万水，遍享万种风情。扮演各种角色，希望人生丰富多彩；有人一生&#8220;贪婪&#8221;，眼界不宽，及时行乐；有人注定适用&#8220;穷搜&#8221;，辛辛苦苦勤勤恳恳一辈子，付出很多，收获有限；有人善用&#8220;时空权衡&#8221;，用最少的时间办最多的事情，的确精明；有人会&#8220;分治&#8221;，再多的难题也能迎刃而解；有人常&#8220;回溯&#8221;，错的太多，后悔太多；有的人压根没有算法，于是盲目生活，盲目做事，最后所获无几；有人&#8220;动态规划&#8221;，从而积小成多。</span><br /></div><div>智者希望统筹兼顾，努力设计一个最优的人生。遇到一个大的工程，他们分而治之，治而合之。今天做一部分，明天做一部分，终究会做完。尽管有时效率不高，但总比一直放在那里，叹息发愁有意义。当一个问题的最优解，包含了子问题的最优解的时候，他们就选择动态规划，通过选择子问题的最优解，来构造源问题的最优解。<br /></div><div>贪婪者希望运气长在，他们将每一次的选择缩小到一种贪心的选择。如果运气好，也许会成功；而在多数时候，却只会让人误入歧途。<br /></div><div>智者千虑，必有一失。如果猛然发现自己做错了选择，不必恐慌，试试回溯吧，退回去，重新来过。在下一次的选择时，记得使用分支估界，从某些途径得到一些经验，来判断哪些路径不好。当然，我们也可以随机选择一些路径来实施，说不定能立竿见影。但总的来说，回溯不是万能的，人生的路，有时一旦走过，便无法返回。毕竟人生有限，频繁回溯，重做选择，就只有原地踏步的份了。<span style="color: red;">分叉路口，做一个恰当的选择的确是困难的，在对与错、是与否、灵与肉、坚持与背叛、努力与放弃之间，我们需要细心</span>。但一定要踏出下一步。至少，我们就可以知道它并不在这里。<br /></div><div>有时候，生活中总会有那么一点无奈，无论你花多少力气，用多大的毅力，也不能产生效果。那是因为很多事情即使是可行的，也不一定是有意义的。<span style="color: red;">所以聪明的人懂得用意念改变现实，用智慧区分可行和不可行，用信念辨别有意义和无意义。</span>如果觉得生活太累，环节太多，试试跳转表吧，也许有些环节并不必须。如果觉得生活中某个步骤成本太高，试试平摊分析吧，也许我们别的步骤走得太过容易。如果时间珍贵，就试试完美哈希，直接将自己定位到目标上。不过记住，完美哈希并不完美，它的高昂代价也许你的灵魂承受不起。</div><div>智者用渐近分析获得问题的内在复杂性。当明了一个问题的计算时间下界，就可以评价解决该问题的各种算法的效率，进而确定对已有算法还有多少改进的余地。如果是P类问题，就奋力继续；如果遇到的是NPC，就找一个近似的最优解。就像大多数人都无法（不能或不愿）回避的找对象问题：每人的心中都有一个标杆（白马王子或白雪公主），想找到完全符合的并不容易，但也不能证明这个人不存在，这不就是NPC么？怎么解决？求近似解吧，在每一次的恋爱中逐步靠近那个标杆。<br /></div><div>算法要求于至简。漫漫人生，相信每个人心中都有一个与生俱来的梦想，这是算法的灵魂&#8212;&#8212;循环不变式。它或许会随着经历的不同而发生变化，但它在你心中的位置是不会变的。位置有远有近，到达的路途有平坦有崎岖，那又有什么关系？当你实现了最初的梦想，所有的循环终将定位在最美的一霎&#8212;&#8212;那便是永恒不变的信念。<br /></div><div>在人生的成长过程中，糊里糊涂的人过着糊里糊涂的生活，不知道自己离心中的那个位置是越来越近，还是渐行渐远。而聪明人算法庞大却精妙，因为他们常常反省自己，检查这个不变式，不断简化，每一步都坚定迈向至简，即便是 &#8220;劝君更尽一杯酒，西出阳关无故人&#8221; 的独自前行。<br /></div><div>算法终将归于永恒。人生的算法林林总总。有人天生智慧、美丽，有人生来愚笨、丑陋。你并不需要为此庆幸、骄傲，或者伤心、气馁，甚至抱怨上帝的不公。这些是无用，也是不必要的。因为如果一个算法足够健壮，初始条件带来的影响几乎是微不足道的。我们感到疲惫不堪，精疲力竭和毫无乐趣的，通常并非繁重的人生，而是没有意义和希望的人生。因为&#8220;没有目标的算法无法向正确推进。&#8221;<br /></div><div>不同的算法演绎不同的人生。它的影响不限于今世，而是达于另一个维度。世俗精彩过眼消散，万种风情终将逝去。意识到这点，我们突然发现，过去看重的很多活动，目标，追求，甚或其他问题，都突然显得微不足道和不值一提。我们会重新订立优先次序，将算法的目标锁定为永恒做准备，升华我们的灵魂。因为这个算法将是我们面对造物主的终极答卷。<br /></div><div>一花一世界，一叶一菩提。算法，一段神奇的代码，演绎一段传奇的人生，锁住一段永恒的痕迹。理解算法、把握人生，让我们用算法的一生，刻印下我们一生的算法，在没有时间的星空循环往复，留下我们那 &#8220;莫愁前路无知己，天下谁人不识君！&#8221;的不灭印记。这就是求于至简，归于永恒的境界&#8230;&#8230;&nbsp;</div><img src ="http://www.cppblog.com/changshoumeng/aggbug/209148.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/changshoumeng/" target="_blank">长寿梦</a> 2014-12-10 18:44 <a href="http://www.cppblog.com/changshoumeng/archive/2014/12/10/209148.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>基于selec的网络io，linux c++实现</title><link>http://www.cppblog.com/changshoumeng/archive/2014/11/30/208988.html</link><dc:creator>长寿梦</dc:creator><author>长寿梦</author><pubDate>Sun, 30 Nov 2014 04:06:00 GMT</pubDate><guid>http://www.cppblog.com/changshoumeng/archive/2014/11/30/208988.html</guid><wfw:comment>http://www.cppblog.com/changshoumeng/comments/208988.html</wfw:comment><comments>http://www.cppblog.com/changshoumeng/archive/2014/11/30/208988.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/changshoumeng/comments/commentRss/208988.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/changshoumeng/services/trackbacks/208988.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 因为要在服务内集成一个提供状态数据的http监控服务，而封装的一个select io#include&nbsp;&lt;sys/types.h&gt;#include&nbsp;&lt;sys/socket.h&gt;#include&nbsp;&lt;netinet/in.h&gt;#include&nbsp;&lt;arpa/inet.h&gt;#include&nbsp;&lt;assert...&nbsp;&nbsp;<a href='http://www.cppblog.com/changshoumeng/archive/2014/11/30/208988.html'>阅读全文</a><img src ="http://www.cppblog.com/changshoumeng/aggbug/208988.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/changshoumeng/" target="_blank">长寿梦</a> 2014-11-30 12:06 <a href="http://www.cppblog.com/changshoumeng/archive/2014/11/30/208988.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>统计用户到地区分布</title><link>http://www.cppblog.com/changshoumeng/archive/2014/11/09/208826.html</link><dc:creator>长寿梦</dc:creator><author>长寿梦</author><pubDate>Sun, 09 Nov 2014 13:56:00 GMT</pubDate><guid>http://www.cppblog.com/changshoumeng/archive/2014/11/09/208826.html</guid><wfw:comment>http://www.cppblog.com/changshoumeng/comments/208826.html</wfw:comment><comments>http://www.cppblog.com/changshoumeng/archive/2014/11/09/208826.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/changshoumeng/comments/commentRss/208826.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/changshoumeng/services/trackbacks/208826.html</trackback:ping><description><![CDATA[首先使用下面命令获取连接本服务到的ip列表。 <div>netstat -anp|egrep 80|egrep "EST"|awk '{print $(NF-2)}' |cut -f 1 -d ":"</div>然后用python写一个脚本实现通过IP获取归属地。<br /><img src ="http://www.cppblog.com/changshoumeng/aggbug/208826.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/changshoumeng/" target="_blank">长寿梦</a> 2014-11-09 21:56 <a href="http://www.cppblog.com/changshoumeng/archive/2014/11/09/208826.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>