﻿<?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/yjvujj0711/</link><description /><language>zh-cn</language><lastBuildDate>Wed, 08 Apr 2026 22:15:40 GMT</lastBuildDate><pubDate>Wed, 08 Apr 2026 22:15:40 GMT</pubDate><ttl>60</ttl><item><title>QuickSort</title><link>http://www.cppblog.com/yjvujj0711/archive/2015/05/30/210781.html</link><dc:creator>易宝@byhh</dc:creator><author>易宝@byhh</author><pubDate>Sat, 30 May 2015 15:22:00 GMT</pubDate><guid>http://www.cppblog.com/yjvujj0711/archive/2015/05/30/210781.html</guid><wfw:comment>http://www.cppblog.com/yjvujj0711/comments/210781.html</wfw:comment><comments>http://www.cppblog.com/yjvujj0711/archive/2015/05/30/210781.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/yjvujj0711/comments/commentRss/210781.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/yjvujj0711/services/trackbacks/210781.html</trackback:ping><description><![CDATA[复习 快排<br />
<br />
<br />
<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 />
--><br />
&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;buf[1024]&nbsp;=&nbsp;{0};<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;partition(<span style="color: #0000FF; ">int</span>&nbsp;first,&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;last)<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;stand&nbsp;=&nbsp;buf[last];<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;i&nbsp;=0,&nbsp;j=0;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">int&nbsp;e&nbsp;=&nbsp;last&nbsp;-1;</span><span style="color: #008000; "><br />
</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>&nbsp;(;j&nbsp;&lt;&nbsp;&nbsp;last&nbsp;&nbsp;;&nbsp;j++&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; ">if</span>&nbsp;(buf[j]&nbsp;&lt;=&nbsp;stand&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; ">int</span>&nbsp;temp&nbsp;=&nbsp;buf[j];<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;buf[j]&nbsp;=&nbsp;buf[i];<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;buf[i]&nbsp;=&nbsp;temp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;i++;<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;<span style="color: #0000FF; ">int</span>&nbsp;temp&nbsp;=&nbsp;buf[last];<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;buf[last]&nbsp;=&nbsp;buf[i];<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;buf[i]&nbsp;=&nbsp;temp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;i;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">void</span>&nbsp;myQuickSort(<span style="color: #0000FF; ">int</span>&nbsp;begin,&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;end)<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(begin&nbsp;&lt;&nbsp;end)<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; ">int</span>&nbsp;pivot&nbsp;;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pivot&nbsp;=&nbsp;partition(begin,&nbsp;end);<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; myQuickSort(begin,&nbsp;pivot&nbsp;-1&nbsp;);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;myQuickSort(pivot+1,&nbsp;end);<br />
&nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
<span style="color: #0000FF; ">int</span>&nbsp;main()<br />
{<br />
&nbsp; &nbsp; srand(time(0));<br />
&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>&nbsp;(<span style="color: #0000FF; ">int</span>&nbsp;i&nbsp;=&nbsp;0;&nbsp;i&nbsp;&lt;&nbsp;1000;&nbsp;i++)<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;buf[i]&nbsp;=&nbsp;rand()&nbsp;&nbsp;*&nbsp;2342111134&nbsp;%&nbsp;6589453&nbsp;;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;myQuickSort(0,1023);<br />
&nbsp; &nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;0;<br />
}<br />
</div><br /><br />在本实现 里面， 直接使用了最后一个元素作为基准。<br /><br />在选择基准时其实是有多种方式的。1）选第一个，不推荐。2）算最后一个，不推荐。3）选首、尾、中的中间值。4）随机选择。<br /><br />选择后将跑一趟比较，结果是左侧为小的数，右侧为大的数，原理是i,j &nbsp; 当数小于基准是则与左右的i 对换，这样保证了i左侧小于p &nbsp; i 到j 之间是大小p 的。<br /><br />对于p 无需再排了。<br /><br /><br /><br /><br />需要特别注意的是partition 里面的元素位置与quicksort 分段是有关系的。 如果在partition 里面处理了last 那么 在分段时其实last 就不用了。&nbsp;<br /><br /><div class="vimiumReset vimiumHUD" style="right: 150px; display: none;"></div><img src ="http://www.cppblog.com/yjvujj0711/aggbug/210781.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/yjvujj0711/" target="_blank">易宝@byhh</a> 2015-05-30 23:22 <a href="http://www.cppblog.com/yjvujj0711/archive/2015/05/30/210781.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>重学TCP协议(一)</title><link>http://www.cppblog.com/yjvujj0711/archive/2015/05/16/210671.html</link><dc:creator>易宝@byhh</dc:creator><author>易宝@byhh</author><pubDate>Sat, 16 May 2015 13:58:00 GMT</pubDate><guid>http://www.cppblog.com/yjvujj0711/archive/2015/05/16/210671.html</guid><wfw:comment>http://www.cppblog.com/yjvujj0711/comments/210671.html</wfw:comment><comments>http://www.cppblog.com/yjvujj0711/archive/2015/05/16/210671.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/yjvujj0711/comments/commentRss/210671.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/yjvujj0711/services/trackbacks/210671.html</trackback:ping><description><![CDATA[<p><strong><span style="font-family:宋体;">目的：</span></strong><span style="font-family: 宋体;">重新梳理</span>TCP<span style="font-family:宋体;">，全局理解协议中的细节，知道是怎样实现的，理解为什么要这样做，了解可能会带来什么问题。<br /><br />PS:图片有空了慢慢贴。<br /><br /></span></p><p class="MsoNormal"><span lang="EN-US">&nbsp;</span></p><div style="display: inline-block;"></div><p>&nbsp;</p><p class="MsoNormal"><span lang="EN-US">&nbsp;</span></p><p><span style="font-family:宋体;">简要介绍：</span></p><p>TCP<span style="font-family:宋体;">协议是基于网络层</span>IP<span style="font-family:宋体;">协议的传输层协议，提供一种面向连接的，可靠的字节流服务</span>(byte stream service )<span style="font-family:宋体;">。在</span>TCP<span style="font-family:宋体;">连接中，</span> <span style="font-family:宋体;">仅支持两方进行彼此通信。</span></p><p>TCP<span style="font-family:宋体;">的可靠性由以下方式</span> <span style="font-family: 宋体;">来提供：</span></p><p style="margin-left:18.0pt;text-indent:-18.0pt;">1）&nbsp;<span style="font-family:宋体;">恰当的数据分段。即将字节流根据</span>MSS<span style="font-family:宋体;">来封包发送。</span></p><p style="margin-left:18.0pt;text-indent:-18.0pt;">2）&nbsp;<span style="font-family:宋体;">确认机制、重传机制。</span></p><p style="margin-left:18.0pt;text-indent:-18.0pt;">3）&nbsp;<span style="font-family:宋体;">首部的检验和。</span></p><p style="margin-left:18.0pt;text-indent:-18.0pt;">4）&nbsp;<span style="font-family:宋体;">网络层的</span>IP<span style="font-family:宋体;">数据报可能会失序，因此</span>TCP<span style="font-family:宋体;">需要将数据进行重新排序。</span></p><p style="margin-left:18.0pt;text-indent:-18.0pt;">5）&nbsp;<span style="font-family:宋体;">数据报可能会重复，必须恰当的丢弃重复的数据报。</span></p><p style="margin-left:18.0pt;text-indent:-18.0pt;">6）&nbsp;TCP<span style="font-family:宋体;">提供流量控制，可根据另一端的缓冲区情况发送恰当的数据（滑动窗口协议）。</span></p><p style="margin-left:18.0pt;text-indent:-18.0pt;">7）&nbsp;TCP<span style="font-family:宋体;">协议对字节流不作解释。由应用层对数据进行语义上的解释。</span></p><p>&nbsp;</p><p><span style="font-family:宋体;">随便抓个包：</span></p><p>&nbsp;</p><p>IP<span style="font-family:宋体;">数据头</span><img width="554" height="282" src="file:///C:/Users/l1l/AppData/Local/Temp/msohtmlclip1/01/clip_image002.jpg" v:shapes="图片_x0020_1" alt="" /></p><p>&nbsp;</p><p>TCP<span style="font-family:宋体;">数据头</span></p><p><img width="554" height="223" src="file:///C:/Users/l1l/AppData/Local/Temp/msohtmlclip1/01/clip_image004.jpg" v:shapes="图片_x0020_2" alt="" /></p><p>&nbsp;</p><p><span style="font-family:宋体;">头部中比较重要的数据结构</span></p><p><span style="font-family:宋体;">源端口，目的端口，序号，确认序号。</span> <span style="font-family:宋体;">标志位，窗口大小。</span></p><p>URG<span style="font-family:宋体;">：紧急指针，一般用不上，忽略。</span></p><p>ACK<span style="font-family:宋体;">：经常用，接收端发给源端，确认前一个包已收到。</span></p><p>PSH<span style="font-family:宋体;">：个人没怎么碰到过。</span></p><p>RST<span style="font-family:宋体;">：可以理解为重置连接，普通情况下当目标端口未开放会发送此</span>RST<span style="font-family:宋体;">回来，此外，连接中间的防火墙等网络设备也会发。</span></p><p><img width="554" height="192" src="file:///C:/Users/l1l/AppData/Local/Temp/msohtmlclip1/01/clip_image006.jpg" v:shapes="图片_x0020_3" alt="" /></p><p>&nbsp;</p><p>SYN<span style="font-family:宋体;">：发起连接的标志，</span>SYN Flood<span style="font-family:宋体;">是基于的一种</span>DOS<span style="font-family:宋体;">攻击手法。</span></p><p>FIN<span style="font-family:宋体;">：</span>shutdown <span style="font-family:宋体;">时发送，告诉对方，我这边完成了，要送掉连接了。</span></p><p>&nbsp;</p><p>&nbsp;</p><p>&nbsp;</p><p style="margin-left:18.0pt;text-indent:-18.0pt;">1、&nbsp;TCP<span style="font-family:宋体;">连接的建议，三步握手。</span></p><p style="margin-left:36.0pt;text-indent:-18.0pt;">1）&nbsp;<span style="font-family:宋体;">源端发送</span>SYN<span style="font-family:宋体;">到服务器，表示喜娃怀与服务器的某个端口建立</span>TCP<span style="font-family:宋体;">连接，在</span>TCP<span style="font-family:宋体;">首部带上初始的序号（</span>client ISN<span style="font-family:宋体;">）。此报文中设置</span>SYN=1<span style="font-family:宋体;">；</span></p><p style="margin-left:36.0pt;text-indent:-18.0pt;">2）&nbsp;<span style="font-family:宋体;">服务器返回</span>SYN<span style="font-family:宋体;">包，带上服务器的初始序号（</span>server ISN<span style="font-family:宋体;">），并且</span>ACK=client ISN+1<span style="font-family:宋体;">设置</span>SYN=1,ACK=1<span style="font-family:宋体;">；</span></p><p style="margin-left:36.0pt;text-indent:-18.0pt;">3）&nbsp;<span style="font-family:宋体;">源端返回服务器</span>ACK<span style="font-family:宋体;">包，</span>&nbsp; ack = server ISN+1;</p><p>&nbsp;</p><p><img width="433" height="103" src="file:///C:/Users/l1l/AppData/Local/Temp/msohtmlclip1/01/clip_image007.png" v:shapes="图片_x0020_4" alt="" /></p><p>PS:<span style="font-family:宋体;">这边的</span>Seq<span style="font-family:宋体;">居然从</span>0<span style="font-family:宋体;">开始，之前都没注意过</span>~~</p><p>&nbsp;</p><p><span style="font-family:宋体;">关于</span>ISN<span style="font-family:宋体;">的选择，根据文献内容，应当随时间变化，避免网络中被延迟的分组被重新传递后导致的错误解释。</span></p><p style="margin-left:18.0pt;text-indent:-18.0pt;">2、&nbsp;TCP<span style="font-family:宋体;">连接的终止，四步握手。</span></p><p style="margin-left:36.0pt;text-indent:-18.0pt;">1）&nbsp;<span style="font-family:宋体;">首先关闭的一方（</span>A<span style="font-family:宋体;">）发送</span>FIN<span style="font-family:宋体;">包。</span>FIN<span style="font-family:宋体;">在应用层、开发者面前就是</span>socket.read <span style="font-family:宋体;">将返回</span>EOF<span style="font-family:宋体;">。</span></p><p style="margin-left:36.0pt;text-indent:-18.0pt;">2）&nbsp;<span style="font-family:宋体;">接受端（</span>B<span style="font-family:宋体;">）返回</span>FIN<span style="font-family:宋体;">的</span>ACK<span style="font-family:宋体;">包。</span></p><p style="margin-left:36.0pt;text-indent:-18.0pt;">3）&nbsp;B<span style="font-family:宋体;">关闭连接，发送</span>FIN<span style="font-family:宋体;">。</span></p><p style="margin-left:36.0pt;text-indent:-18.0pt;">4）&nbsp;A<span style="font-family:宋体;">发送</span>ACK<span style="font-family:宋体;">。</span></p><p>&nbsp;</p><p><span style="font-family:宋体;">关闭阶段存在另外两衍生的流程。</span>1<span style="font-family:宋体;">）</span> 2<span style="font-family:宋体;">与</span>3 <span style="font-family:宋体;">两步可以合并，</span> <span style="font-family:宋体;">当</span>B<span style="font-family:宋体;">端无数据发送时，无需发放两个包，可以在一个包里面同时设置</span>FIN+ACK<span style="font-family:宋体;">，也就是上面的截图。</span>2<span style="font-family:宋体;">）当仅一端调用</span>shutdown<span style="font-family:宋体;">，另一端还存在数据发送时，存在半关闭连接的情况。即第</span>2<span style="font-family:宋体;">步结束后，</span>B<span style="font-family:宋体;">端继续发送数据，</span>A<span style="font-family:宋体;">端对这些数据仍然发送</span>ACK<span style="font-family:宋体;">，一直到</span>B<span style="font-family:宋体;">端发送</span>FIN<span style="font-family:宋体;">。</span></p><p>&nbsp;</p><p><span style="font-family:宋体;">以下是一个简单的</span>client + server <span style="font-family:宋体;">测试代码，通过简单的</span>Sleep<span style="font-family:宋体;">可以看出，</span> <span style="font-family:宋体;">当收到</span>FIN<span style="font-family:宋体;">包时，缓冲区的数据仍然存在，仅在后面多了一个</span>EOF<span style="font-family:宋体;">而已。</span></p><p>&nbsp;</p><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: #008080; ">&nbsp;1</span>&nbsp;<span style="color: #008000; ">#</span><span style="color: #008000; ">!/usr/bin/env&nbsp;python</span><span style="color: #008000; "><br /></span><span style="color: #008080; ">&nbsp;2</span>&nbsp;<span style="color: #008000; "></span><span style="color: #0000FF; ">import</span>&nbsp;socket<br /><span style="color: #008080; ">&nbsp;3</span>&nbsp;<span style="color: #0000FF; ">import</span>&nbsp;time<br /><span style="color: #008080; ">&nbsp;4</span>&nbsp;&nbsp;<br /><span style="color: #008080; ">&nbsp;5</span>&nbsp;host=<span style="color: #800000; ">"</span><span style="color: #800000; ">192.168.5.106</span><span style="color: #800000; ">"</span><br /><span style="color: #008080; ">&nbsp;6</span>&nbsp;port=10000<br /><span style="color: #008080; ">&nbsp;7</span>&nbsp;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)<br /><span style="color: #008080; ">&nbsp;8</span>&nbsp;s.bind((host,port))<br /><span style="color: #008080; ">&nbsp;9</span>&nbsp;s.listen(5)<br /><span style="color: #008080; ">10</span>&nbsp;sock,addr=s.accept()<br /><span style="color: #008080; ">11</span>&nbsp;<span style="color: #0000FF; ">print</span>&nbsp;<span style="color: #800000; ">"</span><span style="color: #800000; ">got&nbsp;connection&nbsp;form&nbsp;</span><span style="color: #800000; ">"</span>,sock.getpeername()<br /><span style="color: #008080; ">12</span>&nbsp;<span style="color: #0000FF; ">while</span>&nbsp;1:<br /><span style="color: #008080; ">13</span>&nbsp;&nbsp;&nbsp;data=sock.recv(1)<br /><span style="color: #008080; ">14</span>&nbsp;&nbsp;&nbsp;time.sleep(0.1)<br /><span style="color: #008080; ">15</span>&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;<span style="color: #0000FF; ">not</span>&nbsp;data:<br /><span style="color: #008080; ">16</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">print</span>(<span style="color: #800000; ">"</span><span style="color: #800000; ">~~~~~</span><span style="color: #800000; ">"</span>)<br /><span style="color: #008080; ">17</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">break</span><br /><span style="color: #008080; ">18</span>&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">else</span>:<br /><span style="color: #008080; ">19</span>&nbsp;<span style="color: #0000FF; ">print</span>&nbsp;data<br /><span style="color: #008080; ">20</span>&nbsp;&nbsp;</div><br /><br /><p>&nbsp;</p><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: #008080; ">1</span>&nbsp;<span style="color: #008000; ">#</span><span style="color: #008000; ">!/usr/bin/env&nbsp;python</span><span style="color: #008000; "><br /></span><span style="color: #008080; ">2</span>&nbsp;<span style="color: #008000; "></span><span style="color: #0000FF; ">import</span>&nbsp;socket<br /><span style="color: #008080; ">3</span>&nbsp;host=<span style="color: #800000; ">"</span><span style="color: #800000; ">192.168.5.106</span><span style="color: #800000; ">"</span><br /><span style="color: #008080; ">4</span>&nbsp;port=10000<br /><span style="color: #008080; ">5</span>&nbsp;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)<br /><span style="color: #008080; ">6</span>&nbsp;s.connect((host,port))<br /><span style="color: #008080; ">7</span>&nbsp;s.send(<span style="color: #800000; ">"</span><span style="color: #800000; ">hello&nbsp;from&nbsp;client</span><span style="color: #800000; ">"</span>)<br /><span style="color: #008080; ">8</span>&nbsp;s.close()</div><p>&nbsp;</p><p class="MsoNormal">                                                                                                                                                                </p><p>&nbsp;</p><p class="MsoNormal"><span lang="EN-US"></span></p><img src ="http://www.cppblog.com/yjvujj0711/aggbug/210671.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/yjvujj0711/" target="_blank">易宝@byhh</a> 2015-05-16 21:58 <a href="http://www.cppblog.com/yjvujj0711/archive/2015/05/16/210671.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>不忘初心 方得始终</title><link>http://www.cppblog.com/yjvujj0711/archive/2015/05/05/210552.html</link><dc:creator>易宝@byhh</dc:creator><author>易宝@byhh</author><pubDate>Tue, 05 May 2015 09:58:00 GMT</pubDate><guid>http://www.cppblog.com/yjvujj0711/archive/2015/05/05/210552.html</guid><wfw:comment>http://www.cppblog.com/yjvujj0711/comments/210552.html</wfw:comment><comments>http://www.cppblog.com/yjvujj0711/archive/2015/05/05/210552.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/yjvujj0711/comments/commentRss/210552.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/yjvujj0711/services/trackbacks/210552.html</trackback:ping><description><![CDATA[<h1>&nbsp;《 程序员必读的职业规划书》<br />
</h1>
<br />
<span style="font-weight: normal;"><br />
最开始好像是在微博上看到pdf版本，挺长挺有层次的一篇文章。<br />
</span><br />最近半年也是有点动的想法，但其实在规划这件事情上做的不够， 有个参考指南可以慢慢对比一下自身<img src ="http://www.cppblog.com/yjvujj0711/aggbug/210552.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/yjvujj0711/" target="_blank">易宝@byhh</a> 2015-05-05 17:58 <a href="http://www.cppblog.com/yjvujj0711/archive/2015/05/05/210552.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>使用putty配置SSH通道，然后你懂的</title><link>http://www.cppblog.com/yjvujj0711/archive/2015/02/06/209756.html</link><dc:creator>易宝@byhh</dc:creator><author>易宝@byhh</author><pubDate>Fri, 06 Feb 2015 07:15:00 GMT</pubDate><guid>http://www.cppblog.com/yjvujj0711/archive/2015/02/06/209756.html</guid><wfw:comment>http://www.cppblog.com/yjvujj0711/comments/209756.html</wfw:comment><comments>http://www.cppblog.com/yjvujj0711/archive/2015/02/06/209756.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/yjvujj0711/comments/commentRss/209756.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/yjvujj0711/services/trackbacks/209756.html</trackback:ping><description><![CDATA[<br />因为某wall的原因，大家需要一个通道。<br /><br />现在比较好的办法是使用hk或其他地方的vps ，然后搭个ssh过去，再使用Sock代理。&nbsp;<br /><br />putty 已自带ssh通道的功能。但其不支持记住密码。很烦。&nbsp;<br /><br />网上传的很多教程中使用了 myentunnel 。 结果下载后一下，这逗比工具使用的还是putty，既然如此，何必使用额外的工具。<br /><br />putty虽然记住密码不方便，但使用SSH自带的证书功能，也是可以实现自动登录的~<br /><br />1、使用puttygen 生成密钥对。 此处的 key passphrase 填写后，最终的private key 使用需要密码。。因此可以不填。<br /><br />2、将public key 放入 /home/user/.ssh/authorized_keys中。此处需确保 .ssh authorized_keys 对其他用户仅可读。 如755，否则无法使用。<br /><br />3、在putty的Connection -&gt; ssh -&gt; auth 处可以选择private key .&nbsp;<br /><br />4、在Connection -&gt; Data 处可选填auto-login username。<br /><br />5、为确保不会自动掉线，Connection keepalive 填上非0。如30<br /><br />6、再save就行啦。 后面再使用就方便了。<br /><br /><br /><br />不过此种方法因为需要使用私钥文件，且对私钥文件无passphrase保护，需保证私钥的安全性，如放在私密的U盘中，仅使用时插上，离开时带走。<br /><br /><div></div><img src ="http://www.cppblog.com/yjvujj0711/aggbug/209756.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/yjvujj0711/" target="_blank">易宝@byhh</a> 2015-02-06 15:15 <a href="http://www.cppblog.com/yjvujj0711/archive/2015/02/06/209756.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>为线程命名</title><link>http://www.cppblog.com/yjvujj0711/archive/2015/01/30/209676.html</link><dc:creator>易宝@byhh</dc:creator><author>易宝@byhh</author><pubDate>Fri, 30 Jan 2015 05:53:00 GMT</pubDate><guid>http://www.cppblog.com/yjvujj0711/archive/2015/01/30/209676.html</guid><wfw:comment>http://www.cppblog.com/yjvujj0711/comments/209676.html</wfw:comment><comments>http://www.cppblog.com/yjvujj0711/archive/2015/01/30/209676.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/yjvujj0711/comments/commentRss/209676.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/yjvujj0711/services/trackbacks/209676.html</trackback:ping><description><![CDATA[为Linux下线程加个名字。同样的Windows 也可以干。 chrome 的源码中有使用到这个trick，raise 一个Exception. &nbsp;<pre><div style="font-size: 13px; border: 1px solid #cccccc; padding: 4px 5px 4px 4px; width: 98%; word-break: break-all; background-color: #eeeeee;"><span style="color: #008080;">1</span>&nbsp;#include&nbsp;&lt;sys/prctl.h&gt;<br /><span style="color: #008080; ">2</span>&nbsp;<span style="color: #0000FF; ">void</span>&nbsp;set_thread_name(<span style="color: #0000FF; ">const</span>&nbsp;<span style="color: #0000FF; ">char</span>&nbsp;*prefix)<br /><span style="color: #008080; ">3</span>&nbsp;{<br /><span style="color: #008080; ">4</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">static</span>&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;index&nbsp;=&nbsp;0;<br /><span style="color: #008080; ">5</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">char</span>&nbsp;thname[16];<br /><span style="color: #008080; ">6</span>&nbsp;&nbsp;&nbsp;  &nbsp;snprintf(thname,&nbsp;<span style="color: #0000FF; ">sizeof</span>(thname),&nbsp;"%s%d",&nbsp;prefix,&nbsp;__sync_fetch_and_add(&amp;index,&nbsp;1));<br /><span style="color: #008080; ">7</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;prctl(PR_SET_NAME,&nbsp;(usigned&nbsp;<span style="color: #0000FF; ">long</span>)thname,&nbsp;0,&nbsp;0,&nbsp;0);&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">~&nbsp;refer&nbsp;to&nbsp;`man&nbsp;prctl`</span><span style="color: #008000; "><br /></span><span style="color: #008080; ">8</span>&nbsp;<span style="color: #008000; "></span>}<br /><span style="color: #008080;">9</span>&nbsp;</div><br /><br />windows 版本 <span style="color: #333333; font-family: verdana, arial, sans-serif; font-size: medium; line-height: 24px; white-space: normal; background-color: #ffffff;">原文见:http://msdn.microsoft.com/en-us/library/xcb2z8hs(VS.90).aspx<br /><br /></span><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; "><br /></span><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;Usage:&nbsp;SetThreadName&nbsp;(-1,&nbsp;"MainThread");<br /></span><span style="color: #008000; ">//<br /></span>#include&nbsp;&lt;windows.h&gt;<br /><span style="color: #0000FF; ">const</span>&nbsp;DWORD&nbsp;MS_VC_EXCEPTION=0x406D1388;<br /><br />#pragma&nbsp;pack(push,8)<br />typedef&nbsp;<span style="color: #0000FF; ">struct</span>&nbsp;tagTHREADNAME_INFO<br />{<br />&nbsp;&nbsp;&nbsp;DWORD&nbsp;dwType;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;Must&nbsp;be&nbsp;0x1000.</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;LPCSTR&nbsp;szName;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;Pointer&nbsp;to&nbsp;name&nbsp;(in&nbsp;user&nbsp;addr&nbsp;space).</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;DWORD&nbsp;dwThreadID;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;Thread&nbsp;ID&nbsp;(-1=caller&nbsp;thread).</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;DWORD&nbsp;dwFlags;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;Reserved&nbsp;for&nbsp;future&nbsp;use,&nbsp;must&nbsp;be&nbsp;zero.</span><span style="color: #008000; "><br /></span>}&nbsp;THREADNAME_INFO;<br />#pragma&nbsp;pack(pop)<br /><br /><span style="color: #0000FF; ">void</span>&nbsp;SetThreadName(&nbsp;DWORD&nbsp;dwThreadID,&nbsp;<span style="color: #0000FF; ">char</span>*&nbsp;threadName)<br />{<br />&nbsp;&nbsp;&nbsp;THREADNAME_INFO&nbsp;info;<br />&nbsp;&nbsp;&nbsp;info.dwType&nbsp;=&nbsp;0x1000;<br />&nbsp;&nbsp;&nbsp;info.szName&nbsp;=&nbsp;threadName;<br />&nbsp;&nbsp;&nbsp;info.dwThreadID&nbsp;=&nbsp;dwThreadID;<br />&nbsp;&nbsp;&nbsp;info.dwFlags&nbsp;=&nbsp;0;<br /><br />&nbsp;&nbsp;&nbsp;__try<br />&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;RaiseException(&nbsp;MS_VC_EXCEPTION,&nbsp;0,&nbsp;<span style="color: #0000FF; ">sizeof</span>(info)/<span style="color: #0000FF; ">sizeof</span>(ULONG_PTR),&nbsp;(ULONG_PTR*)&amp;info&nbsp;);<br />&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;__except(EXCEPTION_EXECUTE_HANDLER)<br />&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;}<br />}</div></pre><img src ="http://www.cppblog.com/yjvujj0711/aggbug/209676.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/yjvujj0711/" target="_blank">易宝@byhh</a> 2015-01-30 13:53 <a href="http://www.cppblog.com/yjvujj0711/archive/2015/01/30/209676.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Linux高性能服务器编程阅读随笔（一）</title><link>http://www.cppblog.com/yjvujj0711/archive/2014/10/21/208646.html</link><dc:creator>易宝@byhh</dc:creator><author>易宝@byhh</author><pubDate>Tue, 21 Oct 2014 11:14:00 GMT</pubDate><guid>http://www.cppblog.com/yjvujj0711/archive/2014/10/21/208646.html</guid><wfw:comment>http://www.cppblog.com/yjvujj0711/comments/208646.html</wfw:comment><comments>http://www.cppblog.com/yjvujj0711/archive/2014/10/21/208646.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/yjvujj0711/comments/commentRss/208646.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/yjvujj0711/services/trackbacks/208646.html</trackback:ping><description><![CDATA[<br /><br /><br /><br />Page 76 . 5.4 监听socket&nbsp;<br /><br /><img src="http://www.cppblog.com/images/cppblog_com/yjvujj0711/1.png" width="868" height="211" alt="" /><br /><br /><br />此处作者说法不完整。 &nbsp;<br /><br /><br />通过Google "man listen " &nbsp;http://linux.die.net/man/2/listen<br /><br /><br /><strong style="font-family: arial, sans-serif; font-size: medium; line-height: normal; background-color: #ffffff;">listen</strong><span style="font-family: arial, sans-serif; font-size: medium; line-height: normal; background-color: #ffffff;">() marks the socket referred to by&nbsp;</span><em style="font-family: arial, sans-serif; font-size: medium; line-height: normal; background-color: #ffffff;">sockfd</em><span style="font-family: arial, sans-serif; font-size: medium; line-height: normal; background-color: #ffffff;">&nbsp;as a passive socket, that is, as a socket that will be used to accept incoming connection requests using&nbsp;</span><em style="font-family: arial, sans-serif; font-size: medium; line-height: normal; background-color: #ffffff;"><strong><a href="http://linux.die.net/man/2/accept" style="color: #660000;">accept</a></strong>(2)</em><span style="font-family: arial, sans-serif; font-size: medium; line-height: normal; background-color: #ffffff;">.</span><p style="font-family: arial, sans-serif; font-size: medium; line-height: normal; background-color: #ffffff;">The&nbsp;<em>sockfd</em>&nbsp;argument is a file descriptor that refers to a socket of type&nbsp;<strong>SOCK_STREAM</strong>&nbsp;or&nbsp;<strong>SOCK_SEQPACKET</strong>.</p><p style="font-family: arial, sans-serif; font-size: medium; line-height: normal; background-color: #ffffff;">The&nbsp;<em>backlog</em>&nbsp;argument defines the maximum length to which the queue of pending connections for&nbsp;<em>sockfd</em>&nbsp;may grow. If a connection request arrives when the queue is full, the client may receive an error with an indication of&nbsp;<strong>ECONNREFUSED</strong>&nbsp;or, if the underlying protocol supports retransmission, the request may be ignored so that a later reattempt at connection succeeds.</p><br /><br /><br /><br /><span style="font-weight: normal;">可见与实现有关。<br /><br /><br />书的内容还是很全的，但作者的观点略感觉不对。 &nbsp;服务器中用信号来通知的，或者说来做异步的，就我了解是几乎没有。 &nbsp;作者去花了很多篇幅去介绍。<br /><br />让人感觉完全是为了凑字数啊。 &nbsp;书名里面的&#8220;高性能&#8221;要打个折扣了</span><img src ="http://www.cppblog.com/yjvujj0711/aggbug/208646.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/yjvujj0711/" target="_blank">易宝@byhh</a> 2014-10-21 19:14 <a href="http://www.cppblog.com/yjvujj0711/archive/2014/10/21/208646.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>reservoir sampling</title><link>http://www.cppblog.com/yjvujj0711/archive/2014/10/21/208637.html</link><dc:creator>易宝@byhh</dc:creator><author>易宝@byhh</author><pubDate>Tue, 21 Oct 2014 05:09:00 GMT</pubDate><guid>http://www.cppblog.com/yjvujj0711/archive/2014/10/21/208637.html</guid><wfw:comment>http://www.cppblog.com/yjvujj0711/comments/208637.html</wfw:comment><comments>http://www.cppblog.com/yjvujj0711/archive/2014/10/21/208637.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/yjvujj0711/comments/commentRss/208637.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/yjvujj0711/services/trackbacks/208637.html</trackback:ping><description><![CDATA[<br />今天和某同学聊到面试题，他提到被某投行打击很深的一个reservoir sampling问题。&nbsp;<br /><br />于是我翻了翻。 大致意思在网上很容易找到。&nbsp;<br /><br />难是难理解其中的思维点： 怎么发现的这个解法。<br /><br />也就是如何诠释你的归纳法的出发点。<br /><br />目前我的总结是，对于这种无限问题，先设定一个基础的通解。 即在n的时候成立，再想办法证明当n = n+1的时候，结论也成立，或与原结论存在一定的对应关系 。&nbsp;<br /><br />这样就可以推导出来了。<img src ="http://www.cppblog.com/yjvujj0711/aggbug/208637.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/yjvujj0711/" target="_blank">易宝@byhh</a> 2014-10-21 13:09 <a href="http://www.cppblog.com/yjvujj0711/archive/2014/10/21/208637.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>个人梳理</title><link>http://www.cppblog.com/yjvujj0711/archive/2014/10/19/208623.html</link><dc:creator>易宝@byhh</dc:creator><author>易宝@byhh</author><pubDate>Sun, 19 Oct 2014 13:06:00 GMT</pubDate><guid>http://www.cppblog.com/yjvujj0711/archive/2014/10/19/208623.html</guid><wfw:comment>http://www.cppblog.com/yjvujj0711/comments/208623.html</wfw:comment><comments>http://www.cppblog.com/yjvujj0711/archive/2014/10/19/208623.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/yjvujj0711/comments/commentRss/208623.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/yjvujj0711/services/trackbacks/208623.html</trackback:ping><description><![CDATA[<br />干活四年， 有近两年在打酱油。 昨天与某前辈聊了聊，也发现确实荒废太多。<br /><br />近期<br />1、重点把书完整的看一看。&nbsp;<br /><br />2、把现有知识梳理一下，知道的与了解的都列一列。<br /><br />3、有代码相关的多写一写，加强一下。<br /><br />4、有设计相关的多想一想，不要&#8220;原来如此&#8221;，而要多&#8220;为什么不这样&#8221;。<br /><br /><br /><img src ="http://www.cppblog.com/yjvujj0711/aggbug/208623.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/yjvujj0711/" target="_blank">易宝@byhh</a> 2014-10-19 21:06 <a href="http://www.cppblog.com/yjvujj0711/archive/2014/10/19/208623.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>手上的书籍</title><link>http://www.cppblog.com/yjvujj0711/archive/2014/09/22/208378.html</link><dc:creator>易宝@byhh</dc:creator><author>易宝@byhh</author><pubDate>Mon, 22 Sep 2014 12:34:00 GMT</pubDate><guid>http://www.cppblog.com/yjvujj0711/archive/2014/09/22/208378.html</guid><wfw:comment>http://www.cppblog.com/yjvujj0711/comments/208378.html</wfw:comment><comments>http://www.cppblog.com/yjvujj0711/archive/2014/09/22/208378.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/yjvujj0711/comments/commentRss/208378.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/yjvujj0711/services/trackbacks/208378.html</trackback:ping><description><![CDATA[一、数据结构与算法分析<div></div><div>二、算法导论</div><div></div><div>三、unix环境高级编程</div><div></div><div>四、设计模式</div><div></div><div>五、linux 设备驱动程序</div><div></div><div>六、数学之美</div><div></div><div>七、c和指针&nbsp;</div><div></div><div>八、boost程序库完全开发指南</div><div></div><div>九、c++反汇编与逆向分析</div><div></div><div>十、python基础教程</div><div></div><div>十一、编程珠玑</div><div></div><div>十二、程序员自我修养</div><div></div><div>十三、Linux 多线程服务端编程</div><div></div><div>十四、大规模分布式存储系统（公司的）</div><div></div><div>十五、深入理解Linux内核</div><div></div><div>十六、格蠹汇编</div><div></div><div>十七、深入Linux内核架构</div><div></div><div>十八、TCP/IP详解</div><div></div><div>十九、UNIX网络编程 套接字</div><div></div><div>二十、UNIX网络编程 进程间通信 （这两本速度的看完扔了）</div><div>二十一、ddos攻击与防范深度剖析</div><div></div><div>二十二、深入C++对象模型</div><div></div><div>二十三、Web前端黑客技术揭秘</div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><img src ="http://www.cppblog.com/yjvujj0711/aggbug/208378.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/yjvujj0711/" target="_blank">易宝@byhh</a> 2014-09-22 20:34 <a href="http://www.cppblog.com/yjvujj0711/archive/2014/09/22/208378.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>syslog  reload  failed    service syslog dead </title><link>http://www.cppblog.com/yjvujj0711/archive/2014/07/04/207518.html</link><dc:creator>易宝@byhh</dc:creator><author>易宝@byhh</author><pubDate>Fri, 04 Jul 2014 08:36:00 GMT</pubDate><guid>http://www.cppblog.com/yjvujj0711/archive/2014/07/04/207518.html</guid><wfw:comment>http://www.cppblog.com/yjvujj0711/comments/207518.html</wfw:comment><comments>http://www.cppblog.com/yjvujj0711/archive/2014/07/04/207518.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/yjvujj0711/comments/commentRss/207518.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/yjvujj0711/services/trackbacks/207518.html</trackback:ping><description><![CDATA[<br /><br />今天碰到syslog 服务 过阵子就会dead的情况。 经多次确认，是打包的时候，脚本里面会执行syslog reload 导致 。&nbsp;<br /><br />而相同的配置文件restart 是OK的。 &nbsp;<br /><br />回来重新测试后，发现有个文件是不能读取的。也就是 appArmor 的权限没有配置。&nbsp;<br /><br />经再次回忆，是当天晚上上线，本来应该将snmp 的目录 &nbsp;/var/log/* r , 写到配置文件中，但由于认为messages 同样在这个目录下，已经可读，就没有配置。<br /><br />最后导致syslog reload 就失败。<div class="vimiumReset vimiumHUD" style="right: 150px; opacity: 0; display: none;"></div><img src ="http://www.cppblog.com/yjvujj0711/aggbug/207518.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/yjvujj0711/" target="_blank">易宝@byhh</a> 2014-07-04 16:36 <a href="http://www.cppblog.com/yjvujj0711/archive/2014/07/04/207518.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>