<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-7598811904790233931</id><updated>2011-11-27T16:21:11.635-08:00</updated><category term='linux'/><category term='coding_os'/><category term='coding_java'/><category term='funny'/><category term='eye'/><category term='coding'/><title type='text'>stonestrange's space</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://stonestrange.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7598811904790233931/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://stonestrange.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>stonestrange</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp1.blogger.com/_F6b5Psa149E/R_sMtqwqXnI/AAAAAAAAARc/3tAdCOe1r_o/S220/%E5%A4%8D%E4%BB%B6+11023341.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>16</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-7598811904790233931.post-5490515440803941221</id><published>2009-04-26T02:43:00.000-07:00</published><updated>2009-04-26T02:46:34.666-07:00</updated><title type='text'>卸载Android模拟器中已经安装的程序</title><content type='html'>1、开始-&gt;运行-&gt;cmd&lt;br /&gt;2、cd \android-sdk-windows-1.0_r2\tools&lt;br /&gt;3、adb shell&lt;br /&gt;#cd /data/app&lt;br /&gt;#ls&lt;br /&gt;#rm *******.apk&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7598811904790233931-5490515440803941221?l=stonestrange.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://stonestrange.blogspot.com/feeds/5490515440803941221/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7598811904790233931&amp;postID=5490515440803941221' title='35 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7598811904790233931/posts/default/5490515440803941221'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7598811904790233931/posts/default/5490515440803941221'/><link rel='alternate' type='text/html' href='http://stonestrange.blogspot.com/2009/04/android.html' title='卸载Android模拟器中已经安装的程序'/><author><name>stonestrange</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp1.blogger.com/_F6b5Psa149E/R_sMtqwqXnI/AAAAAAAAARc/3tAdCOe1r_o/S220/%E5%A4%8D%E4%BB%B6+11023341.jpg'/></author><thr:total>35</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7598811904790233931.post-3265288188174202438</id><published>2008-06-09T22:50:00.000-07:00</published><updated>2008-06-09T22:52:16.310-07:00</updated><title type='text'>【转】什么是实模式、保护模式和虚拟8086方式</title><content type='html'>&lt;span style="font-family: trebuchet ms; color: rgb(204, 204, 255);"&gt;1:实模式：寻址采用和8086相同的16位段和偏移量，最大寻址空间1MB，最大分段64KB。可以使用32位指令。32位的x86 CPU用做高速的8086。&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: trebuchet ms; color: rgb(204, 204, 255);"&gt;2:保护模式：寻址采用32位段和偏移量，最大寻址空间4GB，最大分段4GB (Pentium Pre及以后为64GB)。在保护模式下CPU可以进入虚拟8086方式，这是在保护模式下的实模式程序运行环境。 &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: trebuchet ms; color: rgb(204, 204, 255);"&gt;第一:实模式下程序的运行回顾.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: trebuchet ms; color: rgb(204, 204, 255);"&gt;   程序运行的实质是什么?其实很简单,就是指令的执行,显然CPU&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: trebuchet ms; color: rgb(204, 204, 255);"&gt;是指令得以执行的硬件保障,那么CPU如何知道指令在什么地方呢?&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: trebuchet ms; color: rgb(204, 204, 255);"&gt;对了,80x86系列是使用CS寄存器配合IP寄存器来通知CPU指令在内存&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: trebuchet ms; color: rgb(204, 204, 255);"&gt;中的位置.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: trebuchet ms; color: rgb(204, 204, 255);"&gt;   程序指令在执行过程中一般还需要有各种数据,80x86系列有DS、&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: trebuchet ms; color: rgb(204, 204, 255);"&gt;ES、FS、GS、SS等用于指示不同用途的数据段在内存中的位置。&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: trebuchet ms; color: rgb(204, 204, 255);"&gt;   程序可能需要调用系统的服务子程序，80x86系列使用中断机制&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: trebuchet ms; color: rgb(204, 204, 255);"&gt;来实现系统服务。&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: trebuchet ms; color: rgb(204, 204, 255);"&gt;   总的来说，这些就是实模式下一个程序运行所需的主要内容&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: trebuchet ms; color: rgb(204, 204, 255);"&gt;（其它如跳转、返回、端口操作等相对来说比较次要。） &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: trebuchet ms; color: rgb(204, 204, 255);"&gt;第二：保护模式---从程序运行说起&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: trebuchet ms; color: rgb(204, 204, 255);"&gt;   无论实模式还是保护模式，根本的问题还是程序如何在其中运行。&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: trebuchet ms; color: rgb(204, 204, 255);"&gt;因此我们在学习保护模式时应该时刻围绕这个问题来思考。&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: trebuchet ms; color: rgb(204, 204, 255);"&gt;   和实模式下一样，保护模式下程序运行的实质仍是“CPU执行指令，&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: trebuchet ms; color: rgb(204, 204, 255);"&gt;操作相关数据”，因此实模式下的各种代码段、数据段、堆栈段、中&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: trebuchet ms; color: rgb(204, 204, 255);"&gt;断服务程序仍然存在，且功能、作用不变。&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: trebuchet ms; color: rgb(204, 204, 255);"&gt;   那么保护模式下最大的变化是什么呢？答案可能因人而异，我的&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: trebuchet ms; color: rgb(204, 204, 255);"&gt;答案是“地址转换方式”变化最大。 &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: trebuchet ms; color: rgb(204, 204, 255);"&gt;第三：地址转换方式比较&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: trebuchet ms; color: rgb(204, 204, 255);"&gt;   先看一下实模式下的地址转换方式，假设我们在ES中存入0x1000，&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: trebuchet ms; color: rgb(204, 204, 255);"&gt;DI中存入0xFFFF,那么ES:DI=0x1000*0x10+0xFFFF=0x1FFFF,这就是众&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: trebuchet ms; color: rgb(204, 204, 255);"&gt;所周知的“左移4位加偏移”。&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: trebuchet ms; color: rgb(204, 204, 255);"&gt;   那么如果在保护模式下呢？假设上面的数据不变ES=0x1000,&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: trebuchet ms; color: rgb(204, 204, 255);"&gt;DI=0xFFFF，现在ES:DI等于什么呢？&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: trebuchet ms; color: rgb(204, 204, 255);"&gt;   公式如下：（注：0x1000=1000000000000b= 10 0000 0000 0 00）&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: trebuchet ms; color: rgb(204, 204, 255);"&gt;   ES:DI=全局描述符表中第0x200项描述符给出的段基址+0xFFFF&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: trebuchet ms; color: rgb(204, 204, 255);"&gt;   现在比较一下，好象是不一样。再仔细看看，又好象没什么区别！&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: trebuchet ms; color: rgb(204, 204, 255);"&gt;   为什么说没什么区别，因为我的想法是，既然ES中的内容都不是&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: trebuchet ms; color: rgb(204, 204, 255);"&gt;真正的段地址，凭什么实模式下称ES为“段寄存器”，而到了保护模式&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: trebuchet ms; color: rgb(204, 204, 255);"&gt;就说是“选择子”？&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: trebuchet ms; color: rgb(204, 204, 255);"&gt;   其实它们都是一种映射，只是映射规则不同而已：在实模式下这&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: trebuchet ms; color: rgb(204, 204, 255);"&gt;个“地址转换方式”是“左移4位”；在保护模式下是“查全局/局部描述表”&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: trebuchet ms; color: rgb(204, 204, 255);"&gt;。前者是系统定义的映射方式，后者是用户自定义的转换方式。而它&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: trebuchet ms; color: rgb(204, 204, 255);"&gt;影响的都是“shadow register”&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: trebuchet ms; color: rgb(204, 204, 255);"&gt;  从函数的观点来看，前者是表达式函数，后者是列举式函数：&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: trebuchet ms; color: rgb(204, 204, 255);"&gt;    实模式：  F(es--&gt;segment)={segment |segment=es*0x10}&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: trebuchet ms; color: rgb(204, 204, 255);"&gt;    保护模式：F(es--&gt;segment)={segment |(es,segment)∈GDT/LDT}&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: trebuchet ms; color: rgb(204, 204, 255);"&gt;其中GDT、LDT分别表示全局描述符表和局部描述符表。 &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: trebuchet ms; color: rgb(204, 204, 255);"&gt;第四：保护模式基本组成&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: trebuchet ms; color: rgb(204, 204, 255);"&gt;   保护模式最基本的组成部分是围绕着“地址转换方式”的变化增设了&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: trebuchet ms; color: rgb(204, 204, 255);"&gt;相应的机构。&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: trebuchet ms; color: rgb(204, 204, 255);"&gt;   1、数据段&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: trebuchet ms; color: rgb(204, 204, 255);"&gt;   前面说过，实模式下的各种代码段、数据段、堆栈段、中断服务程&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: trebuchet ms; color: rgb(204, 204, 255);"&gt;序仍然存在，我将它们统称为“数据段”，本文从此向下凡提到数据段都&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: trebuchet ms; color: rgb(204, 204, 255);"&gt;是使用这个定义。&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: trebuchet ms; color: rgb(204, 204, 255);"&gt;   2、描述符&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: trebuchet ms; color: rgb(204, 204, 255);"&gt;   保护模式下引入描述符来描述各种数据段，所有的描述符均为8个字&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: trebuchet ms; color: rgb(204, 204, 255);"&gt;节（0-7)，由第5个字节说明描述符的类型，类型不同，描述符的结构也&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: trebuchet ms; color: rgb(204, 204, 255);"&gt;有所不同。&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: trebuchet ms; color: rgb(204, 204, 255);"&gt;   若干个描述符集中在一起组成描述符表，而描述符表本身也是一种&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: trebuchet ms; color: rgb(204, 204, 255);"&gt;数据段，也使用描述符进行描述。&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: trebuchet ms; color: rgb(204, 204, 255);"&gt;   从现在起，“地址转换”由描述符表来完成，从这个意义上说，描述符&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: trebuchet ms; color: rgb(204, 204, 255);"&gt;表是一张地址转换函数表。&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: trebuchet ms; color: rgb(204, 204, 255);"&gt;   3、选择子&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: trebuchet ms; color: rgb(204, 204, 255);"&gt;   选择子是一个2字节的数，共16位，最低2位表示RPL，第3位表示查表&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: trebuchet ms; color: rgb(204, 204, 255);"&gt;是利用GDT（全局描述符表）还是LDT（局部描述符表）进行，最高13位给&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: trebuchet ms; color: rgb(204, 204, 255);"&gt;出了所需的描述符在描述符表中的地址。（注：13位正好足够寻址8K项） &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: trebuchet ms; color: rgb(204, 204, 255);"&gt;   有了以上三个概念之后可以进一步工作了，现在程序的运行与实模式&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: trebuchet ms; color: rgb(204, 204, 255);"&gt;下完全一样！！！各段寄存器仍然给出一个“段值”，只是这个“假段值”&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: trebuchet ms; color: rgb(204, 204, 255);"&gt;到真正的段地址的转换不再是“左移4位”，而是利用描述符表来完成。但&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: trebuchet ms; color: rgb(204, 204, 255);"&gt;现在出现一个新的问题是：&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: trebuchet ms; color: rgb(204, 204, 255);"&gt;   系统如何知道GDT/LDT在内存中的位置呢？&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: trebuchet ms; color: rgb(204, 204, 255);"&gt;   为了解决这个问题，显然需要引入新的寄存器用于指示GDT/LDT在内&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: trebuchet ms; color: rgb(204, 204, 255);"&gt;存中的位置。在80x86系列中引入了两个新寄存器GDR和LDR，其中GDR用于&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: trebuchet ms; color: rgb(204, 204, 255);"&gt;表示GDT在内存中的段地址和段限（就是表的大小），因此GDR是一个48&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: trebuchet ms; color: rgb(204, 204, 255);"&gt;位的寄存器，其中32位表示段地址，16位表示段限（最大64K，每个描述&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: trebuchet ms; color: rgb(204, 204, 255);"&gt;符8字节，故最多有64K/8=8K个描述符）。LDR用于表示LDT在内存中的位&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: trebuchet ms; color: rgb(204, 204, 255);"&gt;置，但是因为LDT本身也是一种数据段，它必须有一个描述符，且该描述&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: trebuchet ms; color: rgb(204, 204, 255);"&gt;符必须放在GDT中，因此LDR使用了与DS、ES、CS等相同的机制，其中只&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: trebuchet ms; color: rgb(204, 204, 255);"&gt;存放一个“选择子”，通过查GDT表获得LDT的真正内存地址。&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: trebuchet ms; color: rgb(204, 204, 255);"&gt;   对了，还有中断要考虑，在80x86系列中为中断服务提供中断/陷阱描&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: trebuchet ms; color: rgb(204, 204, 255);"&gt;述符，这些描述符构成中断描述符表（IDT），并引入一个48位的全地址&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: trebuchet ms; color: rgb(204, 204, 255);"&gt;寄存器存放IDT的内存地址。理论上IDT表同样可以有8K项，可是因为80x86&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: trebuchet ms; color: rgb(204, 204, 255);"&gt;只支持256个中断，因此IDT实际上最大只能有256项（2K大小）。 &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: trebuchet ms; color: rgb(204, 204, 255);"&gt;第五：新要求---任务篇&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: trebuchet ms; color: rgb(204, 204, 255);"&gt;   前面介绍了保护模式的基本问题，也是核心问题，解决了上面的问题，&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: trebuchet ms; color: rgb(204, 204, 255);"&gt;程序就可以在保护模式下运行了。&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: trebuchet ms; color: rgb(204, 204, 255);"&gt;   但众所周知80286以后在保护模式下实现了对多任务的硬件支持。我&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: trebuchet ms; color: rgb(204, 204, 255);"&gt;的第一反应是：为什么不在实模式下支持多任务，是不能还是不愿？&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: trebuchet ms; color: rgb(204, 204, 255);"&gt;   思考之后，我的答案是：实模式下能实现多任务（也许我错了：））。&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: trebuchet ms; color: rgb(204, 204, 255);"&gt;因为多任务的关键是有了描述符，可以给出关于数据段的额外描述，如权&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: trebuchet ms; color: rgb(204, 204, 255);"&gt;限等，进而在这些附加信息的基础上进行相应的控制，而实模式下缺乏描&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: trebuchet ms; color: rgb(204, 204, 255);"&gt;述符，但假设我们规定各段的前2个字节或若干字节用于描述段的附加属性，&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: trebuchet ms; color: rgb(204, 204, 255);"&gt;我觉得和使用描述符这样的机制没有本质区别，如果再附加其他机制...&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: trebuchet ms; color: rgb(204, 204, 255);"&gt;   基于上述考虑，我更倾向于认为任务是独立于保护模式之外的功能。&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: trebuchet ms; color: rgb(204, 204, 255);"&gt;下面我们来分析一下任务。任务的实质是什么呢？很简单，就是程序嘛！！&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: trebuchet ms; color: rgb(204, 204, 255);"&gt;所谓任务的切换其实就是程序的切换！！&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: trebuchet ms; color: rgb(204, 204, 255);"&gt;   现在问题明朗了。实模式下程序一个接一个运行，因此程序运行的&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: trebuchet ms; color: rgb(204, 204, 255);"&gt;“环境”不必保存；保护模式下可能一个程序在运行过程中被暂停，转而执行&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: trebuchet ms; color: rgb(204, 204, 255);"&gt;下一个程序，我们要做什么？很容易想到保存程序运行的环境就行了（想&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: trebuchet ms; color: rgb(204, 204, 255);"&gt;想游戏程序的保存进度功能），比如各寄存器的值等。&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: trebuchet ms; color: rgb(204, 204, 255);"&gt;   显然这些“环境”数据构成了一类新的数据段（即TSS）。延用前面的思路，&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: trebuchet ms; color: rgb(204, 204, 255);"&gt;给这类数据段设置描述符（TSS描述符），将该类描述符放在GDT中（不能&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: trebuchet ms; color: rgb(204, 204, 255);"&gt;放在LDT中，因为80x86不允许：）），最后再加一个TR寄存器用于查表。&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: trebuchet ms; color: rgb(204, 204, 255);"&gt;TR是一个起“选择子”作用的寄存器，16位。&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: trebuchet ms; color: rgb(204, 204, 255);"&gt;   好了，任务切换的基本工作就是将原任务的“环境”存入TSS数据段，更&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: trebuchet ms; color: rgb(204, 204, 255);"&gt;新TR寄存器，系统将自动查GDT表获得并装载新任务的“环境”，然后转到新&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: trebuchet ms; color: rgb(204, 204, 255);"&gt;任务执行。 &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: trebuchet ms; color: rgb(204, 204, 255);"&gt;第六：附加要求---分页篇&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: trebuchet ms; color: rgb(204, 204, 255);"&gt;   为什么叫附加要求，因为现在任务还不能很好地工作。前面说过，任务&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: trebuchet ms; color: rgb(204, 204, 255);"&gt;实质上是程序，不同的程序是由不同的用户写的，所有这些程序完全可能&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: trebuchet ms; color: rgb(204, 204, 255);"&gt;使用相同的地址空间，而任务的切换过程一般不会包括内存数据的刷新，&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: trebuchet ms; color: rgb(204, 204, 255);"&gt;不是不可能，而是如果那样做太浪费了。因此必须引入分页机制才可能有效&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: trebuchet ms; color: rgb(204, 204, 255);"&gt;地完成对多任务的支持。&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: trebuchet ms; color: rgb(204, 204, 255);"&gt;   分页引入的主要目标就是解决不同任务相互之间发生地址冲突的问题。&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: trebuchet ms; color: rgb(204, 204, 255);"&gt;分页的实质就是实现程序内地址到物理地址的映射，这也是一个“地址转换”&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: trebuchet ms; color: rgb(204, 204, 255);"&gt;机制，同样可以使用前面的方案（即类似GDT的做法）：首先建立页表这样&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: trebuchet ms; color: rgb(204, 204, 255);"&gt;一种数据段，在80x86中使用二级页表方案，增设一个CR3寄存器用于存放&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: trebuchet ms; color: rgb(204, 204, 255);"&gt;一级页表（又称为页目录）在内存中的地址，CR3共32位，其低12位总是为&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: trebuchet ms; color: rgb(204, 204, 255);"&gt;零，高20位指示页目录的内存地址，因此页目录总是按页对齐的。CR3作为&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: trebuchet ms; color: rgb(204, 204, 255);"&gt;任务“环境”的一部分在任务切换时被存入TSS数据段中。&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: trebuchet ms; color: rgb(204, 204, 255);"&gt;   当然还得有相应的缺页中断机制及其相关寄存器CR2（页故障线性地址寄存器）。 &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: trebuchet ms; color: rgb(204, 204, 255);"&gt;第七：总结 &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: trebuchet ms; color: rgb(204, 204, 255);"&gt;   保护模式下增加了什么？&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: trebuchet ms; color: rgb(204, 204, 255);"&gt;   1、寄存器 GDR LDR IDR TR CR3&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: trebuchet ms; color: rgb(204, 204, 255);"&gt;   2、数据段 描述符表(GDT LDT) 任务数据段(TSS) 页表(页目录 二级页表)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: trebuchet ms; color: rgb(204, 204, 255);"&gt;   3、机制   权限检测(利用选择子/描述符/页表项的属性位)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: trebuchet ms; color: rgb(204, 204, 255);"&gt;             线性地址到物理地址的映射 &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: trebuchet ms; color: rgb(204, 204, 255);"&gt;第八：保护模式常用名词解释&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: trebuchet ms; color: rgb(204, 204, 255);"&gt;   前面内容中出现过的不再解释。&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: trebuchet ms; color: rgb(204, 204, 255);"&gt;   1、RPL  选择子当中的权限位确定的权限&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: trebuchet ms; color: rgb(204, 204, 255);"&gt;   2、CPL  特指CS中的选择子当中的权限位确定的权限&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: trebuchet ms; color: rgb(204, 204, 255);"&gt;   3、EPL  EPL=Max(RPL,CPL),即RPL和CPL中数值较大的，或说权限等级较小的&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: trebuchet ms; color: rgb(204, 204, 255);"&gt;   4、DPL  描述符中的权限位确定的权限&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: trebuchet ms; color: rgb(204, 204, 255);"&gt;   5、PL   泛指以上4种特权级&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: trebuchet ms; color: rgb(204, 204, 255);"&gt;   6、任务特权    =CPL&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: trebuchet ms; color: rgb(204, 204, 255);"&gt;   7、I/O特权     由EFLAGS寄存器的位13、14确定的权限&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: trebuchet ms; color: rgb(204, 204, 255);"&gt;   8、一致代码段  一种特殊的代码段，它在CPL&gt;=DPL时允许访问&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: trebuchet ms; color: rgb(204, 204, 255);"&gt;                  正常的代码段在CPL=DPL RPL&lt;=DPL时才允许访问&lt;/span&gt;      &lt;p style="margin: 5px; line-height: 150%; font-family: trebuchet ms; color: rgb(204, 204, 255);"&gt;     &lt;/p&gt;&lt;span style="font-weight: bold; font-family: trebuchet ms; color: rgb(204, 204, 255);"&gt;转自：&lt;/span&gt;&lt;span style="font-family: trebuchet ms; color: rgb(204, 204, 255);"&gt; &lt;/span&gt;&lt;a style="font-family: trebuchet ms; color: rgb(204, 204, 255);" href="http://www.c51bbs.com/c51blog/user1/13968/archives/2007/9636.shtml" target="_blank"&gt;http://www.c51bbs.com/c51blog/user1/13968/archives/2007/9636.shtml&lt;/a&gt;&lt;a href="http://www.c51bbs.com/c51blog/user1/13968/archives/2007/9636.shtml" target="_blank"&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7598811904790233931-3265288188174202438?l=stonestrange.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://stonestrange.blogspot.com/feeds/3265288188174202438/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7598811904790233931&amp;postID=3265288188174202438' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7598811904790233931/posts/default/3265288188174202438'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7598811904790233931/posts/default/3265288188174202438'/><link rel='alternate' type='text/html' href='http://stonestrange.blogspot.com/2008/06/8086.html' title='【转】什么是实模式、保护模式和虚拟8086方式'/><author><name>stonestrange</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp1.blogger.com/_F6b5Psa149E/R_sMtqwqXnI/AAAAAAAAARc/3tAdCOe1r_o/S220/%E5%A4%8D%E4%BB%B6+11023341.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7598811904790233931.post-5997120096808914238</id><published>2008-05-04T01:00:00.000-07:00</published><updated>2008-05-04T01:02:48.972-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><title type='text'>【转】如何在Linux中添加新的系统调用</title><content type='html'>&lt;span class="pg" id="xydwtext"&gt;&lt;span style="color: rgb(204, 204, 255);font-size:100%;" &gt;&lt;span style="font-family: arial;"&gt;如何在Linux中添加新的系统调用        &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: arial;"&gt;        系统调用是应用程序和操作系统内核之间的功能接口。其主要目的是使得用户&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: arial;"&gt;可以使用操作系统提供的有关设备管理、输入/输入系统、文件系统和进程控制、&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: arial;"&gt;通信以及存储管理等方面的功能，而不必了解系统程序的内部结构和有关硬件细&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: arial;"&gt;节，从而起到减轻用户负担和保护系统以及提高资源利用率的作用。&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: arial;"&gt;　　Linux操作系统作为自由软件的代表，它优良的性能使得它的应用日益广泛，&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: arial;"&gt;不仅得到专业人士的肯定，而且商业化的应用也是如火如荼。在Linux中，大部分&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: arial;"&gt;的系统调用包含在Linux的libc库中，通过标准的C函数调用方法可以调用这些系统&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: arial;"&gt;调用。那么，对Linux的发烧友来说，如何在Linux中增加新的系统调用呢？&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: arial;"&gt;1 Linux系统调用机制&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: arial;"&gt;　　在Linux系统中，系统调用是作为一种异常类型实现的。它将执行相应的机器&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: arial;"&gt;代码指令来产生异常信号。产生中断或异常的重要效果是系统自动将用户态切换为&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: arial;"&gt;核心态来对它进行处理。这就是说，执行系统调用异常指令时，自动地将系统切换&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: arial;"&gt;为核心态，并安排异常处理程序的执行。&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: arial;"&gt;　　Linux用来实现系统调用异常的实际指令是：&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: arial;"&gt;　　Int  $0x80&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: arial;"&gt;　　这一指令使用中断/异常向量号128（即16进制的80）将控制权转移给内核。为&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: arial;"&gt;达到在使用系统调用时不必用机器指令编程，在标准的C语言库中为每一系统调用&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: arial;"&gt;提供了一段短的子程序，完成机器代码的编程工作。事实上，机器代码段非常简&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: arial;"&gt;短。它所要做的工作只是将送给系统调用的参数加载到CPU寄存器中，接着执行&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: arial;"&gt;int  $0x80指令。然后运行系统调用，系统调用的返回值将送入CPU的一个寄存器&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: arial;"&gt;中，标准的库子程序取得这一返回值，并将它送回用户程序。&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: arial;"&gt;　　为使系统调用的执行成为一项简单的任务，Linux提供了一组预处理宏指令。&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: arial;"&gt;它们可以用在程序中。这些宏指令取一定的参数，然后扩展为调用指定的系统调用&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: arial;"&gt;的函数。&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: arial;"&gt;　　这些宏指令具有类似下面的名称格式：&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: arial;"&gt;　　_syscallN（parameters）&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: arial;"&gt;　　其中N是系统调用所需的参数数目，而parameters则用一组参数代替。这些参&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: arial;"&gt;数使宏指令完成适合于特定的系统调用的扩展。例如，为了建立调用setuid（）系&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: arial;"&gt;统调用的函数，应该使用：&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: arial;"&gt;　　_syscall1（ int， setuid， uid_t， uid ）&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: arial;"&gt;　　syscallN（ ）宏指令的第1个参数int说明产生的函数的返回值的类型是整&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: arial;"&gt;型，第2个参数setuid说明产生的函数的名称。后面是系统调用所需要的每个参&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: arial;"&gt;数。这一宏指令后面还有两个参数uid_t和uid分别用来指定参数的类型和名称。&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: arial;"&gt;　　另外，用作系统调用的参数的数据类型有一个限制，它们的容量不能超过四个&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: arial;"&gt;字节。这是因为执行int  $0x80指令进行系统调用时，所有的参数值都存在32位的&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: arial;"&gt;CPU寄存器中。使用CPU寄存器传递参数带来的另一个限制是可以传送给系统调用的&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: arial;"&gt;参数的数目。这个限制是最多可以传递5个参数。所以Linux一共定义了6个不同的&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: arial;"&gt;_syscallN（）宏指令，从_syscall0（）、_syscall1（）直到_syscall5（）。&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: arial;"&gt;　　一旦_syscallN（）宏指令用特定系统调用的相应参数进行了扩展，得到的结&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: arial;"&gt;果是一个与系统调用同名的函数，它可以在用户程序中执行这一系统调用。&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: arial;"&gt;　&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: arial;"&gt;2 添加新的系统调用&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: arial;"&gt;　　如果用户在Linux中添加新的系统调用，应该遵循几个步骤才能添加成功，下&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: arial;"&gt;面几个步骤详细说明了添加系统调用的相关内容。&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: arial;"&gt;（1） 添加源代码&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: arial;"&gt;　　第一个任务是编写加到内核中的源程序，即将要加到一个内核文件中去的一个&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: arial;"&gt;函数，该函数的名称应该是新的系统调用名称前面加上sys_标志。假设新加的系统&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: arial;"&gt;调用为mycall(int number)，在/usr/src/linux/kernel/sys.c文件中添加源代&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: arial;"&gt;码，如下所示：&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: arial;"&gt;　　asmlinkage int sys_mycall(int number)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: arial;"&gt;　　{&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: arial;"&gt;　　return number;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: arial;"&gt;　　}&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: arial;"&gt;　　作为一个最简单的例子，我们新加的系统调用仅仅返回一个整型值。&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: arial;"&gt;（2） 连接新的系统调用&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: arial;"&gt;　　添加新的系统调用后，下一个任务是使Linux内核的其余部分知道该程序的存&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: arial;"&gt;在。为了从已有的内核程序中增加到新的函数的连接，需要编辑两个文件。&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: arial;"&gt;　　在我们所用的Linux内核版本（RedHat 6.0，内核为2.2.5-15）中，第一个要&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: arial;"&gt;修改的文件是：&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: arial;"&gt;　　/usr/src/linux/include/asm-i386/unistd.h&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: arial;"&gt;　　该文件中包含了系统调用清单，用来给每个系统调用分配一个唯一的号码。文&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: arial;"&gt;件中每一行的格式如下：&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: arial;"&gt;　　#define __NR_name NNN&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: arial;"&gt;　　其中，name用系统调用名称代替，而NNN则是该系统调用对应的号码。应该将&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: arial;"&gt;新的系统调用名称加到清单的最后，并给它分配号码序列中下一个可用的系统调用&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: arial;"&gt;号。我们的系统调用如下：&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: arial;"&gt;　　#define __NR_mycall 191&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: arial;"&gt;　　系统调用号为191，之所以系统调用号是191，是因为Linux-2.2内核自身的系&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: arial;"&gt;统调用号码已经用到190。&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: arial;"&gt;　　第二个要修改的文件是：&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: arial;"&gt;　　/usr/src/linux/arch/i386/kernel/entry.S&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: arial;"&gt;　　该文件中有类似如下的清单：&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: arial;"&gt;　　.long SYMBOL_NAME（）&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: arial;"&gt;　　该清单用来对sys_call_table[]数组进行初始化。该数组包含指向内核中每个&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: arial;"&gt;系统调用的指针。这样就在数组中增加了新的内核函数的指针。我们在清单最后添&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: arial;"&gt;加一行：&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: arial;"&gt;　　.long SYMBOL_NAME(sys_mycall)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: arial;"&gt;　　　　&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: arial;"&gt;（3） 重建新的Linux内核&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: arial;"&gt;　　为使新的系统调用生效，需要重建Linux的内核。这需要以超级用户身份登&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: arial;"&gt;录。&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: arial;"&gt;　　#pwd&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: arial;"&gt;　　/usr/src/linux&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: arial;"&gt;　　#&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: arial;"&gt;　　超级用户在当前工作目录（/usr/src/linux）下，才可以重建内核。&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: arial;"&gt;　　#make config&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: arial;"&gt;　　#make dep&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: arial;"&gt;　　#make clearn&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: arial;"&gt;　　#make bzImage&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: arial;"&gt;　　编译完毕后，系统生成一可用于安装的、压缩的内核映象文件：&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: arial;"&gt;　　/usr/src/linux/arch/i386/boot/bzImage　&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: arial;"&gt;（4） 用新的内核启动系统&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: arial;"&gt;　　要使用新的系统调用，需要用重建的新内核重新引导系统。为此，需要修&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: arial;"&gt;改/etc/lilo.conf文件，在我们的系统中，该文件内容如下：&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: arial;"&gt;　　boot=/dev/hda&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: arial;"&gt;　　map=/boot/map&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: arial;"&gt;　　install=/boot/boot.b&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: arial;"&gt;　　prompt&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: arial;"&gt;　　timeout=50&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: arial;"&gt;　　image=/boot/vmlinuz-2.2.5-15&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: arial;"&gt;　　label=linux&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: arial;"&gt;　　root=/dev/hdb1&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: arial;"&gt;　read-only&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: arial;"&gt;　　other=/dev/hda1&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: arial;"&gt;　　label=dos&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: arial;"&gt;　　table=/dev/had&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: arial;"&gt;　　首先编辑该文件，添加新的引导内核：&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: arial;"&gt;　　image=/boot/bzImage-new&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: arial;"&gt;　　label=linux-new&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: arial;"&gt;　　root=/dev/hdb1&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: arial;"&gt;　　read-only&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: arial;"&gt;　　添加完毕，该文件内容如下所示：&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: arial;"&gt;　　boot=/dev/hda&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: arial;"&gt;　　map=/boot/map&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: arial;"&gt;　　install=/boot/boot.b&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: arial;"&gt;　　prompt&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: arial;"&gt;　　timeout=50&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: arial;"&gt;　　image=/boot/bzImage-new&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: arial;"&gt;　　label=linux-new&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: arial;"&gt;　　root=/dev/hdb1&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: arial;"&gt;　　read-only&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: arial;"&gt;　　image=/boot/vmlinuz-2.2.5-15&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: arial;"&gt;　　label=linux&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: arial;"&gt;　　root=/dev/hdb1&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: arial;"&gt;　　read-only&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: arial;"&gt;　　other=/dev/hda1&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: arial;"&gt;　　label=dos&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: arial;"&gt;　　table=/dev/hda&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: arial;"&gt;　　这样，新的内核映象bzImage-new成为缺省的引导内核。&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: arial;"&gt;　　为了使用新的lilo.conf配置文件，还应执行下面的命令：&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: arial;"&gt;　　#cp /usr/src/linux/arch/i386/boot/zImage /boot/bzImage-new&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: arial;"&gt;　　其次配置lilo:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: arial;"&gt;　　# /sbin/lilo&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: arial;"&gt;　　现在，当重新引导系统时，在boot:提示符后面有三种选择：linux-new 、&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: arial;"&gt;linux、dos，新内核成为缺省的引导内核。&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: arial;"&gt;　　至此，新的Linux内核已经建立，新添加的系统调用已成为操作系统的一部&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: arial;"&gt;分，重新启动Linux，用户就可以在应用程序中使用该系统调用了。&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: arial;"&gt;（5）使用新的系统调用&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: arial;"&gt;　　在应用程序中使用新添加的系统调用mycall。同样为实验目的，我们写了一个&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: arial;"&gt;简单的例子xtdy.c。&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: arial;"&gt;　　/* xtdy.c */&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: arial;"&gt;　　#include&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: arial;"&gt;　　_syscall1(int,mycall,int,ret)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: arial;"&gt;　　main()&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: arial;"&gt;　　{&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: arial;"&gt;　　printf("%d n",mycall(100));&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: arial;"&gt;　　}&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: arial;"&gt;　　编译该程序：&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: arial;"&gt;　　# cc -o xtdy xtdy.c&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: arial;"&gt;　　执行：&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: arial;"&gt;　　# xtdy&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: arial;"&gt;　　结果：&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: arial;"&gt;　　# 100&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: arial;"&gt;　　注意，由于使用了系统调用，编译和执行程序时，用户都应该是超级用户身&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: arial;"&gt;份。&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: arial;"&gt;【转自】http://www.chinalinuxpub.com/read.php?wid=23&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7598811904790233931-5997120096808914238?l=stonestrange.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://stonestrange.blogspot.com/feeds/5997120096808914238/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7598811904790233931&amp;postID=5997120096808914238' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7598811904790233931/posts/default/5997120096808914238'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7598811904790233931/posts/default/5997120096808914238'/><link rel='alternate' type='text/html' href='http://stonestrange.blogspot.com/2008/05/linux.html' title='【转】如何在Linux中添加新的系统调用'/><author><name>stonestrange</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp1.blogger.com/_F6b5Psa149E/R_sMtqwqXnI/AAAAAAAAARc/3tAdCOe1r_o/S220/%E5%A4%8D%E4%BB%B6+11023341.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7598811904790233931.post-4816246990304956734</id><published>2008-05-03T19:59:00.000-07:00</published><updated>2008-05-03T20:02:32.518-07:00</updated><title type='text'>【转】如何集中注意力</title><content type='html'>&lt;span style="color: rgb(204, 204, 255);font-size:100%;" &gt;一、在阅读中培养自己的注意力 &lt;br /&gt;　　&lt;br /&gt;　　研究指出，注意力是集中还是涣散直接影响着读书的效果。读书的目的就是理解书的精神实质，记住书的主要内容，要做到这些，就必须集中注意力， 特别是在深入思考书中所讲内容的深刻含义时，必须聚精会神，高度集中注意力。所以说在阅读过程中集中注意力是理解和记忆的前提条件。那种随意乱翻，心不在 焉的读书是没有什么收获的。&lt;br /&gt;　　&lt;br /&gt;　　阅读教材或有关参考资料，精读其它书籍时，要想获得好的学习效果，就必须集中注意力，而且把读书与训练注意力结合起来。许多著名的学者都很注 意这方面的自我训练。如有的人在读书时，就经常在一些重要内容旁边写上注意，特别注意等。也有的用划符号或用“！”“？”以及“☆”作记号以引起注意。&lt;br /&gt;　　&lt;br /&gt;　　梁启超是我国近代一位大学问家。他曾经告诫他的学生，如果想要学会读书，就要读书读到能将书平面的字句浮凸出来为止。书平面的字句会浮起来 呢？他的一个学生听了很纳闷。许多年过去了，这位学生在广博地读了许多之后，使平面的字句浮凸出来，指的是在读书过程中要对阅读材料选择性地给予不同程度 的注意。那些不重要的字句游览一下就放过去了，而对那些重要的关键的字句，则要给予充分的重视，甚至做到在读某一篇文章时，能一下子注意那些最重要最关键 的字句，好像这些字句是有别于其它字句浮凸在书面上似的。&lt;br /&gt;　　&lt;br /&gt;　　梁启超的读书法很有效。因为它能提纲挈领地马上使人掌握某一篇文章的重点和关键。掌握这个读书法的一个技巧，就是训练对那些关键词句的集中注 意力。事先确定一个阅读范围，阅读时，只对最重要和最关键的部分给予最集中的注意，天长日久，每读一遍文章时，你就会发现书上总有某一个重要的注意点毫不 吃力地浮凸出来了。&lt;br /&gt;　　&lt;br /&gt;　　注意力是影响学习效率的最重要因素之一。它是一种非智力因素，在学生的学习过程中起着重要的作用。 &lt;br /&gt;　　&lt;br /&gt;　　二、根特的集中注意训练法 &lt;br /&gt;　　&lt;br /&gt;　　根特先生是德国著名的哲学家，根特在读书时经常使用一种精神集中法。其做法是，当他读书前，或者在书房里深思冥想问题时，他必定是透过窗户凝 视着远方屋顶上的一个随风摆动的风向标箭头，他一边眼盯着风向的转动，一边下意识地沉浸于深深地思考之中。这种方法大大帮助了他，哲学中的许多理论就是这 样思考出来的。这种方法好像没有什么奇特，我们这些读书人，也有这方面的经验，当两眼凝视着某一点时，一边对着视点出神，一边思考着所要解决的问题，或者 思考已读过的内容，好像无形之中，注意力就集中在一起，促进了思考的深度。&lt;br /&gt;　　&lt;br /&gt;　　这种做法所以会产生如此好的效果，也还是有其道理的。当人的双眼长时间地凝视在一点时，视野就会变得狭窄，那些容易吸引你并导致注意力分散的事物也就会进入眼帘，因此人的意识范围也随着变窄，从而使人达到注意力集中的心理境界。 &lt;br /&gt;　　&lt;br /&gt;　　有一位获得较大成就的科学家说：他读书之前，或在思考问题时，喜欢双眼盯着窗外的松树枝，目不转睛地望着，望着，很快地就集中起精神来，不自觉在进入了学习的遐想，这种方法对他的读书或思考问题很有帮助。 &lt;br /&gt;　　&lt;br /&gt;　　京剧大师梅兰芳小时候的事。梅兰芳是一代京剧宗师，是梅派创始人，我国四大名旦之首。这样一位名高盖世的京剧大师，他的戏得到中国乃至全世界 戏剧界的尊崇，即使我们这些不懂京剧的人，也为他的演技所倾倒，特别是他那优美的姿势、悦耳的唱腔和活灵活现的眼神都给人以美的享受，使人为之倾倒。梅兰 芳小时候，家庭多灾多难，父母早亡，家道早衰，而他自己也资质不高。第一位启蒙老师看到那时8岁的梅兰芳，小小的圆脸，相貌平常，而且眼皮下垂，两眼无 神，呆滞近视，就觉得这孩子不像是个唱戏的料。在教戏时，一个上午只教四句，教了一遍又一遍，可是这个学生对这四句唱腔不是忘了词儿，就是唱错了腔，一次 也没有唱好。这位先生一气之下，拂袖而去，赌气再也不教他了。梅兰芳后来发奋学戏，博采众家之长，融为一体，形成自己的风格。发展为梅派。所以说梅兰芳的 成功完全是勤学苦炼的结果。梅兰芳大师在舞台生活四十年时说：“我是个拙笨的学艺者，没有充分的天才，全凭苦学。”&lt;br /&gt;　　&lt;br /&gt;　　梅兰芳先生从一个资质平常的孩子发展成长为世界名著艺术家，他的成功值得我们深思。 &lt;br /&gt;　　&lt;br /&gt;　　眼神是演员的一大命脉，梅兰芳先生是如何将自己呆滞的眼睛治好的呢？说来也有点戏剧性，他是通过放鸽子治好的。 &lt;br /&gt;　　&lt;br /&gt;　　以前北京有许多人爱养鸽子，梅兰芳先生小时候也非常爱养鸽子。养鸽子的人每天把自家的鸽子放出去，鸽子在天空飞翔，养鸽者在地面观察指挥，用 一杆长竹竿，上面拴一条红绸子，指挥鸽子起飞，如换成绿绸子，就是要鸽子下降的信号。附近有许多家的鸽子放向天空，而鸽子也有个有趣的习性，爱相互串飞， 如果自家的鸽子训练的不熟练，很可能给人家鸽子拐走。梅兰芳要手举高竿，不断摇动，给鸽子发出信号，同时还要仰着头，抬着眼，极目注视着高空中的鸽群，要 极力分辨出里面有没有混入别家的鸽子。天长日久地练下来，梅兰芳先生的眼皮下垂竟然治好了，呆滞的眼神变成灵活传神了，视力也得到了极大的提高，臂力要腰 劲也被练得发达了，注意力也更加容易集中了，学戏的效率提高了，思考能力增强了。&lt;br /&gt;　　&lt;br /&gt;　　据说以前练习射箭的人，将一个中间空的小铜钱挂在远处，经常远远注视它，分辨出铜币的空心，练到一定的时候，再练习注视高空中的飞鸟，极力分辨鸟的头和身子及其它部位，长期坚持训练，其结果不仅增强了视力，而且还增强了集中注意的能力。据说这是训练神箭手的方法。 &lt;br /&gt;　　&lt;br /&gt;　　培养自己注意力的可靠途径就是，训练自己能在各式各样的环境条件下，专心学习或工作。一旦确定了要干的事，你就有计划有目的地集中注意力，去 干好要干的事，不受其它刺激的影响和干扰。据说毛泽东主席青少年时代为了锻炼自己的注意力，就常到繁华闹市去读书，而且能不受周围环境的影响。坚持无论读 书学习，还是干事情，都把它们当作锻炼注意力的机会和场合，久而久之，良好的注意习惯就逐步形成了。&lt;br /&gt;　　&lt;br /&gt;　　原苏联心理学家普拉托诺夫说：“要想使自己成为一个注意力很强的人，最好的方法是，无论干什么事，都不能漫不经心！” &lt;br /&gt;　　&lt;br /&gt;　　五、运用注意力的几点技巧 &lt;br /&gt;　　&lt;br /&gt;　　注意力是指在认识事物的过程中，人的身心稳定和集中地指向于一定事物的意向活动。注意力在种认识和学习活动中都起着主导和保证作用。有人说注意是智力活动的警卫、组织者和维持者，可见注意与智力活动关系之密切。 &lt;br /&gt;　　&lt;br /&gt;　　在智力活动中如何才能发挥好注意力的作用？这是一门学问，有技巧问题。下面我们介绍两点： &lt;br /&gt;　　&lt;br /&gt;　　（一）学会不想自己 &lt;br /&gt;　　&lt;br /&gt;　　很多人都有这样一个毛病，常常以为自己是被注意的中心，因此不自觉地把注意力指向自己。例如，当我穿一件新衣服，或者戴一顶新帽子，总以为众 人都在注视自己。当一个学生考试不理想，或做了件错事，他就觉得众人在议论自己，看不起自己，甚至觉得没脸见人。一个同学站座位上回答问题，虽紧张还能答 出来，如果站到讲台上面对着全班，他会吓得张嘴结舌。他害怕答错了惹人耻笑，怕老师批评，怕同学会议论等，其结果是越想越怕，以致吓得连话都说不出来。其 实这种以为众人在注视着自己的想法多半是或完全是自己的臆想，自己的许多不自然的态度和表现是自己遐想的结果。每个人都有自己的任务，有自己的事，每个人 的思想重点或注意指向都不相同，他们不可能有那么多时间注视你、正像你自己常常把注意力指向自己一样，可能众人也还未顾得上注意你呢？即便众人注意你也没 有什么可怕的。&lt;br /&gt;　　&lt;br /&gt;　　有位学者说：“自我的感觉是一种形式。别人并不会如你所想象的那样关心你。他们有各人的事要忙。记住这一点，你在他们面前便不会感觉不舒服了。” &lt;br /&gt;　　&lt;br /&gt;　　克服这种恐惧感的方法首先是不想自己，不要把注意力放到自己身上。第二是把注意力集中在眼前要解决的任务上，专心致志干事的人，不会为其它事 引起不安。有人说：“专心想到自己是不能增加做事的效率和减少自我感觉的，专想到工作却能做到。”第三就是，如果眼前没有任务，那么你不妨想点别的事，把 注意力引到其它事上去。有位专家说：“”不想自己的方法是要寻一点别的事来想。你必须寻找一种代替物。寻得代替物之后，想自己的毛病便可毫不费力地除去。 假如你坐在礼堂的讲台上，当你看到台下坐满了人，你可能觉得大家在注意自己，在议论自己，在笑自己，你越觉得坐在台上不舒服，越感到紧张。甚至准备的演讲 都忘了。假如你不想自己，把注意力转移到别处，就不会产生紧张害怕的心理。&lt;br /&gt;　　&lt;br /&gt;　　在考试也是如此，如果考前老是想，我考得不好会怎么样，同学老师会如何看我等，也会增加人为的紧张，倒不如把注意力转移到别处，转移到代替物上，如眼前的钢笔、手指之类，再配合着用深呼吸放松法，使紧张的情绪得以消除。 &lt;br /&gt;　　&lt;br /&gt;　　（二）学会听的技巧 &lt;br /&gt;　　&lt;br /&gt;　　学会听是很重要的。听是个体认识世界的重要方式之一。倾听也是人际交往中的重要方式之一。在人际交往时首先要倾听，只有认真听人讲，才能了解 他人，学习他的知识，从而丰富自己；也只有通过倾听，才能理解他人，理解人格，理解人际关系的深层含义。这里所说的倾听就是指要深深地听，要听出深藏在表 面语言下的人心灵深处的呼唤，一个善于倾听的人，在听他人讲话时，要反问自己，能不能觉察出讲话者内心世界的状态？倾听他人讲话不仅能使听者真正理解一个 人，而且对于倾听者也有奇特的效果。倾诉者被认为已被人理解，似乎得到了解脱，从而消除了个人的孤寂感，使倾听者的心情得到了安慰和满足。因此，现代心理 学家认为，倾听，不论是倾听他人或者是接受他人的倾听在人际关系中都是极为重要的，在双方体验的充实和人格的发展中都是不可缺少的。&lt;br /&gt;　　&lt;br /&gt;　　对于学生来说，学校学习的主要方式是课堂教学，课堂学习时间占据了学生学习的大部分时间。学会听课对于学生的学习和个人发展是至关重要的。 &lt;br /&gt;　　&lt;br /&gt;　　听，有技巧问题，有注意力的稳定、分配和转移问题。有些不良习惯妨碍着我们大多数人的听的水平。一般来说，有以下几种。 &lt;br /&gt;　　&lt;br /&gt;　　1、我们的思维不愿意等待。研究指出，人的思维的速度比人的说话速度快3—9倍。当听旁人说话的时候，个人的思考活动常处于等待状态，如果此 时注意转移，去思考另外的问题，那么听到别人谈话的内容是时断时续的。结果听者的头脑里只留下片言只语，丢掉了别人说话的详细内容。&lt;br /&gt;　　&lt;br /&gt;　　2、当听人说话时，自以为知道了，不再注意听，其结果是这只耳朵进，那只耳朵出。 &lt;br /&gt;　　&lt;br /&gt;　　3、先人为主的固定看法影响倾听。谈话时，因已有固定的看法而不注意倾听到的不过是他自己的意思而已，而不是他人要说的真正意思。因此，在倾听他人讲话时，不仅要注意听懂语言，更要揣摩其思想。 &lt;br /&gt;　　&lt;br /&gt;　　4、情绪化会使人变成聋子。当听到自认为不正确的意见或不利于自己的言论时，即使忠言也逆耳，有一种情绪会阻止你继续听下去，甚至将你的注意力转移到进行反击的思想上去。 &lt;br /&gt;　　&lt;br /&gt;　　5、一心不可二用。有的听人讲话时，一边听，一边翻报纸，听广播，或看看电视。如此一心二用，注意力分散，则往往是听的内容不连贯，看的内容不全面，甚至什么都没有留下。 &lt;br /&gt;　　&lt;br /&gt;　　6、听而不闻。在听人讲话时，将注意力集中在诉说者的外貌和举止上，至于讲的内容反而跑掉了。 &lt;br /&gt;　　&lt;br /&gt;　　妨碍倾听的毛病还不止这些，所以会出现这些问题，其关键在于没有很好地转移和分配注意，让自己的注意力集中在倾听和思考讲话者的语言内容及其深层的心理呼唤上。可见倾听是有技巧的。为帮助你建立良好的倾听习惯，再提出以下几点注意事项。 &lt;br /&gt;　　&lt;br /&gt;　　1、适应讲话的速度，将注意力放在较慢讲话的速度上，边听边咀嚼其内容的意思，不要让思维的速度超越所听讲话的速度。 &lt;br /&gt;　　&lt;br /&gt;　　2、将注意力集中在倾听上，不受其它事物的影响，不同时兼顾几件事。 &lt;br /&gt;　　&lt;br /&gt;　　3、训练听力，听广播的内容，试着检查所听广播的内容要点和主要思想实质。听广播英语揣摩其发音和含义等都能提高听的能力。上课听讲，课后检查自己听课效果，不仅能促进自己的听课水平，而且直接促进自己的学习效果。 &lt;br /&gt;　　&lt;br /&gt;　　4、学会理解不同的观点，包括你对立的看法。学会倾听不同的意见，学会倾听自己喜欢的人的讲话。你很有可能从这些讲话中获得新的知识和见解，即使有不对的地方，也应听完后再去交换自己的看法。 &lt;br /&gt;　　&lt;br /&gt;　　5、学会一次就能听明白他人的谈话，对重要的内容可以默默地重复一下，准确地记住。 &lt;br /&gt;　　&lt;br /&gt;　　6、在听人讲话或接电话时要养成随手记在纸上的习惯，学会从你获得的各种信息资料中，寻找出最有价值的信息。 &lt;br /&gt;　　&lt;br /&gt;　　7、在倾听他人讲话时，不断地问自己，倾听者的话的意思是什么？目的何在？自己是否明白了对方深层的意思？用这些自我提问使注意力集中。 &lt;br /&gt;　　&lt;br /&gt;　　（三）注意力与其它学习方法的相结合 &lt;br /&gt;　　&lt;br /&gt;　　注意力的心理训练还有许多方法和技巧，在进行注意力自我训练时可以与之相配合，这里提出几点。 &lt;br /&gt;　　&lt;br /&gt;　　1.注意力的心理训练与超越静思训练相结合。一般来说宁静的心态容易集中注意。 &lt;br /&gt;　　&lt;br /&gt;　　2.注意力的训练与形象控制法相配合。也就是说，当心境处于轻松和积极状态时，注意的转移、分配和稳定性也能发挥得更好。 &lt;br /&gt;　　&lt;br /&gt;　　3还可以找出一些与注意力相结合的训练方法，请大家留心。注意力的训练有方法技巧可讲，我们应尽力掌握它们，并进行认真的自我训练。同时还必须认识到，注意力的训练必须与学习活动、社会实践紧密结合，才能直接有效地增强自己的注意力。&lt;br /&gt;&lt;br /&gt;        良好的注意力，是大脑进行感知、记忆、思维等认识活动的基本条件。在我们的学习过程中，注意力是打开我们心灵的门户，而且是唯一的门户。门开得越大，我 们学到的东西就越多。而一旦注意力涣散了或无法集中，心灵的门户就关闭了，一切有用的知识信息都无法进入。正因为如此，法国生物学家乔治.居维叶说：“天 才，首先是注意力。”&lt;br /&gt;　　&lt;br /&gt;　　在正常情况下，注意力使我们的心理活动朝向某一事物，有选择地接受某些信息，而抑制其它活动和其它信息，并集中全部的心理能量用于所指向的事 物。因而，良好的注意力会提高我们工作与学习的效率。注意力障碍，主要表现为无法将心理活动指向某一具体事物，或无法将全部精力集中到这一事物上来，同时 无法抑制对无关事物的注意。造成这种情况的原因比较复杂，许多较严重的心理障碍都可以引起注意力障碍。而对于学生来说，主要是由于学习负担重，心理压力过 大，而造成高度的紧张和焦虑，从而导致了注意力无法集中的障碍。另外，睡眠不足，大脑得不到充分休息，也可能出现注意力涣散的情况。&lt;br /&gt;　　&lt;br /&gt;　　因此，当你因注意力无法集中而影响学习，倍感苦恼时，不妨采用以下方法来矫治： &lt;br /&gt;　　&lt;br /&gt;　　(1)、养成良好的睡眠习惯 &lt;br /&gt;　　&lt;br /&gt;　　一些同学因学习负担重，因此，一到晚上便贪黑敖夜，有的同学甚至在宿舍打电筒读书，学到深夜；有的同学不能按时睡眠，在宿舍和同学闲聊等等。 结果早晨不能按时起床，即便勉强起来，头脑也是昏沉沉的，一整天都打不起精神，有的甚至在课堂上伏桌睡觉。作为学生，主要的学习任务要在白天完成，白天无 精打采，必然效率低下。所以，如果你是“夜猫子”型的，奉劝你学学“百灵鸟”，按时睡觉按时起床，养足精神，提高白天的学习效率。&lt;br /&gt;　　&lt;br /&gt;　　(2)、学会自我减压 &lt;br /&gt;　　&lt;br /&gt;　　高中学生的学习任务本来就很重，老师、家长的期望，又给同学们心理加上一道法码；一些同学自己对成绩、考试等看得很重，无异是自己给自己加 压，必然不堪重负，变得疲惫、紧张和烦躁，心理上难得片刻宁静。因此，我们要学会自我减压，别把成绩的好坏看得太重。一分耕耘，一分收获，只要我们平日努 力了，付出了，必然会有好的回报，又何必让忧虑占据心头，去自寻烦恼呢？&lt;br /&gt;　　&lt;br /&gt;　　(3)、做些放松训练 &lt;br /&gt;　　&lt;br /&gt;　　舒适地坐在椅子上或躺在床上，然后向身体的各部位传递休息的信息。先从左脚开始，使脚部肌肉绷紧，然后松驰，同时暗示它休息，随后命令脚脖 子、小腿、膝盖、大腿，一直到躯干部休息，之后，再从脚到躯干，然后从左右手放松到躯干。这时，再从躯干开始到颈部、到头部、脸部全部放松。这种放松训练 的技术，需要反复练习才能较好地掌握，而一旦你掌握了这种技术，会使你在短短的几分钟内，达到轻松、平静的状态。&lt;br /&gt;　　&lt;br /&gt;　　(4)、做些集中注意力的训练 &lt;br /&gt;　　&lt;br /&gt;　　我国年轻的数学家杨乐、张广厚，小时候都曾采用快速做习题的办法，严格训练自己集中注意力。这里给大家介绍一种在心理学中用来锻炼注意力的小 游戏。在一张有25个小方格的表中，将1-25的数字打乱顺序，填写在里面，然后以最快的速度从1数到25，要边读边指出，同时计时。&lt;br /&gt;　　&lt;br /&gt;　　研究表明：7-8岁儿童按顺序导找每张图表上的数字的时间是30-50秒，平均40-42秒；正常成年人看一张图表的时间大约是25-30 秒，有些人可以缩短到十几秒。你可以自己多制做几张这样的训练表，每天训练一遍，相信你的注意力水平一定会逐步提高。“培养良好注意品质，提高学生学习成 绩”&lt;br /&gt;　　&lt;br /&gt;　　第二阶段： &lt;br /&gt;　　&lt;br /&gt;　　注意力的集中作为一种特殊的素质和能力，需要通过训练来获得。那么，训练自己注意力、提高自己专心致志素质的方法有哪些呢？ &lt;br /&gt;　　&lt;br /&gt;　　方法之一：运用积极目标的力量 &lt;br /&gt;　　&lt;br /&gt;　　这种方法的含义是什么？就是当你给自己设定了一个要自觉提高自己注意力和专心能力的目标时，你就会发现，你在非常短的时间内，集中注意力这种能力有了迅速的发展和变化。 &lt;br /&gt;　　&lt;br /&gt;　　同学们要在训练中完成这个进步。要有一个目标，就是从现在开始我比过去善于集中注意力。不论做任何事情，一旦进入，能够迅速地不受干扰。这是 非常重要的。比如，你今天如果对自己有这个要求，我要在高度注意力集中的情况下，将这一讲的内容基本上一次都记忆下来。当你有了这样一个训练目标时，你的 注意力本身就会高度集中，你就会排除干扰。&lt;br /&gt;　　&lt;br /&gt;　　同学们知道，在军事上把兵力漫无目的地分散开，被敌人各个围歼，是败军之将。这与我们在学习、工作和事业中一样，将自己的精力漫无目标地散漫 一片，永远是一个失败的人物。学会在需要的任何时候将自己的力量集中起来，注意力集中起来，这是一个成功者的天才品质。培养这种品质的第一个方法，是要有 这样的目标。&lt;br /&gt;　　&lt;br /&gt;　　方法之二：培养对专心素质的兴趣 &lt;br /&gt;　　&lt;br /&gt;　　有了这种兴趣，你们就会给自己设置很多训练的科目，训练的方式，训练的手段。你们就会在很短的时间内，甚至完全有可能通过一个暑期的自我训练，发现自己和书上所赞扬的那些大科学家、大思想家、大文学家、大政治家、大军事家一样，有了令人称赞的注意力集中的能力。 &lt;br /&gt;　　&lt;br /&gt;　　同学们在休息和玩耍中可以散漫自在，一旦开始做一件事情，如何迅速集中自己的注意力，这是一个才能。就像一个军事家迅速集中自己的兵力，在一 个点上歼灭敌人，这是军事天才。我们知道，在军事上，要集中自己的兵力而不被敌人觉察，要战胜各种空间、地理、时间的困难，要战胜军队的疲劳状态，要调动 方方面面的因素，需要各种集中兵力的具体手段。同学们集中自己的精力，注意力，也要掌握各种各样的手段。这些都值得探讨，是很有兴趣的事情。&lt;br /&gt;　　&lt;br /&gt;　　方法之三：要有对专心素质的自信 &lt;br /&gt;　　&lt;br /&gt;　　千万不要受自己和他人的不良暗示。有的家长从小就这样说孩子：我的孩子注意力不集中。在很多场合都听到家长说：我的孩子上课时精力不集中。有的同学自己可能也这样认为。不要这样认为，因为这种状态可以改变。 &lt;br /&gt;　　&lt;br /&gt;　　如果你现在比较善于集中注意力，那么，肯定那些天才的科学家、思想家、事业家、艺术家在这方面还有值得你学习的地方，你还有不及他们的差距，你就要想办法超过他们。 &lt;br /&gt;　　&lt;br /&gt;　　对于绝大多数同学，只要你有这个自信心，相信自己可以具备迅速提高注意力集中的能力，能够掌握专心这样一种方法，你就能具备这种素质。我们都 是正常人、健康人，只要我们下定决心，不受干扰，排除干扰，我们肯定可以做到高度的注意力集中。希望同学们对自己实行训练。经过这样的训练，能够发生一个 飞跃。&lt;br /&gt;　　&lt;br /&gt;　　方法之四：善于排除外界干扰 &lt;br /&gt;　　&lt;br /&gt;　　要在排除干扰中训练排除干扰的能力。毛泽东在年轻的时候为了训练自己注意力集中的能力，曾经给自己立下这样一个训练科目，到城门洞里、车水马 龙之处读书。为了什么？就是为了训练自己的抗干扰能力。同学们一定知道，一些优秀的军事家在炮火连天的情况下，依然能够非常沉静地、注意力高度集中地在指 挥中心判断战略战术的选择和取向。生死的危险就悬在头上，可是还要能够排除这种威胁对你的干扰，来判断军事上如何部署。这种抗拒环境干扰的能力，需要训 练。&lt;br /&gt;　　&lt;br /&gt;　　我在你们这么大的年纪时曾有意做过这种训练。就是不管环境多么嘈杂，当我进入我要阅读和学习的科目时，对周围的一切因素置若罔闻。这是可以训练成功的。 &lt;br /&gt;　　&lt;br /&gt;　　方法之五：善于排除内心的干扰 &lt;br /&gt;　　&lt;br /&gt;　　在这里要排除的不是环境的干扰，而是内心的干扰。环境可能很安静，在课堂上，周围的同学都坐得很好，但是，自己内心可能有一种骚动，有一种干 扰自己的情绪活动，有一种与这个学习不相关的兴奋。对各种各样的情绪活动，要善于将它们放下来，予以排除。这时候，同学们要学会将自己的身体坐端正，将身 体放松下来，将整个面部表情放松下来，也就是将内心各种情绪的干扰随同这个身体的放松都放到一边。常常内心的干扰比环境的干扰更严重。&lt;br /&gt;　　&lt;br /&gt;　　同学们可以想一下，在课堂上，为什么有的同学能够始终注意力集中呢？为什么有的同学注意力不能集中呢？除了有没有学习的目标、兴趣和自信之 外，还有一个就是善于不善于排除自己内心的干扰。有的时候并不是周围的同学在骚扰你，而是你自己心头有各种各样浮光掠影的东西。要去除它们，这个能力是要 训练的。如果你就是想浑浑噩噩、糊糊涂涂、庸庸俗俗过一生，乃至到了三十岁还要靠父母养活，或者你就是想混世一生，那你可以不训练这个。但是，如果你确实 想做一个自己也很满意的现代人，就要具备这种事到临头能够集中自己注意力的素质和能力，善于在各种环境中不但能够排除环境的干扰，同时能够排除自己内心的 干扰。&lt;br /&gt;　　&lt;br /&gt;　　方法之六：节奏分明的处理学习与休息的关系 &lt;br /&gt;　　&lt;br /&gt;　　同学们千万不要这样学习：我这一天就是复习功课，然后，从早晨开始就好像在复习功课，书一直在手边，但是效率很低，同时一会儿干干这个，一会 儿干干那个。十二个小时就这样过去了，休息也没有休息好，玩也没玩好，学习也没有什么成效。或者，你一大早到公园念外语，坐了一个小时或两个小时，散散漫 漫，说念也念了，说不念也跟没念差不多，没有记住多少东西。这叫学习和休息、劳和逸的节奏不分明。正确的态度是要分明。那就是我从现在开始，集中一小时的 精力，比如背诵80个英语单词，看我能不能背诵下来。高度地集中注意力，尝试着一定把这些单词记下来。学习完了，再休息，再玩耍。当需要再次进入学习的时 候，又能高度集中注意力。这叫张弛有道。一定要训练这个能力。永远不要熬时间，永远不要折磨自己。一定要善于在短时间内一下把注意力集中，高效率地学习。 要这样训练自己：安静的时候，像一棵树；行动的时候，像闪电雷霆；休息的时候，流水一样散漫；学习的时候，却像军事上实施进攻一样集中优势兵力。这样的训 练才能使自己越来越具备注意力集中的能力。&lt;br /&gt;　　&lt;br /&gt;　　方法之七：空间清静 &lt;br /&gt;　　&lt;br /&gt;　　这个方法，非常简单，当你在家中复习功课或学习时，要将书桌上与你此时学习内容无关的其他书籍、物品全部清走。在你的视野中，只有你现在要学 习的科目。这种空间上的处理，是你训练自己注意力集中的最初阶段的一个必要手段。同学们常常会发现这样生动的场面，你坐在桌子前，想学数学了，这儿有一张 报纸，本来是垫在书底下的，上面有些新闻，你止不住就看开了，看了半天，才知道我是来学数学的。一张报纸就把你牵挂走了。或者本来你是要学习的，桌子一角 的小电视还开着呢，看着看着，从数学王国出去了，到了张学友那儿了。这是完全可能的。甚至可能是一个小纸片，上面写着什么字，看着看着又想起一件事情。&lt;br /&gt;　　&lt;br /&gt;　　所以，作为训练自己注意力的最初阶段，做一件事情之前，首先要清除书桌上全部无关的东西。然后，使自己迅速进入主题。如果你能够做到一分钟之 内没有杂念，进入主题，你就了不起。如果你半分钟就能进入主题，就更了不起。如果你一坐在那里，十秒、五秒，当下就进入，那就是天才，那就是效率。有的人 说，自己复习功课用了四个小时，其实那四个小时大多数在散漫中、低效率中度过，没有用。反之，你开始学习，一坐在那里，与此无关的全部内容置之脑外，这就 是高效率。&lt;br /&gt;　　&lt;br /&gt;　　方法之八：清理大脑 &lt;br /&gt;　　&lt;br /&gt;　　收拾书桌是为了用视野中的清理集中自己的注意力，那么，你同时也可以清理自己的大脑。你经常收拾书桌，慢慢就会有一个形象的类比，觉得自己的大脑也像一个书桌一样。 &lt;br /&gt;　　&lt;br /&gt;　　大脑是一个屏幕，那里面也堆放着很多东西，一上来，将在自己心头此时此刻浮光掠影活动的各种无关的情绪、思绪和信息收掉，在大脑中就留下你现在要进行的科目，就像收拾你的桌子一样。 &lt;br /&gt;　　&lt;br /&gt;　　同学们，这样的训练希望你们从今天开始就要做，它并不困难。当你将思想中的所有杂念都去除的时候，一瞬间你就进入了专一的主题，你的大脑就充 分调动起来，你才有才智，你才有发明，你才有创造，你才有观察的能力、记忆的能力、逻辑推理的能力和想象的能力。如果不是这样，你坐在那里，十分钟之内脑 袋瓜里还是车水马龙，还是风马牛不相及，还是天南海北，那么这十分钟是被浪费掉的。再有十分钟，不是车水马龙了，但依然是熙熙攘攘的街道，又十分钟过去 了。到最后学习开始了，难免三心二意，效率很低。这种状态我们以后不能再要了，要善于迅速进入自己专心的主题。&lt;br /&gt;　　&lt;br /&gt;　　方法之九：对感官的全部训练 &lt;br /&gt;　　&lt;br /&gt;　　我们讲了清理自己的书桌，其实更广义说，我们可以进行视觉、听觉、感觉方方面面的类似训练。同学们可以训练自己在视觉中一个时间内盯视一个目 标，而不被其他的图像所转移。你们可以训练在一段时间内虽然有万千种声音，但是你们集中聆听一种声音。你们也可以在整个世界中只感觉太阳的存在或者只感觉 月亮的存在，或者只感觉周围空气的温度。这种感觉上的专心训练是进行注意力训练的有用的技术手段。&lt;br /&gt;　　&lt;br /&gt;　　方法之十：不在难点上停留 &lt;br /&gt;　　&lt;br /&gt;　　同学们都会意识到，我们理解的事物、有兴趣的事物，当我们去探究它、观察它时，就比较容易集中注意力。比如说我喜欢数学，数学课就比较容易集 中注意力，因为我理解，又比较有兴趣。反之，因为我不太喜欢化学，缺乏兴趣，对老师讲的课又缺乏足够的理解，就有可能注意力分散。&lt;br /&gt;　　&lt;br /&gt;　　在这种情况下，我们就有了正反两个方面的对策。正的对策是，我们要利用自己的理解力、利用自己的兴趣集中自己的注意力。而对那些自己还缺乏理解、缺乏兴趣的事物，当我们必须研究它、学习它时，这就是一个特别艰难的训练了。 &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;【转自】http://www.douban.com/group/topic/2844212/&lt;br /&gt;　　&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7598811904790233931-4816246990304956734?l=stonestrange.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://stonestrange.blogspot.com/feeds/4816246990304956734/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7598811904790233931&amp;postID=4816246990304956734' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7598811904790233931/posts/default/4816246990304956734'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7598811904790233931/posts/default/4816246990304956734'/><link rel='alternate' type='text/html' href='http://stonestrange.blogspot.com/2008/05/blog-post_1254.html' title='【转】如何集中注意力'/><author><name>stonestrange</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp1.blogger.com/_F6b5Psa149E/R_sMtqwqXnI/AAAAAAAAARc/3tAdCOe1r_o/S220/%E5%A4%8D%E4%BB%B6+11023341.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7598811904790233931.post-616261833392958380</id><published>2008-05-03T19:35:00.000-07:00</published><updated>2008-05-03T19:41:25.897-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='coding_java'/><title type='text'>迷你小词典升级版</title><content type='html'>&lt;span style="color: rgb(204, 204, 255); font-family: arial;font-size:100%;" &gt;特别感谢海词http://dict.cn/&lt;br /&gt;&lt;br /&gt;/*&lt;br /&gt; *实现的功能：&lt;br /&gt; *1.保存历史记录，并且可以回到任意历史记录&lt;br /&gt; *2.有快捷键返回上次历史记录和下次历史记录&lt;br /&gt; *3.能够导出个人单词簿&lt;br /&gt; *4.对于给出的任意一句话，给相应的单词标注音标&lt;br /&gt; */&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Dict.java文件&lt;br /&gt;&lt;br /&gt;import java.net.*;&lt;br /&gt;import org.eclipse.swt.*;&lt;br /&gt;import org.eclipse.swt.widgets.*;&lt;br /&gt;import org.eclipse.swt.events.*;&lt;br /&gt;import org.eclipse.swt.graphics.*;&lt;br /&gt;import org.eclipse.swt.browser.*;&lt;br /&gt;import org.eclipse.jface.dialogs.*;&lt;br /&gt;import org.eclipse.swt.dnd.*;&lt;br /&gt;import org.xml.sax.*;&lt;br /&gt;import javax.xml.parsers.*;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;public class Dict {&lt;br /&gt;   &lt;br /&gt;&lt;br /&gt;    private List history;&lt;br /&gt;   &lt;br /&gt;&lt;br /&gt;    private Text searchWord;&lt;br /&gt;   &lt;br /&gt;&lt;br /&gt;    private String wordInHistory;&lt;br /&gt;   &lt;br /&gt;   &lt;br /&gt;    public Dict(Display display,Shell shell) {&lt;br /&gt;       &lt;br /&gt;&lt;br /&gt;        //final Clipboard clipboard = new Clipboard(display);&lt;br /&gt;       &lt;br /&gt;       &lt;br /&gt;        final Browser browser = new Browser(shell, SWT.NONE);&lt;br /&gt;        browser.setBounds(116, 66, 366, 255);&lt;br /&gt;       &lt;br /&gt;&lt;br /&gt;        final ToolBar toolBar = new ToolBar(shell, SWT.WRAP);&lt;br /&gt;        toolBar.setBounds(20, 19, 48, 22);&lt;br /&gt;       &lt;br /&gt;       &lt;br /&gt;        ToolItem backward = new ToolItem(toolBar, SWT.PUSH);&lt;br /&gt;        backward.setImage(new Image(display, "image/backward.gif"));&lt;br /&gt;        backward.addSelectionListener(new SelectionAdapter() {&lt;br /&gt;            public void widgetSelected(SelectionEvent e) {&lt;br /&gt;                browser.back();&lt;br /&gt;            }&lt;br /&gt;        });&lt;br /&gt;       &lt;br /&gt;       &lt;br /&gt;        ToolItem forward = new ToolItem(toolBar, SWT.PUSH);&lt;br /&gt;        forward.setImage(new Image(display, "image/forward.gif"));&lt;br /&gt;        forward.addSelectionListener(new SelectionAdapter() {&lt;br /&gt;            public void widgetSelected(SelectionEvent e) {&lt;br /&gt;                browser.forward();&lt;br /&gt;            }&lt;br /&gt;        });&lt;br /&gt;       &lt;br /&gt;&lt;br /&gt;        searchWord = new Text(shell, SWT.BORDER);&lt;br /&gt;        searchWord.setBounds(83, 19, 199, 22);&lt;br /&gt;       &lt;br /&gt;&lt;br /&gt;        final Button search = new Button(shell, SWT.NONE);&lt;br /&gt;        final Image searchImage = new Image(display, "image/filter.gif");&lt;br /&gt;        search.setText("search");&lt;br /&gt;        search.setBounds(296, 19, 87, 22);&lt;br /&gt;        search.setImage(searchImage);&lt;br /&gt;        search.addSelectionListener(new SelectionAdapter() {&lt;br /&gt;            public void widgetSelected(SelectionEvent e) {&lt;br /&gt;                String word = searchWord.getText();&lt;br /&gt;                String[] wordList = word.split(" ", -2);&lt;br /&gt;                int length = wordList.length;&lt;br /&gt;                if (length == 1) {&lt;br /&gt;                    String url = "http://dict.cn/mini.php?q=";&lt;br /&gt;                    if (word == null || word.equals("")) {&lt;br /&gt;                        MessageDialog.openInformation(new Shell(),"显示提示", "失败信息!"&lt;br /&gt;                                + '\n' + '\n' + "注意：待查单词不能为空!!!...");&lt;br /&gt;                    } else {&lt;br /&gt;                        url = url + word;&lt;br /&gt;                        browser.setUrl(url);&lt;br /&gt;                        history.add(word);&lt;br /&gt;                    }&lt;br /&gt;                } else {&lt;br /&gt;                    try {&lt;br /&gt;                        SAXParserFactory sf = SAXParserFactory.newInstance();&lt;br /&gt;                        SAXParser sp = sf.newSAXParser();&lt;br /&gt;                        XmlReader reader = new XmlReader();&lt;br /&gt;                        for (int j = 0; j &lt; length; j++) {&lt;br /&gt;                            sp.parse(new InputSource("http://dict.cn/ws.php?q="&lt;br /&gt;                                    + wordList[j]), reader);&lt;br /&gt;&lt;br /&gt;                        }&lt;br /&gt;                    } catch (Exception a) {&lt;br /&gt;                    }&lt;br /&gt;                }&lt;br /&gt;&lt;br /&gt;            }&lt;br /&gt;        });&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;        final Label label = new Label(shell, SWT.NONE);&lt;br /&gt;        label.setText("   History");&lt;br /&gt;        label.setBounds(20, 56, 76, 22);&lt;br /&gt;       &lt;br /&gt;&lt;br /&gt;        history = new List(shell, SWT.BORDER);&lt;br /&gt;        history.setBounds(20, 84, 76, 237);&lt;br /&gt;        history.addMouseListener(new MouseAdapter() {&lt;br /&gt;            public void mouseDown(MouseEvent e) {&lt;br /&gt;                String word = history.getSelection()[0];&lt;br /&gt;                String url = "http://dict.cn/mini.php?q=";&lt;br /&gt;                url = url + word;&lt;br /&gt;                browser.setUrl(url);&lt;br /&gt;            }&lt;br /&gt;        });&lt;br /&gt;       &lt;br /&gt;       &lt;br /&gt;        final Button wordList = new Button(shell, SWT.NONE);&lt;br /&gt;        wordList.setText("导出个人单词本");&lt;br /&gt;        wordList.setBounds(395, 19, 87, 22);&lt;br /&gt;        wordList.addSelectionListener(new SelectionAdapter() {&lt;br /&gt;            public void widgetSelected(SelectionEvent e) {&lt;br /&gt;                Txt txt = new Txt();&lt;br /&gt;                int count = history.getItemCount();&lt;br /&gt;                for(int i = 0;i &lt; count;i ++){&lt;br /&gt;                    wordInHistory = history.getItem(i);&lt;br /&gt;                    txt.aLine(wordInHistory);&lt;br /&gt;                }&lt;br /&gt;                txt.finish();&lt;br /&gt;            }&lt;br /&gt;        });&lt;br /&gt;       &lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;Txt.java&lt;br /&gt;&lt;br /&gt;import java.io.File;&lt;br /&gt;import java.io.FileWriter;&lt;br /&gt;import java.io.PrintWriter;&lt;br /&gt;import java.io.IOException;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;public class Txt {&lt;br /&gt;   &lt;br /&gt;    public File result = new File("wordList.txt");&lt;br /&gt;&lt;br /&gt;    public FileWriter writer;&lt;br /&gt;&lt;br /&gt;    public PrintWriter pw;&lt;br /&gt;&lt;br /&gt;    public Txt() {&lt;br /&gt;        try {&lt;br /&gt;            writer = new FileWriter("wordList.txt");&lt;br /&gt;&lt;br /&gt;            pw = new PrintWriter(writer);&lt;br /&gt;        } catch (IOException iox) {&lt;br /&gt;            System.err.println(iox);&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    public void aLine(String in) { // 写入一行&lt;br /&gt;        pw.println(in);&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    public void finish() { // 关闭输入流，将文字从缓存写入文件&lt;br /&gt;&lt;br /&gt;        try {&lt;br /&gt;            pw.flush();&lt;br /&gt;            writer.close();&lt;br /&gt;        } catch (IOException iox) {&lt;br /&gt;            System.err.println(iox);&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;XmlReader.java文件&lt;br /&gt;&lt;br /&gt;import org.xml.sax.*;&lt;br /&gt;import org.xml.sax.helpers.*;&lt;br /&gt;import javax.xml.parsers.*;&lt;br /&gt;import java.io.UnsupportedEncodingException;&lt;br /&gt;&lt;br /&gt;public class XmlReader extends DefaultHandler {&lt;br /&gt;&lt;br /&gt;    java.util.Stack tags = new java.util.Stack();&lt;br /&gt;&lt;br /&gt;    public String currentName;&lt;br /&gt;&lt;br /&gt;    public StringBuffer currentValue = new StringBuffer();&lt;br /&gt;&lt;br /&gt;    public XmlReader() {&lt;br /&gt;        super();&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;   &lt;br /&gt;    public void startElement(String uri, String localName, String qName,&lt;br /&gt;            Attributes attributes)&lt;br /&gt;&lt;br /&gt;    throws SAXException {&lt;br /&gt;        currentName = qName;&lt;br /&gt;    }&lt;br /&gt;   &lt;br /&gt;&lt;br /&gt;    public void characters(char ch[], int start, int length)&lt;br /&gt;            throws SAXException {&lt;br /&gt;       &lt;br /&gt;        XmlReader xmlreader = new XmlReader();&lt;br /&gt;       &lt;br /&gt;        if(currentName=="pron"){&lt;br /&gt;            String pron = new String(ch, start, length);&lt;br /&gt;            System.out.println(pron);&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;   &lt;br /&gt;&lt;br /&gt;    public void endElement(String uri, String localName, String qName)&lt;br /&gt;            throws SAXException {&lt;br /&gt;&lt;br /&gt;    }&lt;br /&gt;   &lt;br /&gt;   &lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;test.java文件&lt;br /&gt;&lt;br /&gt;import org.eclipse.swt.widgets.Display;&lt;br /&gt;import org.eclipse.swt.widgets.Shell;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;public class test {&lt;br /&gt;&lt;br /&gt;    /**&lt;br /&gt;     * Launch the application&lt;br /&gt;     * @param args&lt;br /&gt;     */&lt;br /&gt;    public static void main(String[] args) {&lt;br /&gt;       &lt;br /&gt;        final Display display = Display.getDefault();&lt;br /&gt;        final Shell shell = new Shell(display);&lt;br /&gt;        shell.setSize(508, 377);&lt;br /&gt;        shell.setText("Dict --by stonestrange");&lt;br /&gt;   &lt;br /&gt;        Dict dict = new Dict(display,shell);&lt;br /&gt;       &lt;br /&gt;        shell.open();&lt;br /&gt;        shell.layout();&lt;br /&gt;        while (!shell.isDisposed()) {&lt;br /&gt;            if (!display.readAndDispatch())&lt;br /&gt;                display.sleep();&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7598811904790233931-616261833392958380?l=stonestrange.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://stonestrange.blogspot.com/feeds/616261833392958380/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7598811904790233931&amp;postID=616261833392958380' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7598811904790233931/posts/default/616261833392958380'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7598811904790233931/posts/default/616261833392958380'/><link rel='alternate' type='text/html' href='http://stonestrange.blogspot.com/2008/05/blog-post_03.html' title='迷你小词典升级版'/><author><name>stonestrange</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp1.blogger.com/_F6b5Psa149E/R_sMtqwqXnI/AAAAAAAAARc/3tAdCOe1r_o/S220/%E5%A4%8D%E4%BB%B6+11023341.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7598811904790233931.post-6283012541324505191</id><published>2008-05-03T19:18:00.000-07:00</published><updated>2008-05-03T19:32:02.360-07:00</updated><title type='text'>【转】怎样背英语单词效率最高记得最久</title><content type='html'>&lt;span style="color: rgb(204, 204, 255);font-size:100%;" &gt;怎样背英语单词效率最高记得最久&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;        背单词的捷径&lt;br /&gt;&lt;br /&gt;        背单词最重要的一点，就是：...如果想比别人成功，就一定要走捷径。不要期盼自己比别人幸运，也不要指望自己比别人更聪明或者更勤奋。从智力上说，从机遇上说，自己和别人都是差不了多少的，想超过和自己差不多的人，就一定要走捷径，捷径，捷径！&lt;br /&gt;        背单词捷径的第一条，就是：&lt;span style="font-weight: bold; font-style: italic;"&gt;一定要每次都大量地背&lt;/span&gt;。因为自己不比别人聪明，所以背完单词，别人忘掉五分之一，自己决不会比别人忘得少。然而，别人每天背十 个单词，自己却可以背一百个，忘掉五分之一，还剩八十个，是别人最聪明状态下的十倍。每天一百个是最低限。其实背到后来您会发现这个要求并不高，一个月 后，您可能自然而然地就背到三百或者五百。 这一百个要分成四组来背，上午三十,中午十个，下午三十，晚上三十。第二天早晨复习以前没背下来的词。背的时候，要一目十词(注意，是十个而不是更多或更 少)，不要认认真真背，因为没有认认真真的时间。一边看一边读每个词的读音，默读也成。看完后回忆一遍，回忆不起来的再看。这次背的目的在于留下个大概印 象，下次看见能知道这个词，所以背到大部分都能回忆得起来就成了，把剩下的词单独抄出来。&lt;br /&gt;        背单词捷径的第二条，就是：&lt;span style="font-weight: bold; font-style: italic;"&gt;背字典&lt;/span&gt;！为什么要背字典呢？因为字典上每个词的解释比较全面，而且相同字母开头的单词都集中在一起。不是什么字典都可以拿来背 的，一定要找只包含自己想背的词的字典。另外，最好有英文方式的解释和例句。而且，一定要有音标！如果是为了考TOFEL或者GRE，注意要选美音音标的 字典。一般教材课文后面的词汇表都是为那些认认真真听课的好学生准备的，想走捷径就千万不要去背那些东西。&lt;span style="font-weight: bold; font-style: italic;"&gt; 背字典的时候，按开头字母&lt;span style="font-family: arial;"&gt;(Z,Y,X,Q,J,K,U)、(V,W,N,O,L)、(FG,IT,HM,BDE,R)、(C,P,S,A)&lt;/span&gt;的顺序背，其 中&lt;span style="font-family: arial;"&gt;C,P,S,A&lt;/span&gt;每个都要分三部分背。&lt;/span&gt;这样背有几个好处：&lt;br /&gt;（一）能增加成就感，提高兴趣。至于为什么，您翻翻字典就明白了。&lt;br /&gt;（二）便于清楚地知道那些单词已经背过，那些还没背。&lt;br /&gt;（三）能先把最基本的词先掌握。&lt;br /&gt;         三万单词里，分为三个等级：三千到四千，八千到一万，两万二到三万。也就是说，您得分别准备三本字典。这几个等级之间各自有非常不同的特性，所以需要分别 用不同方法背。俺当时没有认识到这一点，所以在从一万到三万之间走了一段弯路，浪费了一些时间，不然或许能突破到五万吧！ 俺的经验是新概念第一二册，然后大学泛读课本前两册，然后是另外的一个泛读教程初级部分，然后新概念第三册，泛读课本第三册，某一种听力教材高级听力部分的教师用书，然后新概念第四册，泛读课本第四五册...这么个顺序进度比较合适。&lt;br /&gt;         所以，背单词捷径的下面这条就有了三个分支。&lt;br /&gt;        背单词捷径的第三条，就是：&lt;span style="font-weight: bold; font-style: italic;"&gt;和单词多见面&lt;/span&gt;。一个单词能不能记住，取决于和它在不同场合见面的频率，不在于每次看着它的时间长短。一般想记住一个单词，每星期要和它在*不同场合*见三到四次面。俺在上文中提到大量背的时候，不要抠某一个字记住与否就是这个意思。因为是否 一见钟情都是无所谓的，关键在于有更多不同类型的见面机会。不过，根据要背的单词的等级不同，增加见面机会的方式也有所不同。&lt;br /&gt;        第一个分支：&lt;span style="font-weight: bold; font-style: italic;"&gt;瞎听&lt;/span&gt;！三千到四千这个等级，是非常常用的单词，而且几乎囊括了表达最基本思想所需要的一切词汇。每篇文章中百分之八十都是这些词汇，而且这些 词都是最基本的语素(或称"词根")，就是分割到最小无法再分割，互相之间也没什么类似之处的东西。对付这些词的最好方法，就是进行大量的，不间断的，简 单的初级听力练习。因为阅读材料中，还有百分之二十其他词汇，所以光凭这个等级的词还看不懂那些阅读材料。但是听力练习都是最基本的对话，而且发音一般很 标准，多听能够增加单词的重复率，而且可以为以后背八千到一万那个等级的词打下语音基。听的时候，要分精听和泛听两部分。精听当然是指每个词都要弄懂，俺着重讲一下泛听。泛听是最重要的，因为掌握语速和语调，以及总体印象都要泛听。而这些都是背八千到一万等级单词的基础?泛听能够让经常用到的词(也就是那些最必要掌握的词)把您的耳朵磨出茧子来，让您模模糊糊听到个音就能反 应出它是什么意思。泛听中您听到的词，才是您真正应该记住的词，所以别害怕精听的时候什么都听不懂。到底什么是泛听呢？泛听，就是说您听的时候，精神要分 散，要一边干着其他事(比如撮饭或和别人大声讨论撮饭;)~)，一边有一搭没一搭地听着。泛听一定要见缝插针，一有机会就听着，最好耳机不离耳朵。 而精听的意义就在于找出您没听清的那些词。啊哈，那就是您背过但还不熟悉的词了。:)把这些词单独记在另外一个地方，别跟没背下来的词混了。泛听要听精听 已经听过的内容。比如精听听到了第二盘磁带，那么泛听就听第一盘磁带，正好。&lt;br /&gt;        第二个分支：&lt;span style="font-weight: bold; font-style: italic;"&gt;狂看&lt;/span&gt;！八千到一万这个等级，基本包含了剩下的百分之二十。这些单词在听力教材里很难找到。但是，可不要停止听的练习呦，因为听能巩固您的语调 感觉，而这是背这个等级单词的一个关键。不过，背这个等级的词，需要在听以外增加看的内容。 看，同样要分精读和泛读两种。就象听一样，也是泛读更重要一些。泛读要挑不太长，能有耐心看完的文章，而且看不懂的词不要太多，一篇文章有两三个不认识的 就足够了。千万不要一上来就看英语报刊杂志小说，那些东西不但很难看懂，而且看懂了也对背单词没什么促进作用。 泛读也需要大量练习，只要您有耐心，又有足够时间，就一直看下去吧！看的时候不要仔细阅读，扫一眼明白个大概意思就成了，然后把这一眼没看懂的词画上记 号，别琢磨它是什么意思，继续扫描吧！全部看完之后，回头再看这些单词，有的可能已经想起来了，有的....还没想起来？那就查查字典，要是自己还没背 过，就扔掉它，要是已经背过了，就单独抄下来吧，和听力练习中没听出来的词放在一起。&lt;br /&gt;        第三个分支：&lt;span style="font-weight: bold; font-style: italic;"&gt;乱说&lt;/span&gt;！这只适合背两万二到三万的词。因为其他的词不用说就已经背下来了。而这个等级的词在阅读材料里非常少，可能阅读十篇文章却一个这个等级 的词也没有。所以*阅读来增加见面机会已经不行了。这些词甚至有的老外一辈子都没见过，咋能指望他们能写出来呢？尤其是GRE词汇，什么"给马穿衣服"， "纽约的流氓"，"从非洲吹向南欧的风"....这些词都是一些精致的修辞，也就是说，如果您话里净是这些词，那您可以假冒一位学者了。 一般的老外都是听不懂您说的这些话的，所以不用这些词也能表达同样的含义。好了，您的机会来了，您可以跟老外讲话中带上这些单词，然后很自豪地假装谦虚地 跟他们解释这些词的含义。 每次跟老外解释一两个词就足够了，老外会佩服您佩服得五体投地的。HL就向ws解释吧！要大胆而耐心，尤其是大胆。 这个阶段，您就别再练听力了，因为练了进步也不大。还记得开头那句话么？要想成功，得走捷径。凡是不能在短时期内取得巨大进步的行动，都不必浪费时间去 做。 不过，这时候的阅读材料成了问题：您会发现，过去看的东西觉得太浅没意思，看其他深的东西又看不懂。您还会发现一个新的有趣现象：那就是您想看的文章里， 现在全是第一个等级的那些词，每个词您都确切知道它的含义，但整个文章您就是看不懂。 那您该看什么呢？就看第二个等级的那些浅显文章?Ｋ淙磺诚裕??馨镏??恢劣谕?斯?ケ吵隼吹某晒?Ｖ劣谀?床欢?哪切┪恼拢?鹱偶保?饶?屠贤饨涣鞫嗔 耍??匀痪投?耍?嵌际且恍┐首椤①涤锘蛭姆ㄗ槌傻奈恼隆?br&gt; 背单词捷径的第四条，就是：联想，联想，联想，.....背单词的第一个动作是什么？端详一下它的外貌。第二第三个动作呢？看看它的内涵和发音。而第四个 动作，就应该是联想，再联想..... 联想它和其他背过的词有没有外表类似的？读音类似的？意思类似或相反的？如果有，就赶紧记在旁边，在另外那些词旁边也把这个词加上。这样，以后看见其他 词，也会联想起这个词，等于又增加了一次见面机会。 而且，在第二、第三个等级的词汇里，还有许多单词是由"前缀"，"词根"，"后缀"组成的，前缀比如"re"，"in"，"pseud"...，后缀比如 "er"， "a"， "oid"...，然后共同组成一个新词。如果掌握了这些前后缀，就可以很方便地猜出一个生词到底什么意思。另外，有很多读音相近的词也有相似的意思，这 在俚语、诗歌和儿童用语中更普遍。&lt;br /&gt;        如果每天记80个单词，一个月只能背2400个单词，但掌握了这些规律后，实际上背的速度越来越快，几乎一万多单词都是不用背就会了的。不过，在GRE单 词中，有很多是既没有和其他词的关系，又没有前后缀，看起来既简单又记不住的单词。这些词里边有希腊语，意大利语，德语，拉丁语，甚至还有日语译音。这就 只能*和别人解释来掌握了。&lt;br /&gt;&lt;br /&gt;【转自】http://www.makeit.net.cn/learn/words/61&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7598811904790233931-6283012541324505191?l=stonestrange.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://stonestrange.blogspot.com/feeds/6283012541324505191/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7598811904790233931&amp;postID=6283012541324505191' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7598811904790233931/posts/default/6283012541324505191'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7598811904790233931/posts/default/6283012541324505191'/><link rel='alternate' type='text/html' href='http://stonestrange.blogspot.com/2008/05/blog-post.html' title='【转】怎样背英语单词效率最高记得最久'/><author><name>stonestrange</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp1.blogger.com/_F6b5Psa149E/R_sMtqwqXnI/AAAAAAAAARc/3tAdCOe1r_o/S220/%E5%A4%8D%E4%BB%B6+11023341.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7598811904790233931.post-3105801352162127825</id><published>2008-05-03T19:16:00.000-07:00</published><updated>2008-05-03T19:34:41.196-07:00</updated><title type='text'>【转】如何背单词</title><content type='html'>&lt;span style="color: rgb(204, 204, 255);font-size:100%;" &gt;千万别死背单词的拼写，那样跟死背电话号码没有差别，谁也背不下成千上万的电话号码，同样谁也背不下成千上万个由26个字母组成的电话号码(即英语)。英 语是拼音文字，记住英语单词的最正确方法、也是最简单方法、最可靠方法就是记住单词的发音。其他的方法都不是根本方法，记住的单词都会被忘记。请大家想一 想，有哪个中国人背过汉语拼音，可掌握了汉语拼音的人都可以用汉语拼音在计算机上打字，人们打字时打进的拼音是什么，是记住的汉语拼音字母吗，不是，而是 汉字的发音，音发得准的人都能使用汉语拼音打字，同样英语音发得准的人就可以记住英语单词的拼写。中国人从没有见过谁背汉语拼音，同样外国人从没见过谁背 过英语单词的拼写，拼音文字靠发准音记住拼写，这是天经地义的。要想记住英语单词的拼写，必须发准英语音。请练准英语单词的发音，就可以进入记字无难，记 字无忧的境界。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;怎样快速牢固地记忆单词呢？&lt;br /&gt;&lt;br /&gt;　　1：快速多次。被单词时不要一次在某一单词上花费大量的时间太多，一定要每次都大量的背。它可以使单词的意思牢牢地在同学们的头脑中生根，不易遗忘。只有快速，才能多次。只有多次，才能记住。有的同学会问：“背多遍会不会&lt;br /&gt;浪费时间呢？”实际上，一本单词书背第一遍的时候，可能需要一个月，而第二偏的时候，由于一部分单词已经背会，不会的单词也有印象，可能十来天就背完了。 第三遍也许5天时间就可以完成。因为只背一遍对单词的印象是不太深刻的，那么遗忘的速度和遗忘率都会很高，不如多背几遍，省时省力还踏时。&lt;br /&gt;&lt;br /&gt;　　2：注意单词之间的联系。当然，可能刚开始时能建立联系的单词很少，但要注意培养这种意识，争取一串串地背单词看见一个就能想起一串。比如：同义的，反义的，形近的，同根的，同类的单词防在一块儿记。&lt;br /&gt;&lt;br /&gt;　　3：将认识的和不认识的词分类。大家在背单词时，在书上将不忍市的词用特殊的记号标出，这样，将主要精力集中于不认识的词，可以大大节省时间，缓解压力。&lt;br /&gt;&lt;br /&gt;　　4：脑，眼，口手并用。背单词不是看小说，应该找一个安静的地方，抛开一切杂念。译本书，一叠纸，一张嘴，脑中想着这个单词，眼里看着它，嘴里念着它，用笔在纸上写着这个单词，这样才能加强对这个原来根本不认识的单词的印象，去得好的记忆效果。&lt;br /&gt;&lt;br /&gt;　　5：记得模糊一些。背单词的时候是不是要把单词的所有的意思和用法都记得很请清楚楚呢？回答是否定的对大多数单词，只要知道它的大概意思就可以了，就不会对阅读和做题产生影响。只有极少数的核心词汇，才需要不仅了解它的意思，还要了解它的用法。&lt;br /&gt;&lt;br /&gt;　　6：经常复习。笔者本人的单词在两万左右，基本上每周都拿出一个半天将其中的一些单词背一遍，有的单词确实有些模糊了，将它在加强一下，笔者并不感到负担，相反觉得很有意思。&lt;/span&gt;&lt;span style="color: rgb(204, 204, 255);"&gt; &lt;/span&gt;       &lt;span style="font-size:100%;"&gt;&lt;span style="color: rgb(204, 204, 255);"&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(204, 204, 255);"&gt;【转自】http://www.makeit.net.cn/learn/words/61&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7598811904790233931-3105801352162127825?l=stonestrange.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://stonestrange.blogspot.com/feeds/3105801352162127825/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7598811904790233931&amp;postID=3105801352162127825' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7598811904790233931/posts/default/3105801352162127825'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7598811904790233931/posts/default/3105801352162127825'/><link rel='alternate' type='text/html' href='http://stonestrange.blogspot.com/2008/05/note.html' title='【转】如何背单词'/><author><name>stonestrange</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp1.blogger.com/_F6b5Psa149E/R_sMtqwqXnI/AAAAAAAAARc/3tAdCOe1r_o/S220/%E5%A4%8D%E4%BB%B6+11023341.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7598811904790233931.post-3438137014190360693</id><published>2008-04-29T06:32:00.000-07:00</published><updated>2008-04-29T06:44:05.290-07:00</updated><title type='text'>【转】越看越不错的海报~~~~~~~</title><content type='html'>转自网络蚯蚓~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_F6b5Psa149E/SBcmB3urc4I/AAAAAAAAASU/2zwNOD2T3tU/s1600-h/30.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://4.bp.blogspot.com/_F6b5Psa149E/SBcmB3urc4I/AAAAAAAAASU/2zwNOD2T3tU/s320/30.jpg" alt="" id="BLOGGER_PHOTO_ID_5194662508776616834" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_F6b5Psa149E/SBcl9nurc3I/AAAAAAAAASM/8S316AAUH7s/s1600-h/29.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://3.bp.blogspot.com/_F6b5Psa149E/SBcl9nurc3I/AAAAAAAAASM/8S316AAUH7s/s320/29.jpg" alt="" id="BLOGGER_PHOTO_ID_5194662435762172786" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_F6b5Psa149E/SBcl4Xurc2I/AAAAAAAAASE/WEZn5AOfI_Q/s1600-h/24%2804-29-21-30-10%29.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://2.bp.blogspot.com/_F6b5Psa149E/SBcl4Xurc2I/AAAAAAAAASE/WEZn5AOfI_Q/s320/24%2804-29-21-30-10%29.jpg" alt="" id="BLOGGER_PHOTO_ID_5194662345567859554" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_F6b5Psa149E/SBclzXurc1I/AAAAAAAAAR8/UClGQyj1jKU/s1600-h/22%2804-29-21-30-10%29.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://2.bp.blogspot.com/_F6b5Psa149E/SBclzXurc1I/AAAAAAAAAR8/UClGQyj1jKU/s320/22%2804-29-21-30-10%29.jpg" alt="" id="BLOGGER_PHOTO_ID_5194662259668513618" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_F6b5Psa149E/SBclsHurc0I/AAAAAAAAAR0/oDzSrHutUf8/s1600-h/25%2804-29-21-30-10%29.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://1.bp.blogspot.com/_F6b5Psa149E/SBclsHurc0I/AAAAAAAAAR0/oDzSrHutUf8/s320/25%2804-29-21-30-10%29.jpg" alt="" id="BLOGGER_PHOTO_ID_5194662135114462018" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_F6b5Psa149E/SBclg3urcyI/AAAAAAAAARk/eL2jGGcIzLY/s1600-h/21%2804-29-21-30-10%29.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://4.bp.blogspot.com/_F6b5Psa149E/SBclg3urcyI/AAAAAAAAARk/eL2jGGcIzLY/s320/21%2804-29-21-30-10%29.jpg" alt="" id="BLOGGER_PHOTO_ID_5194661941840933666" border="0" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7598811904790233931-3438137014190360693?l=stonestrange.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://stonestrange.blogspot.com/feeds/3438137014190360693/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7598811904790233931&amp;postID=3438137014190360693' title='1 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7598811904790233931/posts/default/3438137014190360693'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7598811904790233931/posts/default/3438137014190360693'/><link rel='alternate' type='text/html' href='http://stonestrange.blogspot.com/2008/04/blog-post_29.html' title='【转】越看越不错的海报~~~~~~~'/><author><name>stonestrange</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp1.blogger.com/_F6b5Psa149E/R_sMtqwqXnI/AAAAAAAAARc/3tAdCOe1r_o/S220/%E5%A4%8D%E4%BB%B6+11023341.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_F6b5Psa149E/SBcmB3urc4I/AAAAAAAAASU/2zwNOD2T3tU/s72-c/30.jpg' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7598811904790233931.post-4314779678529708728</id><published>2008-04-22T04:14:00.000-07:00</published><updated>2008-04-25T01:51:01.133-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='coding_java'/><title type='text'>迷你小词典~</title><content type='html'>&lt;span style="color: rgb(204, 204, 255);font-size:100%;" &gt;&lt;span style="font-weight: bold;font-family:arial;" &gt;原创小词典~~~~~~~~~使用了海词的提供的API~~~~~~~~在此感谢啦~~~~~~~~&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-family:arial;" &gt;import org.eclipse.swt.*;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-family:arial;" &gt;import org.eclipse.swt.SWT;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-family:arial;" &gt;import org.eclipse.swt.widgets.*;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-family:arial;" &gt;import org.eclipse.swt.widgets.Button;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-family:arial;" &gt;import org.eclipse.swt.widgets.Text;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-family:arial;" &gt;import org.eclipse.swt.events.*;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-family:arial;" &gt;import org.eclipse.swt.browser.*;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-family:arial;" &gt;import org.eclipse.swt.browser.Browser;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-family:arial;" &gt;public class Dict {&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-family:arial;" &gt;    private Text express;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-family:arial;" &gt;    private Text searchWord;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-family:arial;" &gt;    public Dict() {&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-family:arial;" &gt;        final Display display = Display.getDefault();&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-family:arial;" &gt;        final Shell shell = new Shell(display);&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-family:arial;" &gt;        shell.setSize(500, 380);&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-family:arial;" &gt;        shell.setText("Dict --by stonestrange");&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-family:arial;" &gt;        final Browser browser = new Browser(shell, SWT.NONE);&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-family:arial;" &gt;        browser.setBounds(116, 66, 363, 282);&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-family:arial;" &gt;        searchWord = new Text(shell, SWT.BORDER);&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-family:arial;" &gt;        searchWord.setBounds(91, 19, 268, 22);&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-family:arial;" &gt;        final Button search = new Button(shell, SWT.NONE);&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-family:arial;" &gt;        search.setText("search");&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-family:arial;" &gt;        search.setBounds(385, 19, 94, 22);&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-family:arial;" &gt;        search.setImage(searchImage);&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-family:arial;" &gt;        search.addSelectionListener(new SelectionAdapter() {&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-family:arial;" &gt;            public void widgetSelected(SelectionEvent e) {&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-family:arial;" &gt;                String word = searchWord.getText();&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-family:arial;" &gt;                String url = "http://dict.cn/mini.php?q=";&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-family:arial;" &gt;                url = url + word;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-family:arial;" &gt;                browser.setUrl(url);&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-family:arial;" &gt;            }&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-family:arial;" &gt;        });&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-family:arial;" &gt;        express = new Text(shell, SWT.BORDER);&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-family:arial;" &gt;        express.setBounds(116, 66, 363, 282);&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-family:arial;" &gt;        shell.open();&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-family:arial;" &gt;        shell.layout();&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-family:arial;" &gt;        while (!shell.isDisposed()) {&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-family:arial;" &gt;            if (!display.readAndDispatch())&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-family:arial;" &gt;                display.sleep();&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-family:arial;" &gt;        }&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-family:arial;" &gt;    }&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-family:arial;" &gt;    public static void main(String[] args) {&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-family:arial;" &gt;        new Dict();&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-family:arial;" &gt;    }&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-family:arial;" &gt;}&lt;/span&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7598811904790233931-4314779678529708728?l=stonestrange.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://stonestrange.blogspot.com/feeds/4314779678529708728/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7598811904790233931&amp;postID=4314779678529708728' title='1 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7598811904790233931/posts/default/4314779678529708728'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7598811904790233931/posts/default/4314779678529708728'/><link rel='alternate' type='text/html' href='http://stonestrange.blogspot.com/2008/04/blog-post_22.html' title='迷你小词典~'/><author><name>stonestrange</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp1.blogger.com/_F6b5Psa149E/R_sMtqwqXnI/AAAAAAAAARc/3tAdCOe1r_o/S220/%E5%A4%8D%E4%BB%B6+11023341.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7598811904790233931.post-4253201169153904767</id><published>2008-04-15T21:29:00.000-07:00</published><updated>2008-04-15T21:31:47.514-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='eye'/><title type='text'>[转]如何判断真假性近视</title><content type='html'>&lt;span style="font-family:arial;"&gt;&lt;span style="color:#ccccff;"&gt;假性近视是真性近视眼之前的一种疲劳状态，如果这种状态不能及时缓解，眼睛发生器质性改变就会形成真性近视。判断真假近视眼需要做散瞳验光,散瞳的目的是解除眼睛疲劳，让紧张的肌肉放松，这样验出的屈光度才是准确的。如果散瞳后裸眼视力能够达到1.0，那就是“假性近视”，在短期内能治愈，比如药物、针灸及理疗仪器等，都可放松肌肉，缓解疲劳，使视力恢复到正常状态。如不想治疗，只要经常眺望远方，注意休息，视力也有可能恢复。但是如果散瞳后裸眼视力低于0.8，就是“真性近视”了。真性近视眼一旦形成就不可逆转，它是眼球发生的器质性改变。眼球的前后轴变长，外界物象通过眼睛的屈光系统成像在视网膜前，视网膜上没有清晰的物象，当然就不会有良好的视力了。这种器质性改变除了手术外，任何方法都不能使眼球缩短、屈光度改变，这就是近视眼难以治愈的原因。目前屈光手术是唯一可治疗近视眼、降低屈光度的方法。&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:Arial;color:#ccccff;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:Arial;color:#ccccff;"&gt;[转自&lt;a href="http://bbs.hefei.cc/viewthread.php?tid=1109460"&gt;http://bbs.hefei.cc/viewthread.php?tid=1109460&lt;/a&gt;]&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7598811904790233931-4253201169153904767?l=stonestrange.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://stonestrange.blogspot.com/feeds/4253201169153904767/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7598811904790233931&amp;postID=4253201169153904767' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7598811904790233931/posts/default/4253201169153904767'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7598811904790233931/posts/default/4253201169153904767'/><link rel='alternate' type='text/html' href='http://stonestrange.blogspot.com/2008/04/blog-post_15.html' title='[转]如何判断真假性近视'/><author><name>stonestrange</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp1.blogger.com/_F6b5Psa149E/R_sMtqwqXnI/AAAAAAAAARc/3tAdCOe1r_o/S220/%E5%A4%8D%E4%BB%B6+11023341.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7598811904790233931.post-369582113751177704</id><published>2008-04-07T22:50:00.000-07:00</published><updated>2008-04-07T23:34:52.679-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='funny'/><title type='text'>[转]10个世界著名的卡通形象</title><content type='html'>&lt;div style="text-align: center;"&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;font-size:100%;"  &gt;&lt;b style="font-weight: bold;"&gt;                                                                    一、小熊维尼&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;&lt;p class="MsoNormal"  style="text-indent: 24pt; font-weight: bold; color: rgb(153, 153, 255); text-align: center;font-family:arial;"&gt;&lt;span style="font-size:100%;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_F6b5Psa149E/R_sJJKwqXcI/AAAAAAAAAQI/CUsxPBfZM-k/s1600-h/1.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://4.bp.blogspot.com/_F6b5Psa149E/R_sJJKwqXcI/AAAAAAAAAQI/CUsxPBfZM-k/s320/1.jpg" alt="" id="BLOGGER_PHOTO_ID_5186749448959188418" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;span lang="EN-US"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;div style="text-align: center;"&gt;    &lt;/div&gt;&lt;p class="MsoNormal"  style="text-indent: 24pt; font-weight: bold; color: rgb(153, 153, 255); text-align: center;font-family:arial;"&gt;&lt;span lang="EN-US"  style="font-size:100%;"&gt;&lt;!--[if gte vml 1]&gt;&lt;v:shapetype id="_x0000_t75" coordsize="21600,21600" spt="75" preferrelative="t" path="m@4@5l@4@11@9@11@9@5xe" filled="f" stroked="f"&gt;  &lt;v:stroke joinstyle="miter"&gt;  &lt;v:formulas&gt;   &lt;v:f eqn="if lineDrawn pixelLineWidth 0"&gt;   &lt;v:f eqn="sum @0 1 0"&gt;   &lt;v:f eqn="sum 0 0 @1"&gt;   &lt;v:f eqn="prod @2 1 2"&gt;   &lt;v:f eqn="prod @3 21600 pixelWidth"&gt;   &lt;v:f eqn="prod @3 21600 pixelHeight"&gt;   &lt;v:f eqn="sum @0 0 1"&gt;   &lt;v:f eqn="prod @6 1 2"&gt;   &lt;v:f eqn="prod @7 21600 pixelWidth"&gt;   &lt;v:f eqn="sum @8 21600 0"&gt;   &lt;v:f eqn="prod @7 21600 pixelHeight"&gt;   &lt;v:f eqn="sum @10 21600 0"&gt;  &lt;/v:formulas&gt;  &lt;v:path extrusionok="f" gradientshapeok="t" connecttype="rect"&gt;  &lt;o:lock ext="edit" aspectratio="t"&gt; &lt;/v:shapetype&gt;&lt;v:shape id="_x0000_i1025" type="#_x0000_t75" alt="10个世界著名的卡通形象" style="'width:252pt;height:170.25pt'" button="t"&gt;  &lt;v:imagedata src="file:///C:\DOCUME~1\stone\LOCALS~1\Temp\msohtml1\01\clip_image001.jpg" href="http://image.rayli.com.cn/7/7005/2008-01-28/images/20081281023538.jpg"&gt; &lt;/v:shape&gt;&lt;![endif]--&gt;&lt;!--[if !vml]--&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;喜爱这个憨态可掬的小熊，喜欢它的笨拙，喜欢嗜食蜂蜜，喜欢它的朋友&lt;span lang="EN-US"&gt;--&lt;/span&gt;胆小的猪和同样胆小的虎。&lt;span lang="EN-US"&gt;A·A·&lt;/span&gt;米那是英国著名的小说家，他以儿子克里斯多夫和玩具熊为主角出了两本童话书《&lt;span lang="EN-US"&gt;Winnie-the Pooh&lt;/span&gt;》&lt;span lang="EN-US"&gt;(1926)&lt;/span&gt;《&lt;span lang="EN-US"&gt;Welcome the Pooh Comer&lt;/span&gt;》&lt;span lang="EN-US"&gt;(1928)&lt;/span&gt;其中出色的文字和插图，令小读者们一下爱上了小熊维尼。&lt;span lang="EN-US"&gt; &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;div style="text-align: center;"&gt;  &lt;/div&gt;&lt;p class="MsoNormal"  style="text-indent: 24pt; font-weight: bold; color: rgb(153, 153, 255); text-align: center;font-family:arial;"&gt;&lt;span style="font-size:100%;"&gt;小熊维尼档案：&lt;span lang="EN-US"&gt; &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;div style="text-align: center;"&gt;  &lt;/div&gt;&lt;p class="MsoNormal"  style="text-indent: 24pt; font-weight: bold; color: rgb(153, 153, 255); text-align: center;font-family:arial;"&gt;&lt;span lang="EN-US"  style="font-size:100%;"&gt;●Pooh&lt;/span&gt;&lt;span style="font-size:100%;"&gt;和朋友的历险故事发生在百亩林&lt;span lang="EN-US"&gt;(hundred Acre Wood)&lt;/span&gt;。&lt;span lang="EN-US"&gt; &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;div style="text-align: center;"&gt;  &lt;/div&gt;&lt;p class="MsoNormal"  style="text-indent: 24pt; font-weight: bold; color: rgb(153, 153, 255); text-align: center;font-family:arial;"&gt;&lt;span lang="EN-US"  style="font-size:100%;"&gt;●Pooh&lt;/span&gt;&lt;span style="font-size:100%;"&gt;的电视动画赢过奥斯卡奖（&lt;span lang="EN-US"&gt;1968&lt;/span&gt;）和艾美奖（&lt;span lang="EN-US"&gt;1989&lt;/span&gt;及&lt;span lang="EN-US"&gt;1990&lt;/span&gt;）。 &lt;span lang="EN-US"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;div style="text-align: center;"&gt;  &lt;/div&gt;&lt;p class="MsoNormal"  style="text-indent: 24pt; font-weight: bold; color: rgb(153, 153, 255); text-align: center;font-family:arial;"&gt;&lt;span lang="EN-US"  style="font-size:100%;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;div style="text-align: center;"&gt;  &lt;/div&gt;&lt;p class="MsoNormal"  style="text-indent: 24pt; font-weight: bold; color: rgb(153, 153, 255); text-align: center;font-family:arial;"&gt;&lt;span style="font-size:100%;"&gt;二、芭比&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal"  style="text-indent: 24pt; font-weight: bold; color: rgb(153, 153, 255); text-align: center;font-family:arial;"&gt;&lt;span style="font-size:100%;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_F6b5Psa149E/R_sJV6wqXdI/AAAAAAAAAQQ/TQWh1bSFJQk/s1600-h/1.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://3.bp.blogspot.com/_F6b5Psa149E/R_sJV6wqXdI/AAAAAAAAAQQ/TQWh1bSFJQk/s320/1.jpg" alt="" id="BLOGGER_PHOTO_ID_5186749668002520530" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;span lang="EN-US"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;div style="text-align: center;"&gt;    &lt;/div&gt;&lt;p class="MsoNormal"  style="text-indent: 24pt; font-weight: bold; color: rgb(153, 153, 255); text-align: center;font-family:arial;"&gt;&lt;span lang="EN-US"  style="font-size:100%;"&gt;&lt;!--[if gte vml 1]&gt;&lt;v:shape id="_x0000_i1026" type="#_x0000_t75" alt="10个世界著名的卡通形象" style="'width:252pt;height:243.75pt'" button="t"&gt;  &lt;v:imagedata src="file:///C:\DOCUME~1\stone\LOCALS~1\Temp\msohtml1\01\clip_image003.jpg" href="http://image.rayli.com.cn/7/7005/2008-01-28/images/200812810225248.jpg"&gt; &lt;/v:shape&gt;&lt;![endif]--&gt;&lt;!--[if !vml]--&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;她是永远的大明星；她青春永驻；她有无数种身份和无数套衣服（当然价值不菲）；她有经专家精心设计的三围和五官，她是所有女性的梦想。&lt;span lang="EN-US"&gt;1959&lt;/span&gt;年，美国汉德尔太太制成第一个芭比娃娃，灵感来自女儿芭芭拉（小名芭比）的纸制洋娃娃，一经上市立即卖得火热。&lt;span lang="EN-US"&gt;40&lt;/span&gt;多年来小女孩们通过玩芭比了解成人世界，竖立偶像。&lt;span lang="EN-US"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;div style="text-align: center;"&gt;  &lt;/div&gt;&lt;p class="MsoNormal"  style="text-indent: 24pt; font-weight: bold; color: rgb(153, 153, 255); text-align: center;font-family:arial;"&gt;&lt;span style="font-size:100%;"&gt;芭比档案：&lt;span lang="EN-US"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;div style="text-align: center;"&gt;  &lt;/div&gt;&lt;p class="MsoNormal"  style="text-indent: 24pt; font-weight: bold; color: rgb(153, 153, 255); text-align: center;font-family:arial;"&gt;&lt;span lang="EN-US"  style="font-size:100%;"&gt;●&lt;/span&gt;&lt;span style="font-size:100%;"&gt;全名是&lt;span lang="EN-US"&gt;Barbie Millicent Roberts&lt;/span&gt;。&lt;span lang="EN-US"&gt; &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;div style="text-align: center;"&gt;  &lt;/div&gt;&lt;p class="MsoNormal"  style="text-indent: 24pt; font-weight: bold; color: rgb(153, 153, 255); text-align: center;font-family:arial;"&gt;&lt;span lang="EN-US"  style="font-size:100%;"&gt;●&lt;/span&gt;&lt;span style="font-size:100%;"&gt;有&lt;span lang="EN-US"&gt;3&lt;/span&gt;姊妹，&lt;span lang="EN-US"&gt;Skipper&lt;/span&gt;（&lt;span lang="EN-US"&gt;1964&lt;/span&gt;年出世）、&lt;span lang="EN-US"&gt;Stacie(1992)&lt;/span&gt;，男朋友是&lt;span lang="EN-US"&gt;Ken&lt;/span&gt;，&lt;span lang="EN-US"&gt;1961&lt;/span&gt;年已相识，至今情比金坚，&lt;span lang="EN-US"&gt;Ken&lt;/span&gt;有弟弟&lt;span lang="EN-US"&gt;Tommy&lt;/span&gt;。&lt;span lang="EN-US"&gt; &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;div style="text-align: center;"&gt;  &lt;/div&gt;&lt;p class="MsoNormal"  style="text-indent: 24pt; font-weight: bold; color: rgb(153, 153, 255); text-align: center;font-family:arial;"&gt;&lt;span lang="EN-US"  style="font-size:100%;"&gt;●&lt;/span&gt;&lt;span style="font-size:100%;"&gt;从&lt;span lang="EN-US"&gt;1959&lt;/span&gt;年至今，&lt;span lang="EN-US"&gt;Barbie&lt;/span&gt;拥有达&lt;span lang="EN-US"&gt;10&lt;/span&gt;亿套时装及&lt;span lang="EN-US"&gt;10&lt;/span&gt;亿双鞋。&lt;span lang="EN-US"&gt; &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;div style="text-align: center;"&gt;  &lt;/div&gt;&lt;p class="MsoNormal"  style="text-indent: 24pt; font-weight: bold; color: rgb(153, 153, 255); text-align: center;font-family:arial;"&gt;&lt;span lang="EN-US"  style="font-size:100%;"&gt;●&lt;/span&gt;&lt;span style="font-size:100%;"&gt;共穿过&lt;span lang="EN-US"&gt;45&lt;/span&gt;个国家或民族的服装。&lt;span lang="EN-US"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;div style="text-align: center;"&gt;  &lt;/div&gt;&lt;p class="MsoNormal"  style="font-weight: bold; color: rgb(153, 153, 255); text-align: center;font-family:arial;"&gt;&lt;span lang="EN-US"  style="font-size:100%;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;div style="text-align: center;"&gt;  &lt;/div&gt;&lt;p class="MsoNormal"  style="font-weight: bold; color: rgb(153, 153, 255); text-align: center;font-family:arial;"&gt;&lt;span style="font-size:100%;"&gt;三、巴特&lt;span lang="EN-US"&gt;·&lt;/span&gt;辛普森&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal"  style="font-weight: bold; color: rgb(153, 153, 255); text-align: center;font-family:arial;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_F6b5Psa149E/R_sJy6wqXeI/AAAAAAAAAQY/_jH4hfEdk5A/s1600-h/2.JPG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://3.bp.blogspot.com/_F6b5Psa149E/R_sJy6wqXeI/AAAAAAAAAQY/_jH4hfEdk5A/s320/2.JPG" alt="" id="BLOGGER_PHOTO_ID_5186750166218726882" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="font-size:100%;"&gt;&lt;span lang="EN-US"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;div style="text-align: center;"&gt;    &lt;/div&gt;&lt;p class="MsoNormal"  style="text-indent: 24pt; font-weight: bold; color: rgb(153, 153, 255); text-align: center;font-family:arial;"&gt;&lt;span lang="EN-US"  style="font-size:100%;"&gt;&lt;!--[if gte vml 1]&gt;&lt;v:shape id="_x0000_i1027" type="#_x0000_t75" alt="10个世界著名的卡通形象" style="'width:252pt;height:189pt'" button="t"&gt;  &lt;v:imagedata src="file:///C:\DOCUME~1\stone\LOCALS~1\Temp\msohtml1\01\clip_image005.jpg" href="http://image.rayli.com.cn/7/7005/2008-01-28/images/200812810256213.jpg"&gt; &lt;/v:shape&gt;&lt;![endif]--&gt;&lt;!--[if !vml]--&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;在美国，最受欢迎的电视动画片《辛普森一家》（港译《阿森一族》）已经播到了第&lt;span lang="EN-US"&gt;10&lt;/span&gt;季。&lt;span lang="EN-US"&gt;10&lt;/span&gt;年来，春田镇上的这个五口之家用他们荒诞的经历讽刺着当代美国社会的生活和文化。辛普森一家的形象随着电视剧的走红而成为世界性的流行符号，其中爱捣乱的长子巴特&lt;span lang="EN-US"&gt;?&lt;/span&gt;辛普森已经成为一个大众偶像，连《时代》周刊也将他选为&lt;span lang="EN-US"&gt;“20&lt;/span&gt;世纪演艺界最重要的人物&lt;span lang="EN-US"&gt;”&lt;/span&gt;之一。&lt;span lang="EN-US"&gt; &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;div style="text-align: center;"&gt;  &lt;/div&gt;&lt;p class="MsoNormal"  style="text-indent: 24pt; font-weight: bold; color: rgb(153, 153, 255); text-align: center;font-family:arial;"&gt;&lt;span style="font-size:100%;"&gt;其实巴特在动画片里只能算是令人头痛，捣个乱撒个谎，没事爱跟大人对着干，祸闯大了一样傻眼，这样的小孩世界上何止千千万万，不过当他被推到潮流前线，注册商标就变成了&lt;span lang="EN-US"&gt;“&lt;/span&gt;春田镇的坏男孩（&lt;span lang="EN-US"&gt;Bad boy of Springfield)”&lt;/span&gt;，因为他的坏已经等同于&lt;span lang="EN-US"&gt;“&lt;/span&gt;酷&lt;span lang="EN-US"&gt;”&lt;/span&gt;，&lt;span lang="EN-US"&gt;“&lt;/span&gt;坏&lt;span lang="EN-US"&gt;”&lt;/span&gt;的一面也被特别放大、突出，大家爱就爱他身上一股天不怕地不怕、我是小孩我怕谁的气质。&lt;span lang="EN-US"&gt; &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;div style="text-align: center;"&gt;  &lt;/div&gt;&lt;p class="MsoNormal"  style="text-indent: 24pt; font-weight: bold; color: rgb(153, 153, 255); text-align: center;font-family:arial;"&gt;&lt;span lang="EN-US"  style="font-size:100%;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;div style="text-align: center;"&gt;  &lt;/div&gt;&lt;p class="MsoNormal"  style="font-weight: bold; color: rgb(153, 153, 255); text-align: center;font-family:arial;"&gt;&lt;span style="font-size:100%;"&gt;四、加菲猫&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal"  style="font-weight: bold; color: rgb(153, 153, 255); text-align: center;font-family:arial;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_F6b5Psa149E/R_sKMqwqXfI/AAAAAAAAAQg/A4fWfWRGuaE/s1600-h/1.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://2.bp.blogspot.com/_F6b5Psa149E/R_sKMqwqXfI/AAAAAAAAAQg/A4fWfWRGuaE/s320/1.jpg" alt="" id="BLOGGER_PHOTO_ID_5186750608600358386" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="font-size:100%;"&gt;&lt;span lang="EN-US"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;div style="text-align: center;"&gt;    &lt;/div&gt;&lt;p class="MsoNormal"  style="text-indent: 24pt; font-weight: bold; color: rgb(153, 153, 255); text-align: center;font-family:arial;"&gt;&lt;span lang="EN-US"  style="font-size:100%;"&gt;&lt;!--[if gte vml 1]&gt;&lt;v:shape id="_x0000_i1028" type="#_x0000_t75" alt="10个世界著名的卡通形象" style="'width:252pt;height:165.75pt'" button="t"&gt;  &lt;v:imagedata src="file:///C:\DOCUME~1\stone\LOCALS~1\Temp\msohtml1\01\clip_image007.jpg" href="http://image.rayli.com.cn/7/7005/2008-01-28/images/20081281035994.jpg"&gt; &lt;/v:shape&gt;&lt;![endif]--&gt;&lt;!--[if !vml]--&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;没有一只猫像它一样好吃、自私、贪婪、胆怯、市侩&lt;span lang="EN-US"&gt;……&lt;/span&gt;它的生命中最大的乐趣就是吃和戏弄奥多狗和自己的主人，它就是个有缺点的普通人。&lt;span lang="EN-US"&gt; &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;div style="text-align: center;"&gt;  &lt;/div&gt;&lt;p class="MsoNormal"  style="text-indent: 24pt; font-weight: bold; color: rgb(153, 153, 255); text-align: center;font-family:arial;"&gt;&lt;span style="font-size:100%;"&gt;吉姆&lt;span lang="EN-US"&gt;·&lt;/span&gt;戴维斯只为以狗为主角的漫画太多而不平，便创造了加菲。他将头脑中猫的特性结合祖父詹姆斯&lt;span lang="EN-US"&gt;·&lt;/span&gt;加菲&lt;span lang="EN-US"&gt;?&lt;/span&gt;戴维斯的个性，结果加菲因为漫画形象前所未有的人性化大受欢迎。&lt;span lang="EN-US"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;div style="text-align: center;"&gt;  &lt;/div&gt;&lt;p class="MsoNormal"  style="text-indent: 24pt; font-weight: bold; color: rgb(153, 153, 255); text-align: center;font-family:arial;"&gt;&lt;span style="font-size:100%;"&gt;加菲猫档案：&lt;span lang="EN-US"&gt; &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;div style="text-align: center;"&gt;  &lt;/div&gt;&lt;p class="MsoNormal"  style="text-indent: 24pt; font-weight: bold; color: rgb(153, 153, 255); text-align: center;font-family:arial;"&gt;&lt;span lang="EN-US"  style="font-size:100%;"&gt;●&lt;/span&gt;&lt;span style="font-size:100%;"&gt;出生日期：&lt;st1:chsdate isrocdate="False" islunardate="False" day="19" month="6" year="1978" st="on"&gt;&lt;span lang="EN-US"&gt;1978&lt;/span&gt;年&lt;span lang="EN-US"&gt;6&lt;/span&gt;月&lt;span lang="EN-US"&gt;19&lt;/span&gt;日&lt;/st1:chsdate&gt;&lt;span lang="EN-US"&gt; &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;div style="text-align: center;"&gt;  &lt;/div&gt;&lt;p class="MsoNormal"  style="text-indent: 24pt; font-weight: bold; color: rgb(153, 153, 255); text-align: center;font-family:arial;"&gt;&lt;span lang="EN-US"  style="font-size:100%;"&gt;●&lt;/span&gt;&lt;span style="font-size:100%;"&gt;出生地点：&lt;span lang="EN-US"&gt;Mama Leone &lt;/span&gt;意大利餐厅厨房&lt;span lang="EN-US"&gt; &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;div style="text-align: center;"&gt;  &lt;/div&gt;&lt;p class="MsoNormal"  style="text-indent: 24pt; font-weight: bold; color: rgb(153, 153, 255); text-align: center;font-family:arial;"&gt;&lt;span lang="EN-US"  style="font-size:100%;"&gt;●&lt;/span&gt;&lt;span style="font-size:100%;"&gt;出生体重：&lt;st1:chmetcnv tcsc="0" numbertype="1" negative="False" hasspace="False" sourcevalue="5" unitname="磅" st="on"&gt;&lt;span lang="EN-US"&gt;5&lt;/span&gt;磅&lt;/st1:chmetcnv&gt;&lt;span lang="EN-US"&gt;6&lt;/span&gt;安士&lt;span lang="EN-US"&gt; &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;div style="text-align: center;"&gt;  &lt;/div&gt;&lt;p class="MsoNormal"  style="text-indent: 24pt; font-weight: bold; color: rgb(153, 153, 255); text-align: center;font-family:arial;"&gt;&lt;span lang="EN-US"  style="font-size:100%;"&gt;●&lt;/span&gt;&lt;span style="font-size:100%;"&gt;喜爱食物：意大利面条&lt;span lang="EN-US"&gt; &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;div style="text-align: center;"&gt;  &lt;/div&gt;&lt;p class="MsoNormal"  style="text-indent: 24pt; font-weight: bold; color: rgb(153, 153, 255); text-align: center;font-family:arial;"&gt;&lt;span lang="EN-US"  style="font-size:100%;"&gt;●&lt;/span&gt;&lt;span style="font-size:100%;"&gt;喜爱饮品：咖啡&lt;span lang="EN-US"&gt; &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;div style="text-align: center;"&gt;  &lt;/div&gt;&lt;p class="MsoNormal"  style="text-indent: 24pt; font-weight: bold; color: rgb(153, 153, 255); text-align: center;font-family:arial;"&gt;&lt;span lang="EN-US"  style="font-size:100%;"&gt;●&lt;/span&gt;&lt;span style="font-size:100%;"&gt;玩偶：啤啤熊&lt;span lang="EN-US"&gt;Pooky &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;div style="text-align: center;"&gt;  &lt;/div&gt;&lt;p class="MsoNormal"  style="text-indent: 24pt; font-weight: bold; color: rgb(153, 153, 255); text-align: center;font-family:arial;"&gt;&lt;span lang="EN-US"  style="font-size:100%;"&gt;●&lt;/span&gt;&lt;span style="font-size:100%;"&gt;玩伴：&lt;span lang="EN-US"&gt;Odie&lt;/span&gt;狗&lt;span lang="EN-US"&gt; &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;div style="text-align: center;"&gt;  &lt;/div&gt;&lt;p class="MsoNormal"  style="text-indent: 24pt; font-weight: bold; color: rgb(153, 153, 255); text-align: center;font-family:arial;"&gt;&lt;span lang="EN-US"  style="font-size:100%;"&gt;●&lt;/span&gt;&lt;span style="font-size:100%;"&gt;最讨厌：蜘蛛、邮差&lt;span lang="EN-US"&gt; &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;div style="text-align: center;"&gt;  &lt;/div&gt;&lt;p class="MsoNormal"  style="font-weight: bold; color: rgb(153, 153, 255); text-align: center;font-family:arial;"&gt;&lt;span style="font-size:100%;"&gt;五、机器猫&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" face="arial" style="font-weight: bold; color: rgb(153, 153, 255); text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_F6b5Psa149E/R_sKdqwqXgI/AAAAAAAAAQo/PV8vf5MlPh4/s1600-h/1.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://2.bp.blogspot.com/_F6b5Psa149E/R_sKdqwqXgI/AAAAAAAAAQo/PV8vf5MlPh4/s320/1.jpg" alt="" id="BLOGGER_PHOTO_ID_5186750900658134530" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="font-size:100%;"&gt;&lt;span lang="EN-US"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;div style="text-align: center;"&gt;    &lt;/div&gt;&lt;p class="MsoNormal"  style="text-indent: 24pt; font-weight: bold; color: rgb(153, 153, 255); text-align: center;font-family:arial;"&gt;&lt;span lang="EN-US"  style="font-size:100%;"&gt;&lt;!--[if gte vml 1]&gt;&lt;v:shape id="_x0000_i1029" type="#_x0000_t75" alt="10个世界著名的卡通形象" style="'width:252pt;height:168.75pt'" button="t"&gt;  &lt;v:imagedata src="file:///C:\DOCUME~1\stone\LOCALS~1\Temp\msohtml1\01\clip_image009.jpg" href="http://image.rayli.com.cn/7/7005/2008-01-28/images/200812810318684.jpg"&gt; &lt;/v:shape&gt;&lt;![endif]--&gt;&lt;!--[if !vml]--&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;这是藤子不二雄最经典的漫画，从&lt;span lang="EN-US"&gt;1969&lt;/span&gt;年到&lt;span lang="EN-US"&gt;1996&lt;/span&gt;年，机器猫红了整整&lt;span lang="EN-US"&gt;27&lt;/span&gt;年。来自&lt;span lang="EN-US"&gt;22&lt;/span&gt;世纪，它有一个四维空间袋和无数高科技法宝；它没有耳朵，全身发蓝；最怕老鼠，最爱红豆饼；它有一个比白痴稍强一丁点的主人、自己也不太聪明&lt;span lang="EN-US"&gt;……&lt;/span&gt;可是，我爱机器猫，因为他代表了有难时能全心帮助你的朋友&lt;span lang="EN-US"&gt;--&lt;/span&gt;不论它有没有这本事。&lt;span lang="EN-US"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;div style="text-align: center;"&gt;  &lt;/div&gt;&lt;p class="MsoNormal"  style="text-indent: 24pt; font-weight: bold; color: rgb(153, 153, 255); text-align: center;font-family:arial;"&gt;&lt;span style="font-size:100%;"&gt;机器猫档案：&lt;span lang="EN-US"&gt; &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;div style="text-align: center;"&gt;  &lt;/div&gt;&lt;p class="MsoNormal"  style="text-indent: 24pt; font-weight: bold; color: rgb(153, 153, 255); text-align: center;font-family:arial;"&gt;&lt;span lang="EN-US"  style="font-size:100%;"&gt;●&lt;/span&gt;&lt;span style="font-size:100%;"&gt;出生日期：公元&lt;st1:chsdate isrocdate="False" islunardate="False" day="3" month="9" year="2112" st="on"&gt;&lt;span lang="EN-US"&gt;2112&lt;/span&gt;年&lt;span lang="EN-US"&gt;9&lt;/span&gt;月&lt;span lang="EN-US"&gt;3&lt;/span&gt;日&lt;/st1:chsdate&gt;&lt;span lang="EN-US"&gt; &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;div style="text-align: center;"&gt;  &lt;/div&gt;&lt;p class="MsoNormal"  style="text-indent: 24pt; font-weight: bold; color: rgb(153, 153, 255); text-align: center;font-family:arial;"&gt;&lt;span lang="EN-US"  style="font-size:100%;"&gt;●&lt;/span&gt;&lt;span style="font-size:100%;"&gt;身高：&lt;st1:chmetcnv tcsc="0" numbertype="1" negative="False" hasspace="False" sourcevalue="129.3" unitname="cm" st="on"&gt;&lt;span lang="EN-US"&gt;129.3cm&lt;/span&gt;&lt;/st1:chmetcnv&gt;&lt;span lang="EN-US"&gt; &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;div style="text-align: center;"&gt;  &lt;/div&gt;&lt;p class="MsoNormal"  style="text-indent: 24pt; font-weight: bold; color: rgb(153, 153, 255); text-align: center;font-family:arial;"&gt;&lt;span lang="EN-US"  style="font-size:100%;"&gt;●&lt;/span&gt;&lt;span style="font-size:100%;"&gt;体重：&lt;st1:chmetcnv tcsc="0" numbertype="1" negative="False" hasspace="False" sourcevalue="129.3" unitname="kg" st="on"&gt;&lt;span lang="EN-US"&gt;129.3kg&lt;/span&gt;&lt;/st1:chmetcnv&gt;&lt;span lang="EN-US"&gt; &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;div style="text-align: center;"&gt;  &lt;/div&gt;&lt;p class="MsoNormal"  style="text-indent: 24pt; font-weight: bold; color: rgb(153, 153, 255); text-align: center;font-family:arial;"&gt;&lt;span lang="EN-US"  style="font-size:100%;"&gt;●&lt;/span&gt;&lt;span style="font-size:100%;"&gt;四围：上中下和头围均是&lt;st1:chmetcnv tcsc="0" numbertype="1" negative="False" hasspace="False" sourcevalue="129.3" unitname="cm" st="on"&gt;&lt;span lang="EN-US"&gt;129.3cm&lt;/span&gt;&lt;/st1:chmetcnv&gt;&lt;span lang="EN-US"&gt; &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;div style="text-align: center;"&gt;  &lt;/div&gt;&lt;p class="MsoNormal"  style="text-indent: 24pt; font-weight: bold; color: rgb(153, 153, 255); text-align: center;font-family:arial;"&gt;&lt;span lang="EN-US"  style="font-size:100%;"&gt;●&lt;/span&gt;&lt;span style="font-size:100%;"&gt;马力：&lt;span lang="EN-US"&gt;129.3&lt;/span&gt;匹&lt;span lang="EN-US"&gt; &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;div style="text-align: center;"&gt;  &lt;/div&gt;&lt;p class="MsoNormal"  style="text-indent: 24pt; font-weight: bold; color: rgb(153, 153, 255); text-align: center;font-family:arial;"&gt;&lt;span lang="EN-US"  style="font-size:100%;"&gt;●&lt;/span&gt;&lt;span style="font-size:100%;"&gt;遇见老鼠时跳跃力：&lt;st1:chmetcnv tcsc="0" numbertype="1" negative="False" hasspace="False" sourcevalue="129.3" unitname="cm" st="on"&gt;&lt;span lang="EN-US"&gt;129.3cm&lt;/span&gt;&lt;/st1:chmetcnv&gt;&lt;span lang="EN-US"&gt; &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;div style="text-align: center;"&gt;  &lt;/div&gt;&lt;p class="MsoNormal"  style="text-indent: 24pt; font-weight: bold; color: rgb(153, 153, 255); text-align: center;font-family:arial;"&gt;&lt;span lang="EN-US"  style="font-size:100%;"&gt;●&lt;/span&gt;&lt;span style="font-size:100%;"&gt;时速：每小时&lt;span lang="EN-US"&gt;129.3&lt;/span&gt;公里&lt;span lang="EN-US"&gt; &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;div style="text-align: center;"&gt;  &lt;/div&gt;&lt;p class="MsoNormal"  style="text-indent: 24pt; font-weight: bold; color: rgb(153, 153, 255); text-align: center;font-family:arial;"&gt;&lt;span lang="EN-US"  style="font-size:100%;"&gt;●&lt;/span&gt;&lt;span style="font-size:100%;"&gt;亲戚朋友：大雄、静宜、技安、牙擦仔、妹妹叮铃。&lt;span lang="EN-US"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;div style="text-align: center;"&gt;  &lt;/div&gt;&lt;p class="MsoNormal"  style="text-indent: 24pt; font-weight: bold; color: rgb(153, 153, 255); text-align: center;font-family:arial;"&gt;&lt;span lang="EN-US"  style="font-size:100%;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;div style="text-align: center;"&gt;  &lt;/div&gt;&lt;p class="MsoNormal"  style="text-indent: 24pt; font-weight: bold; color: rgb(153, 153, 255); text-align: center;font-family:arial;"&gt;&lt;span lang="EN-US"  style="font-size:100%;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;div style="text-align: center;"&gt;  &lt;/div&gt;&lt;p class="MsoNormal" face="arial" style="font-weight: bold; color: rgb(153, 153, 255); text-align: center;"&gt;&lt;span style="font-size:100%;"&gt;六、&lt;span lang="EN-US"&gt;Kitty&lt;/span&gt;猫&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" face="arial" style="font-weight: bold; color: rgb(153, 153, 255); text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_F6b5Psa149E/R_sKm6wqXhI/AAAAAAAAAQw/tGedSvFhzmw/s1600-h/2.JPG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://3.bp.blogspot.com/_F6b5Psa149E/R_sKm6wqXhI/AAAAAAAAAQw/tGedSvFhzmw/s320/2.JPG" alt="" id="BLOGGER_PHOTO_ID_5186751059571924498" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="font-size:100%;"&gt;&lt;span lang="EN-US"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;div style="text-align: center;"&gt;    &lt;/div&gt;&lt;p class="MsoNormal"  style="text-indent: 24pt; font-weight: bold; color: rgb(153, 153, 255); text-align: center;font-family:arial;"&gt;&lt;span lang="EN-US"  style="font-size:100%;"&gt;&lt;!--[if gte vml 1]&gt;&lt;v:shape id="_x0000_i1030" type="#_x0000_t75" alt="10个世界著名的卡通形象" style="'width:252pt;height:180.75pt'" button="t"&gt;  &lt;v:imagedata src="file:///C:\DOCUME~1\stone\LOCALS~1\Temp\msohtml1\01\clip_image011.jpg" href="http://image.rayli.com.cn/7/7005/2008-01-28/images/200812810328911.jpg"&gt; &lt;/v:shape&gt;&lt;![endif]--&gt;&lt;!--[if !vml]--&gt;&lt;/span&gt;&lt;span lang="EN-US"  style="font-size:100%;"&gt;Kitty&lt;/span&gt;&lt;span style="font-size:100%;"&gt;是个很女性化的猫（就像加菲的男性化）她干净、温顺、乖巧、无害。&lt;span lang="EN-US"&gt; &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;div style="text-align: center;"&gt;  &lt;/div&gt;&lt;p class="MsoNormal"  style="text-indent: 24pt; font-weight: bold; color: rgb(153, 153, 255); text-align: center;font-family:arial;"&gt;&lt;span lang="EN-US"  style="font-size:100%;"&gt;1974&lt;/span&gt;&lt;span style="font-size:100%;"&gt;年，&lt;span lang="EN-US"&gt;Sanrio&lt;/span&gt;设计师为小钱包设计了一只小白猫，她绑着一条红丝带，名叫&lt;span lang="EN-US"&gt;Hello Kitty&lt;/span&gt;，天生一副明星相。一经出世，她就被印得哪儿都是，各种小文具、儿童用品、服装配饰上都有她的身影。&lt;span lang="EN-US"&gt; &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;div style="text-align: center;"&gt;  &lt;/div&gt;&lt;p class="MsoNormal"  style="text-indent: 24pt; font-weight: bold; color: rgb(153, 153, 255); text-align: center;font-family:arial;"&gt;&lt;span lang="EN-US"  style="font-size:100%;"&gt;Kitty&lt;/span&gt;&lt;span style="font-size:100%;"&gt;档案：&lt;span lang="EN-US"&gt; &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;div style="text-align: center;"&gt;  &lt;/div&gt;&lt;p class="MsoNormal"  style="text-indent: 24pt; font-weight: bold; color: rgb(153, 153, 255); text-align: center;font-family:arial;"&gt;&lt;span lang="EN-US"  style="font-size:100%;"&gt;●&lt;/span&gt;&lt;span style="font-size:100%;"&gt;性格：又&lt;span lang="EN-US"&gt;cute&lt;/span&gt;又温柔、上进有活力&lt;span lang="EN-US"&gt; &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;div style="text-align: center;"&gt;  &lt;/div&gt;&lt;p class="MsoNormal"  style="text-indent: 24pt; font-weight: bold; color: rgb(153, 153, 255); text-align: center;font-family:arial;"&gt;&lt;span lang="EN-US"  style="font-size:100%;"&gt;●&lt;/span&gt;&lt;span style="font-size:100%;"&gt;出生：&lt;st1:chsdate isrocdate="False" islunardate="False" day="1" month="11" year="2008" st="on"&gt;&lt;span lang="EN-US"&gt;11&lt;/span&gt;月&lt;span lang="EN-US"&gt;1&lt;/span&gt;日&lt;/st1:chsdate&gt;，天蝎座&lt;span lang="EN-US"&gt; &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;div style="text-align: center;"&gt;  &lt;/div&gt;&lt;p class="MsoNormal"  style="text-indent: 24pt; font-weight: bold; color: rgb(153, 153, 255); text-align: center;font-family:arial;"&gt;&lt;span lang="EN-US"  style="font-size:100%;"&gt;●&lt;/span&gt;&lt;span style="font-size:100%;"&gt;体重：&lt;span lang="EN-US"&gt;3&lt;/span&gt;个苹果般重&lt;span lang="EN-US"&gt; &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;div style="text-align: center;"&gt;  &lt;/div&gt;&lt;p class="MsoNormal"  style="text-indent: 24pt; font-weight: bold; color: rgb(153, 153, 255); text-align: center;font-family:arial;"&gt;&lt;span lang="EN-US"  style="font-size:100%;"&gt;●&lt;/span&gt;&lt;span style="font-size:100%;"&gt;身高：&lt;span lang="EN-US"&gt;3&lt;/span&gt;个苹果直排&lt;span lang="EN-US"&gt; &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;div style="text-align: center;"&gt;  &lt;/div&gt;&lt;p class="MsoNormal"  style="text-indent: 24pt; font-weight: bold; color: rgb(153, 153, 255); text-align: center;font-family:arial;"&gt;&lt;span lang="EN-US"  style="font-size:100%;"&gt;●&lt;/span&gt;&lt;span style="font-size:100%;"&gt;喜爱食物：苹果派&lt;span lang="EN-US"&gt; &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;div style="text-align: center;"&gt;  &lt;/div&gt;&lt;p class="MsoNormal"  style="text-indent: 24pt; font-weight: bold; color: rgb(153, 153, 255); text-align: center;font-family:arial;"&gt;&lt;span lang="EN-US"  style="font-size:100%;"&gt;●&lt;/span&gt;&lt;span style="font-size:100%;"&gt;专长：火局 曲奇、运动和弹钢琴&lt;span lang="EN-US"&gt; &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;div style="text-align: center;"&gt;  &lt;/div&gt;&lt;p class="MsoNormal"  style="text-indent: 24pt; font-weight: bold; color: rgb(153, 153, 255); text-align: center;font-family:arial;"&gt;&lt;span lang="EN-US"  style="font-size:100%;"&gt;●&lt;/span&gt;&lt;span style="font-size:100%;"&gt;嘴巴：没有，因为可以分享别人的感受&lt;span lang="EN-US"&gt; &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;div style="text-align: center;"&gt;  &lt;/div&gt;&lt;p class="MsoNormal"  style="text-indent: 24pt; font-weight: bold; color: rgb(153, 153, 255); text-align: center;font-family:arial;"&gt;&lt;span lang="EN-US"  style="font-size:100%;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;div style="text-align: center;"&gt;  &lt;/div&gt;&lt;p class="MsoNormal" face="arial" style="font-weight: bold; color: rgb(153, 153, 255); text-align: center;"&gt;&lt;span style="font-size:100%;"&gt;七、米老鼠&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="font-weight: bold; font-family: arial; color: rgb(153, 153, 255); text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_F6b5Psa149E/R_sKtqwqXiI/AAAAAAAAAQ4/gaxxTxZClcQ/s1600-h/1.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://2.bp.blogspot.com/_F6b5Psa149E/R_sKtqwqXiI/AAAAAAAAAQ4/gaxxTxZClcQ/s320/1.jpg" alt="" id="BLOGGER_PHOTO_ID_5186751175536041506" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="font-size:100%;"&gt;&lt;span lang="EN-US"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;div style="text-align: center;"&gt;    &lt;/div&gt;&lt;p class="MsoNormal"  style="text-indent: 24pt; font-weight: bold; color: rgb(153, 153, 255); text-align: center;font-family:arial;"&gt;&lt;span lang="EN-US"  style="font-size:100%;"&gt;&lt;!--[if gte vml 1]&gt;&lt;v:shape id="_x0000_i1031" type="#_x0000_t75" alt="10个世界著名的卡通形象" style="'width:252pt;height:189pt'" button="t"&gt;  &lt;v:imagedata src="file:///C:\DOCUME~1\stone\LOCALS~1\Temp\msohtml1\01\clip_image013.jpg" href="http://image.rayli.com.cn/7/7005/2008-01-28/images/200812810340832.jpg"&gt; &lt;/v:shape&gt;&lt;![endif]--&gt;&lt;!--[if !vml]--&gt;&lt;/span&gt;&lt;span lang="EN-US"  style="font-size:100%;"&gt;1928&lt;/span&gt;&lt;span style="font-size:100%;"&gt;年，米奇诞生于火车上，这源于沃特&lt;span lang="EN-US"&gt;?&lt;/span&gt;迪斯尼的一次心血来潮。刚出道时的米奇顽劣成性。可是随着时间的推移，米奇变成了一个形象可爱、性格温驯的绅士。而迪斯尼王国也由它开始了辉煌的历史。&lt;span lang="EN-US"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;div style="text-align: center;"&gt;  &lt;/div&gt;&lt;p class="MsoNormal"  style="text-indent: 24pt; font-weight: bold; color: rgb(153, 153, 255); text-align: center;font-family:arial;"&gt;&lt;span style="font-size:100%;"&gt;如今，米奇的乐观善良已影响了整个美国乃至整个世界。人们都爱煞了这个整天傻笑的胖老鼠。&lt;span lang="EN-US"&gt; &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;div style="text-align: center;"&gt;  &lt;/div&gt;&lt;p class="MsoNormal"  style="text-indent: 24pt; font-weight: bold; color: rgb(153, 153, 255); text-align: center;font-family:arial;"&gt;&lt;span style="font-size:100%;"&gt;米老鼠档案：&lt;span lang="EN-US"&gt; &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;div style="text-align: center;"&gt;  &lt;/div&gt;&lt;p class="MsoNormal"  style="text-indent: 24pt; font-weight: bold; color: rgb(153, 153, 255); text-align: center;font-family:arial;"&gt;&lt;span lang="EN-US"  style="font-size:100%;"&gt;●&lt;/span&gt;&lt;span style="font-size:100%;"&gt;米奇老鼠是于&lt;st1:chsdate isrocdate="False" islunardate="False" day="18" month="11" year="1928" st="on"&gt;&lt;span lang="EN-US"&gt;1928&lt;/span&gt;年&lt;span lang="EN-US"&gt;11&lt;/span&gt;月&lt;span lang="EN-US"&gt;18&lt;/span&gt;日&lt;/st1:chsdate&gt;初登银幕，电影名《&lt;span lang="EN-US"&gt;Steamboat Willie&lt;/span&gt;》。&lt;span lang="EN-US"&gt; &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;div style="text-align: center;"&gt;  &lt;/div&gt;&lt;p class="MsoNormal"  style="text-indent: 24pt; font-weight: bold; color: rgb(153, 153, 255); text-align: center;font-family:arial;"&gt;&lt;span lang="EN-US"  style="font-size:100%;"&gt;●&lt;/span&gt;&lt;span style="font-size:100%;"&gt;米奇老鼠是第一只商品化的卡通角色，时为&lt;span lang="EN-US"&gt;1929&lt;/span&gt;年。同年，米奇老鼠拥有了&lt;span lang="EN-US"&gt;Mickey Mouse Club&lt;/span&gt;。&lt;span lang="EN-US"&gt; &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;div style="text-align: center;"&gt;  &lt;/div&gt;&lt;p class="MsoNormal"  style="text-indent: 24pt; font-weight: bold; color: rgb(153, 153, 255); text-align: center;font-family:arial;"&gt;&lt;span lang="EN-US"  style="font-size:100%;"&gt;●1955&lt;/span&gt;&lt;span style="font-size:100%;"&gt;年开始，米奇老鼠移居迪斯尼乐园做亲善大使，接待&lt;span lang="EN-US"&gt; &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;div style="text-align: center;"&gt;  &lt;/div&gt;&lt;p class="MsoNormal"  style="text-indent: 24pt; font-weight: bold; color: rgb(153, 153, 255); text-align: center;font-family:arial;"&gt;&lt;span style="font-size:100%;"&gt;中外名人不计其数。&lt;span lang="EN-US"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;div style="text-align: center;"&gt;  &lt;/div&gt;&lt;p class="MsoNormal"  style="text-indent: 24pt; font-weight: bold; color: rgb(153, 153, 255); text-align: center;font-family:arial;"&gt;&lt;span lang="EN-US"  style="font-size:100%;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;div style="text-align: center;"&gt;  &lt;/div&gt;&lt;p class="MsoNormal" style="font-weight: bold; font-family: arial; color: rgb(153, 153, 255); text-align: center;"&gt;&lt;span style="font-size:100%;"&gt;八、史努比&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="font-weight: bold; font-family: arial; color: rgb(153, 153, 255); text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_F6b5Psa149E/R_sLA6wqXjI/AAAAAAAAARA/b5yZRqBHhv0/s1600-h/1.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://3.bp.blogspot.com/_F6b5Psa149E/R_sLA6wqXjI/AAAAAAAAARA/b5yZRqBHhv0/s320/1.jpg" alt="" id="BLOGGER_PHOTO_ID_5186751506248523314" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="font-size:100%;"&gt;&lt;span lang="EN-US"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;div style="text-align: center;"&gt;  &lt;/div&gt;&lt;p class="MsoNormal" style="font-weight: bold; font-family: arial; color: rgb(153, 153, 255); text-align: center;"&gt;&lt;span lang="EN-US"  style="font-size:100%;"&gt;&lt;!--[if gte vml 1]&gt;&lt;v:shape id="_x0000_i1032" type="#_x0000_t75" alt="10个世界著名的卡通形象" style="'width:252pt;height:197.25pt'" button="t"&gt;  &lt;v:imagedata src="file:///C:\DOCUME~1\stone\LOCALS~1\Temp\msohtml1\01\clip_image015.jpg" href="http://image.rayli.com.cn/7/7005/2008-01-28/images/200812810352630.jpg"&gt; &lt;/v:shape&gt;&lt;![endif]--&gt;&lt;!--[if !vml]--&gt;&lt;img src="file:///C:/DOCUME%7E1/stone/LOCALS%7E1/Temp/msohtml1/01/clip_image016.jpg" alt="10个世界著名的卡通形象" shapes="_x0000_i1032" height="263" width="336" /&gt;&lt;!--[endif]--&gt;&lt;/span&gt;&lt;span lang="EN-US"  style="font-size:100%;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;div style="text-align: center;"&gt;  &lt;/div&gt;&lt;p class="MsoNormal"  style="text-indent: 24pt; font-weight: bold; color: rgb(153, 153, 255); text-align: center;font-family:arial;"&gt;&lt;span style="font-size:100%;"&gt;去年，史努比的创造者查尔斯&lt;span lang="EN-US"&gt;·M·&lt;/span&gt;舒尔兹离开人世。而由于没有合适的继承者，伴随人们&lt;span lang="EN-US"&gt;50&lt;/span&gt;年的史努比的故事也落了幕，令人不胜唏嘘。是呀，谁还能接手为这个有思想、有内涵的小狗注入新的生命，继续它的冷静，多愁善感，善解人意，而且从不认为自己是只狗？&lt;span lang="EN-US"&gt; &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;div style="text-align: center;"&gt;  &lt;/div&gt;&lt;p class="MsoNormal"  style="text-indent: 24pt; font-weight: bold; color: rgb(153, 153, 255); text-align: center;font-family:arial;"&gt;&lt;span style="font-size:100%;"&gt;史努比档案：&lt;span lang="EN-US"&gt; &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;div style="text-align: center;"&gt;  &lt;/div&gt;&lt;p class="MsoNormal"  style="text-indent: 24pt; font-weight: bold; color: rgb(153, 153, 255); text-align: center;font-family:arial;"&gt;&lt;span lang="EN-US"  style="font-size:100%;"&gt;●&lt;/span&gt;&lt;span style="font-size:100%;"&gt;史努比的父亲曾于&lt;st1:chsdate isrocdate="False" islunardate="False" day="18" month="6" year="1989" st="on"&gt;&lt;span lang="EN-US"&gt;1989&lt;/span&gt;年&lt;span lang="EN-US"&gt;6&lt;/span&gt;月&lt;span lang="EN-US"&gt;18&lt;/span&gt;日&lt;/st1:chsdate&gt;连载的《花生》中出现过，提及它有&lt;span lang="EN-US"&gt;8&lt;/span&gt;名子女，但至今只出现&lt;span lang="EN-US"&gt;6&lt;/span&gt;名史努比家族成员，包括哥哥&lt;span lang="EN-US"&gt;Spike&lt;/span&gt;、妹妹&lt;span lang="EN-US"&gt;Belle&lt;/span&gt;、弟弟&lt;span lang="EN-US"&gt;Marbles&lt;/span&gt;、&lt;span lang="EN-US"&gt;Olaf&lt;/span&gt;、&lt;span lang="EN-US"&gt;Andy&lt;/span&gt;。&lt;span lang="EN-US"&gt; &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;div style="text-align: center;"&gt;  &lt;/div&gt;&lt;p class="MsoNormal"  style="text-indent: 24pt; font-weight: bold; color: rgb(153, 153, 255); text-align: center;font-family:arial;"&gt;&lt;span lang="EN-US"  style="font-size:100%;"&gt;●1970&lt;/span&gt;&lt;span style="font-size:100%;"&gt;年，史努比雇用了一只季候鸟当秘书，便是胡士托。&lt;span lang="EN-US"&gt; &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;div style="text-align: center;"&gt;  &lt;/div&gt;&lt;p class="MsoNormal"  style="text-indent: 24pt; font-weight: bold; color: rgb(153, 153, 255); text-align: center;font-family:arial;"&gt;&lt;span lang="EN-US"  style="font-size:100%;"&gt;●&lt;/span&gt;&lt;span style="font-size:100%;"&gt;史努比最讨厌的就是邻居的小猫&lt;span lang="EN-US"&gt;WWLL&lt;/span&gt;。&lt;span lang="EN-US"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;div style="text-align: center;"&gt;  &lt;/div&gt;&lt;p class="MsoNormal"  style="text-indent: 24pt; font-weight: bold; color: rgb(153, 153, 255); text-align: center;font-family:arial;"&gt;&lt;span lang="EN-US"  style="font-size:100%;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;div style="text-align: center;"&gt;  &lt;/div&gt;&lt;p class="MsoNormal" style="font-weight: bold; font-family: arial; color: rgb(153, 153, 255); text-align: center;"&gt;&lt;span style="font-size:100%;"&gt;九、芝麻街&lt;span lang="EN-US"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;div style="text-align: center;"&gt;  &lt;/div&gt;&lt;p class="MsoNormal" style="font-weight: bold; font-family: arial; color: rgb(153, 153, 255); text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_F6b5Psa149E/R_sLPKwqXkI/AAAAAAAAARI/LoKbl4dC-5Q/s1600-h/2.JPG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://4.bp.blogspot.com/_F6b5Psa149E/R_sLPKwqXkI/AAAAAAAAARI/LoKbl4dC-5Q/s320/2.JPG" alt="" id="BLOGGER_PHOTO_ID_5186751751061659202" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;div style="text-align: center;"&gt;  &lt;/div&gt;&lt;p class="MsoNormal"  style="text-indent: 24pt; font-weight: bold; color: rgb(153, 153, 255); text-align: center;font-family:arial;"&gt;&lt;span style="font-size:100%;"&gt;它们挑战着人类的传统美学。玩具设计大师&lt;span lang="EN-US"&gt;Jim Henson&lt;/span&gt;和&lt;span lang="EN-US"&gt;FrankOz&lt;/span&gt;一同制作了《芝麻街》。&lt;span lang="EN-US"&gt;60&lt;/span&gt;年代，泛世界观念的人们将一切人为界限打破，支持美的形式多种多样。&lt;span lang="EN-US"&gt;1969&lt;/span&gt;年，一个义务教育团体&lt;span lang="EN-US"&gt;Children's TelevisionWorkshop&lt;/span&gt;（&lt;span lang="EN-US"&gt;CTW&lt;/span&gt;）制作播出了《芝麻街》寓教于乐。一大帮怪兽通过不同人物的故事，藉唱歌、讲故事向孩子们软说教，形象自然深入人心。&lt;span lang="EN-US"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;div style="text-align: center;"&gt;  &lt;/div&gt;&lt;p class="MsoNormal"  style="text-indent: 24pt; font-weight: bold; color: rgb(153, 153, 255); text-align: center;font-family:arial;"&gt;&lt;span lang="EN-US"  style="font-size:100%;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;div style="text-align: center;"&gt;  &lt;/div&gt;&lt;p class="MsoNormal" style="font-weight: bold; font-family: arial; color: rgb(153, 153, 255); text-align: center;"&gt;&lt;span style="font-size:100%;"&gt;十、泰迪熊&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="font-weight: bold; font-family: arial; color: rgb(153, 153, 255); text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_F6b5Psa149E/R_sLgawqXlI/AAAAAAAAARQ/mK_58W7lVRY/s1600-h/2.JPG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://1.bp.blogspot.com/_F6b5Psa149E/R_sLgawqXlI/AAAAAAAAARQ/mK_58W7lVRY/s320/2.JPG" alt="" id="BLOGGER_PHOTO_ID_5186752047414402642" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="font-size:100%;"&gt;&lt;span lang="EN-US"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;div style="text-align: center;"&gt;    &lt;/div&gt;&lt;p class="MsoNormal"  style="text-indent: 24pt; font-weight: bold; color: rgb(153, 153, 255); text-align: center;font-family:arial;"&gt;&lt;span lang="EN-US"  style="font-size:100%;"&gt;&lt;!--[if gte vml 1]&gt;&lt;v:shape id="_x0000_i1034" type="#_x0000_t75" alt="10个世界著名的卡通形象" style="'width:315pt;height:236.25pt'" button="t"&gt;  &lt;v:imagedata src="file:///C:\DOCUME~1\stone\LOCALS~1\Temp\msohtml1\01\clip_image019.jpg" href="http://image.rayli.com.cn/7/7005/2008-01-28/images/200812810415795.jpg"&gt; &lt;/v:shape&gt;&lt;![endif]--&gt;&lt;!--[if !vml]--&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;它的名字和走红得多谢一位总统&lt;span lang="EN-US"&gt;--&lt;/span&gt;老罗斯福。&lt;span lang="EN-US"&gt;1902&lt;/span&gt;年这位总统拒绝用枪射杀一只被当成靶子绑在树上的小熊，而成为有爱心的代表。而布鲁克林的一位文具店的老板因而触发灵感，将太太制作的两只小熊命名为&lt;span lang="EN-US"&gt;Teddy&lt;/span&gt;（这是总统的昵称，当然毫无讽刺之意）并展示在橱窗内，谁知，这一下红了近百年。&lt;span lang="EN-US"&gt; &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;div style="text-align: center;"&gt;  &lt;/div&gt;&lt;p class="MsoNormal"  style="text-indent: 24pt; font-weight: bold; color: rgb(153, 153, 255); text-align: center;font-family:arial;"&gt;&lt;span style="font-size:100%;"&gt;泰迪熊自然粗糙的质感和呆板的眼神，可能是它惹人怜爱的原因。&lt;span lang="EN-US"&gt; &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;div style="text-align: center;"&gt;  &lt;/div&gt;&lt;p class="MsoNormal"  style="text-indent: 24pt; font-weight: bold; color: rgb(153, 153, 255); text-align: center;font-family:arial;"&gt;&lt;span style="font-size:100%;"&gt;泰迪熊档案：&lt;span lang="EN-US"&gt; &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;div style="text-align: center;"&gt;  &lt;/div&gt;&lt;p class="MsoNormal"  style="text-indent: 24pt; font-weight: bold; color: rgb(153, 153, 255); text-align: center;font-family:arial;"&gt;&lt;span lang="EN-US"  style="font-size:100%;"&gt;●&lt;/span&gt;&lt;span style="font-size:100%;"&gt;三大名厂：德国&lt;span lang="EN-US"&gt;Steiff&lt;/span&gt;、英国&lt;span lang="EN-US"&gt;Merrythought&lt;/span&gt;及&lt;span lang="EN-US"&gt;Hermann&lt;/span&gt;三大厂限量生产的&lt;span lang="EN-US"&gt;Teddy Bear&lt;/span&gt;最富炒卖价值。 &lt;span lang="EN-US"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;div style="text-align: center;"&gt;                &lt;span style="font-weight: bold; color: rgb(153, 153, 255);font-family:宋体;font-size:100%;"  lang="EN-US" &gt;●&lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(153, 153, 255);font-family:宋体;font-size:100%;"  &gt;一世熊友：欧洲有在婴儿出生时送他一只小熊的传统，陪伴他成长，是他一生的朋友。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;转自：网络蚯蚓~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7598811904790233931-369582113751177704?l=stonestrange.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://stonestrange.blogspot.com/feeds/369582113751177704/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7598811904790233931&amp;postID=369582113751177704' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7598811904790233931/posts/default/369582113751177704'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7598811904790233931/posts/default/369582113751177704'/><link rel='alternate' type='text/html' href='http://stonestrange.blogspot.com/2008/04/10.html' title='[转]10个世界著名的卡通形象'/><author><name>stonestrange</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp1.blogger.com/_F6b5Psa149E/R_sMtqwqXnI/AAAAAAAAARc/3tAdCOe1r_o/S220/%E5%A4%8D%E4%BB%B6+11023341.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_F6b5Psa149E/R_sJJKwqXcI/AAAAAAAAAQI/CUsxPBfZM-k/s72-c/1.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7598811904790233931.post-1240631984069510868</id><published>2008-04-07T22:42:00.000-07:00</published><updated>2008-04-07T22:48:55.886-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='coding_java'/><title type='text'>java解析xml</title><content type='html'>&lt;span style="color: rgb(153, 153, 255);font-size:100%;" &gt;&lt;span style="font-family: arial;"&gt;在这段代码中~~~~我解析的是海词提供的xml~~~~~~~~~~~~~运行环境是Eclipse~~~~~~~~~~不过在编码部分还存在一定的问题~~~~~~~~~有待努力~~~~~~~继续提高~~~~~~~~~~嘿嘿~~~~~~~~~~~~~~~&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: arial;"&gt;import org.xml.sax.*;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: arial;"&gt;import org.xml.sax.helpers.*;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: arial;"&gt;import javax.xml.parsers.*;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: arial;"&gt;public class MyXMLReader extends DefaultHandler {&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: arial;"&gt;    java.util.Stack tags = new java.util.Stack();&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: arial;"&gt;    private String currentName;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: arial;"&gt;    private StringBuffer currentValue = new StringBuffer();&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: arial;"&gt;    public MyXMLReader() {&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: arial;"&gt;        super();&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: arial;"&gt;    }&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: arial;"&gt;    public void startElement(String uri, String localName, String qName,&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: arial;"&gt;            Attributes attributes)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: arial;"&gt;    throws SAXException {&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: arial;"&gt;    }&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: arial;"&gt;    public void characters(char ch[], int start, int length)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: arial;"&gt;            throws SAXException {&lt;/span&gt;&lt;span style="font-family: arial;"&gt;&lt;/span&gt;&lt;span style="font-family: arial;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: arial;"&gt;        System.out.println(new String(ch,start,length));&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: arial;"&gt;    }&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: arial;"&gt;    &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: arial;"&gt;    public void endElement(String uri, String localName, String qName) throws SAXException { &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: arial;"&gt;        //props.put(qName.toLowerCase(), currentValue.toString().trim()); &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: arial;"&gt;        } &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: arial;"&gt;    public static void main(String args[]) {&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: arial;"&gt;        try {&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: arial;"&gt;            SAXParserFactory sf = SAXParserFactory.newInstance();&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: arial;"&gt;            SAXParser sp = sf.newSAXParser();&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: arial;"&gt;            MyXMLReader reader = new MyXMLReader();&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: arial;"&gt;            sp.parse(new InputSource("http://dict.cn/ws.php?q=stone"), reader);&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: arial;"&gt;        } catch (Exception e) {&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: arial;"&gt;            //e.printStackTrace();&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: arial;"&gt;        }&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: arial;"&gt;    }&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: arial;"&gt;}&lt;/span&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7598811904790233931-1240631984069510868?l=stonestrange.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://stonestrange.blogspot.com/feeds/1240631984069510868/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7598811904790233931&amp;postID=1240631984069510868' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7598811904790233931/posts/default/1240631984069510868'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7598811904790233931/posts/default/1240631984069510868'/><link rel='alternate' type='text/html' href='http://stonestrange.blogspot.com/2008/04/javaxml.html' title='java解析xml'/><author><name>stonestrange</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp1.blogger.com/_F6b5Psa149E/R_sMtqwqXnI/AAAAAAAAARc/3tAdCOe1r_o/S220/%E5%A4%8D%E4%BB%B6+11023341.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7598811904790233931.post-2649047897904202375</id><published>2008-04-07T22:40:00.000-07:00</published><updated>2008-04-07T22:42:06.025-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='coding_java'/><title type='text'>[转]在Java中调用C语言生成的DLL文件</title><content type='html'>&lt;p style="text-indent: 2em; font-family: arial; color: rgb(153, 153, 255);"&gt;&lt;span style="font-size:100%;"&gt;一、JAVA中所需要做的工作 &lt;/span&gt;&lt;/p&gt; &lt;p style="text-indent: 2em; font-family: arial; color: rgb(153, 153, 255);"&gt;&lt;span style="font-size:100%;"&gt;在JAVA程序中，&lt;a href="http://action.vogate.com/c/c.php?r=http%3A//www.google.cn/search%3Fhl%3Dzh-CN%26q%3Djava+%25E8%25B0%2583%25E7%2594%25A8+c%26meta%3D%26aq%3D0%26oq%3Djava+%25E8%25B0%2583%25E7%2594%25A8%25E3%2580%2580c&amp;amp;aid=5717&amp;amp;sid=6235007045041189&amp;amp;click=1&amp;amp;url=http%3A//www.022nz.com/fkzx/&amp;amp;v=0&amp;amp;s=http%3A//www.programfan.com/article/showarticle.asp%3Fid%3D1660&amp;amp;rn=686917&amp;amp;k=%u9996%u5148"&gt;首先&lt;/a&gt;需要在类中声明所调用的库名称，如下： &lt;/span&gt;&lt;/p&gt; &lt;p style="text-indent: 2em; font-family: arial; color: rgb(153, 153, 255);"&gt;&lt;span style="font-size:100%;"&gt;static { &lt;/span&gt;&lt;/p&gt; &lt;p style="text-indent: 2em; font-family: arial; color: rgb(153, 153, 255);"&gt;&lt;span style="font-size:100%;"&gt;System.loadLibrary(“goodluck”); &lt;/span&gt;&lt;/p&gt; &lt;p style="text-indent: 2em; font-family: arial; color: rgb(153, 153, 255);"&gt;&lt;span style="font-size:100%;"&gt;} &lt;/span&gt;&lt;/p&gt; &lt;p style="text-indent: 2em; font-family: arial; color: rgb(153, 153, 255);"&gt;&lt;span style="font-size:100%;"&gt;在这里，库的扩展&lt;a href="http://action.vogate.com/c/c.php?r=http%3A//www.google.cn/search%3Fhl%3Dzh-CN%26q%3Djava+%25E8%25B0%2583%25E7%2594%25A8+c%26meta%3D%26aq%3D0%26oq%3Djava+%25E8%25B0%2583%25E7%2594%25A8%25E3%2580%2580c&amp;amp;aid=4523&amp;amp;sid=6235007045041189&amp;amp;click=1&amp;amp;url=http%3A//www.qqdiao.cn&amp;amp;v=0&amp;amp;s=http%3A//www.programfan.com/article/showarticle.asp%3Fid%3D1660&amp;amp;rn=172300&amp;amp;k=%u540D%u5B57"&gt;名字&lt;/a&gt;可以不用写出来，究竟是DLL还是SO，由系统自己判断。 &lt;/span&gt;&lt;/p&gt; &lt;p style="text-indent: 2em; font-family: arial; color: rgb(153, 153, 255);"&gt;&lt;span style="font-size:100%;"&gt;还需要对将要调用的方法做本地声明，关键字为native。并且只需要声明，而不需要具体实现。如下： &lt;/span&gt;&lt;/p&gt; &lt;p style="text-indent: 2em; font-family: arial; color: rgb(153, 153, 255);"&gt;&lt;span style="font-size:100%;"&gt;public native static void set(int i); &lt;/span&gt;&lt;/p&gt; &lt;p style="text-indent: 2em; font-family: arial; color: rgb(153, 153, 255);"&gt;&lt;span style="font-size:100%;"&gt;public native static int get(); &lt;/span&gt;&lt;/p&gt; &lt;p style="text-indent: 2em; font-family: arial; color: rgb(153, 153, 255);"&gt;&lt;span style="font-size:100%;"&gt;然后编译该JAVA程序文件，生成CLASS，再用JAVAH&lt;a href="http://action.vogate.com/c/c.php?r=http%3A//www.google.cn/search%3Fhl%3Dzh-CN%26q%3Djava+%25E8%25B0%2583%25E7%2594%25A8+c%26meta%3D%26aq%3D0%26oq%3Djava+%25E8%25B0%2583%25E7%2594%25A8%25E3%2580%2580c&amp;amp;aid=1180&amp;amp;sid=6235007045041189&amp;amp;click=1&amp;amp;url=http%3A//www.linuxgo.org&amp;amp;v=0&amp;amp;s=http%3A//www.programfan.com/article/showarticle.asp%3Fid%3D1660&amp;amp;rn=292331&amp;amp;k=%u547D%u4EE4"&gt;命令&lt;/a&gt;，JNI就会生成C/C++的头文件。 &lt;/span&gt;&lt;/p&gt; &lt;p style="text-indent: 2em; font-family: arial; color: rgb(153, 153, 255);"&gt;&lt;span style="font-size:100%;"&gt;例如程序testdll.java，内容为： &lt;/span&gt;&lt;/p&gt; &lt;p style="text-indent: 2em; font-family: arial; color: rgb(153, 153, 255);"&gt;&lt;span style="font-size:100%;"&gt;public class testdll &lt;/span&gt;&lt;/p&gt; &lt;p style="text-indent: 2em; font-family: arial; color: rgb(153, 153, 255);"&gt;&lt;span style="font-size:100%;"&gt;{ &lt;/span&gt;&lt;/p&gt; &lt;p style="text-indent: 2em; font-family: arial; color: rgb(153, 153, 255);"&gt;&lt;span style="font-size:100%;"&gt;static &lt;/span&gt;&lt;/p&gt; &lt;p style="text-indent: 2em; font-family: arial; color: rgb(153, 153, 255);"&gt;&lt;span style="font-size:100%;"&gt;{ &lt;/span&gt;&lt;/p&gt; &lt;p style="text-indent: 2em; font-family: arial; color: rgb(153, 153, 255);"&gt;&lt;span style="font-size:100%;"&gt;System.loadLibrary("goodluck"); &lt;/span&gt;&lt;/p&gt; &lt;p style="text-indent: 2em; font-family: arial; color: rgb(153, 153, 255);"&gt;&lt;span style="font-size:100%;"&gt;} &lt;/span&gt;&lt;/p&gt; &lt;p style="text-indent: 2em; font-family: arial; color: rgb(153, 153, 255);"&gt;&lt;span style="font-size:100%;"&gt;public native static int get(); &lt;/span&gt;&lt;/p&gt; &lt;p style="text-indent: 2em; font-family: arial; color: rgb(153, 153, 255);"&gt;&lt;span style="font-size:100%;"&gt;public native static void set(int i); &lt;/span&gt;&lt;/p&gt; &lt;p style="text-indent: 2em; font-family: arial; color: rgb(153, 153, 255);"&gt;&lt;span style="font-size:100%;"&gt;public static void main(String[] args) &lt;/span&gt;&lt;/p&gt; &lt;p style="text-indent: 2em; font-family: arial; color: rgb(153, 153, 255);"&gt;&lt;span style="font-size:100%;"&gt;{ &lt;/span&gt;&lt;/p&gt; &lt;p style="text-indent: 2em; font-family: arial; color: rgb(153, 153, 255);"&gt;&lt;span style="font-size:100%;"&gt;testdll test = new testdll(); &lt;/span&gt;&lt;/p&gt; &lt;p style="text-indent: 2em; font-family: arial; color: rgb(153, 153, 255);"&gt;&lt;span style="font-size:100%;"&gt;test.set(10); &lt;/span&gt;&lt;/p&gt; &lt;p style="text-indent: 2em; font-family: arial; color: rgb(153, 153, 255);"&gt;&lt;span style="font-size:100%;"&gt;System.out.println(test.get()); &lt;/span&gt;&lt;/p&gt; &lt;p style="text-indent: 2em; font-family: arial; color: rgb(153, 153, 255);"&gt;&lt;span style="font-size:100%;"&gt;} &lt;/span&gt;&lt;/p&gt; &lt;p style="text-indent: 2em; font-family: arial; color: rgb(153, 153, 255);"&gt;&lt;span style="font-size:100%;"&gt;} &lt;/span&gt;&lt;/p&gt; &lt;p style="text-indent: 2em; font-family: arial; color: rgb(153, 153, 255);"&gt;&lt;span style="font-size:100%;"&gt;用javac testdll.java编译它，会生成testdll.class。 &lt;/span&gt;&lt;/p&gt; &lt;p style="text-indent: 2em; font-family: arial; color: rgb(153, 153, 255);"&gt;&lt;span style="font-size:100%;"&gt;再用javah testdll，则会在当前目录下生成testdll.h文件，这个文件需要被C/C++程序调用来生成所需的库文件。 &lt;/span&gt;&lt;/p&gt; &lt;p style="text-indent: 2em; font-family: arial; color: rgb(153, 153, 255);"&gt;&lt;span style="font-size:100%;"&gt;二、C/C++中所需要做的工作 &lt;/span&gt;&lt;/p&gt; &lt;p style="text-indent: 2em; font-family: arial; color: rgb(153, 153, 255);"&gt;&lt;span style="font-size:100%;"&gt;对于已生成的.h头文件，C/C++所需要做的，就是把它的各个方法具体的实现。然后编译连接成库文件即可。再把库文件拷贝到JAVA程序的路径下面，就可以用JAVA调用C/C++所实现的功能了。 &lt;/span&gt;&lt;/p&gt; &lt;p style="text-indent: 2em; font-family: arial; color: rgb(153, 153, 255);"&gt;&lt;span style="font-size:100%;"&gt;接上例子。我们先看一下testdll.h文件的内容： &lt;/span&gt;&lt;/p&gt; &lt;p style="text-indent: 2em; font-family: arial; color: rgb(153, 153, 255);"&gt;&lt;span style="font-size:100%;"&gt;/* DO NOT EDIT THIS FILE - it is machine generated */ &lt;/span&gt;&lt;/p&gt; &lt;p style="text-indent: 2em; font-family: arial; color: rgb(153, 153, 255);"&gt;&lt;span style="font-size:100%;"&gt;#include &lt;jni.h&gt; &lt;/span&gt;&lt;/p&gt; &lt;p style="text-indent: 2em; font-family: arial; color: rgb(153, 153, 255);"&gt;&lt;span style="font-size:100%;"&gt;/* Header for class testdll */ &lt;/span&gt;&lt;/p&gt; &lt;p style="text-indent: 2em; font-family: arial; color: rgb(153, 153, 255);"&gt;&lt;span style="font-size:100%;"&gt;#ifndef _Included_testdll &lt;/span&gt;&lt;/p&gt; &lt;p style="text-indent: 2em; font-family: arial; color: rgb(153, 153, 255);"&gt;&lt;span style="font-size:100%;"&gt;#define _Included_testdll &lt;/span&gt;&lt;/p&gt; &lt;p style="text-indent: 2em; font-family: arial; color: rgb(153, 153, 255);"&gt;&lt;span style="font-size:100%;"&gt;#ifdef __cplusplus &lt;/span&gt;&lt;/p&gt; &lt;p style="text-indent: 2em; font-family: arial; color: rgb(153, 153, 255);"&gt;&lt;span style="font-size:100%;"&gt;extern "C" { &lt;/span&gt;&lt;/p&gt; &lt;p style="text-indent: 2em; font-family: arial; color: rgb(153, 153, 255);"&gt;&lt;span style="font-size:100%;"&gt;#endif &lt;/span&gt;&lt;/p&gt; &lt;p style="text-indent: 2em; font-family: arial; color: rgb(153, 153, 255);"&gt;&lt;span style="font-size:100%;"&gt;/* &lt;/span&gt;&lt;/p&gt; &lt;p style="text-indent: 2em; font-family: arial; color: rgb(153, 153, 255);"&gt;&lt;span style="font-size:100%;"&gt;* Class: testdll &lt;/span&gt;&lt;/p&gt; &lt;p style="text-indent: 2em; font-family: arial; color: rgb(153, 153, 255);"&gt;&lt;span style="font-size:100%;"&gt;* Method: get &lt;/span&gt;&lt;/p&gt; &lt;p style="text-indent: 2em; font-family: arial; color: rgb(153, 153, 255);"&gt;&lt;span style="font-size:100%;"&gt;* Signature: ()I &lt;/span&gt;&lt;/p&gt; &lt;p style="text-indent: 2em; font-family: arial; color: rgb(153, 153, 255);"&gt;&lt;span style="font-size:100%;"&gt;*/ &lt;/span&gt;&lt;/p&gt; &lt;p style="text-indent: 2em; font-family: arial; color: rgb(153, 153, 255);"&gt;&lt;span style="font-size:100%;"&gt;JNIEXPORT jint JNICALL Java_testdll_get &lt;/span&gt;&lt;/p&gt; &lt;p style="text-indent: 2em; font-family: arial; color: rgb(153, 153, 255);"&gt;&lt;span style="font-size:100%;"&gt;(JNIEnv *, jclass); &lt;/span&gt;&lt;/p&gt; &lt;p style="text-indent: 2em; font-family: arial; color: rgb(153, 153, 255);"&gt;&lt;span style="font-size:100%;"&gt;/* &lt;/span&gt;&lt;/p&gt; &lt;p style="text-indent: 2em; font-family: arial; color: rgb(153, 153, 255);"&gt;&lt;span style="font-size:100%;"&gt;* Class: testdll &lt;/span&gt;&lt;/p&gt; &lt;p style="text-indent: 2em; font-family: arial; color: rgb(153, 153, 255);"&gt;&lt;span style="font-size:100%;"&gt;* Method: set &lt;/span&gt;&lt;/p&gt; &lt;p style="text-indent: 2em; font-family: arial; color: rgb(153, 153, 255);"&gt;&lt;span style="font-size:100%;"&gt;* Signature: (I)V &lt;/span&gt;&lt;/p&gt; &lt;p style="text-indent: 2em; font-family: arial; color: rgb(153, 153, 255);"&gt;&lt;span style="font-size:100%;"&gt;*/ &lt;/span&gt;&lt;/p&gt; &lt;p style="text-indent: 2em; font-family: arial; color: rgb(153, 153, 255);"&gt;&lt;span style="font-size:100%;"&gt;JNIEXPORT void JNICALL Java_testdll_set &lt;/span&gt;&lt;/p&gt; &lt;p style="text-indent: 2em; font-family: arial; color: rgb(153, 153, 255);"&gt;&lt;span style="font-size:100%;"&gt;(JNIEnv *, jclass, jint); &lt;/span&gt;&lt;/p&gt; &lt;p style="text-indent: 2em; font-family: arial; color: rgb(153, 153, 255);"&gt;&lt;span style="font-size:100%;"&gt;#ifdef __cplusplus &lt;/span&gt;&lt;/p&gt; &lt;p style="text-indent: 2em; font-family: arial; color: rgb(153, 153, 255);"&gt;&lt;span style="font-size:100%;"&gt;} &lt;/span&gt;&lt;/p&gt; &lt;p style="text-indent: 2em; font-family: arial; color: rgb(153, 153, 255);"&gt;&lt;span style="font-size:100%;"&gt;#endif &lt;/span&gt;&lt;/p&gt; &lt;p style="text-indent: 2em; font-family: arial; color: rgb(153, 153, 255);"&gt;&lt;span style="font-size:100%;"&gt;#endif &lt;/span&gt;&lt;/p&gt; &lt;p style="text-indent: 2em; font-family: arial; color: rgb(153, 153, 255);"&gt;&lt;span style="font-size:100%;"&gt;在具体实现的时候，我们只关心两个函数原型 &lt;/span&gt;&lt;/p&gt; &lt;p style="text-indent: 2em; font-family: arial; color: rgb(153, 153, 255);"&gt;&lt;span style="font-size:100%;"&gt;JNIEXPORT jint JNICALL Java_testdll_get (JNIEnv *, jclass); &lt;/span&gt;&lt;/p&gt; &lt;p style="text-indent: 2em; font-family: arial; color: rgb(153, 153, 255);"&gt;&lt;span style="font-size:100%;"&gt;和 &lt;/span&gt;&lt;/p&gt; &lt;p style="text-indent: 2em; font-family: arial; color: rgb(153, 153, 255);"&gt;&lt;span style="font-size:100%;"&gt;JNIEXPORT void JNICALL Java_testdll_set (JNIEnv *, jclass, jint); &lt;/span&gt;&lt;/p&gt; &lt;p style="text-indent: 2em; font-family: arial; color: rgb(153, 153, 255);"&gt;&lt;span style="font-size:100%;"&gt;这里JNIEXPORT和JNICALL都是JNI的关键字，表示此函数是要被JNI调用 的。而jint是以JNI为中介使JAVA的int类型与本地的int沟通的一种类型，我们可以视而不见，就当做int使用。函数的名称是JAVA_再加 上java程序的package路径再加函数名&lt;a href="http://action.vogate.com/c/c.php?r=http%3A//www.google.cn/search%3Fhl%3Dzh-CN%26q%3Djava+%25E8%25B0%2583%25E7%2594%25A8+c%26meta%3D%26aq%3D0%26oq%3Djava+%25E8%25B0%2583%25E7%2594%25A8%25E3%2580%2580c&amp;amp;aid=5373&amp;amp;sid=6235007045041189&amp;amp;click=1&amp;amp;url=http%3A//www.hongniang.com&amp;amp;v=0&amp;amp;s=http%3A//www.programfan.com/article/showarticle.asp%3Fid%3D1660&amp;amp;rn=162882&amp;amp;k=%u7EC4%u6210"&gt;组成&lt;/a&gt;的。参数中，我们也只需要关心在JAVA程序中存在的参数，至于JNIEnv*和jclass我们一般没有必要去碰它。 &lt;/span&gt;&lt;/p&gt; &lt;p style="text-indent: 2em; font-family: arial; color: rgb(153, 153, 255);"&gt;&lt;span style="font-size:100%;"&gt;好，下面我们用testdll.cpp文件具体实现这两个函数： &lt;/span&gt;&lt;/p&gt; &lt;p style="text-indent: 2em; font-family: arial; color: rgb(153, 153, 255);"&gt;&lt;span style="font-size:100%;"&gt;#include "testdll.h" &lt;/span&gt;&lt;/p&gt; &lt;p style="text-indent: 2em; font-family: arial; color: rgb(153, 153, 255);"&gt;&lt;span style="font-size:100%;"&gt;int i = 0; &lt;/span&gt;&lt;/p&gt; &lt;p style="text-indent: 2em; font-family: arial; color: rgb(153, 153, 255);"&gt;&lt;span style="font-size:100%;"&gt;JNIEXPORT jint JNICALL Java_testdll_get (JNIEnv *, jclass) &lt;/span&gt;&lt;/p&gt; &lt;p style="text-indent: 2em; font-family: arial; color: rgb(153, 153, 255);"&gt;&lt;span style="font-size:100%;"&gt;{ &lt;/span&gt;&lt;/p&gt; &lt;p style="text-indent: 2em; font-family: arial; color: rgb(153, 153, 255);"&gt;&lt;span style="font-size:100%;"&gt;return i; &lt;/span&gt;&lt;/p&gt; &lt;p style="text-indent: 2em; font-family: arial; color: rgb(153, 153, 255);"&gt;&lt;span style="font-size:100%;"&gt;} &lt;/span&gt;&lt;/p&gt; &lt;p style="text-indent: 2em; font-family: arial; color: rgb(153, 153, 255);"&gt;&lt;span style="font-size:100%;"&gt;JNIEXPORT void JNICALL Java_testdll_set (JNIEnv *, jclass, jint j) &lt;/span&gt;&lt;/p&gt; &lt;p style="text-indent: 2em; font-family: arial; color: rgb(153, 153, 255);"&gt;&lt;span style="font-size:100%;"&gt;{ &lt;/span&gt;&lt;/p&gt; &lt;p style="text-indent: 2em; font-family: arial; color: rgb(153, 153, 255);"&gt;&lt;span style="font-size:100%;"&gt;i = j; &lt;/span&gt;&lt;/p&gt; &lt;p style="text-indent: 2em; font-family: arial; color: rgb(153, 153, 255);"&gt;&lt;span style="font-size:100%;"&gt;} &lt;/span&gt;&lt;/p&gt; &lt;p style="text-indent: 2em; font-family: arial; color: rgb(153, 153, 255);"&gt;&lt;span style="font-size:100%;"&gt;编译连接成库文件，本例是在WINDOWS下做的，生成的是DLL文件。并且名称要与JAVA中需要调用的一致，这里就是goodluck.dll &lt;/span&gt;&lt;/p&gt; &lt;p style="text-indent: 2em; font-family: arial; color: rgb(153, 153, 255);"&gt;&lt;span style="font-size:100%;"&gt;把goodluck.dll拷贝到testdll.class的目录下，java testdll运行它，就可以观察到结果了。&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;span style="color: rgb(153, 153, 255);font-size:100%;" &gt;&lt;br /&gt;&lt;/span&gt;&lt;p style="text-indent: 2em;"&gt;&lt;span style="color: rgb(153, 153, 255);font-size:100%;" &gt;&lt;span style="font-family: arial;"&gt;转自：http://buttom2008.blog.163.com/blog/static/71449844200837511649/&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7598811904790233931-2649047897904202375?l=stonestrange.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://stonestrange.blogspot.com/feeds/2649047897904202375/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7598811904790233931&amp;postID=2649047897904202375' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7598811904790233931/posts/default/2649047897904202375'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7598811904790233931/posts/default/2649047897904202375'/><link rel='alternate' type='text/html' href='http://stonestrange.blogspot.com/2008/04/javacdll.html' title='[转]在Java中调用C语言生成的DLL文件'/><author><name>stonestrange</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp1.blogger.com/_F6b5Psa149E/R_sMtqwqXnI/AAAAAAAAARc/3tAdCOe1r_o/S220/%E5%A4%8D%E4%BB%B6+11023341.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7598811904790233931.post-2870277618303937034</id><published>2008-04-07T22:34:00.000-07:00</published><updated>2008-04-07T22:39:28.674-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='coding_os'/><title type='text'>缓冲区管理</title><content type='html'>&lt;span style="color: rgb(153, 153, 255);font-family:arial;font-size:100%;"  &gt; //假设系统中有两个分别名为P1、P2的进程&lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;font-size:100%;"  &gt; //两台均可进行输入、输出操作的设备d1、d2&lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;font-size:100%;"  &gt; //两个进程可以从两台设备中的任何一台输入数据，并可以向其中的任何一台设备输出数据。&lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt; &lt;span style="color: rgb(153, 153, 255);font-family:arial;font-size:100%;"  &gt; #include &lt;stdio.h&gt;&lt;/stdio.h&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;font-size:100%;"  &gt; #include &lt;iostream&gt;&lt;/iostream&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;font-size:100%;"  &gt; #include &lt;conio.h&gt;&lt;/conio.h&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;font-size:100%;"  &gt; #include &lt;math.h&gt;&lt;/math.h&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;font-size:100%;"  &gt; #include &lt;string.h&gt;&lt;/string.h&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;  &lt;span style="color: rgb(153, 153, 255);font-family:arial;font-size:100%;"  &gt; #define NUMOFBUFFER 10&lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;font-size:100%;"  &gt; #define SIZEOFBUFFER 100&lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;font-size:100%;"  &gt; #define NO -1&lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;font-size:100%;"  &gt; #define MAX 200&lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;  &lt;span style="color: rgb(153, 153, 255);font-family:arial;font-size:100%;"  &gt; struct buffer{                                  //系统中的缓冲区&lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;font-size:100%;"  &gt;      int count;                                  //缓冲区中现在的字符个数&lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;font-size:100%;"  &gt;      char databuffer[SIZEOFBUFFER];              //数据区&lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;font-size:100%;"  &gt;      struct buffer *p;                           //用作队列指针 &lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;font-size:100%;"  &gt; }buf[NUMOFBUFFER];&lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;  &lt;span style="color: rgb(153, 153, 255);font-family:arial;font-size:100%;"  &gt; typedef struct queue{                           //队列&lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;font-size:100%;"  &gt;      int buf[NUMOFBUFFER];                       //保存队列中的元素              &lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;font-size:100%;"  &gt;      int front;                                  //头指针&lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;font-size:100%;"  &gt;      int rear;                                   //尾指针&lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;font-size:100%;"  &gt;      int currentSize;                            //当前长度&lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;font-size:100%;"  &gt;      int maxSize;                                //最大长度&lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;font-size:100%;"  &gt; }SqQueue;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;  &lt;span style="color: rgb(153, 153, 255);font-family:arial;font-size:100%;"  &gt; SqQueue emptyBuffer;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;font-size:100%;"  &gt; SqQueue outputOfDevice1;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;font-size:100%;"  &gt; SqQueue outputOfDevice2;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;font-size:100%;"  &gt; SqQueue inputOfDevice1;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;font-size:100%;"  &gt; SqQueue inputOfDevice2;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;  &lt;span style="color: rgb(153, 153, 255);font-family:arial;font-size:100%;"  &gt; int mutex = 1;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;font-size:100%;"  &gt; int od1,od2,id1,id2;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt; &lt;span style="color: rgb(153, 153, 255);font-family:arial;font-size:100%;"  &gt; int mistake = 0;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;  &lt;span style="color: rgb(153, 153, 255);font-family:arial;font-size:100%;"  &gt; //初始化空队列&lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;font-size:100%;"  &gt; void InitEmptyQueue(SqQueue &amp;amp;L){&lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;font-size:100%;"  &gt;      int i;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;font-size:100%;"  &gt;      for(i = 0;i &lt;&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;           L.buf[i] = i;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;      L.front = 0;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;      L.rear = 9;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;      L.currentSize = 10;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;      L.maxSize = NUMOFBUFFER;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt; }&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt; //初始化队列&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt; void InitQueue(SqQueue &amp;amp;L){&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;      int i;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;      for(i = 0;i &lt;&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;           L.buf[i] = NO;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;      L.front = 0;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;      L.rear = L.front - 1;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;      L.currentSize = 0;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;      L.maxSize = NUMOFBUFFER;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt; }&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt; //P操作&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt; void Pprocess(int source){&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;      source --;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;      if(source &lt;&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;           printf("Sorry.There is no empty buffer.Please wait.:-(\n");&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;           mistake = 1;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;      }&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt; }&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt; //V操作&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt; void Vprocess(int source){&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;      source ++;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;      if(source &gt; 0)&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;           mistake = 0;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt; }&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt; //入队&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt; void EnQueue(SqQueue &amp;amp;L,int buf){&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;      Pprocess(mutex);&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;      &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;      if(L.currentSize == 0){&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;           L.front = 0;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;           L.rear = -1;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;      }&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;      if(L.rear == 9)                             //队满的情况已经在主函数中做过处理&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;           L.rear = fmod(L.rear + 1,10);&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;      else&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;           L.rear ++;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;      L.buf[L.rear] = buf;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;      L.currentSize ++;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;      Vprocess(mutex);&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt; }&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt; //出队&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt; int DeQueue(SqQueue &amp;amp;L){                        //队空的情况已经在主函数中做过处理&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;      int e;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;      Pprocess(mutex);&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;                                            &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;      e = L.buf[L.front];&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;      L.buf[L.front] = NO;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;      L.front ++;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;      L.currentSize --;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;      Vprocess(mutex);&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;      return e;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt; }&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt; //完成缓冲区和各个队列的初始化操作&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt; void init(){&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;      &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;      //缓冲区初始化操作&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;      int i,j;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;      for(i = 0;i &lt;&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;           buf[i].count = 0;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;           for(j = 0;j &lt;&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;                buf[i].databuffer[j] = ' ';&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;           buf[i].p = &amp;amp;buf[i + 1];&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;      }&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;      &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;      //各个队列的初始化操作&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;      InitEmptyQueue(emptyBuffer);&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;      InitQueue(outputOfDevice1);&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;      InitQueue(outputOfDevice2);&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;      InitQueue(inputOfDevice1);&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;      InitQueue(inputOfDevice2);     &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt; }&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt; //从空队列中取出一个缓冲区&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt; int getBuffer(){&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;      int index;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;      int size = emptyBuffer.currentSize;                       &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;      &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;      Pprocess(size);&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;      &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;      if(mistake != 1){     &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;           Pprocess(mutex);                     //对空缓冲区队列进行互斥操作&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;           index = DeQueue(emptyBuffer);&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;           Vprocess(mutex);&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;      }&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;      &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;      return index;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt; }&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt; //空队列中放入一个缓冲区&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt; void putBuffer(int index){&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;      int size = emptyBuffer.currentSize;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;      &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;      Pprocess(mutex);                     //对空缓冲区队列进行互斥操作&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;      EnQueue(emptyBuffer,index);&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;      Vprocess(mutex);&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;      Vprocess(size);&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt; }&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt; //输出内容，格式控制函数&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt; void print(){  &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;      int i = 0,k = 0,index;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;      printf("...........................................\n");&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;      printf("...........................................\n");&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;      //显示空缓冲区队列&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;      printf("emptyBuffer      : ");&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;      if(emptyBuffer.currentSize == 0 || mistake == 1)&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;           printf("NULL");&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;      else{&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;           i = emptyBuffer.front;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;           do{&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;                index = fmod((i+k),10);&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;                printf("%d ",emptyBuffer.buf[index]);&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;                k ++;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;           }while(k &lt;&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;      }&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;      putchar('\n');&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;      //显示设备一的输出队列&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;      printf("outputOfDevice1 : ");&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;      if(outputOfDevice1.currentSize == 0)&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;           printf("NULL");&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;      else{&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;           i = outputOfDevice1.front;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;           k = 0;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;           do{&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;                index = fmod((i+k),10);&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;                printf("%d ",outputOfDevice1.buf[index]);&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;                k ++;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;           }while(k &lt;&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;      }&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;      putchar('\n');&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;      //显示设备二的输出队列&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;      printf("outputOfDevice2 : ");&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;      if(outputOfDevice2.currentSize == 0)&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;           printf("NULL");&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;      else{&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;           i = outputOfDevice2.front;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;           k = 0;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;           do{&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;                index = fmod((i+k),10);&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;                printf("%d ",outputOfDevice2.buf[index]);&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;                k ++;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;           }while(k &lt;&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;      }&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;      putchar('\n');&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;      //显示设备一的输入队列&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;      printf("inputOfDevice1  : ");&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;      if(inputOfDevice1.currentSize == 0)&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;           printf("NULL");&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;      else{&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;           i = inputOfDevice1.front;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;           k = 0;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;           do{&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;                index = fmod((i+k),10);&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;                printf("%d ",inputOfDevice1.buf[index]);&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;                k ++;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;           }while(k &lt;&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;      }&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;      putchar('\n');&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;      //显示设备二的输入队列&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;      printf("inputOfDevice2  : ");&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;      if(inputOfDevice2.currentSize == 0)&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;           printf("NULL");&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;      else{&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;           i = inputOfDevice2.front;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;           k = 0;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;           do{&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;                index = fmod((i+k),10);&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;                printf("%d ",inputOfDevice2.buf[index]);&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;                k ++;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;           }while(k &lt;&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;      }&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;      putchar('\n');&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;      printf("...........................................\n");&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt; }&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt; //设备选择显示函数&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt; int withTools(){&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;      char dc = getch();&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;      if(dc == '1')&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;           printf("device1.");&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;      else{&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;           if(dc == '2')&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;                printf("device2.");&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;           else&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;                printf("error.");&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;      }&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;      putchar('\n');&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;      printf("...........................................\n");&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;      int tool = (int)dc - 48;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;      return tool;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt; }&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt; //线程选择显示函数&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt; int withType(){&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;      int dc = getch();&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;      if(dc == '1')&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;           printf("thread1.");&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;      else{&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;           if(dc == '2')&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;                printf("thread2.");&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;           else&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;                printf("error.");&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;      }&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;      putchar('\n');&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;      printf("...........................................\n");&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;      int type = (int)dc - 48;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;      return type;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt; }&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt; //完成进程的数据处理.&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt; //按照inputdev指定的设备号从该设备的输入队列中取出一个缓冲区；&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt; //按照procnum的序号对缓冲区中的数据进行指定的数据处理操作；&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt; //按照outputdev指定的设备号将缓冲区放入该设备的输出队列。&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt; void process(int procnum,int inputdev,int outputdev){&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;      int index;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;      &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;      switch (inputdev){&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;      case 1:&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;           id1 = inputOfDevice1.currentSize;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;           Pprocess(id1);&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;           index = DeQueue(inputOfDevice1);&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;           break;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;      case 2:&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;           id2 = inputOfDevice2.currentSize;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;           Pprocess(id2);&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;           index = DeQueue(inputOfDevice2);&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;           break;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;      }&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;      &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;      strupr(buf[index].databuffer);            //小写字母转换成大写字母&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;      &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;      switch (outputdev){&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;      case 1:&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;           od1 = outputOfDevice1.currentSize;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;           EnQueue(outputOfDevice1,index);&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;           Vprocess(od1);&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;           break;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;      case 2:&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;           od2 = outputOfDevice2.currentSize;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;           EnQueue(outputOfDevice2,index);&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;          Vprocess(od2);&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;           break;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;      }&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;      printf("thread: %d---inputdevice: %d---outputdevice: %d\n",procnum,inputdev,outputdev);&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;      print();&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt; }&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt; //完成设备的读写操作.其中参数devnum指出需要进行I/O操作的设备,flag为操作类型&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt; void deviceReadAndWrite(int devnum,int flag){     &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;      int index;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;      char input[SIZEOFBUFFER];&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;      &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;      if(flag == 1){                                    //读操作&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;           index = getBuffer();                          //从空队列中取出一个缓冲区&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;           if(mistake == 1){&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;                printf("You must make a full buffer empty.:-(\n");&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;                goto lab;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;           }&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;           else{&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;                printf("Please input some letters : ");&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;                scanf("%s",input);&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;                strcpy(buf[index].databuffer,input);          //从终端读入一行字符串，放入缓冲区的数据区&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;                buf[index].count = strlen(input);&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;                if(devnum == 1){                              //按照指定的设备号将缓冲区放入相应的设备输入队列&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;                     id1 = inputOfDevice1.currentSize;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;                     EnQueue(inputOfDevice1,index);&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;                     Vprocess(id1);&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;                }&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;                else{&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;                     id2 = inputOfDevice2.currentSize;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;                     EnQueue(inputOfDevice2,index);&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;                     Vprocess(id2);&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;                }&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;           }&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;      }&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;      else{                                    //写操作&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;           if(devnum == 1){&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;                od1 = outputOfDevice1.currentSize;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;                Pprocess(od1);                            //p(od1)&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;                index = DeQueue(outputOfDevice1);         //按照指定的设备号，从设备的输出队列中取出一个装满数据的缓冲区&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;                printf("The contents of this buffer is : ");&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;                printf("%s\n",buf[index].databuffer);     //将缓冲区中的数据在终端上显示&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;                putBuffer(index);                         //将空缓冲区放入空缓冲区队列&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;           }&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;           if(devnum == 2){&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;                od2 = outputOfDevice2.currentSize;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;                Pprocess(od2);                            //p(od2)&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;                index = DeQueue(outputOfDevice2);         //按照指定的设备号，从设备的输出队列中取出一个装满数据的缓冲区&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;                printf("The contents of this buffer is : ");&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;                printf("%s\n",buf[index].databuffer);     //将缓冲区中的数据在终端上显示&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;                putBuffer(index);                         //将空缓冲区放入空缓冲区队列&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;           }&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;      }&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt; lab:&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;      print();&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt; }&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt; //代码使用控制函数&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt; void getIn(){&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;      char password[7] = {'0','5','2','2','2','6'};&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;      char input[10];&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;      int i = 0;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;      printf("-------------------------------------------\n");&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;      printf("-------------------------------------------\n");&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;      printf("Password : ");&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;      char c = getch();&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;      &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;      while(c != '*'){&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;           input[i] = c;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;           i ++;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;           putchar('*');&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;           c = getch();&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;      }&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;      input[i] = '\0';&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;      putchar('\n');&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;      &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;      if(strcmp(password,input) != 0){&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;           printf("You do not have the right to use this code. :-(\n");&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;           exit(0);&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;      }&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;      &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;      printf("-------------------------------------------\n");&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;      printf("-------------------------------------------\n");&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt; }&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt; //模式选择函数&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt; int printTip(){&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;      printf("This code support three work models : \n");&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;      printf("A.input    B.output    C.deal    D.exit \n");&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;      printf("Please choose : ");&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;      char c = getch();&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;      int model;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;      &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;      switch(c){&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;      case 'A':&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;           printf("input.\n");&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;           model = 1;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;           break;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;      case 'B':&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;           printf("output.\n");&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;           model = 2;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;           break;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;      case 'C':&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;           printf("deal.\n");&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;           model = 3;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;           break;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;      case 'D':&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;           printf("exit.\n");&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;           model = 4;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;           break;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;      }&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;      printf("...........................................\n");&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;      return model;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt; }&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt; //判断输出队列是否为空&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt; int judgeOutput(int tool){&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;      int emp;                          //0非空1空&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;      &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;      switch (tool){&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;      case 1:&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;           if(outputOfDevice1.currentSize == 0)&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;                emp = 1;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;           else&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;                emp = 0;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;           break;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;      case 2:&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;           if(outputOfDevice2.currentSize == 0)&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;                emp = 1;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;           else &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;                emp = 0;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;           break;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;      }&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;      return emp;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt; }&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt; //判断输入队列是否为空&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt; int judgeInput(int tool){&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;      int emp;                          //0非空1空&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;      switch (tool){&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;      case 1:&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;           if(inputOfDevice1.currentSize == 0)&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;                emp = 1;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;           else&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;                emp = 0;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;           break;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;      case 2:&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;           if(inputOfDevice2.currentSize == 0)&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;                emp = 1;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;           else &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;                emp = 0;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;           break;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;      }&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;      return emp;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt; }&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt; //判断输入队列是否为满&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt; int judgeInputFull(int tool){&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;      int full;                        //0非满1满&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;      switch (tool){&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;      case 1:&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;           if(inputOfDevice1.currentSize == 10)&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;                full = 1;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;           else&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;                full = 0;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;           break;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;      case 2:&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;           if(inputOfDevice2.currentSize == 10)&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;                full = 1;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;           else &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;                full = 0;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;           break;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;      }&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;      return full;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt; }&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt; //判断输出队列是否为满&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt; int judgeOutputFull(int tool){&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;      int full;                       //0非满1满&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;      switch (tool){&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;      case 1:&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;           if(outputOfDevice1.currentSize == 10)&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;                full = 1;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;           else&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;                full = 0;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;           break;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;      case 2:&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;           if(outputOfDevice2.currentSize == 10)&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;                full = 1;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;           else &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;                full = 0;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;           break;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;      }&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;      return full;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt; }&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt; void main(){&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;      void InitEmptyQueue(SqQueue &amp;amp;L);&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;      void InitQueue(SqQueue &amp;amp;L);&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;      void EnQueue(SqQueue &amp;amp;L,int buf);&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;      int DeQueue(SqQueue &amp;amp;L);&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;      void init();&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;      int getBuffer();&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;      void putBuffer(int index);&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;      void print();&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;      int withTools();&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;      int withType();&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;      void process(int procnum,int inputdev,int outputdev);&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;      void Pprocess(int source);&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;      void Vprocess(int source);&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;      void deviceReadAndWrite(int devnum,int flag);&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;      void getIn();&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;      int printTip();&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;      int judgeOutput(int tool);&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;      int judgeInput(int tool);&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;      int judgeInputFull(int tool);&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;      int judgeOutputFull(int tool);&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;      int tool,thrd,model,tools;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;      getIn();&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;      printf("Initiate : \n");&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;      init();&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;      print();&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;      &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;      do{&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;           model = printTip();&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;           switch(model){&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;           case 1:                                                   //输入&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;                do{&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;                     printf("1:device1    2:device2\nPlease choose : ");&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;                     tool = withTools();&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;                     if(judgeInputFull(tool) == 1){                    //判断输入队列是否为满&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;                          printf("The list of inputDevice%d is full.:-(\n",tool);&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;                          printf("Please input again.\n");&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;                     }&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;                }while(judgeInputFull(tool) == 1);&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;                deviceReadAndWrite(tool,model);&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;                break;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;           case 2:                                                   //输出&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;                do{&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;                     printf("1:device1    2:device2\nPlease choose : ");&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;                     tool = withTools();&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;                     if(judgeOutput(tool) == 1){                       //判断输出队列是否为空&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;                          printf("The list of outputOfDevice%d is empty.:-(\n",tool);&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;                          printf("Please input again.\n");&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;                     }&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;                }while(judgeOutput(tool) == 1);&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;                deviceReadAndWrite(tool,model);&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;                break;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;           case 3:                                                  //数据处理&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;                printf("1:thread1    2:thread2\nPlease choose : ");&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;                thrd = withType();&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;                do{     &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;                     printf("1:device1    2:device2\nThe device of input : ");&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;                     tool = withTools();&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;                     if(judgeInput(tool) == 1){                       //判断输入队列是否为空&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;                          printf("The list of input of device%d is empty.:-(\n",tool);&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;                          printf("Please input again.\n");&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;                     }&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;                }while(judgeInput(tool) == 1);&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;                do{&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;                     printf("1:device1    2:device2\nThe device of output : ");&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;                     tools = withTools();&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;                     if(judgeOutputFull(tool) == 1){                  //判断输出队列是否为满&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;                          printf("The list of output of device%d is full.:-(\n",tool);&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;                          printf("Please input again.\n");&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;                     }&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;                }while(judgeOutputFull(tool) == 1);&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;                process(thrd,tool,tools);&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;                break;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;           case 4:                                                  //退出&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;                break;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;           }&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;      }while(model != 4);&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;      &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;      printf("...........................................\n");&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;      printf("...........................................\n");&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt;      printf("Thank you for using by 052226.:-)\n");&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 255);font-family:arial;" &gt; }&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7598811904790233931-2870277618303937034?l=stonestrange.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://stonestrange.blogspot.com/feeds/2870277618303937034/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7598811904790233931&amp;postID=2870277618303937034' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7598811904790233931/posts/default/2870277618303937034'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7598811904790233931/posts/default/2870277618303937034'/><link rel='alternate' type='text/html' href='http://stonestrange.blogspot.com/2008/04/blog-post_07.html' title='缓冲区管理'/><author><name>stonestrange</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp1.blogger.com/_F6b5Psa149E/R_sMtqwqXnI/AAAAAAAAARc/3tAdCOe1r_o/S220/%E5%A4%8D%E4%BB%B6+11023341.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7598811904790233931.post-100256953856081474</id><published>2008-04-07T22:33:00.000-07:00</published><updated>2008-04-07T22:34:19.562-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='coding_os'/><title type='text'>UNIX磁盘空间管理算法</title><content type='html'>&lt;span style="font-size: 12pt;"&gt;&lt;span style="font-family: arial; color: rgb(153, 153, 255);"&gt; #include &lt;stdio.h&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: arial; color: rgb(153, 153, 255);"&gt; #include &lt;math.h&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: arial; color: rgb(153, 153, 255);"&gt; #include &lt;stdlib.h&gt;&lt;/span&gt;&lt;br /&gt; &lt;br /&gt;&lt;span style="font-family: arial; color: rgb(153, 153, 255);"&gt; #define NO -1&lt;/span&gt;&lt;br /&gt; &lt;br /&gt;&lt;span style="font-family: arial; color: rgb(153, 153, 255);"&gt; struct size{//每一个磁盘块都有一个数组,该数组包含10个元素,当该磁盘快成为当前组的第一个时,用于存放下一组的信息&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: arial; color: rgb(153, 153, 255);"&gt;      int blocl[10];&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: arial; color: rgb(153, 153, 255);"&gt; };&lt;/span&gt;&lt;br /&gt; &lt;br /&gt;&lt;span style="font-family: arial; color: rgb(153, 153, 255);"&gt; struct blocd{//定义组,每组有10个磁盘块 &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: arial; color: rgb(153, 153, 255);"&gt;      struct size a[10];//用于在空闲磁盘块号链中存放磁盘块号&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: arial; color: rgb(153, 153, 255);"&gt; }block[40];&lt;/span&gt;&lt;br /&gt; &lt;br /&gt;&lt;span style="font-family: arial; color: rgb(153, 153, 255);"&gt; struct File{ &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: arial; color: rgb(153, 153, 255);"&gt;      int fileblocd[100];//用于记录分别分配给文件的磁盘块号,每个文件最多占有100个磁盘快&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: arial; color: rgb(153, 153, 255);"&gt; }file[5];&lt;/span&gt;&lt;br /&gt; &lt;br /&gt;&lt;span style="font-family: arial; color: rgb(153, 153, 255);"&gt; struct SqStack{                 //定义一个记录磁盘块号的堆栈&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: arial; color: rgb(153, 153, 255);"&gt;      int *base;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: arial; color: rgb(153, 153, 255);"&gt;      int *top;                   //指向栈顶元素&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: arial; color: rgb(153, 153, 255);"&gt;      int stacksize;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: arial; color: rgb(153, 153, 255);"&gt;      int s_nfree;                 //记录栈中现有磁盘块数的变量&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: arial; color: rgb(153, 153, 255);"&gt; }s_free; &lt;/span&gt;&lt;br /&gt; &lt;br /&gt;&lt;span style="font-family: arial; color: rgb(153, 153, 255);"&gt; void InitStack(SqStack &amp;amp;S){&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: arial; color: rgb(153, 153, 255);"&gt;      S.base = (int *)malloc(10 * sizeof(int));&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: arial; color: rgb(153, 153, 255);"&gt;      if(!S.base)     &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: arial; color: rgb(153, 153, 255);"&gt;           exit(OVERFLOW);&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: arial; color: rgb(153, 153, 255);"&gt;      S.top = S.base - 1;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: arial; color: rgb(153, 153, 255);"&gt;      S.stacksize = 10;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: arial; color: rgb(153, 153, 255);"&gt;      S.s_nfree = 0;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: arial; color: rgb(153, 153, 255);"&gt; }&lt;/span&gt;&lt;br /&gt; &lt;br /&gt;&lt;span style="font-family: arial; color: rgb(153, 153, 255);"&gt; void Push(SqStack &amp;amp;S, int e){&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: arial; color: rgb(153, 153, 255);"&gt;      S.top ++;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: arial; color: rgb(153, 153, 255);"&gt;      *S.top = e;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: arial; color: rgb(153, 153, 255);"&gt;      S.s_nfree ++;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: arial; color: rgb(153, 153, 255);"&gt; }&lt;/span&gt;&lt;br /&gt; &lt;br /&gt;&lt;span style="font-family: arial; color: rgb(153, 153, 255);"&gt; int Pop(SqStack &amp;amp;S){&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: arial; color: rgb(153, 153, 255);"&gt;      int e = *S.top;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: arial; color: rgb(153, 153, 255);"&gt;      S.top --;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: arial; color: rgb(153, 153, 255);"&gt;      S.s_nfree --;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: arial; color: rgb(153, 153, 255);"&gt;      return e;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: arial; color: rgb(153, 153, 255);"&gt; }&lt;/span&gt;&lt;br /&gt; &lt;br /&gt;&lt;span style="font-family: arial; color: rgb(153, 153, 255);"&gt; int label;//用来记录当前磁盘块的绝对名字&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: arial; color: rgb(153, 153, 255);"&gt; int nextLabel;//用来记录下一个磁盘块的绝对名字&lt;/span&gt;&lt;br /&gt; &lt;br /&gt;&lt;span style="font-family: arial; color: rgb(153, 153, 255);"&gt; //完成空闲磁盘块号堆栈、空闲磁盘块号队列及记录文件占用磁盘块状态的file结构数组&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: arial; color: rgb(153, 153, 255);"&gt; void init(){&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: arial; color: rgb(153, 153, 255);"&gt;      int i,j,k;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: arial; color: rgb(153, 153, 255);"&gt;      &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: arial; color: rgb(153, 153, 255);"&gt;      //初始化空闲磁盘块号队列&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: arial; color: rgb(153, 153, 255);"&gt;      for(i = 0;i &lt;&gt;&lt;br /&gt;&lt;span style="font-family: arial; color: rgb(153, 153, 255);"&gt;           for(j = 0;j &lt;&gt;&lt;br /&gt;&lt;span style="font-family: arial; color: rgb(153, 153, 255);"&gt;                if(i == 0){  //第0组中每个磁盘块内的数组中的每个元素都是NO&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: arial; color: rgb(153, 153, 255);"&gt;                     for(k = 0;k &lt;&gt;&lt;br /&gt;&lt;span style="font-family: arial; color: rgb(153, 153, 255);"&gt;                          block[i].a[j].blocl[k] = NO;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: arial; color: rgb(153, 153, 255);"&gt;                }&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: arial; color: rgb(153, 153, 255);"&gt;                else{ //其他组中,除第0个磁盘块外,其他磁盘块的数组中的每个元素都是NO&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: arial; color: rgb(153, 153, 255);"&gt;                     if(j == 0){&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: arial; color: rgb(153, 153, 255);"&gt;                          for(k = 9;k &gt;= 0;k --){&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: arial; color: rgb(153, 153, 255);"&gt;                               block[i].a[j].blocl[k] = label;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: arial; color: rgb(153, 153, 255);"&gt;                               label --;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: arial; color: rgb(153, 153, 255);"&gt;                          }&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: arial; color: rgb(153, 153, 255);"&gt;                     }&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: arial; color: rgb(153, 153, 255);"&gt;                     else{&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: arial; color: rgb(153, 153, 255);"&gt;                          for(k = 0;k &lt;&gt;&lt;br /&gt;&lt;span style="font-family: arial; color: rgb(153, 153, 255);"&gt;                               block[i].a[j].blocl[k] = NO;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: arial; color: rgb(153, 153, 255);"&gt;                     }&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: arial; color: rgb(153, 153, 255);"&gt;                }&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: arial; color: rgb(153, 153, 255);"&gt;           }&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: arial; color: rgb(153, 153, 255);"&gt;           j = j - 1;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: arial; color: rgb(153, 153, 255);"&gt;           label = i * 10 + j;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: arial; color: rgb(153, 153, 255);"&gt;      }&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: arial; color: rgb(153, 153, 255);"&gt;      &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: arial; color: rgb(153, 153, 255);"&gt;      //初始化空闲磁盘块号堆栈&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: arial; color: rgb(153, 153, 255);"&gt;      int tmp[10]; &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: arial; color: rgb(153, 153, 255);"&gt;      InitStack(s_free);&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: arial; color: rgb(153, 153, 255);"&gt;      for(i = 0;i &lt;&gt;&lt;br /&gt;&lt;span style="font-family: arial; color: rgb(153, 153, 255);"&gt;           tmp[i] = label;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: arial; color: rgb(153, 153, 255);"&gt;           label --;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: arial; color: rgb(153, 153, 255);"&gt;      } //循环结束时,label为下一组的最后一个元素的绝对名字&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: arial; color: rgb(153, 153, 255);"&gt;      for(i = 9;i &gt;= 0;i --)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: arial; color: rgb(153, 153, 255);"&gt;           Push(s_free,tmp[i]);&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: arial; color: rgb(153, 153, 255);"&gt;      &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: arial; color: rgb(153, 153, 255);"&gt;      //初始化文件占用磁盘块状态&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: arial; color: rgb(153, 153, 255);"&gt;      for(i = 0;i &lt;&gt;&lt;br /&gt;&lt;span style="font-family: arial; color: rgb(153, 153, 255);"&gt;           for(j = 0;j &lt;&gt;&lt;br /&gt;&lt;span style="font-family: arial; color: rgb(153, 153, 255);"&gt;                file[i].fileblocd[j] = NO;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: arial; color: rgb(153, 153, 255);"&gt;      }&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: arial; color: rgb(153, 153, 255);"&gt; }&lt;/span&gt;&lt;br /&gt; &lt;br /&gt;&lt;span style="font-family: arial; color: rgb(153, 153, 255);"&gt; int getLine(int name){&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: arial; color: rgb(153, 153, 255);"&gt;      int line = name/10;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: arial; color: rgb(153, 153, 255);"&gt;      return line;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: arial; color: rgb(153, 153, 255);"&gt; }&lt;/span&gt;&lt;br /&gt; &lt;br /&gt;&lt;span style="font-family: arial; color: rgb(153, 153, 255);"&gt; int getCount(int name){&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: arial; color: rgb(153, 153, 255);"&gt;      int count = fmod(name,10);&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: arial; color: rgb(153, 153, 255);"&gt;      return count;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: arial; color: rgb(153, 153, 255);"&gt; }&lt;/span&gt;&lt;br /&gt; &lt;br /&gt;&lt;span style="font-family: arial; color: rgb(153, 153, 255);"&gt; void keepStackFull(int name){&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: arial; color: rgb(153, 153, 255);"&gt;      int line = getLine(name);&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: arial; color: rgb(153, 153, 255);"&gt;      int count = getCount(name);&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: arial; color: rgb(153, 153, 255);"&gt;      int temp[10],i;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: arial; color: rgb(153, 153, 255);"&gt;      &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: arial; color: rgb(153, 153, 255);"&gt;      for(i = 0;i &lt;&gt;&lt;br /&gt;&lt;span style="font-family: arial; color: rgb(153, 153, 255);"&gt;           temp[i] = block[line].a[count].blocl[i];&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: arial; color: rgb(153, 153, 255);"&gt;           Push(s_free,temp[i]);&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: arial; color: rgb(153, 153, 255);"&gt;      }&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: arial; color: rgb(153, 153, 255);"&gt;      &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: arial; color: rgb(153, 153, 255);"&gt; }&lt;/span&gt;&lt;br /&gt; &lt;br /&gt;&lt;span style="font-family: arial; color: rgb(153, 153, 255);"&gt; void keepStackEmpty(int nextName){&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: arial; color: rgb(153, 153, 255);"&gt;      int line = getLine(nextName);&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: arial; color: rgb(153, 153, 255);"&gt;      int count = getCount(nextName);&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: arial; color: rgb(153, 153, 255);"&gt;      &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: arial; color: rgb(153, 153, 255);"&gt;      int temp[10],i,j;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: arial; color: rgb(153, 153, 255);"&gt;      for(i = 0;i &lt;&gt;&lt;br /&gt;&lt;span style="font-family: arial; color: rgb(153, 153, 255);"&gt;           temp[i] = Pop(s_free);&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: arial; color: rgb(153, 153, 255);"&gt;      for(i = 0,j = 9;i &lt;&gt;&lt;br /&gt;&lt;span style="font-family: arial; color: rgb(153, 153, 255);"&gt;           block[line].a[count].blocl[i] = temp[j];&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: arial; color: rgb(153, 153, 255);"&gt;      &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: arial; color: rgb(153, 153, 255);"&gt; }&lt;/span&gt;&lt;br /&gt; &lt;br /&gt;&lt;span style="font-family: arial; color: rgb(153, 153, 255);"&gt; //fileno为文件序号，用于指定需要分配的文件;blockd为所需要磁盘块数目&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: arial; color: rgb(153, 153, 255);"&gt; void alloc(int fileno,int blockd){&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: arial; color: rgb(153, 153, 255);"&gt;      int i;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: arial; color: rgb(153, 153, 255);"&gt;      for(i = 0;i &lt;&gt;&lt;br /&gt;&lt;span style="font-family: arial; color: rgb(153, 153, 255);"&gt;           if(s_free.s_nfree == 0)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: arial; color: rgb(153, 153, 255);"&gt;                keepStackFull(label);&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: arial; color: rgb(153, 153, 255);"&gt;           label = Pop(s_free);&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: arial; color: rgb(153, 153, 255);"&gt;           file[fileno].fileblocd[i] = label;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: arial; color: rgb(153, 153, 255);"&gt;      }&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: arial; color: rgb(153, 153, 255);"&gt; }&lt;/span&gt;&lt;br /&gt; &lt;br /&gt;&lt;span style="font-family: arial; color: rgb(153, 153, 255);"&gt; void free(int fileno){&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: arial; color: rgb(153, 153, 255);"&gt;      int i = 0;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: arial; color: rgb(153, 153, 255);"&gt;      do{&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: arial; color: rgb(153, 153, 255);"&gt;           label = file[fileno].fileblocd[i];&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: arial; color: rgb(153, 153, 255);"&gt;           &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: arial; color: rgb(153, 153, 255);"&gt;           if(s_free.s_nfree == 10){&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: arial; color: rgb(153, 153, 255);"&gt;                //if(fmod(label,10) != 0)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: arial; color: rgb(153, 153, 255);"&gt;                     //keepStackEmpty(nextLabel);&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: arial; color: rgb(153, 153, 255);"&gt;                //else&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: arial; color: rgb(153, 153, 255);"&gt;                     keepStackEmpty(label);&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: arial; color: rgb(153, 153, 255);"&gt;           }&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: arial; color: rgb(153, 153, 255);"&gt;           &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: arial; color: rgb(153, 153, 255);"&gt;           Push(s_free,label);&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: arial; color: rgb(153, 153, 255);"&gt;           file[fileno].fileblocd[i] = NO;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: arial; color: rgb(153, 153, 255);"&gt;           nextLabel = file[fileno].fileblocd[i+1];&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: arial; color: rgb(153, 153, 255);"&gt;           i ++;     &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: arial; color: rgb(153, 153, 255);"&gt;      }while(nextLabel != NO);&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: arial; color: rgb(153, 153, 255);"&gt; }&lt;/span&gt;&lt;br /&gt; &lt;br /&gt;&lt;span style="font-family: arial; color: rgb(153, 153, 255);"&gt; //设置打印格式&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: arial; color: rgb(153, 153, 255);"&gt; void print(){&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: arial; color: rgb(153, 153, 255);"&gt;      int i = 0,j,k,num;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: arial; color: rgb(153, 153, 255);"&gt;      printf("............................................................................\n");&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: arial; color: rgb(153, 153, 255);"&gt;      printf("Free block : \n");&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: arial; color: rgb(153, 153, 255);"&gt;      int st[10];&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: arial; color: rgb(153, 153, 255);"&gt;      int line,count;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: arial; color: rgb(153, 153, 255);"&gt;      if(s_free.s_nfree != 0){&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: arial; color: rgb(153, 153, 255);"&gt;           while(s_free.s_nfree != 0){&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: arial; color: rgb(153, 153, 255);"&gt;                st[i] = Pop(s_free);&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: arial; color: rgb(153, 153, 255);"&gt;                i ++;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: arial; color: rgb(153, 153, 255);"&gt;           }&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: arial; color: rgb(153, 153, 255);"&gt;      }&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: arial; color: rgb(153, 153, 255);"&gt;      else{&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: arial; color: rgb(153, 153, 255);"&gt;           j = 9;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: arial; color: rgb(153, 153, 255);"&gt;           line = getLine(label);&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: arial; color: rgb(153, 153, 255);"&gt;           count = getCount(label);&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: arial; color: rgb(153, 153, 255);"&gt;           while(j &gt;= 0){&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: arial; color: rgb(153, 153, 255);"&gt;                st[i] = block[line].a[count].blocl[j];&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: arial; color: rgb(153, 153, 255);"&gt;                i ++;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: arial; color: rgb(153, 153, 255);"&gt;                j --;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: arial; color: rgb(153, 153, 255);"&gt;           }&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: arial; color: rgb(153, 153, 255);"&gt;      }&lt;/span&gt;&lt;br /&gt; &lt;br /&gt; &lt;br /&gt;&lt;span style="font-family: arial; color: rgb(153, 153, 255);"&gt;      num = i;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: arial; color: rgb(153, 153, 255);"&gt;      for(i = num - 1;i &gt;= 0;i --)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: arial; color: rgb(153, 153, 255);"&gt;           Push(s_free,st[i]);&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: arial; color: rgb(153, 153, 255);"&gt;      for(i = 0;i &lt;&gt;&lt;br /&gt;&lt;span style="font-family: arial; color: rgb(153, 153, 255);"&gt;           printf(" %3d ",st[i]);&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: arial; color: rgb(153, 153, 255);"&gt;      putchar('\n');&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: arial; color: rgb(153, 153, 255);"&gt;      &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: arial; color: rgb(153, 153, 255);"&gt;      line = getLine(st[num-1]);&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: arial; color: rgb(153, 153, 255);"&gt;      count = getCount(st[num-1]);&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: arial; color: rgb(153, 153, 255);"&gt;      do{          &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: arial; color: rgb(153, 153, 255);"&gt;           for(i = 9;i &gt;= 0;i --)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: arial; color: rgb(153, 153, 255);"&gt;                printf(" %3d ",block[line].a[count].blocl[i]);&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: arial; color: rgb(153, 153, 255);"&gt;           putchar('\n');&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: arial; color: rgb(153, 153, 255);"&gt;           st[num - 1] = block[line].a[count].blocl[0];&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: arial; color: rgb(153, 153, 255);"&gt;           line = getLine(st[num-1]);&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: arial; color: rgb(153, 153, 255);"&gt;           count = getCount(st[num-1]);&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: arial; color: rgb(153, 153, 255);"&gt;      }while(block[line].a[count].blocl[0] != NO);&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: arial; color: rgb(153, 153, 255);"&gt;      printf("............................................................................\n");&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: arial; color: rgb(153, 153, 255);"&gt;      printf("File : \n");&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: arial; color: rgb(153, 153, 255);"&gt;      for(i = 0;i &lt;&gt;&lt;br /&gt;&lt;span style="font-family: arial; color: rgb(153, 153, 255);"&gt;           printf("file[%d] :",i);&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: arial; color: rgb(153, 153, 255);"&gt;           j = 0;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: arial; color: rgb(153, 153, 255);"&gt;           k = 0;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: arial; color: rgb(153, 153, 255);"&gt;           do{&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: arial; color: rgb(153, 153, 255);"&gt;                if(file[i].fileblocd[j] == NO){&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: arial; color: rgb(153, 153, 255);"&gt;                     printf(" NULL");&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: arial; color: rgb(153, 153, 255);"&gt;                     break;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: arial; color: rgb(153, 153, 255);"&gt;                }&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: arial; color: rgb(153, 153, 255);"&gt;                else{&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: arial; color: rgb(153, 153, 255);"&gt;                     printf(" %3d ",file[i].fileblocd[j]);&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: arial; color: rgb(153, 153, 255);"&gt;                     nextLabel = file[i].fileblocd[j+1];&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: arial; color: rgb(153, 153, 255);"&gt;                     j ++;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: arial; color: rgb(153, 153, 255);"&gt;                     k ++;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: arial; color: rgb(153, 153, 255);"&gt;                     if(fmod(k,10) == 0){&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: arial; color: rgb(153, 153, 255);"&gt;                          putchar('\n');&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: arial; color: rgb(153, 153, 255);"&gt;                          printf("          ");&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: arial; color: rgb(153, 153, 255);"&gt;                     }&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: arial; color: rgb(153, 153, 255);"&gt;                }&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: arial; color: rgb(153, 153, 255);"&gt;           }while(nextLabel != NO);&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: arial; color: rgb(153, 153, 255);"&gt;           putchar('\n');&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: arial; color: rgb(153, 153, 255);"&gt;      }&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: arial; color: rgb(153, 153, 255);"&gt;      printf("............................................................................\n");&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: arial; color: rgb(153, 153, 255);"&gt; }&lt;/span&gt;&lt;br /&gt; &lt;br /&gt;&lt;span style="font-family: arial; color: rgb(153, 153, 255);"&gt; void main(){&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: arial; color: rgb(153, 153, 255);"&gt;      init();&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: arial; color: rgb(153, 153, 255);"&gt;      printf("初始化 : \n");&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: arial; color: rgb(153, 153, 255);"&gt;      print();&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: arial; color: rgb(153, 153, 255);"&gt;      &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: arial; color: rgb(153, 153, 255);"&gt;      int i,s;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: arial; color: rgb(153, 153, 255);"&gt;      char c,null;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: arial; color: rgb(153, 153, 255);"&gt;      int count_f = 0,count_h = 0;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: arial; color: rgb(153, 153, 255);"&gt; step:&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: arial; color: rgb(153, 153, 255);"&gt;      do{&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: arial; color: rgb(153, 153, 255);"&gt;           printf("请输入待分配的文件的序号 : \n");&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: arial; color: rgb(153, 153, 255);"&gt;           scanf("%d",&amp;amp;i);&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: arial; color: rgb(153, 153, 255);"&gt;           null = getchar();&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: arial; color: rgb(153, 153, 255);"&gt;           printf("请输入待分配的文件的所需的磁盘块数目 : \n");&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: arial; color: rgb(153, 153, 255);"&gt; judge:&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: arial; color: rgb(153, 153, 255);"&gt;           scanf("%d",&amp;amp;s);&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: arial; color: rgb(153, 153, 255);"&gt;           null = getchar();&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: arial; color: rgb(153, 153, 255);"&gt;           alloc(i,s);&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: arial; color: rgb(153, 153, 255);"&gt;           print();&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: arial; color: rgb(153, 153, 255);"&gt;           if(s &gt; 100){&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: arial; color: rgb(153, 153, 255);"&gt;                printf("请重新输入文件所需的磁盘块数目 : ");&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: arial; color: rgb(153, 153, 255);"&gt;                goto judge;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: arial; color: rgb(153, 153, 255);"&gt;           }&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: arial; color: rgb(153, 153, 255);"&gt;           count_f = count_f + 1;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: arial; color: rgb(153, 153, 255);"&gt;           if(count_h &gt; 0)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: arial; color: rgb(153, 153, 255);"&gt;                count_h = count_h - 1;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: arial; color: rgb(153, 153, 255);"&gt;           if(count_f == 5){&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: arial; color: rgb(153, 153, 255);"&gt;                printf("已经有5个文件存在，达到最大值 . :-(\n");&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: arial; color: rgb(153, 153, 255);"&gt;                break;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: arial; color: rgb(153, 153, 255);"&gt;           }&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: arial; color: rgb(153, 153, 255);"&gt;           printf("分配 ? y or n ?\n");&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: arial; color: rgb(153, 153, 255);"&gt;           c = getchar();          &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: arial; color: rgb(153, 153, 255);"&gt;      }while(c == 'y');&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: arial; color: rgb(153, 153, 255);"&gt;      &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: arial; color: rgb(153, 153, 255);"&gt;      do{&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: arial; color: rgb(153, 153, 255);"&gt;           printf("请输入待回收的文件的序号 : \n");&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: arial; color: rgb(153, 153, 255);"&gt;           scanf("%d",&amp;amp;i);&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: arial; color: rgb(153, 153, 255);"&gt;           null = getchar();&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: arial; color: rgb(153, 153, 255);"&gt;           free(i);&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: arial; color: rgb(153, 153, 255);"&gt;           print();&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: arial; color: rgb(153, 153, 255);"&gt;           count_h = count_h + 1;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: arial; color: rgb(153, 153, 255);"&gt;           count_f = count_f - 1;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: arial; color: rgb(153, 153, 255);"&gt;           if(count_h == 5 || count_f == 0){&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: arial; color: rgb(153, 153, 255);"&gt;                printf("已经没有文件存在，无法删除. :-(\n");&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: arial; color: rgb(153, 153, 255);"&gt;                break;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: arial; color: rgb(153, 153, 255);"&gt;           }&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: arial; color: rgb(153, 153, 255);"&gt;           printf("回收 ? y or n ?\n");&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: arial; color: rgb(153, 153, 255);"&gt;           c = getchar();&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: arial; color: rgb(153, 153, 255);"&gt;           null = getchar();&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: arial; color: rgb(153, 153, 255);"&gt;      }while(c == 'y');&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: arial; color: rgb(153, 153, 255);"&gt;      printf("分配 ? y or n ?\n");&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: arial; color: rgb(153, 153, 255);"&gt;      c = getchar();&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: arial; color: rgb(153, 153, 255);"&gt;      &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: arial; color: rgb(153, 153, 255);"&gt;      if(c == 'y')&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: arial; color: rgb(153, 153, 255);"&gt;           goto step;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: arial; color: rgb(153, 153, 255);"&gt;      printf("感谢使用 by 052226 .:-)\n");&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: arial; color: rgb(153, 153, 255);"&gt; }&lt;/span&gt;&lt;br /&gt; &lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7598811904790233931-100256953856081474?l=stonestrange.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://stonestrange.blogspot.com/feeds/100256953856081474/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7598811904790233931&amp;postID=100256953856081474' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7598811904790233931/posts/default/100256953856081474'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7598811904790233931/posts/default/100256953856081474'/><link rel='alternate' type='text/html' href='http://stonestrange.blogspot.com/2008/04/unix.html' title='UNIX磁盘空间管理算法'/><author><name>stonestrange</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp1.blogger.com/_F6b5Psa149E/R_sMtqwqXnI/AAAAAAAAARc/3tAdCOe1r_o/S220/%E5%A4%8D%E4%BB%B6+11023341.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7598811904790233931.post-1549883027943728170</id><published>2008-04-07T22:28:00.000-07:00</published><updated>2008-04-07T22:31:26.183-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='coding'/><title type='text'>用信号量来实现读者-写者问题</title><content type='html'>&lt;span style="color: rgb(153, 153, 255);font-size:100%;" &gt;&lt;span style="font-size: 12pt; line-height: 150%; font-family: arial;"&gt;1、定义一个数据缓存buffer及用于实现同步互斥的信号量。&lt;span&gt;&lt;br /&gt;&lt;/span&gt;2、定义一个读者函数：&lt;/span&gt;&lt;/span&gt; &lt;p style="margin-left: 63pt; text-indent: -21pt; line-height: 150%; font-family: arial; color: rgb(153, 153, 255);" class="MsoNormal"&gt;&lt;span style="font-size:100%;"&gt;&lt;span style="font-size: 12pt; line-height: 150%;"&gt;&lt;span&gt;l&lt;span style=""&gt;         &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: 12pt; line-height: 150%;"&gt;当有写者在占用&lt;/span&gt;&lt;span style="font-size: 12pt; line-height: 150%;"&gt;buffer&lt;/span&gt;&lt;span style="font-size: 12pt; line-height: 150%;"&gt;时，读者应该等待，直到写者不再使用该&lt;/span&gt;&lt;span style="font-size: 12pt; line-height: 150%;"&gt;buffer&lt;/span&gt;&lt;span style="font-size: 12pt; line-height: 150%;"&gt;。&lt;/span&gt;&lt;span style="font-size: 12pt; line-height: 150%;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="margin-left: 63pt; text-indent: -21pt; line-height: 150%; font-family: arial; color: rgb(153, 153, 255);" class="MsoNormal"&gt;&lt;span style="font-size:100%;"&gt;&lt;span style="font-size: 12pt; line-height: 150%;"&gt;&lt;span&gt;l&lt;span style=""&gt;         &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: 12pt; line-height: 150%;"&gt;当有其他读者在占用&lt;/span&gt;&lt;span style="font-size: 12pt; line-height: 150%;"&gt;buffer&lt;/span&gt;&lt;span style="font-size: 12pt; line-height: 150%;"&gt;时，读者可对&lt;/span&gt;&lt;span style="font-size: 12pt; line-height: 150%;"&gt;buffer&lt;/span&gt;&lt;span style="font-size: 12pt; line-height: 150%;"&gt;进行读取操作。&lt;/span&gt;&lt;span style="font-size: 12pt; line-height: 150%;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="margin-left: 63pt; text-indent: -21pt; line-height: 150%; font-family: arial; color: rgb(153, 153, 255);" class="MsoNormal"&gt;&lt;span style="font-size:100%;"&gt;&lt;span style="font-size: 12pt; line-height: 150%;"&gt;&lt;span&gt;l&lt;span style=""&gt;         &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: 12pt; line-height: 150%;"&gt;当&lt;/span&gt;&lt;span style="font-size: 12pt; line-height: 150%;"&gt;buffer&lt;/span&gt;&lt;span style="font-size: 12pt; line-height: 150%;"&gt;中有数据时，则从其中读取一个数据，并显示然后退出。&lt;/span&gt;&lt;span style="font-size: 12pt; line-height: 150%;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p style="line-height: 150%; font-family: arial; color: rgb(153, 153, 255);" class="MsoNormal"&gt;&lt;span style="font-size:100%;"&gt;&lt;span style="font-size: 12pt; line-height: 150%;"&gt;&lt;span&gt;              l&lt;span style=""&gt;         &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: 12pt; line-height: 150%;"&gt;当&lt;/span&gt;&lt;span style="font-size: 12pt; line-height: 150%;"&gt;buffer&lt;/span&gt;&lt;span style="font-size: 12pt; line-height: 150%;"&gt;中没有数据时，应等待，直到&lt;/span&gt;&lt;span style="font-size: 12pt; line-height: 150%;"&gt;buffer&lt;/span&gt;&lt;span style="font-size: 12pt; line-height: 150%;"&gt;中有数据可读。&lt;/span&gt;&lt;span style="font-size: 12pt; line-height: 150%;"&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="line-height: 150%; font-family: arial; color: rgb(153, 153, 255);" class="MsoNormal"&gt;&lt;span style="font-size:100%;"&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: 12pt; line-height: 150%;"&gt;3&lt;/span&gt;&lt;span style="font-size: 12pt; line-height: 150%;"&gt;、定义一个写者函数&lt;/span&gt;&lt;span style="font-size: 12pt; line-height: 150%;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="margin-left: 63pt; text-indent: -21pt; line-height: 150%; font-family: arial; color: rgb(153, 153, 255);" class="MsoNormal"&gt;&lt;span style="font-size:100%;"&gt;&lt;span style="font-size: 12pt; line-height: 150%;"&gt;&lt;span&gt;l&lt;span style=""&gt;         &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: 12pt; line-height: 150%;"&gt;当有读者在占用&lt;/span&gt;&lt;span style="font-size: 12pt; line-height: 150%;"&gt;buffer&lt;/span&gt;&lt;span style="font-size: 12pt; line-height: 150%;"&gt;时，写者应该等待，直到所有的读者都退出为止。&lt;/span&gt;&lt;span style="font-size: 12pt; line-height: 150%;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="margin-left: 63pt; text-indent: -21pt; line-height: 150%; font-family: arial; color: rgb(153, 153, 255);" class="MsoNormal"&gt;&lt;span style="font-size:100%;"&gt;&lt;span style="font-size: 12pt; line-height: 150%;"&gt;&lt;span&gt;l&lt;span style=""&gt;         &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: 12pt; line-height: 150%;"&gt;当有其他写者占用&lt;/span&gt;&lt;span style="font-size: 12pt; line-height: 150%;"&gt;buffer&lt;/span&gt;&lt;span style="font-size: 12pt; line-height: 150%;"&gt;时，该写者应该等待，直到占用&lt;/span&gt;&lt;span style="font-size: 12pt; line-height: 150%;"&gt;buffer&lt;/span&gt;&lt;span style="font-size: 12pt; line-height: 150%;"&gt;的写者退出为止。&lt;/span&gt;&lt;span style="font-size: 12pt; line-height: 150%;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="margin-left: 63pt; text-indent: -21pt; line-height: 150%; font-family: arial; color: rgb(153, 153, 255);" class="MsoNormal"&gt;&lt;span style="font-size:100%;"&gt;&lt;span style="font-size: 12pt; line-height: 150%;"&gt;&lt;span&gt;l&lt;span style=""&gt;         &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: 12pt; line-height: 150%;"&gt;当&lt;/span&gt;&lt;span style="font-size: 12pt; line-height: 150%;"&gt;buffer&lt;/span&gt;&lt;span style="font-size: 12pt; line-height: 150%;"&gt;有空闲时，写者应该在&lt;/span&gt;&lt;span style="font-size: 12pt; line-height: 150%;"&gt;buffer&lt;/span&gt;&lt;span style="font-size: 12pt; line-height: 150%;"&gt;中写入一个数据并退出。&lt;/span&gt;&lt;span style="font-size: 12pt; line-height: 150%;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="margin-left: 63pt; text-indent: -21pt; line-height: 150%; font-family: arial; color: rgb(153, 153, 255);" class="MsoNormal"&gt;&lt;span style="font-size:100%;"&gt;&lt;span style="font-size: 12pt; line-height: 150%;"&gt;&lt;span&gt;l&lt;span style=""&gt;         &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: 12pt; line-height: 150%;"&gt;当&lt;/span&gt;&lt;span style="font-size: 12pt; line-height: 150%;"&gt;buffer&lt;/span&gt;&lt;span style="font-size: 12pt; line-height: 150%;"&gt;满时，写者应该等待，直到&lt;/span&gt;&lt;span style="font-size: 12pt; line-height: 150%;"&gt;buffer&lt;/span&gt;&lt;span style="font-size: 12pt; line-height: 150%;"&gt;有空闲为止。&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;span style="color: rgb(153, 153, 255);font-size:100%;" &gt;&lt;br /&gt;&lt;span style="font-size: 12pt; font-family: arial;"&gt;#include &lt;windows.h&gt;&lt;br /&gt;#include &lt;iostream&gt;&lt;br /&gt;#include &lt;math.h&gt;&lt;br /&gt;#include &lt;stdlib.h&gt;&lt;br /&gt;#include &lt;time.h&gt;&lt;br /&gt;#include &lt;conio.h&gt;&lt;br /&gt;&lt;br /&gt;#define MAX 8&lt;br /&gt;&lt;br /&gt;int reader_count = 0;                     //纪录读者数目&lt;br /&gt;long currentTime = 0;                     //纪录相对时间&lt;br /&gt;int buffer = 0;                           //缓冲区标记：0空;1满&lt;br /&gt;HANDLE w;                                 //控制读者写者对缓冲区访问&lt;br /&gt;HANDLE mutex;                             //互斥体&lt;br /&gt;&lt;br /&gt;struct People{&lt;br /&gt;      HANDLE thread;                        //定义处理线程的句柄     &lt;br /&gt;      int type;                             //进程类型（读写）1读，0写&lt;br /&gt;      int StartWorkTime;                    //开始工作时间（相对时间）&lt;br /&gt;      int WorkTime;                         //工作时间&lt;br /&gt;};&lt;br /&gt;&lt;br /&gt;People per[MAX];                          //人&lt;br /&gt;People *pl = per;&lt;br /&gt;&lt;br /&gt;void createMutex(HANDLE mutex){           //创建互斥体用于访问数值&lt;br /&gt;      mutex = CreateMutex(&lt;br /&gt;            NULL,&lt;br /&gt;            TRUE,&lt;br /&gt;            NULL);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;void createSemaphore(HANDLE w){           //创建信号量&lt;br /&gt;      w = CreateSemaphore(&lt;br /&gt;            NULL,                         &lt;br /&gt;            1,                                //当前可用的资源数为1&lt;br /&gt;            10,                               //最大为10&lt;br /&gt;            NULL);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;DWORD WINAPI ReadProc(LPVOID lpParam){              //读过程&lt;br /&gt;      People *pers = (People*)lpParam;&lt;br /&gt;      int st = 1;&lt;br /&gt;      while(st == 1 || buffer == 1){&lt;br /&gt;            int count = 1;&lt;br /&gt;            while(currentTime &lt;&gt;StartWorkTime){         //未到达工作时间时，读者等待&lt;br /&gt;                  if(count == 1)&lt;br /&gt;                        printf("%d read_thread is waiting for time.\n",GetCurrentThreadId());&lt;br /&gt;                  count ++;&lt;br /&gt;            }&lt;br /&gt;            printf("%d thread is requesting read.\n",GetCurrentThreadId());&lt;br /&gt;            count = 1;&lt;br /&gt;            while(buffer == 0){               //缓冲区为空时，读者等待                      &lt;br /&gt;                  if(count == 1)                //等待第一次时，显示输出&lt;br /&gt;                        printf("%d read_thread is waiting for write_thread.\n",GetCurrentThreadId());&lt;br /&gt;                  count ++;&lt;br /&gt;            }           &lt;br /&gt;            WaitForSingleObject(mutex,INFINITE);             //P(mutex);&lt;br /&gt;            reader_count ++;                                 //Rcount++;&lt;br /&gt;            if(reader_count == 1){                           //if (Rcount==1)&lt;br /&gt;                  WaitForSingleObject(w,INFINITE);             //P(w);&lt;br /&gt;            }&lt;br /&gt;            ReleaseMutex(mutex);&lt;br /&gt;            pers-&gt;StartWorkTime = currentTime;               //重新设置工作时间&lt;br /&gt;            count = 1;&lt;br /&gt;            while(currentTime &lt;= pers-&gt;StartWorkTime + pers-&gt;WorkTime){       //读&lt;br /&gt;                  if(count == 1)&lt;br /&gt;                        printf("%d thread is reading.\n",GetCurrentThreadId());&lt;br /&gt;                  count ++;&lt;br /&gt;            }&lt;br /&gt;            WaitForSingleObject(mutex,INFINITE);               //P(mutex);&lt;br /&gt;            reader_count --;                                 //Rcount--;&lt;br /&gt;            if(reader_count == 0){                           //最后一个读者离开时，缓冲区清空，即0；      if (Rcount==0)&lt;br /&gt;                  buffer = 0;&lt;br /&gt;                  ReleaseSemaphore(w,1,NULL);                  //V(w);&lt;br /&gt;            }&lt;br /&gt;            ReleaseMutex(mutex);                             //V(mutex);&lt;br /&gt;            printf("%d thread finished reading-work and exited.\n",GetCurrentThreadId());&lt;br /&gt;            st ++;&lt;br /&gt;            Sleep(600);&lt;br /&gt;      }&lt;br /&gt;      CloseHandle(pers-&gt;thread);&lt;br /&gt;      return 0;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;DWORD WINAPI WriteProc(LPVOID lpParam){          //写过程&lt;br /&gt;      People *pers = (People*)lpParam;&lt;br /&gt;      int count = 1;&lt;br /&gt;      while(currentTime &lt;&gt;StartWorkTime){                       //未到达工作时间时，读者等待&lt;br /&gt;            if(count == 1)&lt;br /&gt;                  printf("%d write_thread is waiting for time.\n",GetCurrentThreadId());&lt;br /&gt;            count ++;&lt;br /&gt;      }     &lt;br /&gt;      printf("%d thread is requesting write.\n",GetCurrentThreadId());&lt;br /&gt;      count = 1;&lt;br /&gt;      while(buffer == 1){                                             //缓冲区为满时，写者等待&lt;br /&gt;            if(count == 1)&lt;br /&gt;                  printf("%d write_thread is waiting for buffer.\n",GetCurrentThreadId());&lt;br /&gt;            count ++;&lt;br /&gt;      }&lt;br /&gt;     &lt;br /&gt;      WaitForSingleObject(w,INFINITE);                                //P(w);&lt;br /&gt;     &lt;br /&gt;      pers-&gt;StartWorkTime = currentTime;&lt;br /&gt;      count = 1;&lt;br /&gt;      printf("%d thread is writing.\n",GetCurrentThreadId());         //写&lt;br /&gt;      buffer = 1;                                                     //缓冲区满&lt;br /&gt;      printf("%d thread finished writing-work and exited.\n",GetCurrentThreadId());&lt;br /&gt;      ReleaseSemaphore(w,1,NULL);                                     //V(w);&lt;br /&gt;      CloseHandle(pers-&gt;thread);&lt;br /&gt;      return 0;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;void create(int num){&lt;br /&gt;      int count = 0;&lt;br /&gt;      do{&lt;br /&gt;            per[count].StartWorkTime = 1;&lt;br /&gt;            per[count].WorkTime = 2;&lt;br /&gt;            per[count].type = 0;                                 //写&lt;br /&gt;            per[count].thread = CreateThread(&lt;br /&gt;                  NULL,                                            //默认安全性&lt;br /&gt;                  0,                                               //默认堆栈&lt;br /&gt;                  WriteProc,                                       //类范围内的线程proc&lt;br /&gt;                  (LPVOID)(&amp;amp;per),                                  //发送per指针给proc&lt;br /&gt;                  0,                                               //线程创建后可立即执行的标志为0&lt;br /&gt;                  NULL);&lt;br /&gt;            count ++;     &lt;br /&gt;      }while(count &lt; num/2);&lt;br /&gt;      do{&lt;br /&gt;            per[count].StartWorkTime = 1;&lt;br /&gt;            per[count].WorkTime = 2;&lt;br /&gt;            per[count].type = 1;                                 //读&lt;br /&gt;            per[count].thread = CreateThread(&lt;br /&gt;                  NULL,                                            //默认安全性&lt;br /&gt;                  0,                                               //默认堆栈&lt;br /&gt;                  ReadProc,                                        //类范围内的线程proc&lt;br /&gt;                  (LPVOID)(&amp;amp;per),                                  //发送per指针给proc&lt;br /&gt;                  0,                                               //线程创建后可立即执行的标志为0&lt;br /&gt;                  NULL);&lt;br /&gt;            count ++;&lt;br /&gt;      }while(count &lt; num);&lt;br /&gt;     &lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;void main(){&lt;br /&gt;      char password[7] = {'0','5','2','2','2','6'};&lt;br /&gt;      char input[10];&lt;br /&gt;      int i = 0;&lt;br /&gt;      char c = getch();&lt;br /&gt;      while(c != '*'){&lt;br /&gt;            input[i] = c;&lt;br /&gt;            i ++;&lt;br /&gt;            putchar('*');&lt;br /&gt;            c = getch();&lt;br /&gt;      }&lt;br /&gt;      input[i] = '\0';&lt;br /&gt;      putchar('\n');&lt;br /&gt;      if(strcmp(password,input) == 0){           &lt;br /&gt;            createMutex(mutex);                                  //创建互斥体&lt;br /&gt;            createSemaphore(w);                                  //创建信号量&lt;br /&gt;            create(MAX);                                         //创建读者写者&lt;br /&gt;            currentTime = 0;                                     //初始化当前时间&lt;br /&gt;            while(currentTime &lt; 30){&lt;br /&gt;                  printf("currentTime = %d\n",currentTime);&lt;br /&gt;                  Sleep(300);&lt;br /&gt;                  currentTime++;&lt;br /&gt;            }&lt;br /&gt;            printf("Time over!\n");&lt;br /&gt;            CloseHandle(mutex);&lt;br /&gt;            CloseHandle(w);&lt;br /&gt;            printf("Thank you for using.:-)\n");&lt;br /&gt;      }&lt;br /&gt;      else printf("You do not have the right to use this code.:-(\nThank you.\n");&lt;br /&gt;}&lt;/span&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7598811904790233931-1549883027943728170?l=stonestrange.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://stonestrange.blogspot.com/feeds/1549883027943728170/comments/default' title='帖子评论'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7598811904790233931&amp;postID=1549883027943728170' title='0 条评论'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7598811904790233931/posts/default/1549883027943728170'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7598811904790233931/posts/default/1549883027943728170'/><link rel='alternate' type='text/html' href='http://stonestrange.blogspot.com/2008/04/blog-post.html' title='用信号量来实现读者-写者问题'/><author><name>stonestrange</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp1.blogger.com/_F6b5Psa149E/R_sMtqwqXnI/AAAAAAAAARc/3tAdCOe1r_o/S220/%E5%A4%8D%E4%BB%B6+11023341.jpg'/></author><thr:total>0</thr:total></entry></feed>
