﻿<?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++博客-flylonglong</title><link>http://www.cppblog.com/flylonglong/</link><description /><language>zh-cn</language><lastBuildDate>Tue, 07 Apr 2026 09:33:48 GMT</lastBuildDate><pubDate>Tue, 07 Apr 2026 09:33:48 GMT</pubDate><ttl>60</ttl><item><title>一个困扰了一天的问题(终于解决了)</title><link>http://www.cppblog.com/flylonglong/archive/2007/10/17/34487.html</link><dc:creator>谢龙飞</dc:creator><author>谢龙飞</author><pubDate>Wed, 17 Oct 2007 13:06:00 GMT</pubDate><guid>http://www.cppblog.com/flylonglong/archive/2007/10/17/34487.html</guid><wfw:comment>http://www.cppblog.com/flylonglong/comments/34487.html</wfw:comment><comments>http://www.cppblog.com/flylonglong/archive/2007/10/17/34487.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/flylonglong/comments/commentRss/34487.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/flylonglong/services/trackbacks/34487.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: &nbsp;&nbsp;<a href='http://www.cppblog.com/flylonglong/archive/2007/10/17/34487.html'>阅读全文</a><img src ="http://www.cppblog.com/flylonglong/aggbug/34487.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/flylonglong/" target="_blank">谢龙飞</a> 2007-10-17 21:06 <a href="http://www.cppblog.com/flylonglong/archive/2007/10/17/34487.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>“实际用户ID”、“有效用户ID”和“保存的设置用户ID”三个术语的区别</title><link>http://www.cppblog.com/flylonglong/archive/2007/10/15/34300.html</link><dc:creator>谢龙飞</dc:creator><author>谢龙飞</author><pubDate>Mon, 15 Oct 2007 15:05:00 GMT</pubDate><guid>http://www.cppblog.com/flylonglong/archive/2007/10/15/34300.html</guid><wfw:comment>http://www.cppblog.com/flylonglong/comments/34300.html</wfw:comment><comments>http://www.cppblog.com/flylonglong/archive/2007/10/15/34300.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/flylonglong/comments/commentRss/34300.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/flylonglong/services/trackbacks/34300.html</trackback:ping><description><![CDATA[一个进程的&nbsp;real&nbsp;user&nbsp;ID&nbsp;是指运行此进程的用户角色的&nbsp;ID。 <br>一个进程的&nbsp;effective&nbsp;user&nbsp;ID&nbsp;是指此进程目前实际有效的用户&nbsp;ID（也就是权限的大小），effective&nbsp;user&nbsp;ID&nbsp;主要用来校验权限时使用，比如打开文件、创建文件、修改文件、kill&nbsp;别的进程，等等。 <br>如果一个进程是以&nbsp;root&nbsp;身份来运行的，那么上面这两个&nbsp;ID&nbsp;可以用&nbsp;setuid/seteuid&nbsp;随便修改，想怎么改就怎么改，改来改去都可以。 <br>但是如果一个进程是以普通用户身份来运行的，那么上面这两个&nbsp;ID&nbsp;一般来说是相同的，并且也不能随便修改。只有一种情况例外：此进程的可执行文件的权限标记中，设置了&#8220;设置用户&nbsp;ID&#8221;位！ <br>在命令行中，设置一个可执行文件的&#8220;设置用户&nbsp;ID&#8221;位的最简单的方法，就是用 <br>
<pre>chmod&nbsp;+s&nbsp;/path/to/file</pre>
<br>这个命令。 <br>一旦用了这个命令之后，再执行这个文件， <br>那么生成的进程的&nbsp;effective&nbsp;user&nbsp;ID&nbsp;就变成了这个可执行文件的&nbsp;owner&nbsp;user&nbsp;ID（属主用户&nbsp;ID）， <br>而&nbsp;real&nbsp;user&nbsp;ID&nbsp;仍然是启动这个程序时所用的用户的&nbsp;ID。 <br>打个比方来说，如果有这样的一个文件： <br>引用：<em>-rw[color=red]s[/color]r-[color=red]s[/color]r-x&nbsp;1&nbsp;susesuse&nbsp;susesuse&nbsp;7902&nbsp;2006-08-31&nbsp;13:22&nbsp;tuid</em><br><br>注意这个文件已经用&nbsp;chmod&nbsp;+s&nbsp;命令设置过&#8220;设置用户&nbsp;ID&#8221;位了。 <br>然后我用&nbsp;flw&nbsp;这个用户来执行它，那么生成的进程它的&nbsp;real&nbsp;user&nbsp;ID&nbsp;就是&nbsp;flw（因为我是用&nbsp;flw&nbsp;运行的），但是&nbsp;effective&nbsp;user&nbsp;ID&nbsp;就变成了&nbsp;susesuse（因为这个可执行文件被设置了&#8220;设置用户&nbsp;ID&#8221;位，并且它的&nbsp;owner&nbsp;user&nbsp;ID&nbsp;是&nbsp;susesuse）。 <br>这时，这个进程实际上就有两个用户权限了。只不过目前生效的是&nbsp;susesuse，因此它目前能够且只能够操作&nbsp;susesuse&nbsp;用户的文件，如果现在我又想要操作&nbsp;flw&nbsp;用户的文件怎么办？ <br>很简单，只需要&nbsp;seteuid(&nbsp;getuid()&nbsp;)&nbsp;就可以了。执行完这句之后，effective&nbsp;user&nbsp;ID&nbsp;就变成和&nbsp;real&nbsp;user&nbsp;ID&nbsp;一样了，都变成&nbsp;flw&nbsp;了。 <br><br>可是如果过了一会儿我又想要变回来怎么办？因为&nbsp;effective&nbsp;user&nbsp;ID&nbsp;和&nbsp;real&nbsp;user&nbsp;ID&nbsp;此时都变成了&nbsp;flw&nbsp;了，所以操作系统必须得有一个地方保存住原来的&#8220;设置用户&nbsp;ID&#8221;（也就是可执行文件的&nbsp;owner&nbsp;user&nbsp;ID），不然等你再想要&nbsp;seteuid&nbsp;的时候，操作系统就不知道你有没有那个权利了。（总不能再去访问一次文件系统吧？那样也太没有效率了） <br><br>操作系统为了能够在设置了&nbsp;seteuid&nbsp;之后，再次设置回来，所以特地将原来的&#8220;设置用户&nbsp;ID&#8221;保存下来了，这个保存下来的设置用户&nbsp;ID&nbsp;自然就叫做&#8220;保存的设置用户&nbsp;ID&#8221;。 <br><br>下面看一段写的例子程序： <br>
<pre>flw@Sleeper:~$&nbsp;whoami
<br>flw
<br>flw@Sleeper:~$&nbsp;cat&nbsp;tuid.c
<br>#&nbsp;include&nbsp;&lt;stdio.h&gt;
<br>#&nbsp;include&nbsp;&lt;sys/types.h&gt;
<br>#&nbsp;include&nbsp;&lt;pwd.h&gt;
<br>
<br>int&nbsp;main(&nbsp;void&nbsp;)
<br>{
<br>&nbsp;&nbsp;&nbsp;&nbsp;struct&nbsp;passwd&nbsp;*pwd;
<br>
<br>&nbsp;&nbsp;&nbsp;&nbsp;pwd&nbsp;=&nbsp;getpwuid(&nbsp;geteuid()&nbsp;);
<br>&nbsp;&nbsp;&nbsp;&nbsp;printf(&nbsp;"effective&nbsp;UID:&nbsp;[%s]\n",&nbsp;pwd-&gt;pw_name&nbsp;);
<br>
<br>&nbsp;&nbsp;&nbsp;&nbsp;system(&nbsp;"touch&nbsp;/tmp/foo.txt;&nbsp;ls&nbsp;-l&nbsp;/tmp/foo.txt;&nbsp;rm&nbsp;-rf&nbsp;/tmp/foo.txt"&nbsp;);
<br>
<br>&nbsp;&nbsp;&nbsp;&nbsp;printf(&nbsp;"\nset&nbsp;EUID&nbsp;to&nbsp;`flw'..\n"&nbsp;);
<br>&nbsp;&nbsp;&nbsp;&nbsp;pwd&nbsp;=&nbsp;getpwnam(&nbsp;"flw"&nbsp;);
<br>&nbsp;&nbsp;&nbsp;&nbsp;seteuid(pwd-&gt;pw_uid);
<br>
<br>&nbsp;&nbsp;&nbsp;&nbsp;pwd&nbsp;=&nbsp;getpwuid(&nbsp;geteuid()&nbsp;);
<br>&nbsp;&nbsp;&nbsp;&nbsp;printf(&nbsp;"effective&nbsp;UID:&nbsp;[%s]\n",&nbsp;pwd-&gt;pw_name&nbsp;);
<br>
<br>&nbsp;&nbsp;&nbsp;&nbsp;system(&nbsp;"touch&nbsp;/tmp/foo.txt;&nbsp;ls&nbsp;-l&nbsp;/tmp/foo.txt;&nbsp;rm&nbsp;-rf&nbsp;/tmp/foo.txt"&nbsp;);
<br>
<br>&nbsp;&nbsp;&nbsp;&nbsp;printf(&nbsp;"\nset&nbsp;EUID&nbsp;to&nbsp;`root'..\n"&nbsp;);
<br>&nbsp;&nbsp;&nbsp;&nbsp;seteuid(0);
<br>
<br>&nbsp;&nbsp;&nbsp;&nbsp;pwd&nbsp;=&nbsp;getpwuid(&nbsp;geteuid()&nbsp;);
<br>&nbsp;&nbsp;&nbsp;&nbsp;printf(&nbsp;"effective&nbsp;UID:&nbsp;[%s]\n",&nbsp;pwd-&gt;pw_name&nbsp;);
<br>
<br>&nbsp;&nbsp;&nbsp;&nbsp;system(&nbsp;"touch&nbsp;/tmp/foo.txt;&nbsp;ls&nbsp;-l&nbsp;/tmp/foo.txt;&nbsp;rm&nbsp;-rf&nbsp;/tmp/foo.txt"&nbsp;);
<br>
<br>&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;0;
<br>}
<br>flw@Sleeper:~$&nbsp;su&nbsp;root&nbsp;-c&nbsp;"cc&nbsp;-o&nbsp;tuid&nbsp;tuid.c;&nbsp;chmod&nbsp;+s&nbsp;tuid;&nbsp;ls&nbsp;-al&nbsp;tuid"
<br>Password:
<br>-rwsr-sr-x&nbsp;1&nbsp;root&nbsp;root&nbsp;7902&nbsp;2006-08-31&nbsp;13:55&nbsp;tuid
<br>flw@Sleeper:~$&nbsp;./tuid
<br>effective&nbsp;UID:&nbsp;[root]
<br>-rw-r--r--&nbsp;1&nbsp;root&nbsp;root&nbsp;0&nbsp;2006-08-31&nbsp;13:55&nbsp;/tmp/foo.txt
<br>
<br>set&nbsp;EUID&nbsp;to&nbsp;`flw'..
<br>effective&nbsp;UID:&nbsp;[flw]
<br>-rw-r--r--&nbsp;1&nbsp;flw&nbsp;root&nbsp;0&nbsp;2006-08-31&nbsp;13:55&nbsp;/tmp/foo.txt
<br>
<br>set&nbsp;EUID&nbsp;to&nbsp;`root'..
<br>effective&nbsp;UID:&nbsp;[root]
<br>-rw-r--r--&nbsp;1&nbsp;root&nbsp;root&nbsp;0&nbsp;2006-08-31&nbsp;13:55&nbsp;/tmp/foo.txt
<br>flw@Sleeper:~$</pre>
<img src ="http://www.cppblog.com/flylonglong/aggbug/34300.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/flylonglong/" target="_blank">谢龙飞</a> 2007-10-15 23:05 <a href="http://www.cppblog.com/flylonglong/archive/2007/10/15/34300.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>新的征途!!!!</title><link>http://www.cppblog.com/flylonglong/archive/2007/10/13/34142.html</link><dc:creator>谢龙飞</dc:creator><author>谢龙飞</author><pubDate>Sat, 13 Oct 2007 12:18:00 GMT</pubDate><guid>http://www.cppblog.com/flylonglong/archive/2007/10/13/34142.html</guid><wfw:comment>http://www.cppblog.com/flylonglong/comments/34142.html</wfw:comment><comments>http://www.cppblog.com/flylonglong/archive/2007/10/13/34142.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/flylonglong/comments/commentRss/34142.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/flylonglong/services/trackbacks/34142.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: &nbsp;&nbsp;<a href='http://www.cppblog.com/flylonglong/archive/2007/10/13/34142.html'>阅读全文</a><img src ="http://www.cppblog.com/flylonglong/aggbug/34142.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/flylonglong/" target="_blank">谢龙飞</a> 2007-10-13 20:18 <a href="http://www.cppblog.com/flylonglong/archive/2007/10/13/34142.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>调试020时候的一个问题</title><link>http://www.cppblog.com/flylonglong/archive/2007/10/08/33769.html</link><dc:creator>谢龙飞</dc:creator><author>谢龙飞</author><pubDate>Mon, 08 Oct 2007 08:46:00 GMT</pubDate><guid>http://www.cppblog.com/flylonglong/archive/2007/10/08/33769.html</guid><wfw:comment>http://www.cppblog.com/flylonglong/comments/33769.html</wfw:comment><comments>http://www.cppblog.com/flylonglong/archive/2007/10/08/33769.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/flylonglong/comments/commentRss/33769.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/flylonglong/services/trackbacks/33769.html</trackback:ping><description><![CDATA[<p>今天 调试一个020的数据处理程序碰到了一个问题,虽然已经解决,但是还是有点不明白,先记录在这里,以后有空的时候再好好 细细地想一下<br>我的原代码如下:<br>#include &lt;C8051f020.h&gt;</p>
<p>#define SYS_CLK 22118400</p>
<p>typedef struct&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //存储结构体<br>{<br>&nbsp; unsigned char AD[93];&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //2543的AD数据<br>&nbsp; unsigned char shi;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //gprs的数据<br>&nbsp; unsigned char fen;<br>&nbsp; unsigned char miao;<br>&nbsp; unsigned long jingdu_zheng;<br>&nbsp; unsigned long jingdu_xiao;<br>&nbsp; unsigned long weidu_zheng;<br>&nbsp; unsigned long weidu_xiao;<br>&nbsp; unsigned char sudu_zheng;<br>&nbsp; unsigned char sudu_xiao;<br>}ram;</p>
<p>typedef struct&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; unsigned char&nbsp; adr_suocun;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //锁存的8位地址<br>&nbsp; unsigned char&nbsp; dptr_gao;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //dptr<br>&nbsp; unsigned char&nbsp; dptr_di;<br>&nbsp; <br>}ADR_struct;&nbsp; </p>
<p>void sysclk_Init(void);<br>void dog_Init(void);<br>void port_Init(void);<br>void cunchu_Init(void);<br>void cunchu_Init1(void);<br>void ram_init(unsigned char ADR);<br>void save_struct(ram a);<br>ram read_struct(void);</p>
<p>sbit AHH&nbsp; = P1^0;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //用通用I/O来控制访问地址<br>sbit LB&nbsp;&nbsp; = P1^1;<br>sbit UB&nbsp;&nbsp; = P1^2;&nbsp; <br>sbit ALE&nbsp; = P0^5; </p>
<p>ADR_struct&nbsp; dui_shou;&nbsp;&nbsp;&nbsp;&nbsp; //存储队首地址<br>ADR_struct&nbsp; dui_wei;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //存储队尾地址<br>&nbsp;&nbsp;&nbsp;&nbsp; </p>
<p>void main()<br>{<br>&nbsp; unsigned char i;<br>&nbsp; ram a;<br>&nbsp; sysclk_Init(); <br>&nbsp; dog_Init();<br>&nbsp; cunchu_Init();<br>&nbsp; port_Init();<br>&nbsp; UB&nbsp;&nbsp; = 1;<br>&nbsp; LB&nbsp;&nbsp; = 0;<br>&nbsp; dui_wei.adr_suocun=0;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //锁存的8位地址<br>&nbsp; dui_wei.dptr_gao=0x08;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //dptr<br>&nbsp; dui_wei.dptr_di=0;</p>
<p>&nbsp;<br>&nbsp; for(i=0;i&lt;93;i++)<br>&nbsp;&nbsp; a.AD[i]=i;<br>&nbsp; a.shi = 2;<br>&nbsp; a.fen = 2;<br>&nbsp; a.miao= 2;<br>&nbsp; a.jingdu_zheng= 2;<br>&nbsp; a.jingdu_xiao=2;<br>&nbsp; a.weidu_zheng=2;<br>&nbsp; a.weidu_xiao=2;<br>&nbsp; a.sudu_zheng=2;<br>&nbsp; a.sudu_xiao=2;</p>
<p>&nbsp; for(i=0;i&lt;17;i++)<br>&nbsp;&nbsp;&nbsp; save_struct(a);<br>&nbsp;&nbsp; <br>&nbsp; <br>}</p>
<p>void ram_init(unsigned char ADR)&nbsp;&nbsp; //ADR为要锁存的A8-A15 LU_B为 字节高低选择位为0 输出抵字节位 为1输出高字节位 <br>{<br>&nbsp; unsigned char i;<br>&nbsp; AHH = 1;<br>&nbsp; for(i=0;i&lt;50;i++);&nbsp;&nbsp;&nbsp;&nbsp; //等待稳定<br>&nbsp; P3&nbsp;&nbsp; = ADR;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //ADR为全局变量 选择存储块<br>&nbsp; for(i=0;i&lt;50;i++);&nbsp;&nbsp;&nbsp;&nbsp; //等待稳定<br>&nbsp; AHH&nbsp; = 0;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //注意 每一个LU_B ADR组合 对应4K的地址空间 每次换&#8220;块&#8221;的时候均需先调用此函数</p>
<p>}</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>void save_struct(ram a)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //将a存储到FIFO 队尾<br>{<br>&nbsp; <br>&nbsp; ram xdata *p;<br>&nbsp; unsigned int i;<br>&nbsp; cunchu_Init();<br>&nbsp; ram_init(dui_wei.adr_suocun); //按队尾地址结构体中的suocun初始化sram<br>&nbsp; dui_wei.dptr_gao&lt;&lt;=8;<br>&nbsp; p&nbsp; = dui_wei.dptr_gao+dui_wei.dptr_di;<br>&nbsp; *p = a;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //存储a到队尾<br>&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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br>//以下代码为队尾地址变换<br>&nbsp; if((dui_wei.dptr_di==0x91)&amp;&amp;(dui_wei.dptr_gao==0x17)&amp;&amp;(dui_wei.adr_suocun==0xff)&amp;&amp;(UB ==0))&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;&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; //此时最后一块内存 刚好存储1937个字节&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; dui_wei.dptr_gao = 0x08;&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; //dptr_di==1001 0001 dptr_gao==&amp;&amp;000 10 111<br>&nbsp;&nbsp;&nbsp; dui_wei.dptr_di = 0x00;&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; //suocun已经满ff UB为有效<br>&nbsp;dui_wei.adr_suocun = 0;<br>&nbsp;UB = !UB;<br>&nbsp;LB = !LB;<br>&nbsp; }<br>&nbsp; else<br>&nbsp; { <br>&nbsp;&nbsp;&nbsp; if((dui_wei.dptr_gao&lt;&lt;8)+dui_wei.dptr_di&lt;=(1937-114))&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //2k空间最多只能存储17帧即：1937个字节<br>&nbsp;&nbsp;&nbsp; {&nbsp; <br>&nbsp;&nbsp; p=(dui_wei.dptr_gao&lt;&lt;8)+dui_wei.dptr_di+114;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //每帧数据长114个字节 dptr值加上114;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; dui_wei.dptr_di&nbsp; = (unsigned char)p;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; i = p;<br>&nbsp;&nbsp; dui_wei.dptr_gao =i&gt;&gt;8;</p>
<p>&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp; else&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; //2k空间已经用完dptr=1937=0000111 10010001时 移动到下一个2k块 切换 <br>&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp; if(dui_wei.dptr_gao==0x0f)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //将高八位从000 01 111 切换成 000 10 000 低八位全清零<br>&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp; dui_wei.dptr_di=0;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; dui_wei.dptr_gao ^=0x1f;<br>&nbsp;&nbsp; } <br>&nbsp;&nbsp; else if(dui_wei.dptr_gao==0x17)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //将高八位从000 10 111 切换成 000 01 000 低八位全清零<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; //并触发adr_suocun + 1<br>&nbsp;&nbsp;&nbsp;&nbsp; dui_wei.dptr_di=0;<br>&nbsp;&nbsp;dui_wei.dptr_gao ^=0x1f;<br>&nbsp;&nbsp;<br>//以下为adr_suocun + 1处理代码&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;&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp; if(dui_wei.adr_suocun==0xff)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //adr_suocun + 1过程中 要判断是否需要切换高低字节 用完低字节后 再用高字节<br>&nbsp;&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; LB = !LB;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; UB = !UB;<br>&nbsp;&nbsp;&nbsp; dui_wei.dptr_di&nbsp; = 0;<br>&nbsp;&nbsp;&nbsp; dui_wei.dptr_gao = 0x08;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //将高八位切换成000 01 000 低八位清零<br>&nbsp;&nbsp;&nbsp; dui_wei.adr_suocun=0;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp;&nbsp; else&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; //未用完 不切换<br>&nbsp;&nbsp;&nbsp;&nbsp; {&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; dui_wei.dptr_di = 0;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //将高八位切换成000 01 000 低八位清零<br>&nbsp;&nbsp;&nbsp; dui_wei.dptr_gao = 0x08;&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; dui_wei.adr_suocun++;<br>&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>&nbsp;/*&nbsp;&nbsp;&nbsp;&nbsp; if(dui_wei==dui_shou)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //如果存储速度大于读取速度 则覆盖最旧的数据<br>&nbsp;&nbsp;&nbsp;&nbsp;&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; //使得队首 向后移动一个 帧 从而丢弃最旧的数据帧<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; adr_add_change;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }*/<br>&nbsp;&nbsp;&nbsp; }<br>&nbsp; }<br>&nbsp;&nbsp;&nbsp; <br>}<br>&nbsp; </p>
<p>void sysclk_Init(void)&nbsp;&nbsp; //系统时钟初始化<br>{<br>&nbsp; int i;<br>&nbsp; OSCXCN = 0x67;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //启动外部11.0592MHz震荡器<br>&nbsp; for(i = 0;i&lt;255;i++);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //等待外部晶体起振 <br>&nbsp; while((OSCXCN &amp; 0x80)==0x00);&nbsp; //查询标志位 以判断外部时钟是否稳定<br>&nbsp; OSCICN = 0x88;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //使用外部震荡器做系统时钟并使能时钟丢失检测&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br>&nbsp; CKCON = 0x10;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //初始化T1时钟为系统时钟<br>}</p>
<p>void dog_Init(void)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //看门狗设置为：关闭<br>{<br>&nbsp; EA&nbsp;&nbsp;&nbsp; =&nbsp; 0;<br>&nbsp; WDTCN =&nbsp; 0xde;<br>&nbsp; WDTCN =&nbsp; 0xad;<br>&nbsp; EA&nbsp;&nbsp;&nbsp; =&nbsp; 1; <br>}<br>void port_Init(void)&nbsp;&nbsp;&nbsp;&nbsp; //端口分配与输入输出方式<br>{<br>&nbsp; XBR2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; =&nbsp; 0x44;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //使能交叉开关和全局弱上拉 配置UART1引脚,外部存储器接口配置到低端口<br>&nbsp; XBR0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; =&nbsp; 0x04;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //配置UARTO引脚<br>&nbsp; XBR1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; =&nbsp; 0x00;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br>&nbsp; P0MDOUT&nbsp;&nbsp; =&nbsp; 0xf5;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //UART的RX引脚总被配置成开漏输出 TX引脚为推拉输出 RD WR ALE 2543EOC均为推拉输出<br>&nbsp; P3MDOUT&nbsp;&nbsp;&nbsp; =&nbsp; 0xff;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //DT0-DT7<br>&nbsp;<br>}</p>
<p><br>void cunchu_Init(void)<br>{<br>&nbsp; EMI0CF = 0x0c;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //配置外部存储器为复用方式 只使用片外XRAM ALE脉宽为一个系统时钟周期<br>&nbsp; EMI0TC = 0x6d;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //配置外部存储器的接口时序<br>&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; </p>
<p>void cunchu_Init1(void)<br>{<br>&nbsp; EMI0CF = 0x10;<br>&nbsp; EMI0TC = 0x6d;<br>} </p>
在build的时候老出现如下错误:<br><br>segment does not fit<br><br>刚开始知道是内部ram超限了<br><br>但是将 <span style="COLOR: #ff0000">ram a</span> 改成 <span style="COLOR: #ff0000">xdata ram a<br></span>还是有问题<br><br>直到再将 全局变量<br>ADR_struct&nbsp; dui_shou;&nbsp;&nbsp;&nbsp;&nbsp; //存储队首地址<br>ADR_struct&nbsp; dui_wei;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //存储队尾地址<br><br>改成<br>ADR_struct&nbsp; <span style="COLOR: #ff0000">idata </span>dui_shou;&nbsp;&nbsp;&nbsp;&nbsp; //存储队首地址<br>ADR_struct&nbsp;<span style="COLOR: #ff0000"> idata</span> dui_wei;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //存储队尾地址<br><br>才解决错误<br><br>有时间好好考虑下 感觉&nbsp;<span style="COLOR: #ff0000">全局变量</span> <span style="COLOR: #000000">是个关键<br></span>
<img src ="http://www.cppblog.com/flylonglong/aggbug/33769.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/flylonglong/" target="_blank">谢龙飞</a> 2007-10-08 16:46 <a href="http://www.cppblog.com/flylonglong/archive/2007/10/08/33769.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>开学以来的学习情况 总结</title><link>http://www.cppblog.com/flylonglong/archive/2007/10/06/33655.html</link><dc:creator>谢龙飞</dc:creator><author>谢龙飞</author><pubDate>Sat, 06 Oct 2007 14:06:00 GMT</pubDate><guid>http://www.cppblog.com/flylonglong/archive/2007/10/06/33655.html</guid><wfw:comment>http://www.cppblog.com/flylonglong/comments/33655.html</wfw:comment><comments>http://www.cppblog.com/flylonglong/archive/2007/10/06/33655.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/flylonglong/comments/commentRss/33655.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/flylonglong/services/trackbacks/33655.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 开学以来的学习情况 总结&nbsp;&nbsp;<a href='http://www.cppblog.com/flylonglong/archive/2007/10/06/33655.html'>阅读全文</a><img src ="http://www.cppblog.com/flylonglong/aggbug/33655.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/flylonglong/" target="_blank">谢龙飞</a> 2007-10-06 22:06 <a href="http://www.cppblog.com/flylonglong/archive/2007/10/06/33655.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>几种Bootloader简介</title><link>http://www.cppblog.com/flylonglong/archive/2007/10/06/33641.html</link><dc:creator>谢龙飞</dc:creator><author>谢龙飞</author><pubDate>Sat, 06 Oct 2007 11:24:00 GMT</pubDate><guid>http://www.cppblog.com/flylonglong/archive/2007/10/06/33641.html</guid><wfw:comment>http://www.cppblog.com/flylonglong/comments/33641.html</wfw:comment><comments>http://www.cppblog.com/flylonglong/archive/2007/10/06/33641.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.cppblog.com/flylonglong/comments/commentRss/33641.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/flylonglong/services/trackbacks/33641.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: &nbsp;&nbsp;<a href='http://www.cppblog.com/flylonglong/archive/2007/10/06/33641.html'>阅读全文</a><img src ="http://www.cppblog.com/flylonglong/aggbug/33641.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/flylonglong/" target="_blank">谢龙飞</a> 2007-10-06 19:24 <a href="http://www.cppblog.com/flylonglong/archive/2007/10/06/33641.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>几种Bootloader简介</title><link>http://www.cppblog.com/flylonglong/archive/2007/10/06/33639.html</link><dc:creator>谢龙飞</dc:creator><author>谢龙飞</author><pubDate>Sat, 06 Oct 2007 11:23:00 GMT</pubDate><guid>http://www.cppblog.com/flylonglong/archive/2007/10/06/33639.html</guid><wfw:comment>http://www.cppblog.com/flylonglong/comments/33639.html</wfw:comment><comments>http://www.cppblog.com/flylonglong/archive/2007/10/06/33639.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/flylonglong/comments/commentRss/33639.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/flylonglong/services/trackbacks/33639.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: &nbsp;&nbsp;<a href='http://www.cppblog.com/flylonglong/archive/2007/10/06/33639.html'>阅读全文</a><img src ="http://www.cppblog.com/flylonglong/aggbug/33639.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/flylonglong/" target="_blank">谢龙飞</a> 2007-10-06 19:23 <a href="http://www.cppblog.com/flylonglong/archive/2007/10/06/33639.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>。。。。。。。。。。</title><link>http://www.cppblog.com/flylonglong/archive/2007/10/02/33336.html</link><dc:creator>谢龙飞</dc:creator><author>谢龙飞</author><pubDate>Tue, 02 Oct 2007 12:22:00 GMT</pubDate><guid>http://www.cppblog.com/flylonglong/archive/2007/10/02/33336.html</guid><wfw:comment>http://www.cppblog.com/flylonglong/comments/33336.html</wfw:comment><comments>http://www.cppblog.com/flylonglong/archive/2007/10/02/33336.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/flylonglong/comments/commentRss/33336.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/flylonglong/services/trackbacks/33336.html</trackback:ping><description><![CDATA[<font id="zoom" class="f14"><font color="#cccccc">
<p>t<span style="color: red;">ar -I或者bunzip2命令都可以解压.bz2文件 </span><br style="color: red;"><br style="color: red;"><span style="color: red;">tar xvfj example.tar.bz2 </span><br style="color: red;"><br style="color: red;"><span style="color: red;">tar xvfz example.tar.gz </span><br style="color: red;"><br style="color: red;"><span style="color: red;">tar xvfz example.tgz </span><br style="color: red;"><br style="color: red;"><span style="color: red;">tar xvf example.tar </span><br style="color: red;"><br style="color: red;"><span style="color: red;">unzip example.zip </span><br style="color: red;"><br style="color: red;"><span style="color: red;">tar -jvxf some.bz，就是把tar的zvxf 改成jvxf </span><br style="color: red;"><br style="color: red;"><span style="color: red;">zip/tar rh8下有一个图形界面的软件file-roller可以做这件事。另外可以用unzip *.zip解开zip文件，unrar *.rar解开rar文件，不过unrar一般系统不自带，要到网上下载。 </span><br style="color: red;"><br style="color: red;"><span style="color: red;"># rpm2cpio example.rpm │ cpio -div </span><br style="color: red;"><br style="color: red;"><span style="color: red;"># ar p example.deb data.tar.gz | tar zxf - </span><br style="color: red;"><br style="color: red;"><span style="color: red;">Alien
提供了.tgz, .rpm, .slp和.deb等压缩格式之间的相互转换： sourceforge.net/projects/alien
sEx提供了几乎所有可见的压缩格式的解压接口：sourceforge.net/projects/sex 0058
在多级目录中查找某个文件的方法(青海湖) </span><br style="color: red;"><br style="color: red;"><span style="color: red;">find /dir -name filename.ext </span><br style="color: red;"><br style="color: red;"><span style="color: red;">du -a | grep filename.ext </span><br style="color: red;"><br style="color: red;"><span style="color: red;">locate filename.ext</span></p>
<!-- 正文end -->
</font></font><img src ="http://www.cppblog.com/flylonglong/aggbug/33336.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/flylonglong/" target="_blank">谢龙飞</a> 2007-10-02 20:22 <a href="http://www.cppblog.com/flylonglong/archive/2007/10/02/33336.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Linux下软件安装方法总结</title><link>http://www.cppblog.com/flylonglong/archive/2007/09/30/33268.html</link><dc:creator>谢龙飞</dc:creator><author>谢龙飞</author><pubDate>Sun, 30 Sep 2007 13:50:00 GMT</pubDate><guid>http://www.cppblog.com/flylonglong/archive/2007/09/30/33268.html</guid><wfw:comment>http://www.cppblog.com/flylonglong/comments/33268.html</wfw:comment><comments>http://www.cppblog.com/flylonglong/archive/2007/09/30/33268.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/flylonglong/comments/commentRss/33268.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/flylonglong/services/trackbacks/33268.html</trackback:ping><description><![CDATA[<h2 class="diaryTitle">Linux下软件安装方法总结</h2>
<strong>关键词</strong>：			    <a  href="http://tag.bokee.com/tag/Linux" target="_blank">Linux</a> &nbsp;&nbsp;			    <a  href="http://tag.bokee.com/tag/tar" target="_blank">tar</a> &nbsp;&nbsp;			    <a  href="http://tag.bokee.com/tag/%B0%B2%D7%B0%C8%ED%BC%FE" target="_blank">安装软件</a> &nbsp;&nbsp;			    <a  href="http://tag.bokee.com/tag/rpm" target="_blank">rpm</a> &nbsp;&nbsp;			    <a  href="http://tag.bokee.com/tag/apt" target="_blank">apt</a> &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;
<p>
<script type="text/javascript"><!--
google_ad_client = "pub-4294855807292675";
google_ad_width =" 728;
google_ad_height" = 15;
google_ad_format =" "728x15_0ads_al_s";
google_ad_channel" = "";
google_color_border =" "ffffff";
google_color_bg" = "cc0000";
google_color_link =" "ffffff";
google_color_text" = "000000";
google_color_url =" "008000";
//--"></script>
<script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script>
<iframe name="google_ads_frame" src="http://pagead2.googlesyndication.com/pagead/ads?client=ca-pub-4294855807292675&amp;dt=1191246170890&amp;lmt=1181728070&amp;format=728x15_0ads_al_s&amp;output=html&amp;correlator=1191246170889&amp;url=http%3A%2F%2Fzhoulifa.bokee.com%2F5444771.html&amp;color_bg=CC0000&amp;color_text=000000&amp;color_link=FFFFFF&amp;color_url=008000&amp;color_border=FFFFFF&amp;ref=http%3A%2F%2Fwww.google.cn%2Fsearch%3Fq%3Dlinux%25E4%25B8%258Blumaqq%25E4%25B8%258B%25E8%25BD%25BD%26complete%3D1%26hl%3Dzh-CN%26inlang%3Dzh-CN%26newwindow%3D1%26start%3D10%26sa%3DN&amp;cc=100&amp;ga_vid=26544113.1191246171&amp;ga_sid=1191246171&amp;ga_hid=434965204&amp;flash=0&amp;u_h=768&amp;u_w=1024&amp;u_ah=718&amp;u_aw=1024&amp;u_cd=24&amp;u_tz=480&amp;u_his=1&amp;u_java=true&amp;u_nplug=5&amp;u_nmime=18" marginwidth="0" marginheight="0" vspace="0" hspace="0" allowtransparency="true" frameborder="0" height="15" scrolling="no" width="728"></iframe>
</p>
<p>Linux下软件安装方法总结：<br></p>
<p>一、rpm包安装方式步骤：<br>1、找到相应的软件包，比如soft.version.rpm，下载到本机某个目录；<br>2、打开一个终端，su -成root用户；<br>3、cd soft.version.rpm所在的目录；<br>4、输入rpm -ivh soft.version.rpm</p>
<p>二、deb包安装方式步骤：<br>1、找到相应的软件包，比如soft.version.deb，下载到本机某个目录；<br>2、打开一个终端，su -成root用户；<br>3、cd soft.version.deb所在的目录；<br>4、输入dpkg -i soft.version.deb</p>
<p>三、tar.gz源代码包安装方式：<br>1、找到相应的软件包，比如soft.tar.gz，下载到本机某个目录；<br>2、打开一个终端，su -成root用户；<br>3、cd soft.tar.gz所在的目录；<br>4、tar -xzvf soft.tar.gz //一般会生成一个soft目录<br>5、cd soft<br>6、./configure<br>7、make<br>8、make install</p>
<p>四、tar.bz2源代码包安装方式：<br>1、找到相应的软件包，比如soft.tar.bz2，下载到本机某个目录；<br>2、打开一个终端，su -成root用户；<br>3、cd soft.tar.bz2所在的目录；<br>4、tar -xjvf soft.tar.bz2 //一般会生成一个soft目录<br>5、cd soft<br>6、./configure<br>7、make<br>8、make install</p>
<p>五、apt方式安装：<br>1、打开一个终端，su -成root用户；<br>2、apt-cache search soft 注：soft是你要找的软件的名称或相关信息<br>3、如果2中找到了软件soft.version，则用apt-get install soft.version命令安装软件 注：只要你可以上网，只需要用apt-cache search查找软件，用apt-get install软件</p>
<p>六、bin文件安装：<br>如果你下载到的软件名是soft.bin，一般情况下是个可执行文件，安装方法如下：<br>1、打开一个终端，su -成root用户；<br>2、chmod +x soft.bin<br>3、./soft.bin //运行这个命令就可以安装软件了</p>
<p>/************关于本文档********************************************<br>*filename:Linux下软件安装方法总结<br>*purpose:总结了Linux下各种软件安装方法<br>*wrote by: zhoulifa(<a  href="&#109;&#97;&#105;&#108;&#116;&#111;&#58;&#122;&#104;&#111;&#117;&#108;&#105;&#102;&#97;&#64;&#49;&#54;&#51;&#46;&#99;&#111;&#109;">zhoulifa@163.com</a>) 周立发(<a  href="http://zhoulifa.bokee.com/">http://zhoulifa.bokee.com</a>)<br>Linux爱好者 Linux知识传播者 SOHO族 开发者 最擅长C语言编程<br>*date time:2006-07-26 18:10:00<br>*Note: 任何人可以任意复制代码并运用这些文档，当然包括你的商业用途<br>* 但请遵循GPL。<br>*Hope:希望越来越多的人贡献自己的力量，为科学技术发展出力<br>*********************************************************************/</p>
<p>七、不需要安装的软件：<br>有了些软件，比如lumaqq，是不需要安装的，自带jre解压缩后可直接运行。假设下载的是lumaqq.tar.gz，使用方法如下：<br>1、打开一个终端，su -成root用户；<br>2、tar -xzvf lumaqq.tar.gz //这一步会生成一个叫LumaQQ的目录<br>3、cd LumaQQ<br>4、chmod +x lumaqq //设置lumaqq这个程序文件为可运行<br>5、此时就可以运行lumaqq了，用命令./lumaqq即可，但每次运行要输入全路径或切换到刚才生成的LumaQQ目录里<br>6、为了保证不设置路径就可以用，你可以在/bin目录下建立一个lumaqq的链接，用命令ln -s lumaqq /bin/ 即可，以后任何时候打开一个终端输入lumaqq就可以启动QQ聊天软件了<br>7、
如果你要想lumaqq有个菜单项，使用菜单编辑工具，比如Alacarte Menu
Editor，找到上面生成的LumaQQ目录里的lumaqq设置一个菜单项就可以了，当然你也可以直接到
/usr/share/applications目录，按照里面其它*.desktop文件的格式生成一个自己的desktop文件即可。</p>
<p>
建议开发者们不要用red hat/red
flag/suse等第一代Linux操作系统，用这些除了方便（也就是说比较傻瓜型）、界面豪华点外没什么好。用debian/ubuntu等第二代
吧，apt命令安装软件是最简单的。apt命令会自动解决软件安装过程中的依赖问题，会把没有的包安装上，会把版本低的包自动升级，当然，都是要经你确认
一次的。<br> 如果你使用Red Hat等第1代Linux系统，安装软件是比较麻烦的事，rpm -ivh
softA.rpm是用来安装softA软件的，但通常情况下可能遇到的问题是提示说需要安装softB1, softB2,
softB3等一堆软件，然后你安装softB1软件包时，可能又会提示你说需要安装softC1, softC2, softC3,
softC4等一堆软件&#8230;&#8230;这样一来你就只够时间到处去找这些软件包了。光盘上没有就得去网上下载，网上还得搜索半天，时间都花在搜索软件包了。而且就算
找到这些软件包，还可能会遇到的问题是：softC2软件包必须在softC1软件包之前安装才可以，顺序错了也安装不成功。但这谁知道呢？难啊。所以，
你没有时间来安装体验软件的功能了，更别说开发软件了。<br>  建议你安装第2代Linux操作系统，典型的是Debian Linux和Ubuntu Linux，我之前在文章&#8220;<a  href="http://bbs.chinaunix.net/viewthread.php?tid=788150&amp;highlight=zhoulifa">如何在安装了Windows操作系统的电脑上安装Linux操作系统</a>&#8221;里提到一个简明安装手册，你下载来照着操作就可以安装Ubuntu了。<br>
第2代操作系统在安装软件方面相当简单：第一步，搜索你要的软件，比如你要找一个游戏软件，它的名称叫myward，这个游戏软件的说明是：my
own war game。搜索这个软件包就只需要输入命令apt-cache search
myward，或者输入软件名称的一部分apt-cache search
war，或者你不知道软件名称，输入软件说明里的一部分文字apt-cache search
game，都可以找到这个软件，找到后进行第二步，只需要输入apt-get install myward，即后面跟上软件名称就可以安装了。<br><br></p><img src ="http://www.cppblog.com/flylonglong/aggbug/33268.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/flylonglong/" target="_blank">谢龙飞</a> 2007-09-30 21:50 <a href="http://www.cppblog.com/flylonglong/archive/2007/09/30/33268.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>dd命令详解 </title><link>http://www.cppblog.com/flylonglong/archive/2007/09/26/32955.html</link><dc:creator>谢龙飞</dc:creator><author>谢龙飞</author><pubDate>Wed, 26 Sep 2007 14:12:00 GMT</pubDate><guid>http://www.cppblog.com/flylonglong/archive/2007/09/26/32955.html</guid><wfw:comment>http://www.cppblog.com/flylonglong/comments/32955.html</wfw:comment><comments>http://www.cppblog.com/flylonglong/archive/2007/09/26/32955.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/flylonglong/comments/commentRss/32955.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/flylonglong/services/trackbacks/32955.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: &nbsp;&nbsp;<a href='http://www.cppblog.com/flylonglong/archive/2007/09/26/32955.html'>阅读全文</a><img src ="http://www.cppblog.com/flylonglong/aggbug/32955.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/flylonglong/" target="_blank">谢龙飞</a> 2007-09-26 22:12 <a href="http://www.cppblog.com/flylonglong/archive/2007/09/26/32955.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>