﻿<?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/lmlf001/</link><description>三悬明镜垂鸿韵，九撩清泉洗尘心
</description><language>zh-cn</language><lastBuildDate>Mon, 09 Mar 2026 03:33:38 GMT</lastBuildDate><pubDate>Mon, 09 Mar 2026 03:33:38 GMT</pubDate><ttl>60</ttl><item><title>标准输入输出的问题</title><link>http://www.cppblog.com/lmlf001/archive/2007/10/17/34471.html</link><dc:creator>芥之舟</dc:creator><author>芥之舟</author><pubDate>Wed, 17 Oct 2007 11:06:00 GMT</pubDate><guid>http://www.cppblog.com/lmlf001/archive/2007/10/17/34471.html</guid><wfw:comment>http://www.cppblog.com/lmlf001/comments/34471.html</wfw:comment><comments>http://www.cppblog.com/lmlf001/archive/2007/10/17/34471.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/lmlf001/comments/commentRss/34471.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/lmlf001/services/trackbacks/34471.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp; 先看下面一个小程序：<br><br>
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: #0000ff;">int</span><span style="color: #000000;"> main(</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;argc,&nbsp;_TCHAR</span><span style="color: #000000;">*</span><span style="color: #000000;">&nbsp;argv[])<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FILE&nbsp;</span><span style="color: #000000;">*</span><span style="color: #000000;">fp</span><span style="color: #000000;">=</span><span style="color: #000000;">fopen(</span><span style="color: #000000;">"</span><span style="color: #000000;">1.txt</span><span style="color: #000000;">"</span><span style="color: #000000;">,</span><span style="color: #000000;">"</span><span style="color: #000000;">r+</span><span style="color: #000000;">"</span><span style="color: #000000;">);<br></span><span style="color: #000000;"></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; fputc(</span><span style="color: #000000;">'</span><span style="color: #000000;">x</span><span style="color: #000000;">'</span><span style="color: #000000;">,fp);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fputc(</span><span style="color: #000000;">'</span><span style="color: #000000;">x</span><span style="color: #000000;">'</span><span style="color: #000000;">,fp);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fputc(</span><span style="color: #000000;">'</span><span style="color: #000000;">x</span><span style="color: #000000;">'</span><span style="color: #000000;">,fp);<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; </span><span style="color: #0000ff;">return</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">0</span><span style="color: #000000;">;<br>}</span></div>
&nbsp;&nbsp;&nbsp; 1.txt文件内容为abcdefg，调用函数之后为axxxefg，恩，正确<br><br><br>
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: #0000ff;">int</span><span style="color: #000000;"> main(</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;argc,&nbsp;_TCHAR</span><span style="color: #000000;">*</span><span style="color: #000000;">&nbsp;argv[])<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FILE&nbsp;</span><span style="color: #000000;">*</span><span style="color: #000000;">fp</span><span style="color: #000000;">=</span><span style="color: #000000;">fopen(</span><span style="color: #000000;">"</span><span style="color: #000000;">1.txt</span><span style="color: #000000;">"</span><span style="color: #000000;">,</span><span style="color: #000000;">"</span><span style="color: #000000;">rb+</span><span style="color: #000000;">"</span><span style="color: #000000;">);<br></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color: #0000ff;">char</span><span style="color: #000000;">&nbsp;c</span><span style="color: #000000;">=</span><span style="color: #000000;">fgetc(fp);<br></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; fputc(</span><span style="color: #000000;">'</span><span style="color: #000000;">x</span><span style="color: #000000;">'</span><span style="color: #000000;">,fp);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fputc(</span><span style="color: #000000;">'</span><span style="color: #000000;">x</span><span style="color: #000000;">'</span><span style="color: #000000;">,fp);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fputc(</span><span style="color: #000000;">'</span><span style="color: #000000;">x</span><span style="color: #000000;">'</span><span style="color: #000000;">,fp);<br>&nbsp;&nbsp;&nbsp; </span><span style="color: #0000ff;">&nbsp;&nbsp;&nbsp; return</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">0</span><span style="color: #000000;">;<br>}</span></div>
&nbsp;&nbsp;&nbsp; 而上面的这个程序只是加了一句fgetc，调用后却失去了作用，文件内容没有发生变化，仍然为abcdefg，为什么呢？（该问题在Linux下已不存在）<br>&nbsp;&nbsp;&nbsp; 《Unix环境高级编程》在使用读写方式打开文件时（type中的+号），输出的后面不能直接跟输入，输入的后面也不能直接跟输出，否则可能会出错。如果需要输出输入相连，则中间
需调用fflush,fseek,fsetpos或rewind等操作。<br>&nbsp;&nbsp;&nbsp; 既然这样，那我们试一下，看看能不能解决问题，在上面代码中fgetc和fputc中间加入<br>
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fpos_t&nbsp;pos;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fgetpos(fp,</span><span style="color: #000000;">&amp;</span><span style="color: #000000;">pos);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fsetpos(fp,</span><span style="color: #000000;">&amp;</span><span style="color: #000000;">pos);</span></div>
之后，运行程序，果真可以解决问题。<br>&nbsp;&nbsp;&nbsp; C语言的标准I/O库函数由于使用缓存的原因，在使用时可能出现各种各样的问题，尤其是在那种即时性比较强的I/O中，使用时要慎重。尽量使用其他的I/O函数代替之。<br><br><br><br><img src ="http://www.cppblog.com/lmlf001/aggbug/34471.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/lmlf001/" target="_blank">芥之舟</a> 2007-10-17 19:06 <a href="http://www.cppblog.com/lmlf001/archive/2007/10/17/34471.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>scanf的烦恼</title><link>http://www.cppblog.com/lmlf001/archive/2007/10/10/33913.html</link><dc:creator>芥之舟</dc:creator><author>芥之舟</author><pubDate>Wed, 10 Oct 2007 10:23:00 GMT</pubDate><guid>http://www.cppblog.com/lmlf001/archive/2007/10/10/33913.html</guid><wfw:comment>http://www.cppblog.com/lmlf001/comments/33913.html</wfw:comment><comments>http://www.cppblog.com/lmlf001/archive/2007/10/10/33913.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/lmlf001/comments/commentRss/33913.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/lmlf001/services/trackbacks/33913.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp; 今天连着2次用错scanf函数，这大概也是历史上第N+1次错误了，一直使用cin来输入数据，近来使用scanf的时候老出错误，因为它要去参数为一个地址，而编译器对于整数和地址的处理是类似的，往往不能指出错误。而当它运行时是不发生错误的，但会得到不正确的结果。。一步步的检查，并不能发现错误，只好打log，替换掉相应的块，然后逐步恢复原来的编码，最后才发现是sscanf的使用错误。这种错误实际上是有征兆的，因为程序每次运行时后使用的都是一个随机数据，而不是你所输入的数据。但编译的时候并不能发现错误。和往常的错误一样，编写一个程序可能只要半小时几分钟，而查找一个错误却花了我好几个小时的时间。这是一个不小的教训，也提示我在编译的时候-Wall选项的必要性。为了使我以后不会忘记使用这个选项，alias一下它吧，打开.profile文件，加入一行
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: #000000;">alias&nbsp;gcc</span><span style="color: #000000;">=</span><span style="color: #000000; font-weight: bold;">'</span><span style="color: #000000; font-weight: bold;">gcc&nbsp;-Wall</span><span style="color: #000000; font-weight: bold;">'</span><span style="color: #000000;"><br>alias&nbsp;g</span><span style="color: #000000;">++=</span><span style="color: #000000; font-weight: bold;">'</span><span style="color: #000000; font-weight: bold;">g++&nbsp;-Wall</span><span style="color: #000000; font-weight: bold;">'</span></div>
这样以后每次使用gcc/g++的时候它就自动启用-Wall选项了<br><img src ="http://www.cppblog.com/lmlf001/aggbug/33913.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/lmlf001/" target="_blank">芥之舟</a> 2007-10-10 18:23 <a href="http://www.cppblog.com/lmlf001/archive/2007/10/10/33913.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>信号量与PV操作</title><link>http://www.cppblog.com/lmlf001/archive/2007/09/20/32542.html</link><dc:creator>芥之舟</dc:creator><author>芥之舟</author><pubDate>Thu, 20 Sep 2007 06:21:00 GMT</pubDate><guid>http://www.cppblog.com/lmlf001/archive/2007/09/20/32542.html</guid><wfw:comment>http://www.cppblog.com/lmlf001/comments/32542.html</wfw:comment><comments>http://www.cppblog.com/lmlf001/archive/2007/09/20/32542.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cppblog.com/lmlf001/comments/commentRss/32542.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/lmlf001/services/trackbacks/32542.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/-->//信号量与PV操作的一个例子，模拟借书还书操作，共4个用户，每用户最多借15本书，书库共40本书，在书库没书时，该用户处于睡眠等待状态，直到有其他用户还书，若所有用户均处于等待状态，则产生了死锁int&...&nbsp;&nbsp;<a href='http://www.cppblog.com/lmlf001/archive/2007/09/20/32542.html'>阅读全文</a><img src ="http://www.cppblog.com/lmlf001/aggbug/32542.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/lmlf001/" target="_blank">芥之舟</a> 2007-09-20 14:21 <a href="http://www.cppblog.com/lmlf001/archive/2007/09/20/32542.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>msgsnd与msgrcv函数出现invalid参数的问题</title><link>http://www.cppblog.com/lmlf001/archive/2007/09/19/32486.html</link><dc:creator>芥之舟</dc:creator><author>芥之舟</author><pubDate>Wed, 19 Sep 2007 09:52:00 GMT</pubDate><guid>http://www.cppblog.com/lmlf001/archive/2007/09/19/32486.html</guid><wfw:comment>http://www.cppblog.com/lmlf001/comments/32486.html</wfw:comment><comments>http://www.cppblog.com/lmlf001/archive/2007/09/19/32486.html#Feedback</comments><slash:comments>4</slash:comments><wfw:commentRss>http://www.cppblog.com/lmlf001/comments/commentRss/32486.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/lmlf001/services/trackbacks/32486.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 今天写了一个小程序，使用了消息队列的msgsnd msgrcv函数，由msgsnd函数循环处理由终端输入的消息，然后把它发送到消息队列，而另一个进程则循环读取消息，进行处理。<br>&nbsp;&nbsp;&nbsp; 这时，问题出现了，每次调用msgrcv函数的时候，它总是第一次调用成功，而第二次返回错误，察看errno=22，打印出来是invalid argument，无效参数。<br>&nbsp;&nbsp;&nbsp; 凭它的说明，可以看出可能是我调用函数的时候参数错误，但为什么第一次能调用成功呢？<br>&nbsp;&nbsp;&nbsp; 检查了一下，没看出问题。然后google之，发现许多人和我出现了同样的问题，但没有人给出解答。<br>&nbsp;&nbsp;&nbsp; 自己鼓捣了好久，还是没搞定。<br>&nbsp;&nbsp;&nbsp; 然后man 2 msgsnd，一下午不知打了多少遍了，这一次从头到尾一个字一个字的读了下去。<br>&nbsp;&nbsp;&nbsp; 终于发现问题了。<br>
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;msgsnd(</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;msqid,&nbsp;</span><span style="color: #0000ff;">const</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">void</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">*</span><span style="color: #000000;">msgp,&nbsp;size_t&nbsp;msgsz,&nbsp;</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;msgflg);<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ssize_t&nbsp;msgrcv(</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;msqid,&nbsp;</span><span style="color: #0000ff;">void</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">*</span><span style="color: #000000;">msgp,&nbsp;size_t&nbsp;msgsz,&nbsp;</span><span style="color: #0000ff;">long</span><span style="color: #000000;">&nbsp;msgtyp,&nbsp;</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;msgflg);</span></div>
&nbsp;&nbsp;&nbsp; man文档里有一句话：<span style="color: red;">The&nbsp; mtext&nbsp; field&nbsp; is an array (or other structure) whose size is specified by msgsz</span>&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp; 一直没认真去看，想当然的以为msgsz就是msgp的大小了，原来人家不是，自己自作多情了。。。<br><br>&nbsp;&nbsp;&nbsp; 这么一个小问题花了我半个下午，但现在发现总比以后出错要好多了~&nbsp; <br>&nbsp;&nbsp;&nbsp; 写出来，给那些第一次使用的朋友们看~~<br>
&nbsp;&nbsp;&nbsp; <br>
&nbsp;&nbsp;&nbsp; 把修改后的代码贴出来：<br> <br>
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: #0000ff;">struct</span><span style="color: #000000;">&nbsp;s_msg{<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">long</span><span style="color: #000000;">&nbsp;type;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">char</span><span style="color: #000000;">&nbsp;mtext[</span><span style="color: #000000;">256</span><span style="color: #000000;">];<br>};</span></div>
<br>
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: #0000ff;">//snd<br>
int</span><span style="color: #000000;">&nbsp;main()<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;mid;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">((mid</span><span style="color: #000000;">=</span><span style="color: #000000;">msgget(</span><span style="color: #000000;">4446</span><span style="color: #000000;">,IPC_CREAT</span><span style="color: #000000;">|</span><span style="color: #000000;">0666</span><span style="color: #000000;">))</span><span style="color: #000000;">==-</span><span style="color: #000000;">1</span><span style="color: #000000;">)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;perr_exit(</span><span style="color: #000000;">"</span><span style="color: #000000;">msgget:</span><span style="color: #000000;">"</span><span style="color: #000000;">);<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">char</span><span style="color: #000000;">&nbsp;buf[BUFSIZE];<br>&nbsp;&nbsp;&nbsp;&nbsp;memset(buf,</span><span style="color: #000000;">'</span><span style="color: #000000;">\0</span><span style="color: #000000;">'</span><span style="color: #000000;">,BUFSIZE);<br>&nbsp;&nbsp;&nbsp;&nbsp;s_msg&nbsp;mymsg;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">while</span><span style="color: #000000;">(fgets(buf,BUFSIZE,stdin)</span><span style="color: #000000;">!=</span><span style="color: #000000;">NULL){<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">(strlen(buf)</span><span style="color: #000000;">&lt;=</span><span style="color: #000000;">2</span><span style="color: #000000;">)</span><span style="color: #0000ff;">continue</span><span style="color: #000000;">;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;buf[strlen(buf)]</span><span style="color: #000000;">=</span><span style="color: #000000;">'</span><span style="color: #000000;">\0</span><span style="color: #000000;">'</span><span style="color: #000000;">;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">(sscanf(buf,</span><span style="color: #000000;">"</span><span style="color: #000000;">%d%s</span><span style="color: #000000;">"</span><span style="color: #000000;">,</span><span style="color: #000000;">&amp;</span><span style="color: #000000;">mymsg.type,mymsg.mtext)</span><span style="color: #000000;">!=</span><span style="color: #000000;">2</span><span style="color: #000000;">)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;perr_exit(</span><span style="color: #000000;">"</span><span style="color: #000000;">Invalid&nbsp;input:</span><span style="color: #000000;">"</span><span style="color: #000000;">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">(msgsnd(mid,</span><span style="color: #000000;">&amp;</span><span style="color: #000000;">mymsg,</span><span style="color: #000000;">256</span><span style="color: #000000;">,IPC_NOWAIT))&nbsp;&nbsp;  &nbsp;&nbsp;  //msgsiz 为sizeof(mtext[]),而非sizeof(s_msg)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;perr_exit(</span><span style="color: #000000;">"</span><span style="color: #000000;">msgsnd:</span><span style="color: #000000;">"</span><span style="color: #000000;">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;memset(buf,</span><span style="color: #000000;">'</span><span style="color: #000000;">\0</span><span style="color: #000000;">'</span><span style="color: #000000;">,BUFSIZE);<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">return</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">0</span><span style="color: #000000;">;<br>}<br></span></div>
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: #0000ff;">//rcv<br>
int</span><span style="color: #000000;">&nbsp;main(</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;argc,</span><span style="color: #0000ff;">char</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">**</span><span style="color: #000000;">argv)<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;mid;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">((mid</span><span style="color: #000000;">=</span><span style="color: #000000;">msgget(</span><span style="color: #000000;">4446</span><span style="color: #000000;">,IPC_CREAT</span><span style="color: #000000;">|</span><span style="color: #000000;">0666</span><span style="color: #000000;">))</span><span style="color: #000000;">==-</span><span style="color: #000000;">1</span><span style="color: #000000;">)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;perr_exit(</span><span style="color: #000000;">"</span><span style="color: #000000;">msgget:</span><span style="color: #000000;">"</span><span style="color: #000000;">);<br>&nbsp;&nbsp;&nbsp;&nbsp;s_msg&nbsp;mymsg;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">while</span><span style="color: #000000;">(</span><span style="color: #000000;">1</span><span style="color: #000000;">)<br>&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">(msgrcv(mid,</span><span style="color: #000000;">&amp;</span><span style="color: #000000;">mymsg,</span><span style="color: #000000;">256</span><span style="color: #000000;">,</span><span style="color: #000000;">0</span><span style="color: #000000;">,MSG_NOERROR)</span><span style="color: #000000;">==-</span><span style="color: #000000;">1</span><span style="color: #000000;">)&nbsp;&nbsp;  //就是这里出错的，记住你了<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;perr_exit(</span><span style="color: #000000;">"</span><span style="color: #000000;">msgrcv</span><span style="color: #000000;">"</span><span style="color: #000000;">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">(mymsg.type</span><span style="color: #000000;">!=</span><span style="color: #000000;">4446</span><span style="color: #000000;">)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cout</span><span style="color: #000000;">&lt;&lt;</span><span style="color: #000000;">mymsg.type</span><span style="color: #000000;">&lt;&lt;</span><span style="color: #000000;">"</span><span style="color: #000000;">&nbsp;:</span><span style="color: #000000;">"</span><span style="color: #000000;">&lt;&lt;</span><span style="color: #000000;">mymsg.mtext</span><span style="color: #000000;">&lt;&lt;</span><span style="color: #000000;">endl;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">else</span><span style="color: #000000;">&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cout</span><span style="color: #000000;">&lt;&lt;</span><span style="color: #000000;">"</span><span style="color: #000000;">4446&nbsp;quit\n</span><span style="color: #000000;">"</span><span style="color: #000000;">;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">break</span><span style="color: #000000;">;&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;memset(</span><span style="color: #000000;">&amp;</span><span style="color: #000000;">mymsg,</span><span style="color: #000000;">0</span><span style="color: #000000;">,</span><span style="color: #0000ff;">sizeof</span><span style="color: #000000;">(mymsg));<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">return</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">0</span><span style="color: #000000;">;<br>}<br></span></div>
<br> <img src ="http://www.cppblog.com/lmlf001/aggbug/32486.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/lmlf001/" target="_blank">芥之舟</a> 2007-09-19 17:52 <a href="http://www.cppblog.com/lmlf001/archive/2007/09/19/32486.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>mmap进行文件映射可能遇到的问题</title><link>http://www.cppblog.com/lmlf001/archive/2007/09/13/32112.html</link><dc:creator>芥之舟</dc:creator><author>芥之舟</author><pubDate>Thu, 13 Sep 2007 02:56:00 GMT</pubDate><guid>http://www.cppblog.com/lmlf001/archive/2007/09/13/32112.html</guid><wfw:comment>http://www.cppblog.com/lmlf001/comments/32112.html</wfw:comment><comments>http://www.cppblog.com/lmlf001/archive/2007/09/13/32112.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/lmlf001/comments/commentRss/32112.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/lmlf001/services/trackbacks/32112.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp; mmap函数实现把一个文件映射到一个内存区域，从而我们可以像读写内存一样读写文件，他比单纯调用read/write也要快上许多。在某些时候我们可以把内存的内容拷贝到一个文件中实现内存备份，当然，也可以把文件的内容映射到内存来恢复某些服务。另外，mmap实现共享内存也是其主要应用之一，mmap系统调用使得进程之间通过映射同一个普通文件实现共享内存。<br>关于mmap的内容请看《Unix环境高级编程》12章。在这里，说一下使用mmap函数时可能遇到的问题：<br>
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //下面的代码把文件1.ls中的内容通过mmap函数写入2.ls中，忽略出错处理</span><span style="color: #0000ff;"><br><br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; int</span><span style="color: #000000;">&nbsp;fd</span><span style="color: #000000;">=</span><span style="color: #000000;">open(</span><span style="color: #000000;">"</span><span style="color: #000000;">1.ls</span><span style="color: #000000;">"</span><span style="color: #000000;">,O_RDONLY);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;fd2</span><span style="color: #000000;">=</span><span style="color: #000000;">open(</span><span style="color: #000000;">"</span><span style="color: #000000;">2.ls</span><span style="color: #000000;">"</span><span style="color: #000000;">,O_CREAT</span><span style="color: #000000;">|</span><span style="color: #000000;">O_RDWR</span><span style="color: #000000;">|</span><span style="color: #000000;">O_TRUNC,S_IRUSR</span><span style="color: #000000;">|</span><span style="color: #000000;">S_IWUSR);</span><span style="color: #008000;">//</span><span style="color: #008000;">必须设置读写权限,若只有写权限,会产生SIGSEGV信号<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;&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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">mmap进行文件映射时必须先读取文件`</span><span style="color: #008000;"><br></span><span style="color: #000000;"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">struct</span><span style="color: #000000;">&nbsp;stat&nbsp;st;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fstat(fd,</span><span style="color: #000000;">&amp;</span><span style="color: #000000;">st);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;lseek(fd2,st.st_size</span><span style="color: #000000;">-</span><span style="color: #000000;">1</span><span style="color: #000000;">,SEEK_SET);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;write(fd2,</span><span style="color: #000000;">""</span><span style="color: #000000;">,</span><span style="color: #000000;">1</span><span style="color: #000000;">);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">必须的，如果不设置，当写入数据的时候会遇到文件结束符，产生SIGBUS信号</span><span style="color: #008000;"><br></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">void</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">*</span><span style="color: #000000;">_src</span><span style="color: #000000;">=</span><span style="color: #000000;">mmap(NULL,st.st_size,PROT_READ,MAP_SHARED,&nbsp;fd,</span><span style="color: #000000;">0</span><span style="color: #000000;">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">void</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">*</span><span style="color: #000000;">_des</span><span style="color: #000000;">=</span><span style="color: #000000;">mmap(NULL,st.st_size,PROT_WRITE,MAP_SHARED,fd2,</span><span style="color: #000000;">0</span><span style="color: #000000;">);<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;close(fd);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">关闭文件后&nbsp;依然可修改文件内容</span><span style="color: #008000;"><br></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;close(fd2);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;memcpy(_des,_src,st.st_size);</span></div>
<br>总结一下，可能产生的问题如下：<br>&nbsp;&nbsp;&nbsp; 1.进行文件映射的描述符必须拥有读权限，否则会产生SIGSEGV信号<br>&nbsp;&nbsp;&nbsp; 2.把内存内容写入映射文件时，必须确保被写文件当前位置到文件结尾的长度不小于所写内容长度，否则产生SIGBUS信号<br>&nbsp;&nbsp;&nbsp; 3.关闭文件描述符并不能保证文件内容不被修改<br>&nbsp;&nbsp;&nbsp; 4.munmap并不能使映射的内容写回磁盘<br><br> <img src ="http://www.cppblog.com/lmlf001/aggbug/32112.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/lmlf001/" target="_blank">芥之舟</a> 2007-09-13 10:56 <a href="http://www.cppblog.com/lmlf001/archive/2007/09/13/32112.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>使用共享内存的多级哈希表的一种实现</title><link>http://www.cppblog.com/lmlf001/archive/2007/09/08/31858.html</link><dc:creator>芥之舟</dc:creator><author>芥之舟</author><pubDate>Sat, 08 Sep 2007 13:17:00 GMT</pubDate><guid>http://www.cppblog.com/lmlf001/archive/2007/09/08/31858.html</guid><wfw:comment>http://www.cppblog.com/lmlf001/comments/31858.html</wfw:comment><comments>http://www.cppblog.com/lmlf001/archive/2007/09/08/31858.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.cppblog.com/lmlf001/comments/commentRss/31858.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/lmlf001/services/trackbacks/31858.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 在一个服务程序运行的时候，它往往要把数据写入共享内存以便在进城需要重新启动的时候可以直接从共享内存中读取数据，另一方面，在服务进程因某种原因挂掉的时候，共享内存中的数据仍然存在，这样就可以减少带来的损失。关于共享内存的内容请google之，在这里，实现了一种在共享内存中存取数据的hash表，它采用了多级存储求模取余的方法，具体内容请看以下代码：http://lmlf001.blog.sohu.co...&nbsp;&nbsp;<a href='http://www.cppblog.com/lmlf001/archive/2007/09/08/31858.html'>阅读全文</a><img src ="http://www.cppblog.com/lmlf001/aggbug/31858.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/lmlf001/" target="_blank">芥之舟</a> 2007-09-08 21:17 <a href="http://www.cppblog.com/lmlf001/archive/2007/09/08/31858.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>哈希表的一个实现</title><link>http://www.cppblog.com/lmlf001/archive/2007/09/08/31857.html</link><dc:creator>芥之舟</dc:creator><author>芥之舟</author><pubDate>Sat, 08 Sep 2007 13:07:00 GMT</pubDate><guid>http://www.cppblog.com/lmlf001/archive/2007/09/08/31857.html</guid><wfw:comment>http://www.cppblog.com/lmlf001/comments/31857.html</wfw:comment><comments>http://www.cppblog.com/lmlf001/archive/2007/09/08/31857.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cppblog.com/lmlf001/comments/commentRss/31857.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/lmlf001/services/trackbacks/31857.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 今天写了一个哈希表的实现，采用了阵列加开链表的形式看了一下别人的写法，只用阵列，行数=100的时候空间利用率竟然达到97%http://lmlf001.blog.sohu.com/Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/-->#ifndef&nb...&nbsp;&nbsp;<a href='http://www.cppblog.com/lmlf001/archive/2007/09/08/31857.html'>阅读全文</a><img src ="http://www.cppblog.com/lmlf001/aggbug/31857.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/lmlf001/" target="_blank">芥之舟</a> 2007-09-08 21:07 <a href="http://www.cppblog.com/lmlf001/archive/2007/09/08/31857.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>素数算法</title><link>http://www.cppblog.com/lmlf001/archive/2007/09/08/31856.html</link><dc:creator>芥之舟</dc:creator><author>芥之舟</author><pubDate>Sat, 08 Sep 2007 13:00:00 GMT</pubDate><guid>http://www.cppblog.com/lmlf001/archive/2007/09/08/31856.html</guid><wfw:comment>http://www.cppblog.com/lmlf001/comments/31856.html</wfw:comment><comments>http://www.cppblog.com/lmlf001/archive/2007/09/08/31856.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/lmlf001/comments/commentRss/31856.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/lmlf001/services/trackbacks/31856.html</trackback:ping><description><![CDATA[ 今天看到一个素数的算法，利用素数集中在6x+1/6x-1的原理<br>整理了一下 算法如下 打印max以下num个素数：<br><br><a title="http://lmlf001.blog.sohu.com/" href="http://lmlf001.blog.sohu.com/">http://lmlf001.blog.sohu.com/</a><br><br>
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: #0000ff;">void</span><span style="color: #000000;">&nbsp;print_prime(</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;max,</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;num)<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">(max</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">5</span><span style="color: #000000;">)</span><span style="color: #0000ff;">return</span><span style="color: #000000;">;<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;unsigned&nbsp;</span><span style="color: #0000ff;">long</span><span style="color: #000000;">&nbsp;t,m,n,p;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;unsigned&nbsp;</span><span style="color: #0000ff;">long</span><span style="color: #000000;">&nbsp;x;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;i,j,a,b,k;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;x</span><span style="color: #000000;">=</span><span style="color: #000000;">max;<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;z</span><span style="color: #000000;">=</span><span style="color: #000000;">0</span><span style="color: #000000;">;<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;x</span><span style="color: #000000;">=</span><span style="color: #000000;">x</span><span style="color: #000000;">/</span><span style="color: #000000;">6</span><span style="color: #000000;">;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">x&gt;=5</span><span style="color: #008000;"><br></span><span style="color: #000000;"><br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">for</span><span style="color: #000000;">(t</span><span style="color: #000000;">=</span><span style="color: #000000;">x;t</span><span style="color: #000000;">&gt;=</span><span style="color: #000000;">0</span><span style="color: #000000;">,z</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">num;t</span><span style="color: #000000;">--</span><span style="color: #000000;">)<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;i</span><span style="color: #000000;">=</span><span style="color: #000000;">1</span><span style="color: #000000;">;j</span><span style="color: #000000;">=</span><span style="color: #000000;">1</span><span style="color: #000000;">;&nbsp;k</span><span style="color: #000000;">=</span><span style="color: #000000;">t</span><span style="color: #000000;">%</span><span style="color: #000000;">10</span><span style="color: #000000;">;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;m</span><span style="color: #000000;">=</span><span style="color: #000000;">6</span><span style="color: #000000;">*</span><span style="color: #000000;">t;&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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br></span><span style="color: #008000;">/*</span><span style="color: #008000;">*i,j的值&nbsp;是是否进行验证的标志也是对应的6t-1和6t+1的素性标志*</span><span style="color: #008000;">*/</span><span style="color: #000000;"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">(((k</span><span style="color: #000000;">-</span><span style="color: #000000;">4</span><span style="color: #000000;">)</span><span style="color: #000000;">==</span><span style="color: #000000;">0</span><span style="color: #000000;">)</span><span style="color: #000000;">||</span><span style="color: #000000;">((k</span><span style="color: #000000;">-</span><span style="color: #000000;">9</span><span style="color: #000000;">)</span><span style="color: #000000;">==</span><span style="color: #000000;">0</span><span style="color: #000000;">)</span><span style="color: #000000;">||</span><span style="color: #000000;">((m</span><span style="color: #000000;">+</span><span style="color: #000000;">1</span><span style="color: #000000;">)</span><span style="color: #000000;">%</span><span style="color: #000000;">3</span><span style="color: #000000;">==</span><span style="color: #000000;">0</span><span style="color: #000000;">))j</span><span style="color: #000000;">=</span><span style="color: #000000;">0</span><span style="color: #000000;">;<br></span><span style="color: #008000;">/*</span><span style="color: #008000;">此处是简单验证6*t-1,6*t+1&nbsp;是不是素数，借以提高素数纯度*</span><span style="color: #008000;">*/</span><span style="color: #000000;"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">(((k</span><span style="color: #000000;">-</span><span style="color: #000000;">6</span><span style="color: #000000;">)</span><span style="color: #000000;">==</span><span style="color: #000000;">0</span><span style="color: #000000;">)</span><span style="color: #000000;">||</span><span style="color: #000000;">((m</span><span style="color: #000000;">-</span><span style="color: #000000;">1</span><span style="color: #000000;">)</span><span style="color: #000000;">%</span><span style="color: #000000;">3</span><span style="color: #000000;">==</span><span style="color: #000000;">0</span><span style="color: #000000;">))i</span><span style="color: #000000;">=</span><span style="color: #000000;">0</span><span style="color: #000000;">;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br></span><span style="color: #008000;">/*</span><span style="color: #008000;">**先通过初步判断去除末尾是5，及被3整除的数**</span><span style="color: #008000;">*/</span><span style="color: #000000;"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">for</span><span style="color: #000000;">(p</span><span style="color: #000000;">=</span><span style="color: #000000;">1</span><span style="color: #000000;">;p</span><span style="color: #000000;">*</span><span style="color: #000000;">6</span><span style="color: #000000;">&lt;=</span><span style="color: #000000;">sqrt(m</span><span style="color: #000000;">+</span><span style="color: #000000;">1</span><span style="color: #000000;">)</span><span style="color: #000000;">+</span><span style="color: #000000;">2</span><span style="color: #000000;">;p</span><span style="color: #000000;">++</span><span style="color: #000000;">&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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;n</span><span style="color: #000000;">=</span><span style="color: #000000;">p</span><span style="color: #000000;">*</span><span style="color: #000000;">6</span><span style="color: #000000;">;&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;&nbsp;&nbsp;&nbsp;&nbsp;<br></span><span style="color: #008000;">/*</span><span style="color: #008000;">*将6*p-1和6*p+1看作伪素数来试除****</span><span style="color: #008000;">*/</span><span style="color: #000000;"><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;k</span><span style="color: #000000;">=</span><span style="color: #000000;">p</span><span style="color: #000000;">%</span><span style="color: #000000;">10</span><span style="color: #000000;">;<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;a</span><span style="color: #000000;">=</span><span style="color: #000000;">1</span><span style="color: #000000;">;b</span><span style="color: #000000;">=</span><span style="color: #000000;">1</span><span style="color: #000000;">;&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;&nbsp;&nbsp;&nbsp;<br></span><span style="color: #008000;">/*</span><span style="color: #008000;">*同样此处a,b的值也是用来判断除数是否为素数提高除数的素数纯度*</span><span style="color: #008000;">*/</span><span style="color: #000000;"><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><span style="color: #0000ff;">if</span><span style="color: #000000;">(((k</span><span style="color: #000000;">-</span><span style="color: #000000;">4</span><span style="color: #000000;">)</span><span style="color: #000000;">==</span><span style="color: #000000;">0</span><span style="color: #000000;">)</span><span style="color: #000000;">||</span><span style="color: #000000;">((k</span><span style="color: #000000;">-</span><span style="color: #000000;">9</span><span style="color: #000000;">)</span><span style="color: #000000;">==</span><span style="color: #000000;">0</span><span style="color: #000000;">))a</span><span style="color: #000000;">=</span><span style="color: #000000;">0</span><span style="color: #000000;">;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">(((k</span><span style="color: #000000;">-</span><span style="color: #000000;">6</span><span style="color: #000000;">)</span><span style="color: #000000;">==</span><span style="color: #000000;">0</span><span style="color: #000000;">))b</span><span style="color: #000000;">=</span><span style="color: #000000;">0</span><span style="color: #000000;">;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">(i){&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></span><span style="color: #008000;">/*</span><span style="color: #008000;">如果i非零就对m-1即所谓6*t-1进行验证，当然还要看除数n+1,n-1,素性纯度</span><span style="color: #008000;">*/</span><span style="color: #000000;"><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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">(a){</span><span style="color: #0000ff;">if</span><span style="color: #000000;">((m</span><span style="color: #000000;">-</span><span style="color: #000000;">1</span><span style="color: #000000;">)</span><span style="color: #000000;">%</span><span style="color: #000000;">(n</span><span style="color: #000000;">+</span><span style="color: #000000;">1</span><span style="color: #000000;">)</span><span style="color: #000000;">==</span><span style="color: #000000;">0</span><span style="color: #000000;">)i</span><span style="color: #000000;">=</span><span style="color: #000000;">0</span><span style="color: #000000;">;}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">/*</span><span style="color: #008000;">**一旦被整除就说明不是素数故素性为零即将i&nbsp;赋值为零**</span><span style="color: #008000;">*/</span><span style="color: #000000;"><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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">(b){</span><span style="color: #0000ff;">if</span><span style="color: #000000;">((m</span><span style="color: #000000;">-</span><span style="color: #000000;">1</span><span style="color: #000000;">)</span><span style="color: #000000;">%</span><span style="color: #000000;">(n</span><span style="color: #000000;">-</span><span style="color: #000000;">1</span><span style="color: #000000;">)</span><span style="color: #000000;">==</span><span style="color: #000000;">0</span><span style="color: #000000;">)i</span><span style="color: #000000;">=</span><span style="color: #000000;">0</span><span style="color: #000000;">;}<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">(j){&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></span><span style="color: #008000;">/*</span><span style="color: #008000;">*如果j非零就对m+1即所谓6*t+1进行验证，当然还要看除数n+1,n-1,素性纯度</span><span style="color: #008000;">*/</span><span style="color: #000000;"><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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">(a){</span><span style="color: #0000ff;">if</span><span style="color: #000000;">((m</span><span style="color: #000000;">+</span><span style="color: #000000;">1</span><span style="color: #000000;">)</span><span style="color: #000000;">%</span><span style="color: #000000;">(n</span><span style="color: #000000;">+</span><span style="color: #000000;">1</span><span style="color: #000000;">)</span><span style="color: #000000;">==</span><span style="color: #000000;">0</span><span style="color: #000000;">)j</span><span style="color: #000000;">=</span><span style="color: #000000;">0</span><span style="color: #000000;">;}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">/*</span><span style="color: #008000;">**一旦被整除就说明不是素数故素性为零即将j&nbsp;赋值为零**</span><span style="color: #008000;">*/</span><span style="color: #000000;"><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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">(b){</span><span style="color: #0000ff;">if</span><span style="color: #000000;">((m</span><span style="color: #000000;">+</span><span style="color: #000000;">1</span><span style="color: #000000;">)</span><span style="color: #000000;">%</span><span style="color: #000000;">(n</span><span style="color: #000000;">-</span><span style="color: #000000;">1</span><span style="color: #000000;">)</span><span style="color: #000000;">==</span><span style="color: #000000;">0</span><span style="color: #000000;">)j</span><span style="color: #000000;">=</span><span style="color: #000000;">0</span><span style="color: #000000;">;}<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">((i</span><span style="color: #000000;">+</span><span style="color: #000000;">j)</span><span style="color: #000000;">==</span><span style="color: #000000;">0</span><span style="color: #000000;">)</span><span style="color: #0000ff;">break</span><span style="color: #000000;">;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br></span><span style="color: #008000;">/*</span><span style="color: #008000;">*如果已经知道6*t-1,6*t+1都不是素数了那就结束试除循环**</span><span style="color: #008000;">*/</span><span style="color: #000000;"><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><span style="color: #0000ff;">if</span><span style="color: #000000;">(j){cout</span><span style="color: #000000;">&lt;&lt;</span><span style="color: #000000;">m</span><span style="color: #000000;">+</span><span style="color: #000000;">1</span><span style="color: #000000;">&lt;&lt;</span><span style="color: #000000;">endl;z</span><span style="color: #000000;">++</span><span style="color: #000000;">;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">(z</span><span style="color: #000000;">&gt;=</span><span style="color: #000000;">num)</span><span style="color: #0000ff;">break</span><span style="color: #000000;">;}<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">(i){cout</span><span style="color: #000000;">&lt;&lt;</span><span style="color: #000000;">m</span><span style="color: #000000;">-</span><span style="color: #000000;">1</span><span style="color: #000000;">&lt;&lt;</span><span style="color: #000000;">endl;z</span><span style="color: #000000;">++</span><span style="color: #000000;">;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">(z</span><span style="color: #000000;">&gt;=</span><span style="color: #000000;">num)</span><span style="color: #0000ff;">break</span><span style="color: #000000;">;}<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br><br>}</span></div>
<br> <img src ="http://www.cppblog.com/lmlf001/aggbug/31856.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/lmlf001/" target="_blank">芥之舟</a> 2007-09-08 21:00 <a href="http://www.cppblog.com/lmlf001/archive/2007/09/08/31856.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>类成员函数的默认参数表问题</title><link>http://www.cppblog.com/lmlf001/archive/2007/09/08/31855.html</link><dc:creator>芥之舟</dc:creator><author>芥之舟</author><pubDate>Sat, 08 Sep 2007 12:58:00 GMT</pubDate><guid>http://www.cppblog.com/lmlf001/archive/2007/09/08/31855.html</guid><wfw:comment>http://www.cppblog.com/lmlf001/comments/31855.html</wfw:comment><comments>http://www.cppblog.com/lmlf001/archive/2007/09/08/31855.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/lmlf001/comments/commentRss/31855.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/lmlf001/services/trackbacks/31855.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp; 今天写程序的时候用到了函数的默认参数表，编译的时候老是无法通过，后来经过几次修改测试才发现是把类的函数参数表在函数定义时搞错了。<br>&nbsp;&nbsp;&nbsp; 类的成员函数的参数表在声明时默认参数位于参数表右部，若int fn(int a,int b=0,int c=5);之类的，但在它定义的时候则不能加默认参数，只能写int fn(int a,int b,int c);<br><br><a title="http://lmlf001.blog.sohu.com/"  href="http://lmlf001.blog.sohu.com/">http://lmlf001.blog.sohu.com/</a><br><img src ="http://www.cppblog.com/lmlf001/aggbug/31855.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/lmlf001/" target="_blank">芥之舟</a> 2007-09-08 20:58 <a href="http://www.cppblog.com/lmlf001/archive/2007/09/08/31855.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>epoll实现的net_echo程序</title><link>http://www.cppblog.com/lmlf001/archive/2007/09/08/31854.html</link><dc:creator>芥之舟</dc:creator><author>芥之舟</author><pubDate>Sat, 08 Sep 2007 12:49:00 GMT</pubDate><guid>http://www.cppblog.com/lmlf001/archive/2007/09/08/31854.html</guid><wfw:comment>http://www.cppblog.com/lmlf001/comments/31854.html</wfw:comment><comments>http://www.cppblog.com/lmlf001/archive/2007/09/08/31854.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/lmlf001/comments/commentRss/31854.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/lmlf001/services/trackbacks/31854.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 这是我前两天所做的一个小练习，用epoll写个echo程序，里面用共享内存存储访问信息，贴在这里，哪天生疏了还可以过来查查~~&nbsp; 更多内容请访问： http://lmlf001.blog.sohu.com/Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter...&nbsp;&nbsp;<a href='http://www.cppblog.com/lmlf001/archive/2007/09/08/31854.html'>阅读全文</a><img src ="http://www.cppblog.com/lmlf001/aggbug/31854.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/lmlf001/" target="_blank">芥之舟</a> 2007-09-08 20:49 <a href="http://www.cppblog.com/lmlf001/archive/2007/09/08/31854.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>