﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>IT博客-淡泊明志、宁静致远-随笔分类-Linux内核驱动编程</title><link>http://www.cnitblog.com/houcy/category/6986.html</link><description>A Diamond is just a piece of Coal that did well under Pressure.</description><language>zh-cn</language><lastBuildDate>Tue, 27 Sep 2011 00:03:24 GMT</lastBuildDate><pubDate>Tue, 27 Sep 2011 00:03:24 GMT</pubDate><ttl>60</ttl><item><title>【收藏三】BIOS 中断</title><link>http://www.cnitblog.com/houcy/archive/2009/01/11/53703.html</link><dc:creator>挑灯看剑</dc:creator><author>挑灯看剑</author><pubDate>Sun, 11 Jan 2009 11:54:00 GMT</pubDate><guid>http://www.cnitblog.com/houcy/archive/2009/01/11/53703.html</guid><wfw:comment>http://www.cnitblog.com/houcy/comments/53703.html</wfw:comment><comments>http://www.cnitblog.com/houcy/archive/2009/01/11/53703.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/houcy/comments/commentRss/53703.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/houcy/services/trackbacks/53703.html</trackback:ping><description><![CDATA[<h2 align=center>DOS Interrupt Summary</h2>
<pre>	<a href="file:///C:/Documents%20and%20Settings/Administrator/桌面/bios中断手册/bios中断手册/int_20.html"><u><font color=#800080>INT 20</font></u></a>  Program terminate
<a href="file:///C:/Documents%20and%20Settings/Administrator/桌面/bios中断手册/bios中断手册/int_21.html"><u><font color=#800080>INT 21</font></u></a>  DOS Function Dispatcher
<a href="file:///C:/Documents%20and%20Settings/Administrator/桌面/bios中断手册/bios中断手册/int_22.html"><u><font color=#0000ff>INT 22</font></u></a>  Program Terminate
<a href="file:///C:/Documents%20and%20Settings/Administrator/桌面/bios中断手册/bios中断手册/int_23.html"><u><font color=#0000ff>INT 23</font></u></a>  Ctl-break exit address
<a href="file:///C:/Documents%20and%20Settings/Administrator/桌面/bios中断手册/bios中断手册/int_24.html"><u><font color=#0000ff>INT 24</font></u></a>  Critical error handler address
<a href="file:///C:/Documents%20and%20Settings/Administrator/桌面/bios中断手册/bios中断手册/int_25.html"><u><font color=#800080>INT 25</font></u></a>  Absolute disk read
<a href="file:///C:/Documents%20and%20Settings/Administrator/桌面/bios中断手册/bios中断手册/int_26.html"><u><font color=#0000ff>INT 26</font></u></a>  Absolute disk write
<a href="file:///C:/Documents%20and%20Settings/Administrator/桌面/bios中断手册/bios中断手册/int_27.html"><u><font color=#0000ff>INT 27</font></u></a>  Terminate but stay resident
<a href="file:///C:/Documents%20and%20Settings/Administrator/桌面/bios中断手册/bios中断手册/int_28.html"><u><font color=#0000ff>INT 28</font></u></a>  DOS idle loop/scheduler (undocumented)
<a href="file:///C:/Documents%20and%20Settings/Administrator/桌面/bios中断手册/bios中断手册/int_29.html"><u><font color=#0000ff>INT 29</font></u></a>  Fast character output (undocumented)
<a href="file:///C:/Documents%20and%20Settings/Administrator/桌面/bios中断手册/bios中断手册/int_2e.html"><u><font color=#0000ff>INT 2E</font></u></a>  Execute command using base level COMMAND.COM (undoc.)
<a href="file:///C:/Documents%20and%20Settings/Administrator/桌面/bios中断手册/bios中断手册/int_2f.html"><u><font color=#0000ff>INT 2F</font></u></a>  Multiplex interrupt (DOS 3.x+)
</pre>
<p>&nbsp;</p>
<h2 align=center>INT 21 - DOS Function Dispatcher</h2>
<pre></pre>
<pre>	<a href="file:///C:/Documents%20and%20Settings/Administrator/桌面/bios中断手册/bios中断手册/int_21-0.html"><u><font color=#0000ff>INT 21,0</font></u></a>  Program terminate
<a href="file:///C:/Documents%20and%20Settings/Administrator/桌面/bios中断手册/bios中断手册/int_21-1.html"><u><font color=#0000ff>INT 21,1</font></u></a>  Keyboard input with echo
<a href="file:///C:/Documents%20and%20Settings/Administrator/桌面/bios中断手册/bios中断手册/int_21-2.html"><u><font color=#0000ff>INT 21,2</font></u></a>  Display output
<a href="file:///C:/Documents%20and%20Settings/Administrator/桌面/bios中断手册/bios中断手册/int_21-3.html"><u><font color=#0000ff>INT 21,3</font></u></a>  Wait for auxiliary device input
<a href="file:///C:/Documents%20and%20Settings/Administrator/桌面/bios中断手册/bios中断手册/int_21-4.html"><u><font color=#0000ff>INT 21,4</font></u></a>  Auxiliary output
<a href="file:///C:/Documents%20and%20Settings/Administrator/桌面/bios中断手册/bios中断手册/int_21-5.html"><u><font color=#0000ff>INT 21,5</font></u></a>  Printer output
<a href="file:///C:/Documents%20and%20Settings/Administrator/桌面/bios中断手册/bios中断手册/int_21-6.html"><u><font color=#0000ff>INT 21,6</font></u></a>  Direct console I/O
<a href="file:///C:/Documents%20and%20Settings/Administrator/桌面/bios中断手册/bios中断手册/int_21-7.html"><u><font color=#0000ff>INT 21,7</font></u></a>  Wait for direct console input without echo
<a href="file:///C:/Documents%20and%20Settings/Administrator/桌面/bios中断手册/bios中断手册/int_21-8.html"><u><font color=#0000ff>INT 21,8</font></u></a>  Wait for console input without echo
<a href="file:///C:/Documents%20and%20Settings/Administrator/桌面/bios中断手册/bios中断手册/int_21-9.html"><u><font color=#0000ff>INT 21,9</font></u></a>  Print string
<a href="file:///C:/Documents%20and%20Settings/Administrator/桌面/bios中断手册/bios中断手册/int_21-a.html"><u><font color=#0000ff>INT 21,A</font></u></a>  Buffered keyboard input
<a href="file:///C:/Documents%20and%20Settings/Administrator/桌面/bios中断手册/bios中断手册/int_21-b.html"><u><font color=#0000ff>INT 21,B</font></u></a>  Check standard input status
<a href="file:///C:/Documents%20and%20Settings/Administrator/桌面/bios中断手册/bios中断手册/int_21-c.html"><u><font color=#0000ff>INT 21,C</font></u></a>  Clear keyboard buffer, invoke keyboard function
<a href="file:///C:/Documents%20and%20Settings/Administrator/桌面/bios中断手册/bios中断手册/int_21-d.html"><u><font color=#800080>INT 21,D</font></u></a>  Disk reset
<a href="file:///C:/Documents%20and%20Settings/Administrator/桌面/bios中断手册/bios中断手册/int_21-e.html"><u><font color=#0000ff>INT 21,E</font></u></a>  Select disk
<a href="file:///C:/Documents%20and%20Settings/Administrator/桌面/bios中断手册/bios中断手册/int_21-f.html"><u><font color=#0000ff>INT 21,F</font></u></a>  Open file using <a href="file:///C:/Documents%20and%20Settings/Administrator/桌面/bios中断手册/bios中断手册/fcb.html"><u><font color=#0000ff>FCB</font></u></a>
<a href="file:///C:/Documents%20and%20Settings/Administrator/桌面/bios中断手册/bios中断手册/int_21-10.html"><u><font color=#0000ff>INT 21,10</font></u></a>  Close file using FCB
<a href="file:///C:/Documents%20and%20Settings/Administrator/桌面/bios中断手册/bios中断手册/int_21-11.html"><u><font color=#800080>INT 21,11</font></u></a>  Search for first entry using FCB
<a href="file:///C:/Documents%20and%20Settings/Administrator/桌面/bios中断手册/bios中断手册/int_21-12.html"><u><font color=#0000ff>INT 21,12</font></u></a>  Search for next entry using FCB
<a href="file:///C:/Documents%20and%20Settings/Administrator/桌面/bios中断手册/bios中断手册/int_21-13.html"><u><font color=#0000ff>INT 21,13</font></u></a>  Delete file using FCB
<a href="file:///C:/Documents%20and%20Settings/Administrator/桌面/bios中断手册/bios中断手册/int_21-14.html"><u><font color=#0000ff>INT 21,14</font></u></a>  Sequential read using FCB
<a href="file:///C:/Documents%20and%20Settings/Administrator/桌面/bios中断手册/bios中断手册/int_21-15.html"><u><font color=#0000ff>INT 21,15</font></u></a>  Sequential write using FCB
<a href="file:///C:/Documents%20and%20Settings/Administrator/桌面/bios中断手册/bios中断手册/int_21-16.html"><u><font color=#0000ff>INT 21,16</font></u></a>  Create a file using FCB
<a href="file:///C:/Documents%20and%20Settings/Administrator/桌面/bios中断手册/bios中断手册/int_21-17.html"><u><font color=#0000ff>INT 21,17</font></u></a>  Rename file using FCB
INT 21,18  DOS dummy function (CP/M) (not used/listed)
<a href="file:///C:/Documents%20and%20Settings/Administrator/桌面/bios中断手册/bios中断手册/int_21-19.html"><u><font color=#0000ff>INT 21,19</font></u></a>  Get current default drive
<a href="file:///C:/Documents%20and%20Settings/Administrator/桌面/bios中断手册/bios中断手册/int_21-1a.html"><u><font color=#0000ff>INT 21,1A</font></u></a>  Set disk transfer address
<a href="file:///C:/Documents%20and%20Settings/Administrator/桌面/bios中断手册/bios中断手册/int_21-1b.html"><u><font color=#0000ff>INT 21,1B</font></u></a>  Get allocation table information
<a href="file:///C:/Documents%20and%20Settings/Administrator/桌面/bios中断手册/bios中断手册/int_21-1c.html"><u><font color=#0000ff>INT 21,1C</font></u></a>  Get allocation table info for specific device
INT 21,1D  DOS dummy function (CP/M) (not used/listed)
INT 21,1E  DOS dummy function (CP/M) (not used/listed)
<a href="file:///C:/Documents%20and%20Settings/Administrator/桌面/bios中断手册/bios中断手册/int_21-1f.html"><u><font color=#0000ff>INT 21,1F</font></u></a>  Get pointer to default drive parameter table (undocumented)
INT 21,20  DOS dummy function (CP/M) (not used/listed)
<a href="file:///C:/Documents%20and%20Settings/Administrator/桌面/bios中断手册/bios中断手册/int_21-21.html"><u><font color=#0000ff>INT 21,21</font></u></a>  Random read using <a href="file:///C:/Documents%20and%20Settings/Administrator/桌面/bios中断手册/bios中断手册/fcb.html"><u><font color=#0000ff>FCB</font></u></a>
<a href="file:///C:/Documents%20and%20Settings/Administrator/桌面/bios中断手册/bios中断手册/int_21-22.html"><u><font color=#0000ff>INT 21,22</font></u></a>  Random write using FCB
<a href="file:///C:/Documents%20and%20Settings/Administrator/桌面/bios中断手册/bios中断手册/int_21-23.html"><u><font color=#0000ff>INT 21,23</font></u></a>  Get file size using FCB
<a href="file:///C:/Documents%20and%20Settings/Administrator/桌面/bios中断手册/bios中断手册/int_21-24.html"><u><font color=#0000ff>INT 21,24</font></u></a>  Set relative record field for FCB
<a href="file:///C:/Documents%20and%20Settings/Administrator/桌面/bios中断手册/bios中断手册/int_21-25.html"><u><font color=#0000ff>INT 21,25</font></u></a>  Set interrupt vector
<a href="file:///C:/Documents%20and%20Settings/Administrator/桌面/bios中断手册/bios中断手册/int_21-26.html"><u><font color=#0000ff>INT 21,26</font></u></a>  Create new program segment
<a href="file:///C:/Documents%20and%20Settings/Administrator/桌面/bios中断手册/bios中断手册/int_21-27.html"><u><font color=#0000ff>INT 21,27</font></u></a>  Random block read using FCB
<a href="file:///C:/Documents%20and%20Settings/Administrator/桌面/bios中断手册/bios中断手册/int_21-28.html"><u><font color=#0000ff>INT 21,28</font></u></a>  Random block write using FCB
<a href="file:///C:/Documents%20and%20Settings/Administrator/桌面/bios中断手册/bios中断手册/int_21-29.html"><u><font color=#0000ff>INT 21,29</font></u></a>  Parse filename for FCB
<a href="file:///C:/Documents%20and%20Settings/Administrator/桌面/bios中断手册/bios中断手册/int_21-2a.html"><u><font color=#0000ff>INT 21,2A</font></u></a>  Get date
<a href="file:///C:/Documents%20and%20Settings/Administrator/桌面/bios中断手册/bios中断手册/int_21-2b.html"><u><font color=#0000ff>INT 21,2B</font></u></a>  Set date
<a href="file:///C:/Documents%20and%20Settings/Administrator/桌面/bios中断手册/bios中断手册/int_21-2c.html"><u><font color=#0000ff>INT 21,2C</font></u></a>  Get time
<a href="file:///C:/Documents%20and%20Settings/Administrator/桌面/bios中断手册/bios中断手册/int_21-2d.html"><u><font color=#0000ff>INT 21,2D</font></u></a>  Set time
<a href="file:///C:/Documents%20and%20Settings/Administrator/桌面/bios中断手册/bios中断手册/int_21-2e.html"><u><font color=#0000ff>INT 21,2E</font></u></a>  Set/reset verify switch
<a href="file:///C:/Documents%20and%20Settings/Administrator/桌面/bios中断手册/bios中断手册/int_21-2f.html"><u><font color=#0000ff>INT 21,2F</font></u></a>  Get disk transfer address
<a href="file:///C:/Documents%20and%20Settings/Administrator/桌面/bios中断手册/bios中断手册/int_21-30.html"><u><font color=#0000ff>INT 21,30</font></u></a>  Get DOS version number
<a href="file:///C:/Documents%20and%20Settings/Administrator/桌面/bios中断手册/bios中断手册/int_21-31.html"><u><font color=#0000ff>INT 21,31</font></u></a>  Terminate process and remain resident
<a href="file:///C:/Documents%20and%20Settings/Administrator/桌面/bios中断手册/bios中断手册/int_21-32.html"><u><font color=#0000ff>INT 21,32</font></u></a>  Get pointer to drive parameter table (undocumented)
<a href="file:///C:/Documents%20and%20Settings/Administrator/桌面/bios中断手册/bios中断手册/int_21-33.html"><u><font color=#0000ff>INT 21,33</font></u></a>  Get/set <a href="file:///C:/Documents%20and%20Settings/Administrator/桌面/bios中断手册/bios中断手册/int_1b.html"><u><font color=#0000ff>Ctrl-Break</font></u></a> check state &amp; get boot drive
<a href="file:///C:/Documents%20and%20Settings/Administrator/桌面/bios中断手册/bios中断手册/int_21-34.html"><u><font color=#0000ff>INT 21,34</font></u></a>  Get address to DOS critical flag (undocumented)
<a href="file:///C:/Documents%20and%20Settings/Administrator/桌面/bios中断手册/bios中断手册/int_21-35.html"><u><font color=#0000ff>INT 21,35</font></u></a>  Get vector
<a href="file:///C:/Documents%20and%20Settings/Administrator/桌面/bios中断手册/bios中断手册/int_21-36.html"><u><font color=#0000ff>INT 21,36</font></u></a>  Get disk free space
<a href="file:///C:/Documents%20and%20Settings/Administrator/桌面/bios中断手册/bios中断手册/int_21-37.html"><u><font color=#0000ff>INT 21,37</font></u></a>  Get/set switch character (undocumented)
<a href="file:///C:/Documents%20and%20Settings/Administrator/桌面/bios中断手册/bios中断手册/int_21-38.html"><u><font color=#0000ff>INT 21,38</font></u></a>  Get/set country dependent information
<a href="file:///C:/Documents%20and%20Settings/Administrator/桌面/bios中断手册/bios中断手册/int_21-39.html"><u><font color=#0000ff>INT 21,39</font></u></a>  Create subdirectory (mkdir)
<a href="file:///C:/Documents%20and%20Settings/Administrator/桌面/bios中断手册/bios中断手册/int_21-3a.html"><u><font color=#0000ff>INT 21,3A</font></u></a>  Remove subdirectory (rmdir)
<a href="file:///C:/Documents%20and%20Settings/Administrator/桌面/bios中断手册/bios中断手册/int_21-3b.html"><u><font color=#0000ff>INT 21,3B</font></u></a>  Change current subdirectory (chdir)
<a href="file:///C:/Documents%20and%20Settings/Administrator/桌面/bios中断手册/bios中断手册/int_21-3c.html"><u><font color=#0000ff>INT 21,3C</font></u></a>  Create file using handle
<a href="file:///C:/Documents%20and%20Settings/Administrator/桌面/bios中断手册/bios中断手册/int_21-3d.html"><u><font color=#0000ff>INT 21,3D</font></u></a>  Open file using handle
<a href="file:///C:/Documents%20and%20Settings/Administrator/桌面/bios中断手册/bios中断手册/int_21-3e.html"><u><font color=#0000ff>INT 21,3E</font></u></a>  Close file using handle
<a href="file:///C:/Documents%20and%20Settings/Administrator/桌面/bios中断手册/bios中断手册/int_21-3f.html"><u><font color=#0000ff>INT 21,3F</font></u></a>  Read file or device using handle
<a href="file:///C:/Documents%20and%20Settings/Administrator/桌面/bios中断手册/bios中断手册/int_21-40.html"><u><font color=#0000ff>INT 21,40</font></u></a>  Write file or device using handle
<a href="file:///C:/Documents%20and%20Settings/Administrator/桌面/bios中断手册/bios中断手册/int_21-41.html"><u><font color=#0000ff>INT 21,41</font></u></a>  Delete file
<a href="file:///C:/Documents%20and%20Settings/Administrator/桌面/bios中断手册/bios中断手册/int_21-42.html"><u><font color=#0000ff>INT 21,42</font></u></a>  Move file pointer using handle
<a href="file:///C:/Documents%20and%20Settings/Administrator/桌面/bios中断手册/bios中断手册/int_21-43.html"><u><font color=#0000ff>INT 21,43</font></u></a>  Change file mode
<a href="file:///C:/Documents%20and%20Settings/Administrator/桌面/bios中断手册/bios中断手册/int_21-44.html"><u><font color=#0000ff>INT 21,44</font></u></a>  I/O control for devices (<a href="file:///C:/Documents%20and%20Settings/Administrator/桌面/bios中断手册/bios中断手册/ioctl.html"><u><font color=#0000ff>IOCTL</font></u></a>)
<a href="file:///C:/Documents%20and%20Settings/Administrator/桌面/bios中断手册/bios中断手册/int_21-45.html"><u><font color=#0000ff>INT 21,45</font></u></a>  Duplicate file handle
<a href="file:///C:/Documents%20and%20Settings/Administrator/桌面/bios中断手册/bios中断手册/int_21-46.html"><u><font color=#0000ff>INT 21,46</font></u></a>  Force duplicate file handle
<a href="file:///C:/Documents%20and%20Settings/Administrator/桌面/bios中断手册/bios中断手册/int_21-47.html"><u><font color=#0000ff>INT 21,47</font></u></a>  Get current directory
<a href="file:///C:/Documents%20and%20Settings/Administrator/桌面/bios中断手册/bios中断手册/int_21-48.html"><u><font color=#0000ff>INT 21,48</font></u></a>  Allocate memory blocks
<a href="file:///C:/Documents%20and%20Settings/Administrator/桌面/bios中断手册/bios中断手册/int_21-49.html"><u><font color=#0000ff>INT 21,49</font></u></a>  Free allocated memory blocks
<a href="file:///C:/Documents%20and%20Settings/Administrator/桌面/bios中断手册/bios中断手册/int_21-4a.html"><u><font color=#0000ff>INT 21,4A</font></u></a>  Modify allocated memory blocks
<a href="file:///C:/Documents%20and%20Settings/Administrator/桌面/bios中断手册/bios中断手册/int_21-4b.html"><u><font color=#0000ff>INT 21,4B</font></u></a>  EXEC load and execute program (func 1 undocumented)
<a href="file:///C:/Documents%20and%20Settings/Administrator/桌面/bios中断手册/bios中断手册/int_21-4c.html"><u><font color=#0000ff>INT 21,4C</font></u></a>  Terminate process with return code
<a href="file:///C:/Documents%20and%20Settings/Administrator/桌面/bios中断手册/bios中断手册/int_21-4d.html"><u><font color=#0000ff>INT 21,4D</font></u></a>  Get return code of a sub-process
<a href="file:///C:/Documents%20and%20Settings/Administrator/桌面/bios中断手册/bios中断手册/int_21-4e.html"><u><font color=#0000ff>INT 21,4E</font></u></a>  Find first matching file
<a href="file:///C:/Documents%20and%20Settings/Administrator/桌面/bios中断手册/bios中断手册/int_21-4f.html"><u><font color=#0000ff>INT 21,4F</font></u></a>  Find next matching file
<a href="file:///C:/Documents%20and%20Settings/Administrator/桌面/bios中断手册/bios中断手册/int_21-50.html"><u><font color=#0000ff>INT 21,50</font></u></a>  Set current process id (undocumented)
<a href="file:///C:/Documents%20and%20Settings/Administrator/桌面/bios中断手册/bios中断手册/int_21-51.html"><u><font color=#0000ff>INT 21,51</font></u></a>  Get current process id (undocumented)
<a href="file:///C:/Documents%20and%20Settings/Administrator/桌面/bios中断手册/bios中断手册/int_21-52.html"><u><font color=#0000ff>INT 21,52</font></u></a>  Get pointer to DOS "INVARS" (undocumented)
<a href="file:///C:/Documents%20and%20Settings/Administrator/桌面/bios中断手册/bios中断手册/int_21-53.html"><u><font color=#0000ff>INT 21,53</font></u></a>  Generate drive parameter table (undocumented)
<a href="file:///C:/Documents%20and%20Settings/Administrator/桌面/bios中断手册/bios中断手册/int_21-54.html"><u><font color=#0000ff>INT 21,54</font></u></a>  Get verify setting
<a href="file:///C:/Documents%20and%20Settings/Administrator/桌面/bios中断手册/bios中断手册/int_21-55.html"><u><font color=#0000ff>INT 21,55</font></u></a>  Create <a href="file:///C:/Documents%20and%20Settings/Administrator/桌面/bios中断手册/bios中断手册/program_segment_prefix.html"><u><font color=#800080>PSP</font></u></a> (undocumented)
<a href="file:///C:/Documents%20and%20Settings/Administrator/桌面/bios中断手册/bios中断手册/int_21-56.html"><u><font color=#0000ff>INT 21,56</font></u></a>  Rename file
<a href="file:///C:/Documents%20and%20Settings/Administrator/桌面/bios中断手册/bios中断手册/int_21-57.html"><u><font color=#0000ff>INT 21,57</font></u></a>  Get/set file date and time using handle
<a href="file:///C:/Documents%20and%20Settings/Administrator/桌面/bios中断手册/bios中断手册/int_21-58.html"><u><font color=#0000ff>INT 21,58</font></u></a>  Get/set memory allocation strategy (3.x+, undocumented)
<a href="file:///C:/Documents%20and%20Settings/Administrator/桌面/bios中断手册/bios中断手册/int_21-59.html"><u><font color=#0000ff>INT 21,59</font></u></a>  Get extended error information (3.x+)
<a href="file:///C:/Documents%20and%20Settings/Administrator/桌面/bios中断手册/bios中断手册/int_21-5a.html"><u><font color=#0000ff>INT 21,5A</font></u></a>  Create temporary file (3.x+)
<a href="file:///C:/Documents%20and%20Settings/Administrator/桌面/bios中断手册/bios中断手册/int_21-5b.html"><u><font color=#0000ff>INT 21,5B</font></u></a>  Create new file (3.x+)
<a href="file:///C:/Documents%20and%20Settings/Administrator/桌面/bios中断手册/bios中断手册/int_21-5c.html"><u><font color=#0000ff>INT 21,5C</font></u></a>  Lock/unlock file access (3.x+)
<a href="file:///C:/Documents%20and%20Settings/Administrator/桌面/bios中断手册/bios中断手册/int_21-5d.html"><u><font color=#0000ff>INT 21,5D</font></u></a>  Critical error information (undocumented 3.x+)
<a href="file:///C:/Documents%20and%20Settings/Administrator/桌面/bios中断手册/bios中断手册/int_21-5e.html"><u><font color=#0000ff>INT 21,5E</font></u></a>  Network services (3.1+)
<a href="file:///C:/Documents%20and%20Settings/Administrator/桌面/bios中断手册/bios中断手册/int_21-5f.html"><u><font color=#0000ff>INT 21,5F</font></u></a>  Network redirection (3.1+)
<a href="file:///C:/Documents%20and%20Settings/Administrator/桌面/bios中断手册/bios中断手册/int_21-60.html"><u><font color=#0000ff>INT 21,60</font></u></a>  Get fully qualified file name (undocumented 3.x+)
<a href="file:///C:/Documents%20and%20Settings/Administrator/桌面/bios中断手册/bios中断手册/int_21-62.html"><u><font color=#0000ff>INT 21,62</font></u></a>  Get address of program segment prefix (3.x+)
<a href="file:///C:/Documents%20and%20Settings/Administrator/桌面/bios中断手册/bios中断手册/int_21-63.html"><u><font color=#0000ff>INT 21,63</font></u></a>  Get system lead byte table (MSDOS 2.25 only)
<a href="file:///C:/Documents%20and%20Settings/Administrator/桌面/bios中断手册/bios中断手册/int_21-64.html"><u><font color=#0000ff>INT 21,64</font></u></a>  Set device driver look ahead  (undocumented 3.3+)
<a href="file:///C:/Documents%20and%20Settings/Administrator/桌面/bios中断手册/bios中断手册/int_21-65.html"><u><font color=#0000ff>INT 21,65</font></u></a>  Get extended country information (3.3+)
<a href="file:///C:/Documents%20and%20Settings/Administrator/桌面/bios中断手册/bios中断手册/int_21-66.html"><u><font color=#0000ff>INT 21,66</font></u></a>  Get/set global code page (3.3+)
<a href="file:///C:/Documents%20and%20Settings/Administrator/桌面/bios中断手册/bios中断手册/int_21-67.html"><u><font color=#0000ff>INT 21,67</font></u></a>  Set handle count (3.3+)
<a href="file:///C:/Documents%20and%20Settings/Administrator/桌面/bios中断手册/bios中断手册/int_21-68.html"><u><font color=#0000ff>INT 21,68</font></u></a>  Flush buffer (3.3+)
<a href="file:///C:/Documents%20and%20Settings/Administrator/桌面/bios中断手册/bios中断手册/int_21-69.html"><u><font color=#0000ff>INT 21,69</font></u></a>  Get/set disk serial number (undocumented DOS 4.0+)
INT 21,6A  DOS reserved (DOS 4.0+)
INT 21,6B  DOS reserved
<a href="file:///C:/Documents%20and%20Settings/Administrator/桌面/bios中断手册/bios中断手册/int_21-6c.html"><u><font color=#0000ff>INT 21,6C</font></u></a>  Extended open/create (4.x+)
<a href="file:///C:/Documents%20and%20Settings/Administrator/桌面/bios中断手册/bios中断手册/int_21-f8.html"><u><font color=#0000ff>INT 21,F8</font></u></a>  Set OEM INT 21 handler (functions F9-FF) (undocumented)
- int 21 functions are called with the function number in AH
- register AX may be altered, its contents are not guaranteed
- if an error occurs, CF is set to 1 and AX contains a simple
error code;	<a href="file:///C:/Documents%20and%20Settings/Administrator/桌面/bios中断手册/bios中断手册/int_21-59.html"><u><font color=#0000ff>INT 21,59</font></u></a> can be used to determine cause.
- most INT 21 functions do not restore the flags to pre-interrupt
state to allow returning of information via the flags register
</pre>
<img src ="http://www.cnitblog.com/houcy/aggbug/53703.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/houcy/" target="_blank">挑灯看剑</a> 2009-01-11 19:54 <a href="http://www.cnitblog.com/houcy/archive/2009/01/11/53703.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>【收藏二】地址环绕和A20地址线问题</title><link>http://www.cnitblog.com/houcy/archive/2009/01/11/53702.html</link><dc:creator>挑灯看剑</dc:creator><author>挑灯看剑</author><pubDate>Sun, 11 Jan 2009 11:49:00 GMT</pubDate><guid>http://www.cnitblog.com/houcy/archive/2009/01/11/53702.html</guid><wfw:comment>http://www.cnitblog.com/houcy/comments/53702.html</wfw:comment><comments>http://www.cnitblog.com/houcy/archive/2009/01/11/53702.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/houcy/comments/commentRss/53702.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/houcy/services/trackbacks/53702.html</trackback:ping><description><![CDATA[<h2>地址环绕和A20地址线问题</h2>
<h2><br><font face="楷体_GB2312 "><font size=2><font color=black>早期的8086只有20根地址线，只能访问1M的地址空间。CPU寻址则按段+偏移的方式进行。16位段+16位偏移的可能的范围是0-0x10FFEF（即0xFFFF0+0xFFFF），即1M+65520字节的范围。由于只有20根地址线，所以在对1M-1M+65520范围进行访问时，会发生&#8220;地址回绕&#8221;的现象，就是说实际会访问到0-65520的地方。据说某个著名的/臭名昭著的软件利用了这个特点。在80286，386等CPU上，它会失败，因为这些CPU有多于20根的地址线，并不产生&#8220;地址回绕&#8221;现象。为了保持完全的兼容性，IBM决定在PC AT系统上加个逻辑，来模仿以上的回绕特征。他们的方法就是把A20和键盘控制器的一个输出进行AND，这样来控制A20的打开和关闭。一开始时A20是被屏蔽的（总为0），直到系统软件去打开它。<br><br><strong>A20地址线问题</strong> <br>1981年8月，IBM公司最初推出的个人计算机IBM PC使用的CPU是Intel 8088。在该微机中地址线只有20根(A0-A19)。在当时内存RAM只有几百KB或不到1MB时，20根地址线已足够用来寻址这些内存。其所能寻址的最高地址是0xffff:0xffff，也即0x10ffef。对于超出0x100000(1MB)的寻址地址将默认地环绕到0x0ffef。当IBM公司于1985年引入AT机时，使用的是Intel 80286 CPU，具有24根地址线，最高可寻址16MB，并且有一个与8088完全兼容的实模式运行方式。然而，在寻址值超过1MB时它却不能象8088那样实现地址寻址的环绕。但是当时已经有一些程序是利用这种地址环绕机制进行工作的。为了实现完全的兼容性，IBM公司发明了使用一个开关来开启或禁止0x100000地址比特位。由于在当时的8042键盘控制器上恰好有空闲的端口引脚（输出端口P2，引脚P21），于是便使用了该引脚来作为与门控制这<br>个地址比特位。该信号即被称为A20。如果它为零，<strong>则比特20及以上地址都被清除</strong>。从而实现了兼容性。 由于在机器启动时，默认条件下，A20地址线是禁止的，所以操作系统必须使用适当的方法来开启它。但是由于各种兼容机所使用的芯片集不同，要做到这一点却是非常的麻烦。因此通常要在几种控制方法中选择。</font></font></font><br><font face="楷体_GB2312 "><font size=2><font color=black></font></font></font><br><font face="楷体_GB2312 "><font size=2><font color=black>对A20信号线进行控制的常用方法是通过设置键盘控制器的端口值。有些操作系统将A20的开启和禁止作为实模式与保护运行模式之间进行转换的标准过程中的一部分。由于键盘的控制器速度很慢，因此就不能使用键盘控制器对A20线来进行操作。为此引进了一个A20快速门选项(Fast Gate A20)，它使用I/O端口0x92来处理A20信号线，避免了使用慢速的键盘控制器操作方式。对于不含键盘控制器的系统就只能使用0x92端口来控制，但是该端口也有可能被其它兼容微机上的设备（如显示芯片）所使用，从而造成系统错误的操作。还有一种方式是通过读0xee端口来开启A20信号线，写该端口则会禁止A20信号线。</font></font></font></h2>
<p>&nbsp;</p>
<p><a href="http://www.2beanet.com/bbs/viewthread.php?tid=246&amp;extra=page%3D2">http://www.2beanet.com/bbs/viewthread.php?tid=246&amp;extra=page%3D2</a></p>
<img src ="http://www.cnitblog.com/houcy/aggbug/53702.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/houcy/" target="_blank">挑灯看剑</a> 2009-01-11 19:49 <a href="http://www.cnitblog.com/houcy/archive/2009/01/11/53702.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>【收藏一】DOS6.0源程序中的硬盘引导记录源程序FDBOOT.ASM</title><link>http://www.cnitblog.com/houcy/archive/2009/01/11/53701.html</link><dc:creator>挑灯看剑</dc:creator><author>挑灯看剑</author><pubDate>Sun, 11 Jan 2009 11:48:00 GMT</pubDate><guid>http://www.cnitblog.com/houcy/archive/2009/01/11/53701.html</guid><wfw:comment>http://www.cnitblog.com/houcy/comments/53701.html</wfw:comment><comments>http://www.cnitblog.com/houcy/archive/2009/01/11/53701.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/houcy/comments/commentRss/53701.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/houcy/services/trackbacks/53701.html</trackback:ping><description><![CDATA[<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #008080">&nbsp;&nbsp;1</span><img id=Codehighlighter1_1_115_Open_Image onclick="this.style.display='none'; Codehighlighter1_1_115_Open_Text.style.display='none'; Codehighlighter1_1_115_Closed_Image.style.display='inline'; Codehighlighter1_1_115_Closed_Text.style.display='inline';" src="http://www.cnitblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_1_115_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_1_115_Closed_Text.style.display='none'; Codehighlighter1_1_115_Open_Image.style.display='inline'; Codehighlighter1_1_115_Open_Text.style.display='inline';" src="http://www.cnitblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top><span style="COLOR: #000000">;</span><span id=Codehighlighter1_1_115_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">/**/</span><span id=Codehighlighter1_1_115_Open_Text><span style="COLOR: #008000">/*</span><span style="COLOR: #008000">&nbsp;<br></span><span style="COLOR: #008080">&nbsp;&nbsp;2</span><span style="COLOR: #008000"><img src="http://www.cnitblog.com/Images/OutliningIndicators/InBlock.gif" align=top>;&nbsp;*&nbsp;Microsoft&nbsp;Confidential&nbsp;<br></span><span style="COLOR: #008080">&nbsp;&nbsp;3</span><span style="COLOR: #008000"><img src="http://www.cnitblog.com/Images/OutliningIndicators/InBlock.gif" align=top>;&nbsp;*&nbsp;Copyright&nbsp;(C)&nbsp;Microsoft&nbsp;Corporation&nbsp;1983&nbsp;-&nbsp;1991&nbsp;<br></span><span style="COLOR: #008080">&nbsp;&nbsp;4</span><span style="COLOR: #008000"><img src="http://www.cnitblog.com/Images/OutliningIndicators/InBlock.gif" align=top>;&nbsp;*&nbsp;All&nbsp;Rights&nbsp;Reserved.&nbsp;<br></span><span style="COLOR: #008080">&nbsp;&nbsp;5</span><span style="COLOR: #008000"><img src="http://www.cnitblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>;&nbsp;</span><span style="COLOR: #008000">*/</span></span><span style="COLOR: #000000">&nbsp;<br></span><span style="COLOR: #008080">&nbsp;&nbsp;6</span><span style="COLOR: #000000"><img src="http://www.cnitblog.com/Images/OutliningIndicators/None.gif" align=top>;&nbsp;BOOT&nbsp;</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">&nbsp;IBM&nbsp;hard&nbsp;disk&nbsp;boot&nbsp;record&nbsp;</span><span style="COLOR: #000000">6</span><span style="COLOR: #000000">/</span><span style="COLOR: #000000">8</span><span style="COLOR: #000000">/</span><span style="COLOR: #000000">82</span><span style="COLOR: #000000">&nbsp;<br></span><span style="COLOR: #008080">&nbsp;&nbsp;7</span><span style="COLOR: #000000"><img src="http://www.cnitblog.com/Images/OutliningIndicators/None.gif" align=top>;&nbsp;<br></span><span style="COLOR: #008080">&nbsp;&nbsp;8</span><span style="COLOR: #000000"><img src="http://www.cnitblog.com/Images/OutliningIndicators/None.gif" align=top>;&nbsp;<br></span><span style="COLOR: #008080">&nbsp;&nbsp;9</span><span style="COLOR: #000000"><img src="http://www.cnitblog.com/Images/OutliningIndicators/None.gif" align=top>;&nbsp;This&nbsp;is&nbsp;the&nbsp;standard&nbsp;boot&nbsp;record&nbsp;that&nbsp;will&nbsp;be&nbsp;shipped&nbsp;on&nbsp;all&nbsp;hard&nbsp;disks.&nbsp;It&nbsp;contains:&nbsp;<br></span><span style="COLOR: #008080">&nbsp;10</span><span style="COLOR: #000000"><img src="http://www.cnitblog.com/Images/OutliningIndicators/None.gif" align=top>;&nbsp;<br></span><span style="COLOR: #008080">&nbsp;11</span><span style="COLOR: #000000"><img src="http://www.cnitblog.com/Images/OutliningIndicators/None.gif" align=top>;&nbsp;</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">.&nbsp;Code&nbsp;to&nbsp;load&nbsp;(and&nbsp;give&nbsp;control&nbsp;to)&nbsp;the&nbsp;boot&nbsp;record&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">&nbsp;of&nbsp;</span><span style="COLOR: #000000">4</span><span style="COLOR: #000000">&nbsp;possible&nbsp;<br></span><span style="COLOR: #008080">&nbsp;12</span><span style="COLOR: #000000"><img src="http://www.cnitblog.com/Images/OutliningIndicators/None.gif" align=top>;&nbsp;operating&nbsp;systems.&nbsp;<br></span><span style="COLOR: #008080">&nbsp;13</span><span style="COLOR: #000000"><img src="http://www.cnitblog.com/Images/OutliningIndicators/None.gif" align=top>;&nbsp;<br></span><span style="COLOR: #008080">&nbsp;14</span><span style="COLOR: #000000"><img src="http://www.cnitblog.com/Images/OutliningIndicators/None.gif" align=top>;&nbsp;</span><span style="COLOR: #000000">2</span><span style="COLOR: #000000">.&nbsp;A&nbsp;partition&nbsp;table&nbsp;at&nbsp;the&nbsp;end&nbsp;of&nbsp;the&nbsp;boot&nbsp;record,&nbsp;followed&nbsp;by&nbsp;the&nbsp;required&nbsp;signature.&nbsp;<br></span><span style="COLOR: #008080">&nbsp;15</span><span style="COLOR: #000000"><img src="http://www.cnitblog.com/Images/OutliningIndicators/None.gif" align=top>;&nbsp;<br></span><span style="COLOR: #008080">&nbsp;16</span><span style="COLOR: #000000"><img src="http://www.cnitblog.com/Images/OutliningIndicators/None.gif" align=top>;&nbsp;<br></span><span style="COLOR: #008080">&nbsp;17</span><span style="COLOR: #000000"><img src="http://www.cnitblog.com/Images/OutliningIndicators/None.gif" align=top>_data&nbsp;segment&nbsp;</span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">&nbsp;<br></span><span style="COLOR: #008080">&nbsp;18</span><span style="COLOR: #000000"><img src="http://www.cnitblog.com/Images/OutliningIndicators/None.gif" align=top>assume&nbsp;cs:_data,ds:_data&nbsp;<br></span><span style="COLOR: #008080">&nbsp;19</span><span style="COLOR: #000000"><img src="http://www.cnitblog.com/Images/OutliningIndicators/None.gif" align=top>org&nbsp;600h&nbsp;<br></span><span style="COLOR: #008080">&nbsp;20</span><span style="COLOR: #000000"><img src="http://www.cnitblog.com/Images/OutliningIndicators/None.gif" align=top>cli&nbsp;;no&nbsp;interrupts&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">&nbsp;now&nbsp;<br></span><span style="COLOR: #008080">&nbsp;21</span><span style="COLOR: #000000"><img src="http://www.cnitblog.com/Images/OutliningIndicators/None.gif" align=top>xor&nbsp;ax,ax&nbsp;<br></span><span style="COLOR: #008080">&nbsp;22</span><span style="COLOR: #000000"><img src="http://www.cnitblog.com/Images/OutliningIndicators/None.gif" align=top>mov&nbsp;ss,ax&nbsp;<br></span><span style="COLOR: #008080">&nbsp;23</span><span style="COLOR: #000000"><img src="http://www.cnitblog.com/Images/OutliningIndicators/None.gif" align=top>mov&nbsp;sp,7c00h&nbsp;;</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&nbsp;stack&nbsp;at&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">:7c00&nbsp;<br></span><span style="COLOR: #008080">&nbsp;24</span><span style="COLOR: #000000"><img src="http://www.cnitblog.com/Images/OutliningIndicators/None.gif" align=top>mov&nbsp;si,sp&nbsp;;where&nbsp;</span><span style="COLOR: #0000ff">this</span><span style="COLOR: #000000">&nbsp;boot&nbsp;record&nbsp;starts&nbsp;</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">:7c00&nbsp;<br></span><span style="COLOR: #008080">&nbsp;25</span><span style="COLOR: #000000"><img src="http://www.cnitblog.com/Images/OutliningIndicators/None.gif" align=top>push&nbsp;ax&nbsp;<br></span><span style="COLOR: #008080">&nbsp;26</span><span style="COLOR: #000000"><img src="http://www.cnitblog.com/Images/OutliningIndicators/None.gif" align=top>pop&nbsp;es&nbsp;;seg&nbsp;regs&nbsp;the&nbsp;same&nbsp;<br></span><span style="COLOR: #008080">&nbsp;27</span><span style="COLOR: #000000"><img src="http://www.cnitblog.com/Images/OutliningIndicators/None.gif" align=top>push&nbsp;ax&nbsp;<br></span><span style="COLOR: #008080">&nbsp;28</span><span style="COLOR: #000000"><img src="http://www.cnitblog.com/Images/OutliningIndicators/None.gif" align=top>pop&nbsp;ds&nbsp;<br></span><span style="COLOR: #008080">&nbsp;29</span><span style="COLOR: #000000"><img src="http://www.cnitblog.com/Images/OutliningIndicators/None.gif" align=top>sti&nbsp;;interrupts&nbsp;ok&nbsp;now&nbsp;<br></span><span style="COLOR: #008080">&nbsp;30</span><span style="COLOR: #000000"><img src="http://www.cnitblog.com/Images/OutliningIndicators/None.gif" align=top>cld&nbsp;<br></span><span style="COLOR: #008080">&nbsp;31</span><span style="COLOR: #000000"><img src="http://www.cnitblog.com/Images/OutliningIndicators/None.gif" align=top>mov&nbsp;di,0600h&nbsp;;where&nbsp;to&nbsp;relocate&nbsp;</span><span style="COLOR: #0000ff">this</span><span style="COLOR: #000000">&nbsp;boot&nbsp;record&nbsp;to&nbsp;<br></span><span style="COLOR: #008080">&nbsp;32</span><span style="COLOR: #000000"><img src="http://www.cnitblog.com/Images/OutliningIndicators/None.gif" align=top>mov&nbsp;cx,100h&nbsp;<br></span><span style="COLOR: #008080">&nbsp;33</span><span style="COLOR: #000000"><img src="http://www.cnitblog.com/Images/OutliningIndicators/None.gif" align=top>repnz&nbsp;movsw&nbsp;;relocate&nbsp;to&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">:</span><span style="COLOR: #000000">0600</span><span style="COLOR: #000000">&nbsp;<br></span><span style="COLOR: #008080">&nbsp;34</span><span style="COLOR: #000000"><img src="http://www.cnitblog.com/Images/OutliningIndicators/None.gif" align=top>;&nbsp;jmp&nbsp;entry2&nbsp;<br></span><span style="COLOR: #008080">&nbsp;35</span><span style="COLOR: #000000"><img src="http://www.cnitblog.com/Images/OutliningIndicators/None.gif" align=top>db&nbsp;0eah&nbsp;<br></span><span style="COLOR: #008080">&nbsp;36</span><span style="COLOR: #000000"><img src="http://www.cnitblog.com/Images/OutliningIndicators/None.gif" align=top>dw&nbsp;$</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">4</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">&nbsp;<br></span><span style="COLOR: #008080">&nbsp;37</span><span style="COLOR: #000000"><img src="http://www.cnitblog.com/Images/OutliningIndicators/None.gif" align=top>entry2:&nbsp;<br></span><span style="COLOR: #008080">&nbsp;38</span><span style="COLOR: #000000"><img src="http://www.cnitblog.com/Images/OutliningIndicators/None.gif" align=top>mov&nbsp;si,offset&nbsp;tab&nbsp;;partition&nbsp;table&nbsp;<br></span><span style="COLOR: #008080">&nbsp;39</span><span style="COLOR: #000000"><img src="http://www.cnitblog.com/Images/OutliningIndicators/None.gif" align=top>mov&nbsp;bl,</span><span style="COLOR: #000000">4</span><span style="COLOR: #000000">&nbsp;;number&nbsp;of&nbsp;table&nbsp;entries&nbsp;<br></span><span style="COLOR: #008080">&nbsp;40</span><span style="COLOR: #000000"><img src="http://www.cnitblog.com/Images/OutliningIndicators/None.gif" align=top>next:&nbsp;<br></span><span style="COLOR: #008080">&nbsp;41</span><span style="COLOR: #000000"><img src="http://www.cnitblog.com/Images/OutliningIndicators/None.gif" align=top>cmp&nbsp;</span><span style="COLOR: #0000ff">byte</span><span style="COLOR: #000000">&nbsp;ptr[si],80h&nbsp;;is&nbsp;</span><span style="COLOR: #0000ff">this</span><span style="COLOR: #000000">&nbsp;a&nbsp;bootable&nbsp;entry</span><span style="COLOR: #000000">?</span><span style="COLOR: #000000">&nbsp;<br></span><span style="COLOR: #008080">&nbsp;42</span><span style="COLOR: #000000"><img src="http://www.cnitblog.com/Images/OutliningIndicators/None.gif" align=top>je&nbsp;boot&nbsp;;yes&nbsp;<br></span><span style="COLOR: #008080">&nbsp;43</span><span style="COLOR: #000000"><img src="http://www.cnitblog.com/Images/OutliningIndicators/None.gif" align=top>cmp&nbsp;</span><span style="COLOR: #0000ff">byte</span><span style="COLOR: #000000">&nbsp;ptr[si],</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">&nbsp;;no,&nbsp;is&nbsp;boot&nbsp;indicator&nbsp;zero</span><span style="COLOR: #000000">?</span><span style="COLOR: #000000">&nbsp;<br></span><span style="COLOR: #008080">&nbsp;44</span><span style="COLOR: #000000"><img src="http://www.cnitblog.com/Images/OutliningIndicators/None.gif" align=top>jne&nbsp;bad&nbsp;;no,&nbsp;it&nbsp;must&nbsp;be&nbsp;x</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">00</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&nbsp;or&nbsp;x</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">80</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&nbsp;to&nbsp;be&nbsp;valid&nbsp;<br></span><span style="COLOR: #008080">&nbsp;45</span><span style="COLOR: #000000"><img src="http://www.cnitblog.com/Images/OutliningIndicators/None.gif" align=top>add&nbsp;si,</span><span style="COLOR: #000000">16</span><span style="COLOR: #000000">&nbsp;;yes,&nbsp;go&nbsp;to&nbsp;next&nbsp;entry&nbsp;<br></span><span style="COLOR: #008080">&nbsp;46</span><span style="COLOR: #000000"><img src="http://www.cnitblog.com/Images/OutliningIndicators/None.gif" align=top>dec&nbsp;bl&nbsp;<br></span><span style="COLOR: #008080">&nbsp;47</span><span style="COLOR: #000000"><img src="http://www.cnitblog.com/Images/OutliningIndicators/None.gif" align=top>jnz&nbsp;next&nbsp;<br></span><span style="COLOR: #008080">&nbsp;48</span><span style="COLOR: #000000"><img src="http://www.cnitblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;18h&nbsp;;no&nbsp;bootable&nbsp;entries&nbsp;</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">&nbsp;go&nbsp;to&nbsp;rom&nbsp;basic&nbsp;<br></span><span style="COLOR: #008080">&nbsp;49</span><span style="COLOR: #000000"><img src="http://www.cnitblog.com/Images/OutliningIndicators/None.gif" align=top>boot:&nbsp;<br></span><span style="COLOR: #008080">&nbsp;50</span><span style="COLOR: #000000"><img src="http://www.cnitblog.com/Images/OutliningIndicators/None.gif" align=top>mov&nbsp;dx,[si]&nbsp;;head&nbsp;and&nbsp;drive&nbsp;to&nbsp;boot&nbsp;from&nbsp;<br></span><span style="COLOR: #008080">&nbsp;51</span><span style="COLOR: #000000"><img src="http://www.cnitblog.com/Images/OutliningIndicators/None.gif" align=top>mov&nbsp;cx,[si</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">2</span><span style="COLOR: #000000">]&nbsp;;cyl,&nbsp;sector&nbsp;to&nbsp;boot&nbsp;from&nbsp;<br></span><span style="COLOR: #008080">&nbsp;52</span><span style="COLOR: #000000"><img src="http://www.cnitblog.com/Images/OutliningIndicators/None.gif" align=top>mov&nbsp;bp,si&nbsp;;save&nbsp;table&nbsp;entry&nbsp;address&nbsp;to&nbsp;pass&nbsp;to&nbsp;partition&nbsp;boot&nbsp;record&nbsp;<br></span><span style="COLOR: #008080">&nbsp;53</span><span style="COLOR: #000000"><img src="http://www.cnitblog.com/Images/OutliningIndicators/None.gif" align=top>next1:&nbsp;<br></span><span style="COLOR: #008080">&nbsp;54</span><span style="COLOR: #000000"><img src="http://www.cnitblog.com/Images/OutliningIndicators/None.gif" align=top>add&nbsp;si,</span><span style="COLOR: #000000">16</span><span style="COLOR: #000000">&nbsp;;next&nbsp;table&nbsp;entry&nbsp;<br></span><span style="COLOR: #008080">&nbsp;55</span><span style="COLOR: #000000"><img src="http://www.cnitblog.com/Images/OutliningIndicators/None.gif" align=top>dec&nbsp;bl&nbsp;;#&nbsp;entries&nbsp;left&nbsp;<br></span><span style="COLOR: #008080">&nbsp;56</span><span style="COLOR: #000000"><img src="http://www.cnitblog.com/Images/OutliningIndicators/None.gif" align=top>jz&nbsp;tabok&nbsp;;all&nbsp;entries&nbsp;look&nbsp;ok&nbsp;<br></span><span style="COLOR: #008080">&nbsp;57</span><span style="COLOR: #000000"><img src="http://www.cnitblog.com/Images/OutliningIndicators/None.gif" align=top>cmp&nbsp;</span><span style="COLOR: #0000ff">byte</span><span style="COLOR: #000000">&nbsp;ptr[si],</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">&nbsp;;all&nbsp;remaining&nbsp;entries&nbsp;should&nbsp;begin&nbsp;with&nbsp;zero&nbsp;<br></span><span style="COLOR: #008080">&nbsp;58</span><span style="COLOR: #000000"><img src="http://www.cnitblog.com/Images/OutliningIndicators/None.gif" align=top>je&nbsp;next1&nbsp;;</span><span style="COLOR: #0000ff">this</span><span style="COLOR: #000000">&nbsp;one&nbsp;is&nbsp;ok&nbsp;<br></span><span style="COLOR: #008080">&nbsp;59</span><span style="COLOR: #000000"><img src="http://www.cnitblog.com/Images/OutliningIndicators/None.gif" align=top>bad:&nbsp;<br></span><span style="COLOR: #008080">&nbsp;60</span><span style="COLOR: #000000"><img src="http://www.cnitblog.com/Images/OutliningIndicators/None.gif" align=top>mov&nbsp;si,offset&nbsp;m1&nbsp;;oops&nbsp;</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">&nbsp;found&nbsp;a&nbsp;non</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">zero&nbsp;entry&nbsp;</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">&nbsp;the&nbsp;table&nbsp;is&nbsp;bad&nbsp;<br></span><span style="COLOR: #008080">&nbsp;61</span><span style="COLOR: #000000"><img src="http://www.cnitblog.com/Images/OutliningIndicators/None.gif" align=top>msg:&nbsp;<br></span><span style="COLOR: #008080">&nbsp;62</span><span style="COLOR: #000000"><img src="http://www.cnitblog.com/Images/OutliningIndicators/None.gif" align=top>lodsb&nbsp;;get&nbsp;a&nbsp;message&nbsp;character&nbsp;<br></span><span style="COLOR: #008080">&nbsp;63</span><span style="COLOR: #000000"><img src="http://www.cnitblog.com/Images/OutliningIndicators/None.gif" align=top>cmp&nbsp;al,</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">&nbsp;<br></span><span style="COLOR: #008080">&nbsp;64</span><span style="COLOR: #000000"><img src="http://www.cnitblog.com/Images/OutliningIndicators/None.gif" align=top>je&nbsp;hold&nbsp;<br></span><span style="COLOR: #008080">&nbsp;65</span><span style="COLOR: #000000"><img src="http://www.cnitblog.com/Images/OutliningIndicators/None.gif" align=top>push&nbsp;si&nbsp;<br></span><span style="COLOR: #008080">&nbsp;66</span><span style="COLOR: #000000"><img src="http://www.cnitblog.com/Images/OutliningIndicators/None.gif" align=top>mov&nbsp;bx,</span><span style="COLOR: #000000">7</span><span style="COLOR: #000000">&nbsp;<br></span><span style="COLOR: #008080">&nbsp;67</span><span style="COLOR: #000000"><img src="http://www.cnitblog.com/Images/OutliningIndicators/None.gif" align=top>mov&nbsp;ah,</span><span style="COLOR: #000000">14</span><span style="COLOR: #000000">&nbsp;<br></span><span style="COLOR: #008080">&nbsp;68</span><span style="COLOR: #000000"><img src="http://www.cnitblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;10h&nbsp;;and&nbsp;display&nbsp;it&nbsp;<br></span><span style="COLOR: #008080">&nbsp;69</span><span style="COLOR: #000000"><img src="http://www.cnitblog.com/Images/OutliningIndicators/None.gif" align=top>pop&nbsp;si&nbsp;<br></span><span style="COLOR: #008080">&nbsp;70</span><span style="COLOR: #000000"><img src="http://www.cnitblog.com/Images/OutliningIndicators/None.gif" align=top>jmp&nbsp;msg&nbsp;;</span><span style="COLOR: #0000ff">do</span><span style="COLOR: #000000">&nbsp;the&nbsp;entire&nbsp;message&nbsp;<br></span><span style="COLOR: #008080">&nbsp;71</span><span style="COLOR: #000000"><img src="http://www.cnitblog.com/Images/OutliningIndicators/None.gif" align=top>;&nbsp;<br></span><span style="COLOR: #008080">&nbsp;72</span><span style="COLOR: #000000"><img src="http://www.cnitblog.com/Images/OutliningIndicators/None.gif" align=top>hold:&nbsp;jmp&nbsp;hold&nbsp;;spin&nbsp;here&nbsp;</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">&nbsp;nothing&nbsp;more&nbsp;to&nbsp;</span><span style="COLOR: #0000ff">do</span><span style="COLOR: #000000">&nbsp;<br></span><span style="COLOR: #008080">&nbsp;73</span><span style="COLOR: #000000"><img src="http://www.cnitblog.com/Images/OutliningIndicators/None.gif" align=top>tabok:&nbsp;<br></span><span style="COLOR: #008080">&nbsp;74</span><span style="COLOR: #000000"><img src="http://www.cnitblog.com/Images/OutliningIndicators/None.gif" align=top>mov&nbsp;di,</span><span style="COLOR: #000000">5</span><span style="COLOR: #000000">&nbsp;;retry&nbsp;count&nbsp;<br></span><span style="COLOR: #008080">&nbsp;75</span><span style="COLOR: #000000"><img src="http://www.cnitblog.com/Images/OutliningIndicators/None.gif" align=top>rdboot:&nbsp;<br></span><span style="COLOR: #008080">&nbsp;76</span><span style="COLOR: #000000"><img src="http://www.cnitblog.com/Images/OutliningIndicators/None.gif" align=top>mov&nbsp;bx,7c00h&nbsp;;where&nbsp;to&nbsp;read&nbsp;system&nbsp;boot&nbsp;record&nbsp;<br></span><span style="COLOR: #008080">&nbsp;77</span><span style="COLOR: #000000"><img src="http://www.cnitblog.com/Images/OutliningIndicators/None.gif" align=top>mov&nbsp;ax,0201h&nbsp;;read&nbsp;</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">&nbsp;sector&nbsp;<br></span><span style="COLOR: #008080">&nbsp;78</span><span style="COLOR: #000000"><img src="http://www.cnitblog.com/Images/OutliningIndicators/None.gif" align=top>push&nbsp;di&nbsp;<br></span><span style="COLOR: #008080">&nbsp;79</span><span style="COLOR: #000000"><img src="http://www.cnitblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;13h&nbsp;;get&nbsp;the&nbsp;boot&nbsp;record&nbsp;<br></span><span style="COLOR: #008080">&nbsp;80</span><span style="COLOR: #000000"><img src="http://www.cnitblog.com/Images/OutliningIndicators/None.gif" align=top>pop&nbsp;di&nbsp;<br></span><span style="COLOR: #008080">&nbsp;81</span><span style="COLOR: #000000"><img src="http://www.cnitblog.com/Images/OutliningIndicators/None.gif" align=top>jnc&nbsp;goboot&nbsp;;successful&nbsp;</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">&nbsp;now&nbsp;give&nbsp;it&nbsp;control&nbsp;<br></span><span style="COLOR: #008080">&nbsp;82</span><span style="COLOR: #000000"><img src="http://www.cnitblog.com/Images/OutliningIndicators/None.gif" align=top>xor&nbsp;ax,ax&nbsp;;had&nbsp;an&nbsp;error,&nbsp;so&nbsp;<br></span><span style="COLOR: #008080">&nbsp;83</span><span style="COLOR: #000000"><img src="http://www.cnitblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;13h&nbsp;;recalibrate&nbsp;<br></span><span style="COLOR: #008080">&nbsp;84</span><span style="COLOR: #000000"><img src="http://www.cnitblog.com/Images/OutliningIndicators/None.gif" align=top>dec&nbsp;di&nbsp;;reduce&nbsp;retry&nbsp;count&nbsp;<br></span><span style="COLOR: #008080">&nbsp;85</span><span style="COLOR: #000000"><img src="http://www.cnitblog.com/Images/OutliningIndicators/None.gif" align=top>jnz&nbsp;rdboot&nbsp;;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;retry&nbsp;count&nbsp;above&nbsp;zero,&nbsp;go&nbsp;retry&nbsp;<br></span><span style="COLOR: #008080">&nbsp;86</span><span style="COLOR: #000000"><img src="http://www.cnitblog.com/Images/OutliningIndicators/None.gif" align=top>mov&nbsp;si,offset&nbsp;m2&nbsp;;all&nbsp;retries&nbsp;done&nbsp;</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">&nbsp;permanent&nbsp;error&nbsp;</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">&nbsp;point&nbsp;to&nbsp;message,&nbsp;<br></span><span style="COLOR: #008080">&nbsp;87</span><span style="COLOR: #000000"><img src="http://www.cnitblog.com/Images/OutliningIndicators/None.gif" align=top>jmp&nbsp;msg&nbsp;;go&nbsp;display&nbsp;message&nbsp;and&nbsp;loop&nbsp;<br></span><span style="COLOR: #008080">&nbsp;88</span><span style="COLOR: #000000"><img src="http://www.cnitblog.com/Images/OutliningIndicators/None.gif" align=top>goboot:&nbsp;<br></span><span style="COLOR: #008080">&nbsp;89</span><span style="COLOR: #000000"><img src="http://www.cnitblog.com/Images/OutliningIndicators/None.gif" align=top>mov&nbsp;si,offset&nbsp;m3&nbsp;;prepare&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">&nbsp;invalid&nbsp;boot&nbsp;record&nbsp;<br></span><span style="COLOR: #008080">&nbsp;90</span><span style="COLOR: #000000"><img src="http://www.cnitblog.com/Images/OutliningIndicators/None.gif" align=top>mov&nbsp;di,07dfeh&nbsp;<br></span><span style="COLOR: #008080">&nbsp;91</span><span style="COLOR: #000000"><img src="http://www.cnitblog.com/Images/OutliningIndicators/None.gif" align=top>cmp&nbsp;word&nbsp;ptr&nbsp;[di],0aa55h&nbsp;;does&nbsp;the&nbsp;boot&nbsp;record&nbsp;have&nbsp;the&nbsp;<br></span><span style="COLOR: #008080">&nbsp;92</span><span style="COLOR: #000000"><img src="http://www.cnitblog.com/Images/OutliningIndicators/None.gif" align=top>;&nbsp;required&nbsp;signature</span><span style="COLOR: #000000">?</span><span style="COLOR: #000000">&nbsp;<br></span><span style="COLOR: #008080">&nbsp;93</span><span style="COLOR: #000000"><img src="http://www.cnitblog.com/Images/OutliningIndicators/None.gif" align=top>jne&nbsp;msg&nbsp;;no,&nbsp;display&nbsp;invalid&nbsp;system&nbsp;boot&nbsp;record&nbsp;message&nbsp;<br></span><span style="COLOR: #008080">&nbsp;94</span><span style="COLOR: #000000"><img src="http://www.cnitblog.com/Images/OutliningIndicators/None.gif" align=top>mov&nbsp;si,bp&nbsp;;yes,&nbsp;pass&nbsp;partition&nbsp;table&nbsp;entry&nbsp;address&nbsp;<br></span><span style="COLOR: #008080">&nbsp;95</span><span style="COLOR: #000000"><img src="http://www.cnitblog.com/Images/OutliningIndicators/None.gif" align=top>db&nbsp;0eah&nbsp;<br></span><span style="COLOR: #008080">&nbsp;96</span><span style="COLOR: #000000"><img src="http://www.cnitblog.com/Images/OutliningIndicators/None.gif" align=top>dw&nbsp;7c00h,</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">&nbsp;<br></span><span style="COLOR: #008080">&nbsp;97</span><span style="COLOR: #000000"><img src="http://www.cnitblog.com/Images/OutliningIndicators/None.gif" align=top>include&nbsp;fdisk5.cl1&nbsp;<br></span><span style="COLOR: #008080">&nbsp;98</span><span style="COLOR: #000000"><img src="http://www.cnitblog.com/Images/OutliningIndicators/None.gif" align=top>org&nbsp;7beh&nbsp;<br></span><span style="COLOR: #008080">&nbsp;99</span><span style="COLOR: #000000"><img src="http://www.cnitblog.com/Images/OutliningIndicators/None.gif" align=top>tab:&nbsp;;partition&nbsp;table&nbsp;<br></span><span style="COLOR: #008080">100</span><span style="COLOR: #000000"><img src="http://www.cnitblog.com/Images/OutliningIndicators/None.gif" align=top>dw&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">&nbsp;;partition&nbsp;</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">&nbsp;begin&nbsp;<br></span><span style="COLOR: #008080">101</span><span style="COLOR: #000000"><img src="http://www.cnitblog.com/Images/OutliningIndicators/None.gif" align=top>dw&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">&nbsp;;partition&nbsp;</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">&nbsp;end&nbsp;<br></span><span style="COLOR: #008080">102</span><span style="COLOR: #000000"><img src="http://www.cnitblog.com/Images/OutliningIndicators/None.gif" align=top>dw&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">&nbsp;;partition&nbsp;</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">&nbsp;relative&nbsp;sector&nbsp;(low,&nbsp;high&nbsp;parts)&nbsp;<br></span><span style="COLOR: #008080">103</span><span style="COLOR: #000000"><img src="http://www.cnitblog.com/Images/OutliningIndicators/None.gif" align=top>dw&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">&nbsp;;partition&nbsp;</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">&nbsp;#&nbsp;of&nbsp;sectors&nbsp;(low,&nbsp;high&nbsp;parts)&nbsp;<br></span><span style="COLOR: #008080">104</span><span style="COLOR: #000000"><img src="http://www.cnitblog.com/Images/OutliningIndicators/None.gif" align=top>dw&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">&nbsp;;partition&nbsp;</span><span style="COLOR: #000000">2</span><span style="COLOR: #000000">&nbsp;begin&nbsp;<br></span><span style="COLOR: #008080">105</span><span style="COLOR: #000000"><img src="http://www.cnitblog.com/Images/OutliningIndicators/None.gif" align=top>dw&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">&nbsp;;partition&nbsp;</span><span style="COLOR: #000000">2</span><span style="COLOR: #000000">&nbsp;end&nbsp;<br></span><span style="COLOR: #008080">106</span><span style="COLOR: #000000"><img src="http://www.cnitblog.com/Images/OutliningIndicators/None.gif" align=top>dw&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">&nbsp;;partition&nbsp;</span><span style="COLOR: #000000">2</span><span style="COLOR: #000000">&nbsp;relative&nbsp;sector&nbsp;<br></span><span style="COLOR: #008080">107</span><span style="COLOR: #000000"><img src="http://www.cnitblog.com/Images/OutliningIndicators/None.gif" align=top>dw&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">&nbsp;;partition&nbsp;</span><span style="COLOR: #000000">2</span><span style="COLOR: #000000">&nbsp;#&nbsp;of&nbsp;sectors&nbsp;<br></span><span style="COLOR: #008080">108</span><span style="COLOR: #000000"><img src="http://www.cnitblog.com/Images/OutliningIndicators/None.gif" align=top>dw&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">&nbsp;;partition&nbsp;</span><span style="COLOR: #000000">3</span><span style="COLOR: #000000">&nbsp;begin&nbsp;<br></span><span style="COLOR: #008080">109</span><span style="COLOR: #000000"><img src="http://www.cnitblog.com/Images/OutliningIndicators/None.gif" align=top>dw&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">&nbsp;;partition&nbsp;</span><span style="COLOR: #000000">3</span><span style="COLOR: #000000">&nbsp;end&nbsp;<br></span><span style="COLOR: #008080">110</span><span style="COLOR: #000000"><img src="http://www.cnitblog.com/Images/OutliningIndicators/None.gif" align=top>dw&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">&nbsp;;partition&nbsp;</span><span style="COLOR: #000000">3</span><span style="COLOR: #000000">&nbsp;relative&nbsp;sector&nbsp;<br></span><span style="COLOR: #008080">111</span><span style="COLOR: #000000"><img src="http://www.cnitblog.com/Images/OutliningIndicators/None.gif" align=top>dw&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">&nbsp;;partition&nbsp;</span><span style="COLOR: #000000">3</span><span style="COLOR: #000000">&nbsp;#&nbsp;of&nbsp;sectors&nbsp;<br></span><span style="COLOR: #008080">112</span><span style="COLOR: #000000"><img src="http://www.cnitblog.com/Images/OutliningIndicators/None.gif" align=top>dw&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">&nbsp;;partition&nbsp;</span><span style="COLOR: #000000">4</span><span style="COLOR: #000000">&nbsp;begin&nbsp;<br></span><span style="COLOR: #008080">113</span><span style="COLOR: #000000"><img src="http://www.cnitblog.com/Images/OutliningIndicators/None.gif" align=top>dw&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">&nbsp;;partition&nbsp;</span><span style="COLOR: #000000">4</span><span style="COLOR: #000000">&nbsp;end&nbsp;<br></span><span style="COLOR: #008080">114</span><span style="COLOR: #000000"><img src="http://www.cnitblog.com/Images/OutliningIndicators/None.gif" align=top>dw&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">&nbsp;;partition&nbsp;</span><span style="COLOR: #000000">4</span><span style="COLOR: #000000">&nbsp;relative&nbsp;sector&nbsp;<br></span><span style="COLOR: #008080">115</span><span style="COLOR: #000000"><img src="http://www.cnitblog.com/Images/OutliningIndicators/None.gif" align=top>dw&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">&nbsp;;partition&nbsp;</span><span style="COLOR: #000000">4</span><span style="COLOR: #000000">&nbsp;#&nbsp;of&nbsp;sectors&nbsp;<br></span><span style="COLOR: #008080">116</span><span style="COLOR: #000000"><img src="http://www.cnitblog.com/Images/OutliningIndicators/None.gif" align=top>signa&nbsp;db&nbsp;55h,0aah&nbsp;;signature&nbsp;<br></span><span style="COLOR: #008080">117</span><span style="COLOR: #000000"><img src="http://www.cnitblog.com/Images/OutliningIndicators/None.gif" align=top>_data&nbsp;ends&nbsp;<br></span><span style="COLOR: #008080">118</span><span style="COLOR: #000000"><img src="http://www.cnitblog.com/Images/OutliningIndicators/None.gif" align=top>end&nbsp;<br></span><span style="COLOR: #008080">119</span><span style="COLOR: #000000"><img src="http://www.cnitblog.com/Images/OutliningIndicators/None.gif" align=top></span></div>
<img src ="http://www.cnitblog.com/houcy/aggbug/53701.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/houcy/" target="_blank">挑灯看剑</a> 2009-01-11 19:48 <a href="http://www.cnitblog.com/houcy/archive/2009/01/11/53701.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>good links for linux dev</title><link>http://www.cnitblog.com/houcy/archive/2009/01/03/53404.html</link><dc:creator>挑灯看剑</dc:creator><author>挑灯看剑</author><pubDate>Sat, 03 Jan 2009 14:20:00 GMT</pubDate><guid>http://www.cnitblog.com/houcy/archive/2009/01/03/53404.html</guid><wfw:comment>http://www.cnitblog.com/houcy/comments/53404.html</wfw:comment><comments>http://www.cnitblog.com/houcy/archive/2009/01/03/53404.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/houcy/comments/commentRss/53404.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/houcy/services/trackbacks/53404.html</trackback:ping><description><![CDATA[<p><a href="http://en.skelix.org/">http://en.skelix.org/</a></p>
<p><a href="http://en.skelix.org/skelixos/tutorial00.php">http://en.skelix.org/skelixos/tutorial00.php</a></p>
<p><a href="http://oss.lzu.edu.cn/blog/blog.php?do_showone/tid_1693.html">http://oss.lzu.edu.cn/blog/blog.php?do_showone/tid_1693.html</a></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<img src ="http://www.cnitblog.com/houcy/aggbug/53404.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/houcy/" target="_blank">挑灯看剑</a> 2009-01-03 22:20 <a href="http://www.cnitblog.com/houcy/archive/2009/01/03/53404.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>三十种Linux操作系统发行版名称含义详解【转】</title><link>http://www.cnitblog.com/houcy/archive/2008/05/25/44306.html</link><dc:creator>挑灯看剑</dc:creator><author>挑灯看剑</author><pubDate>Sun, 25 May 2008 08:15:00 GMT</pubDate><guid>http://www.cnitblog.com/houcy/archive/2008/05/25/44306.html</guid><wfw:comment>http://www.cnitblog.com/houcy/comments/44306.html</wfw:comment><comments>http://www.cnitblog.com/houcy/archive/2008/05/25/44306.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cnitblog.com/houcy/comments/commentRss/44306.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/houcy/services/trackbacks/44306.html</trackback:ping><description><![CDATA[<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1-Ubuntu <br>　　这或许是今天最常见的一个Linux发行版了，Ubuntu是一个南非的民族观念，着眼于人们之间的忠诚和联系。该词来自于祖鲁语和科萨语。大意是&#8220;人道待人&#8221;（对他人仁慈）。另一种翻译是：&#8220;天下共享的信念，连接起每个人&#8221;。</p>
<p>　　2-PCLinuxOS <br>　　很明显它的名称是PC+Linux+Operating System组合在一起，拥有类似Windows的图形用户界面，方便用户从Windows转向Linux。</p>
<p>　　3-openSUSE　<br>　　openSUSE由AMD和Novell共同发起，SUSE是德语&#8220;Software-und System-Entwicklung&#8221;的缩写（software and system development）。另有一说是为了纪念德国计算机工先驱Konrad Zuse。</p>
<p>　　4-Fedora<br>　　Fedora由Red Hat发起，正是Red Hat标志中人物所戴的那顶帽子。</p>
<p>　　5-Mandriva　 <br>　　在以前称为Mandrake，并由MandrakeSoft公司进行维护。当MandrakeSoft输掉了与Hearst Corporation争夺Mandrake名称的官司，并收购了Connectiva后，名称变为了Mandriva。</p>
<p>　　6-Sabayon<br>　　一种意大利甜点，也叫Zabaglion，用蛋黄、糖等原料烹饪而成。　　 </p>
<p>　　7-Debian<br>　　这个名字是Ian Murdock在1998年取的，由当初是女朋友现在是妻子的Debra和他的名字混合而来。</p>
<p>　　8-Damn Small Linux<br>　　像它的名字所说那样，这个Linux发行版体积只有50MB。</p>
<p>　　9-MEPIS<br>　　根据创始人Warren Woodford所说，这个名字最初没有任何含义，只是由于朋友在Skype上误听得来的名字。</p>
<p>　　10-CentOS<br>　　CentOS基于Red Had Enterprise Linux（RHEL），代表Community Enterprise Operationg System。</p>
<p>　　11-Dreamlinux<br>　　这是一个巴西的Linux发行版，基于Debian，外观类似苹果的Mac OS X，名字就像介绍中说的那样。</p>
<p>　　12-Puppy Linux<br>　　一种小型的Live CD系统，目标是简单易用，吉祥物是墨西哥小狗吉娃娃。</p>
<p>　　13-Kubuntu<br>　　KDE + Ubuntu的产物</p>
<p>　　14-Zenwalk<br>　　有禅意的名字，不过根据创始人JP Guillemin所说，这个名字是从发音和含义两个方面模仿Neststep操作系统所起。</p>
<p>　　15-Slackware <br>　　创始人是Patrick Volkerding，最初是个人项目，这个名字借用自Church of the SubGenius中的术语 "Slack"。</p>
<p>　　16-Knoppix<br>　　著名的Live CD发行版，基于Dedian，创始人是Klaus Knopper并以此命名。</p>
<p>　　17-Gentoo<br>　　Gentoo是一种体形小巧的企鹅，据说是企鹅中游泳速度最快的一种。</p>
<p>　　18-Slax<br>　　一种基于Slackware的live CD发行版，它的名称并没有特别含义。</p>
<p>　　19-Sidux<br>　　基于Debian尚不稳定，代号&#8220;Sid&#8221;的一支，名称来自玩具总动员中的角色Sid Phillips。</p>
<p>　　20-Ubuntu Studio<br>　　Ubuntu的派生，以多媒体应用为主。</p>
<p>　　21-Xubuntu<br>　　XFCE + Ubuntu的产物</p>
<p>　　22-Foresight<br>　　Foresight使用Conary作为包管理器，据称，不像大多数发行版一年两次升级那样，它采用滚动升级的方式。</p>
<p>　　23-Red Hat<br>　　创始人之一的Bob Young为您解释其中含义。</p>
<p>　　24-OpenGEU<br>　　OpenGEU最初称为Geubuntu，使用Gnome和Enlightenment作为桌面管理器。</p>
<p>　　25-Elive<br>　　从图标中也可以看出这同样是一款采用Enlightenment作为窗口管理器的发行版，它是基于Debian的Live Cd。</p>
<p>　　26-Freespire<br>　　微软2千万美元买下了&#8220;Lindows&#8221;这个名字后，Lindows更名为Linspire，Freespire是基于Linspire的源码的Live CD版本。</p>
<p>　　27-Fluxbuntu<br>　　又是Ubuntu的派生版，采用Fluxbox作为窗口管理器。</p>
<p>　　28-Xandors<br>　　X代表X Windows系统，Andros是希腊的岛名。</p>
<p>　　29-TinyME<br>　　是PCLinuxOS的一个轻量级版本，所以称为Tiny。</p>
<p>　　30-gOS<br>　　同样也是一个基于Ubuntu的版本，以集成了众多Google程序而闻名。不过这里的&#8220;g&#8221;并不是代表Goolge，也不是Green，而是代表它背后的Good OS LLC公司。</p>
<p>新闻来自: 新客网(<a href="http://www.xker.com/">www.xker.com</a>) 详文参考：<a href="http://www.xker.com/page/e2008/0410/51889.html">http://www.xker.com/page/e2008/0410/51889.html</a></p>
<img src ="http://www.cnitblog.com/houcy/aggbug/44306.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/houcy/" target="_blank">挑灯看剑</a> 2008-05-25 16:15 <a href="http://www.cnitblog.com/houcy/archive/2008/05/25/44306.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>detect packet flow on net</title><link>http://www.cnitblog.com/houcy/archive/2008/05/10/43566.html</link><dc:creator>挑灯看剑</dc:creator><author>挑灯看剑</author><pubDate>Fri, 09 May 2008 17:13:00 GMT</pubDate><guid>http://www.cnitblog.com/houcy/archive/2008/05/10/43566.html</guid><wfw:comment>http://www.cnitblog.com/houcy/comments/43566.html</wfw:comment><comments>http://www.cnitblog.com/houcy/archive/2008/05/10/43566.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/houcy/comments/commentRss/43566.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/houcy/services/trackbacks/43566.html</trackback:ping><description><![CDATA[Tonight,I downloaded and installed libpcap on Ubuntu8.04 .<br>I followed those steps:<br><br>1. Add a web link to my source.list .<br>&nbsp;vim /etc/apt/sources.list
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: #008080;">1</span>&nbsp;<span style="color: #000000;">vim&nbsp;</span><span style="color: #000000;">/</span><span style="color: #000000;">etc</span><span style="color: #000000;">/</span><span style="color: #000000;">apt</span><span style="color: #000000;">/</span><span style="color: #000000;">sources.list</span></div>
then add "deb http://fr.archive.ubuntu.com/ubuntu degy main" to sources.list<br><br>2. Execute "apt-cache search" command.<br>
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: #008080;">&nbsp;1</span>&nbsp;<span style="color: #000000;">root@houcy</span><span style="color: #000000;">-</span><span style="color: #000000;">desktop:</span><span style="color: #000000;">/</span><span style="color: #000000;">#&nbsp;apt</span><span style="color: #000000;">-</span><span style="color: #000000;">cache&nbsp;search&nbsp;libpcap<br></span><span style="color: #008080;">&nbsp;2</span>&nbsp;<span style="color: #000000;">libnet1&nbsp;</span><span style="color: #000000;">-</span><span style="color: #000000;">&nbsp;library&nbsp;</span><span style="color: #0000ff;">for</span><span style="color: #000000;">&nbsp;the&nbsp;construction&nbsp;and&nbsp;handling&nbsp;of&nbsp;network&nbsp;packets<br></span><span style="color: #008080;">&nbsp;3</span>&nbsp;<span style="color: #000000;">libnet1</span><span style="color: #000000;">-</span><span style="color: #000000;">dev&nbsp;</span><span style="color: #000000;">-</span><span style="color: #000000;">&nbsp;development&nbsp;files&nbsp;</span><span style="color: #0000ff;">for</span><span style="color: #000000;">&nbsp;libnet<br></span><span style="color: #008080;">&nbsp;4</span>&nbsp;<span style="color: #000000;">libpcap</span><span style="color: #000000;">-</span><span style="color: #000000;">dev&nbsp;</span><span style="color: #000000;">-</span><span style="color: #000000;">&nbsp;Development&nbsp;library&nbsp;</span><span style="color: #0000ff;">for</span><span style="color: #000000;">&nbsp;libpcap&nbsp;(transitional&nbsp;</span><span style="color: #0000ff;">package</span><span style="color: #000000;">)<br></span><span style="color: #008080;">&nbsp;5</span>&nbsp;<span style="color: #000000;">libpcap0.</span><span style="color: #000000;">7</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">-</span><span style="color: #000000;">&nbsp;System&nbsp;</span><span style="color: #0000ff;">interface</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">for</span><span style="color: #000000;">&nbsp;user</span><span style="color: #000000;">-</span><span style="color: #000000;">level&nbsp;packet&nbsp;capture<br></span><span style="color: #008080;">&nbsp;6</span>&nbsp;<span style="color: #000000;">libpcap0.</span><span style="color: #000000;">7</span><span style="color: #000000;">-</span><span style="color: #000000;">dev&nbsp;</span><span style="color: #000000;">-</span><span style="color: #000000;">&nbsp;Development&nbsp;library&nbsp;and&nbsp;header&nbsp;files&nbsp;</span><span style="color: #0000ff;">for</span><span style="color: #000000;">&nbsp;libpcap&nbsp;</span><span style="color: #000000;">0.7</span><span style="color: #000000;"><br></span><span style="color: #008080;">&nbsp;7</span>&nbsp;<span style="color: #000000;">sing&nbsp;</span><span style="color: #000000;">-</span><span style="color: #000000;">&nbsp;A&nbsp;fully&nbsp;programmable&nbsp;ping&nbsp;replacement<br></span><span style="color: #008080;">&nbsp;8</span>&nbsp;<span style="color: #000000;">libpcap0.</span><span style="color: #000000;">8</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">-</span><span style="color: #000000;">&nbsp;System&nbsp;</span><span style="color: #0000ff;">interface</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">for</span><span style="color: #000000;">&nbsp;user</span><span style="color: #000000;">-</span><span style="color: #000000;">level&nbsp;packet&nbsp;capture<br></span><span style="color: #008080;">&nbsp;9</span>&nbsp;<span style="color: #000000;">libpcap0.</span><span style="color: #000000;">8</span><span style="color: #000000;">-</span><span style="color: #000000;">dev&nbsp;</span><span style="color: #000000;">-</span><span style="color: #000000;">&nbsp;Development&nbsp;library&nbsp;and&nbsp;header&nbsp;files&nbsp;</span><span style="color: #0000ff;">for</span><span style="color: #000000;">&nbsp;libpcap&nbsp;</span><span style="color: #000000;">0.8</span><span style="color: #000000;"><br></span><span style="color: #008080;"></span><span style="color: #000000;"></span></div>
then, "apt-get install libpcap0.8-dev"<br><br>3.Where is the package installed?<br>
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: #008080;">1</span>&nbsp;<span style="color: #000000;">root@houcy</span><span style="color: #000000;">-</span><span style="color: #000000;">desktop:</span><span style="color: #000000;">/</span><span style="color: #000000;">#&nbsp;whereis&nbsp;libpcap<br></span><span style="color: #008080;">2</span>&nbsp;<span style="color: #000000;">libpcap:&nbsp;</span><span style="color: #000000;">/</span><span style="color: #000000;">usr</span><span style="color: #000000;">/</span><span style="color: #000000;">lib</span><span style="color: #000000;">/</span><span style="color: #000000;">libpcap.a&nbsp;</span><span style="color: #000000;">/</span><span style="color: #000000;">usr</span><span style="color: #000000;">/</span><span style="color: #000000;">lib</span><span style="color: #000000;">/</span><span style="color: #000000;">libpcap.so<br></span><span style="color: #008080;">3</span>&nbsp;<span style="color: #000000;">root@houcy</span><span style="color: #000000;">-</span><span style="color: #000000;">desktop:</span><span style="color: #000000;">/</span><span style="color: #000000;">#&nbsp;whereis&nbsp;pcap<br></span><span style="color: #008080;">4</span>&nbsp;<span style="color: #000000;">pcap:&nbsp;</span><span style="color: #000000;">/</span><span style="color: #000000;">usr</span><span style="color: #000000;">/</span><span style="color: #000000;">include</span><span style="color: #000000;">/</span><span style="color: #000000;">pcap.h&nbsp;</span><span style="color: #000000;">/</span><span style="color: #000000;">usr</span><span style="color: #000000;">/</span><span style="color: #000000;">share</span><span style="color: #000000;">/</span><span style="color: #000000;">man</span><span style="color: #000000;">/</span><span style="color: #000000;">man3</span><span style="color: #000000;">/</span><span style="color: #000000;">pcap.</span><span style="color: #000000;">3</span><span style="color: #000000;">.gz</span></div>
<br>4.Write an example program to test and sniffer the packets.<br>
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: #008080;"> //whenever there is packet appears on net ,then print("find data")<br>//This is a simple program.<br><br>1</span>&nbsp;<span style="color: #000000;">#include&nbsp;</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">stdio.h</span><span style="color: #000000;">&gt;</span><span style="color: #000000;"><br></span><span style="color: #008080;">&nbsp;2</span>&nbsp;<span style="color: #000000;">#include&nbsp;</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">sys</span><span style="color: #000000;">/</span><span style="color: #000000;">types.h</span><span style="color: #000000;">&gt;</span><span style="color: #000000;"><br></span><span style="color: #008080;">&nbsp;3</span>&nbsp;<span style="color: #000000;">#include&nbsp;</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">sys</span><span style="color: #000000;">/</span><span style="color: #000000;">time.h</span><span style="color: #000000;">&gt;</span><span style="color: #000000;"><br></span><span style="color: #008080;">&nbsp;4</span>&nbsp;<span style="color: #000000;">#include&nbsp;</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">sys</span><span style="color: #000000;">/</span><span style="color: #000000;">socket.h</span><span style="color: #000000;">&gt;</span><span style="color: #000000;"><br></span><span style="color: #008080;">&nbsp;5</span>&nbsp;<span style="color: #000000;">#include&nbsp;</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">netinet</span><span style="color: #000000;">/</span><span style="color: #000000;">in.h</span><span style="color: #000000;">&gt;</span><span style="color: #000000;"><br></span><span style="color: #008080;">&nbsp;6</span>&nbsp;<span style="color: #000000;">#include&nbsp;</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">netinet</span><span style="color: #000000;">/</span><span style="color: #000000;">in_systm.h</span><span style="color: #000000;">&gt;</span><span style="color: #000000;"><br></span><span style="color: #008080;">&nbsp;7</span>&nbsp;<span style="color: #000000;">#include&nbsp;</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">netinet</span><span style="color: #000000;">/</span><span style="color: #000000;">ip.h</span><span style="color: #000000;">&gt;</span><span style="color: #000000;"><br></span><span style="color: #008080;">&nbsp;8</span>&nbsp;<span style="color: #000000;">#include&nbsp;</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">netinet</span><span style="color: #000000;">/</span><span style="color: #000000;">if_ether.h</span><span style="color: #000000;">&gt;</span><span style="color: #000000;"><br></span><span style="color: #008080;">&nbsp;9</span>&nbsp;<span style="color: #000000;">#include&nbsp;</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">pcap.h</span><span style="color: #000000;">&gt;</span><span style="color: #000000;">&nbsp; //this is a new header file<br></span><span style="color: #008080;">10</span>&nbsp;<span style="color: #000000;"><br></span><span style="color: #008080;">11</span>&nbsp;<span style="color: #000000;">#define&nbsp;DEFAULT_SNAPLEN&nbsp;</span><span style="color: #000000;">68</span><span style="color: #000000;"><br></span><span style="color: #008080;">12</span>&nbsp;<span style="color: #000000;"><br></span><span style="color: #008080;">13</span>&nbsp;<span style="color: #000000;"></span><span style="color: #0000ff;">void</span><span style="color: #000000;">&nbsp;packet_print(u_char&nbsp;</span><span style="color: #000000;">*</span><span style="color: #000000;">user,</span><span style="color: #0000ff;">const</span><span style="color: #000000;">&nbsp;struct&nbsp;pcap_pkthdr&nbsp;</span><span style="color: #000000;">*</span><span style="color: #000000;">&nbsp;h,</span><span style="color: #0000ff;">const</span><span style="color: #000000;">&nbsp;u_char&nbsp;</span><span style="color: #000000;">*</span><span style="color: #000000;">p)<br></span><span style="color: #008080;">14</span>&nbsp;<span style="color: #000000;">{<br></span><span style="color: #008080;">15</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;printf(</span><span style="color: #000000;">"</span><span style="color: #000000;">Finde&nbsp;data\n</span><span style="color: #000000;">"</span><span style="color: #000000;">);<br></span><span style="color: #008080;">16</span>&nbsp;<span style="color: #000000;">}<br></span><span style="color: #008080;">17</span>&nbsp;<span style="color: #000000;"><br></span><span style="color: #008080;">18</span>&nbsp;<span style="color: #000000;"></span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;main(</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;argc,</span><span style="color: #0000ff;">char</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">*</span><span style="color: #000000;">&nbsp;argv[])<br></span><span style="color: #008080;">19</span>&nbsp;<span style="color: #000000;">{<br></span><span style="color: #008080;">20</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">char</span><span style="color: #000000;">&nbsp;ebuf[PCAP_ERRBUF_SIZE];<br></span><span style="color: #008080;">21</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;pcap_t&nbsp;</span><span style="color: #000000;">*</span><span style="color: #000000;">&nbsp;pd;<br></span><span style="color: #008080;">22</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;<br></span><span style="color: #008080;">23</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">(argc</span><span style="color: #000000;">&lt;=</span><span style="color: #000000;">1</span><span style="color: #000000;">)<br></span><span style="color: #008080;">24</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;{<br></span><span style="color: #008080;">25</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(</span><span style="color: #000000;">"</span><span style="color: #000000;">usage:%s&nbsp;&lt;network&nbsp;interface&gt;\n</span><span style="color: #000000;">"</span><span style="color: #000000;">,argv[</span><span style="color: #000000;">0</span><span style="color: #000000;">]);<br></span><span style="color: #008080;">26</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;exit(</span><span style="color: #000000;">0</span><span style="color: #000000;">);<br></span><span style="color: #008080;">27</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;&nbsp;<br></span><span style="color: #008080;">28</span>&nbsp;<span style="color: #000000;"><br></span><span style="color: #008080;">29</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">((pd</span><span style="color: #000000;">=</span><span style="color: #000000;">pcap_open_live(argv[</span><span style="color: #000000;">1</span><span style="color: #000000;">],DEFAULT_SNAPLEN,</span><span style="color: #000000;">1</span><span style="color: #000000;">,</span><span style="color: #000000;">1000</span><span style="color: #000000;">,ebuf))</span><span style="color: #000000;">==</span><span style="color: #000000;">NULL)<br></span><span style="color: #008080;">30</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;{<br></span><span style="color: #008080;">31</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(</span><span style="color: #0000ff;">void</span><span style="color: #000000;">)packet_print(stderr,</span><span style="color: #000000;">"</span><span style="color: #000000;">%s</span><span style="color: #000000;">"</span><span style="color: #000000;">,ebuf);<br></span><span style="color: #008080;">32</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;exit(</span><span style="color: #000000;">1</span><span style="color: #000000;">);<br></span><span style="color: #008080;">33</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;}<br></span><span style="color: #008080;">34</span>&nbsp;<span style="color: #000000;"><br></span><span style="color: #008080;">35</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">(pcap_loop(pd,</span><span style="color: #000000;">-</span><span style="color: #000000;">1</span><span style="color: #000000;">,packet_print,NULL)</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">0</span><span style="color: #000000;">)<br></span><span style="color: #008080;">36</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;{<br></span><span style="color: #008080;">37</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(</span><span style="color: #0000ff;">void</span><span style="color: #000000;">)fprintf(stderr,</span><span style="color: #000000;">"</span><span style="color: #000000;">pcap_loop:%s\n</span><span style="color: #000000;">"</span><span style="color: #000000;">,pcap_geterr(pd));<br></span><span style="color: #008080;">38</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;exit(</span><span style="color: #000000;">1</span><span style="color: #000000;">);<br></span><span style="color: #008080;">39</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;}<br></span><span style="color: #008080;">40</span>&nbsp;<span style="color: #000000;"><br></span><span style="color: #008080;">41</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;pcap_close(pd);<br></span><span style="color: #008080;">42</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;exit(</span><span style="color: #000000;">0</span><span style="color: #000000;">);<br></span><span style="color: #008080;">43</span>&nbsp;<span style="color: #000000;">}</span></div>
then,compile it:<br>
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: #008080;">1</span>&nbsp;<span style="color: #000000;">root@houcy</span><span style="color: #000000;">-</span><span style="color: #000000;">desktop:</span><span style="color: #000000;">/</span><span style="color: #000000;">#&nbsp;gcc&nbsp;eth_txt.c&nbsp;</span><span style="color: #000000;">-</span><span style="color: #000000;">L</span><span style="color: #000000;">/</span><span style="color: #000000;">usr</span><span style="color: #000000;">/</span><span style="color: #000000;">lib&nbsp;</span><span style="color: #000000;">-</span><span style="color: #000000;">lpcap&nbsp;</span><span style="color: #000000;">-</span><span style="color: #000000;">o&nbsp;ext_txt</span></div>
<br>5.Run and see.<br>
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: #008080;">1</span>&nbsp;<span style="color: #000000;">root@houcy</span><span style="color: #000000;">-</span><span style="color: #000000;">desktop:</span><span style="color: #000000;">/</span><span style="color: #000000;">home</span><span style="color: #000000;">/</span><span style="color: #000000;">houcy#&nbsp;.</span><span style="color: #000000;">/</span><span style="color: #000000;">ext_txt&nbsp;eth0<br></span><span style="color: #008080;">2</span>&nbsp;<span style="color: #000000;">Finde&nbsp;data<br></span><span style="color: #008080;">3</span>&nbsp;<span style="color: #000000;">Finde&nbsp;data<br></span><span style="color: #008080;">4</span>&nbsp;<span style="color: #000000;">Finde&nbsp;data<br></span><span style="color: #008080;">5</span>&nbsp;<span style="color: #000000;">Finde&nbsp;data<br></span><span style="color: #008080;">6</span>&nbsp;<span style="color: #000000;">Finde&nbsp;data<br></span><span style="color: #008080;">7</span>&nbsp;<span style="color: #000000;">Finde&nbsp;data<br></span><span style="color: #008080;">8</span>&nbsp;<span style="color: #000000;"><img src="http://www.cnitblog.com/Images/dot.gif"></span></div>
<br>Okay, we have seen all the process, from the beginning of installing to writing a test program.Next day,we`ll add some feature to this simple program and make it more powerful!<br>Good night!^_^<br><br><img src ="http://www.cnitblog.com/houcy/aggbug/43566.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/houcy/" target="_blank">挑灯看剑</a> 2008-05-10 01:13 <a href="http://www.cnitblog.com/houcy/archive/2008/05/10/43566.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Linux 内核解读入门[forward]</title><link>http://www.cnitblog.com/houcy/archive/2008/05/01/43152.html</link><dc:creator>挑灯看剑</dc:creator><author>挑灯看剑</author><pubDate>Thu, 01 May 2008 10:38:00 GMT</pubDate><guid>http://www.cnitblog.com/houcy/archive/2008/05/01/43152.html</guid><wfw:comment>http://www.cnitblog.com/houcy/comments/43152.html</wfw:comment><comments>http://www.cnitblog.com/houcy/archive/2008/05/01/43152.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/houcy/comments/commentRss/43152.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/houcy/services/trackbacks/43152.html</trackback:ping><description><![CDATA[<div id=post_message_132506 style="OVERFLOW-X: hidden">出自：<a href="http://www.linuxforum.net/" target=_blank><font color=#000000>http://www.linuxforum.net</font></a> 喻锋荣 2001年02月05日 21:40<br><br>针对好多Linux　爱好者对内核很有兴趣却无从下口，本文旨在介绍一种解读linux内核源码的入门方法，<br>而不是解说linux复杂的内核机制；<br>一．核心源程序的文件组织：　<br>1．Linux核心源程序通常都安装在/usr/src/linux下，而且它有一个非常简单的编号约定：任何偶数的<br>核心（例如2.0.30）都是一个稳定地发行的核心，而任何奇数的核心（例如2.1.42）都是一个开发中的核心。<br>本文基于稳定的2.2.5源代码，第二部分的实现平台为　Redhat　Linux　6.0。<br>2．核心源程序的文件按树形结构进行组织，在源程序树的最上层你会看到这样一些目录：<br>●Arch　：arch子目录包括了所有和体系结构相关的核心代码。它的每一个子目录都代表一种支持的体系<br>　　结构，例如i386就是关于intel　cpu及与之相兼容体系结构的子目录。PC机一般都基于此目录；<br>●Include:　include子目录包括编译核心所需要的大部分头文件。与平台无关的头文件在　include/linux<br>　　子目录下，与　intel　cpu相关的头文件在include/asm-i386子目录下,而include/scsi目录则是有关<br>　　scsi设备的头文件目录；<br>●Init：　这个目录包含核心的初始化代码(注：不是系统的引导代码)，包含两个文件main.c和Version.c，<br>　　这是研究核心如何工作的一个非常好的起点。<br>●Mm　：这个目录包括所有独立于　cpu　体系结构的内存管理代码，如页式存储管理内存的分配和释放等；而和<br>　　体系结构相关的内存管理代码则位于arch/*/mm/，例如arch/i386/mm/Fault.c<br>●Kernel：主要的核心代码，此目录下的文件实现了大多数linux系统的内核函数，其中最重要的文件当属<br>　　sched.c；同样，和体系结构相关的代码在arch/*/kernel中；<br>●Drivers：　放置系统所有的设备驱动程序;每种驱动程序又各占用一个子目录：如，/block　下为块设备<br>　　驱动程序，比如ide（ide.c）。如果你希望查看所有可能包含文件系统的设备是如何初始化的，你可以看<br>　　drivers/block/genhd.c中的device_setup()。它不仅初始化硬盘，也初始化网络，因为安装nfs文件<br>　　系统的时候需要网络<br>其他:　　如,　Lib放置核心的库代码;　Net,核心与网络相关的代码;　Ipc,这个目录包含核心的进程间通讯的代码;　<br>　　Fs　,所有的文件系统代码和各种类型的文件操作代码，它的每一个子目录支持一个文件系统，例如fat和ext2;<br>　　Scripts,　此目录包含用于配置核心的脚本文件等。<br>　　　一般，在每个目录下，都有一个　.depend　文件和一个　Makefile　文件，这两个文件都是编译时<br>　　使用的辅助文件，仔细阅读这两个文件对弄清各个文件这间的联系和依托关系很有帮助；而且，在有的目录下<br>　　还有Readme　文件，它是对该目录下的文件的一些说明，同样有利于我们对内核源码的理解；<br>　　<br>二．解读实战：为你的内核增加一个系统调用<br>虽然，Linux　的内核源码用树形结构组织得非常合理、科学，把功能相关联的文件都放在同一个子目录下，这样使<br>得程序更具可读性。然而，Linux　的内核源码实在是太大而且非常复杂，即便采用了很合理的文件组织方法，在<br>不同目录下的文件之间还是有很多的关联，分析核心的一部分代码通常会要查看其它的几个相关的文件，而且可能<br>这些文件还不在同一个子目录下。<br>体系的庞大复杂和文件之间关联的错综复杂，可能就是很多人对其望而生畏的主要原因。当然，这种令人生畏的劳动<br>所带来的回报也是非常令人着迷的：你不仅可以从中学到很多的计算机的底层的知识（如下面将讲到的系统的引导），<br>体会到整个操作系统体系结构的精妙和在解决某个具体细节问题时，算法的巧妙；而且更重要的是：在源码的分析过<br>程中，你就会被一点一点地、潜移默化地专业化；甚至，只要分析十分之一的代码后，你就会深刻地体会到，什么样<br>的代码才是一个专业的程序员写的，什么样的代码是一个业余爱好者写的。<br>为了使读者能更好的体会到这一特点，下面举了一个具体的内核分析实例，希望能通过这个实例，使读者对　Linux　<br>的内核的组织有些具体的认识，从中读者也可以学到一些对内核的分析方法。<br><br>以下即为分析实例：<br><br>【一】操作平台:<br>硬件：cpu　　　　　　　　　　　　　　　　　　　　intel　Pentium　II　;<br>软件：Redhat　Linux　6.0;　　　　　　内核版本2.2.5<br><br>【二】相关内核源代码分析:<br>1．系统的引导和初始化：Linux　系统的引导有好几种方式：常见的有　Lilo,　Loadin引导和Linux的自举引导<br>　　（bootsect-loader）,而后者所对应源程序为arch/i386/boot/bootsect.S，它为实模式的汇编程序，限于<br>　　　篇幅在此不做分析；无论是哪种引导方式，最后都要跳转到　　arch/i386/Kernel/setup.S，　setup.S主要是<br>　　　进行时模式下的初始化，为系统进入保护模式做准备；此后，系统执行　arch/i386/kernel/head.S　(对经压缩<br>　　　后存放的内核要先执行　arch/i386/boot/compressed/head.S);　head.S　中定义的一段汇编程序setup_idt　，<br>　　　它负责建立一张256项的　idt　表(Interrupt　Descriptor　Table),此表保存着所有自陷和中断的入口地址;其中<br>　　　包括系统调用总控程序　system_call　的入口地址;当然，除此之外，head.S还要做一些其他的初始化工作；<br>2．系统初始化后运行的第一个内核程序asmlinkage　void　__init　start_kernel(void)　定义在<br>　　　/usr/src/linux/init/main.c中,它通过调用usr/src/linux/arch/i386/kernel/traps.c　　中的一个函数　<br>　　　void　__init　trap_init(void)　把各自陷和中断服务程序的入口地址设置到　idt　表中,其中系统调用总控程序<br>　　　　system_cal就是中断服务程序之一;void　__init　trap_init(void)　　　函数则通过调用一个宏　<br>　　　　set_system_gate(SYSCALL_VECTOR,&amp;system_call);　把系统调用总控程序的入口挂在中断0x80上;<br>其中SYSCALL_VECTOR是定义在　/usr/src/linux/arch/i386/kernel/irq.h中的一个常量0x80;　　而　system_call　<br>　即为中断总控程序的入口地址;中断总控程序用汇编语言定义在/usr/src/linux/arch/i386/kernel/entry.S中;<br>3.中断总控程序主要负责保存处理机执行系统调用前的状态,检验当前调用是否合法,　并根据系统调用向量，使处理机<br>　　跳转到保存在　sys_call_table　表中的相应系统服务例程的入口;　从系统服务例程返回后恢复处理机状态退回用户程序;<br>　　而系统调用向量则定义在/usr/src/linux/include/asm-386/unistd.h　　中;sys_call_table　表定义在<br>　　/usr/src/linux/arch/i386/kernel/entry.S　中; 　同时在　/usr/src/linux/include/asm-386/unistd.h　<br>　　中也定义了系统调用的用户编程接口;<br>4.由此可见　,　　linux　的系统调用也象　dos　系统的　　int　21h　中断服务,　　它把0x80　中断作为总的入口,　然后<br>　　转到保存在　sys_call_table　表中的各种中断服务例程的入口地址　,　形成各种不同的中断服务;<br>　　由以上源代码分析可知,　　要增加一个系统调用就必须在　sys_call_table　　表中增加一项　,　　并在其中保存好自己<br>　　的系统服务例程的入口地址,然后重新编译内核，当然，系统服务例程是必不可少的。<br>由此可知在此版linux内核源程序&lt;2。2。5&gt;中,与系统调用相关的源程序文件就包括以下这些:<br>1．arch/i386/boot/bootsect.S<br>2．arch/i386/Kernel/setup.S<br>3．arch/i386/boot/compressed/head.S<br>4．arch/i386/kernel/head.S<br>5．init/main.c<br>6．arch/i386/kernel/traps.c<br>7．arch/i386/kernel/entry.S<br>8．arch/i386/kernel/irq.h<br>9．include/asm-386/unistd.h<br><br>　当然，这只是涉及到的几个主要文件。而事实上，增加系统调用真正要修改文件只有include/asm-386/unistd.h<br>　和arch/i386/kernel/entry.S两个;<br><br>【三】　对内核源码的修改：<br>1.在kernel/sys.c中增加系统服务例程如下：<br>　　　　　 　asmlinkage　int　sys_addtotal(int　numdata)<br>{<br>int　i=0,enddata=0;<br>while(i&lt;=numdata)<br>enddata+=i++;<br>return　enddata;<br>}<br>　　该函数有一个　int　型入口参数　numdata　,　并返回从　0　到　numdata　的累加值;　　当然也可以把系统服务例程放<br>　　在一个自己定义的文件或其他文件中，只是要在相应文件中作必要的说明；<br>2.把　asmlinkage　int　sys_addtotal(　int)　的入口地址加到sys_call_table表中:<br>　　arch/i386/kernel/entry.S　中的最后几行源代码修改前为:　<br>...　　　...<br>.long　SYMBOL_NAME(sys_sendfile)<br>.long　SYMBOL_NAME(sys_ni_syscall) /*　streams1　*/<br>.long　SYMBOL_NAME(sys_ni_syscall) /*　streams2　*/<br>.long　SYMBOL_NAME(sys_vfork)　　　　　　　　　　　　/*　190　*/<br>.rept　NR_syscalls-190<br>.long　SYMBOL_NAME(sys_ni_syscall)<br>.endr<br>修改后为:　 ...　　　...<br>.long　SYMBOL_NAME(sys_sendfile)<br>.long　SYMBOL_NAME(sys_ni_syscall) /*　streams1　*/<br>.long　SYMBOL_NAME(sys_ni_syscall) /*　streams2　*/<br>.long　SYMBOL_NAME(sys_vfork)　　　　　　　　　　　　/*　190　*/<br>/*　add　by　I　*/<br>.long　SYMBOL_NAME(sys_addtotal)<br>.rept　NR_syscalls-191<br>.long　SYMBOL_NAME(sys_ni_syscall)<br>.endr<br>3.　把增加的　sys_call_table　表项所对应的向量,在include/asm-386/unistd.h　中进行必要申明,以供<br>　　　用户进程和其他系统进程查询或调用:<br>增加后的部分　/usr/src/linux/include/asm-386/unistd.h　文件如下:<br>...　　　...<br>#define　__NR_sendfile 187<br>#define　__NR_getpmsg 　188<br>#define　__NR_putpmsg　　 189　　　　　<br>#define　__NR_vfork 190<br>/*　add　by　I　*/<br>#define　__NR_addtotal 191<br>4.测试程序(test.c)如下:<br>#include<br>#include<br><br>_syscall1(int,addtotal,int,　num)<br><br>main()<br>{<br>int　i,j;<br><br>do　<br>　　　printf("Please　input　a　number\n");<br>　 while(scanf("%d",&amp;i)==EOF);　<br>if((j=addtotal(i))==-1)<br>　　　printf("Error　occurred　in　syscall-addtotal();\n");　<br>printf("Total　from　0　to　%d　is　%d　\n",i,j);<br>}<br>对修改后的新的内核进行编译，并引导它作为新的操作系统，运行几个程序后可以发现一切正常；在新的系统下<br>对测试程序进行编译(*注：由于原内核并未提供此系统调用，所以只有在编译后的新内核下，此测试程序才能<br>可能被编译通过)，运行情况如下：<br>$gcc　-o　test　test.c<br>$./test<br>Please　input　a　number<br>36<br>Total　from　0　to　36　is　666<br>可见，修改成功；<br>而且，对相关源码的进一步分析可知，在此版本的内核中,从/usr/src/linux/arch/i386/kernel/entry.S　<br>文件中对　sys_call_table　表的设置可以看出,有好几个系统调用的服务例程都是定义在<br>　　/usr/src/linux/kernel/sys.c　中的同一个函数：<br>asmlinkage　int　sys_ni_syscall(void)<br>{<br>return　-ENOSYS;<br>}<br>例如第188项和第189项就是如此:<br>...　　　...<br>.long　SYMBOL_NAME(sys_sendfile)<br>.long　SYMBOL_NAME(sys_ni_syscall) /*　streams1　*/<br>.long　SYMBOL_NAME(sys_ni_syscall) /*　streams2　*/<br>.long　SYMBOL_NAME(sys_vfork)　　　　　　　　　　　　/*　190　*/<br>... ...<br>而这两项在文件　/usr/src/linux/include/asm-386/unistd.h　中却申明如下:<br>...　　　...<br>#define　__NR_sendfile 187<br>#define　__NR_getpmsg 188 /*　some　people　actually　want　streams　*/<br>#define　__NR_putpmsg 189 /*　some　people　actually　want　streams　*/<br>#define　__NR_vfork 190<br>由此可见,在此版本的内核源代码中,由于asmlinkage　int　sys_ni_syscall(void)　函数并不进行任何操作,<br>所以包括　getpmsg,　putpmsg　　在内的好几个系统调用都是不进行任何操作的，即有待扩充的空调用；　但它们<br>却仍然占用着sys_call_table表项，估计这是设计者们为了方便扩充系统调用而安排的;　所以只需增加相应<br>服务例程（如增加服务例程getmsg或putpmsg），就可以达到增加系统调用的作用。<br>结语：当然对于庞大复杂的　linux　内核而言，一篇文章远远不够，而且与系统调用相关的代码也只是内核中极其<br>微小的一部分；但重要的是方法、掌握好的分析方法；所以上的分析只是起个引导的作用，而正真的分析还有待于<br>读者自己的努力。</div>
<!-- / message -->
<img src ="http://www.cnitblog.com/houcy/aggbug/43152.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/houcy/" target="_blank">挑灯看剑</a> 2008-05-01 18:38 <a href="http://www.cnitblog.com/houcy/archive/2008/05/01/43152.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Linux命令缩写的解释【转】</title><link>http://www.cnitblog.com/houcy/archive/2008/04/27/42829.html</link><dc:creator>挑灯看剑</dc:creator><author>挑灯看剑</author><pubDate>Sun, 27 Apr 2008 08:52:00 GMT</pubDate><guid>http://www.cnitblog.com/houcy/archive/2008/04/27/42829.html</guid><wfw:comment>http://www.cnitblog.com/houcy/comments/42829.html</wfw:comment><comments>http://www.cnitblog.com/houcy/archive/2008/04/27/42829.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/houcy/comments/commentRss/42829.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/houcy/services/trackbacks/42829.html</trackback:ping><description><![CDATA[<p>bin = BINaries<br>/dev = DEVices<br>/etc = ETCetera<br>/lib = LIBrary<br>/proc = PROCesses<br>/sbin = Superuser BINaries<br>/tmp = TeMPorary<br>/usr = Unix Shared Resources<br>/var = VARiable ?<br>FIFO = First In, First Out<br>GRUB = GRand Unified Bootloader<br>IFS = Internal Field Seperators<br>LILO = LInux LOader<br>MySQL = My是最初作者女儿的名字，SQL = Structured Query Language<br>PHP = Personal Home Page Tools = PHP Hypertext Preprocessor<br>PS = Prompt String<br>Perl = "Pratical Extraction and Report Language" = "Pathologically Eclectic Rubbish Lister"<br>Python 得名于电视剧Monty Python's Flying Circus<br>Tcl = Tool Command Language<br>Tk = ToolKit<br>VT = Video Terminal<br>YaST = Yet Another Setup Tool<br>apache = "a patchy" server<br>apt = Advanced Packaging Tool<br>ar = archiver<br>as = assembler<br>awk = "Aho Weiberger and Kernighan" 三个作者的姓的第一个字母<br>bash = Bourne Again SHell<br>bc = Basic (Better) Calculator<br>bg = BackGround<br>biff = 作者Heidi Stettner在U.C.Berkely养的一条狗,喜欢对邮递员汪汪叫。<br>cal = CALendar<br>cat = CATenate<br>cd = Change Directory<br>chgrp = CHange GRouP<br>chmod = CHange MODe<br>chown = CHange OWNer<br>chsh = CHange SHell<br>cmp = compare<br>cobra = Common Object Request Broker Architecture<br>comm = common<br>cp = CoPy<br>cpio = CoPy In and Out<br>cpp = C Pre Processor<br>cron = Chronos 希腊文时间<br>cups = Common Unix Printing System<br>cvs = Current Version System<br>daemon = Disk And Execution MONitor<br>dc = Desk Calculator<br>dd = Disk Dump<br>df = Disk Free<br>diff = DIFFerence<br>dmesg = diagnostic message<br>du = Disk Usage<br>ed = editor<br>egrep = Extended GREP<br>elf = Extensible Linking Format<br>elm = ELectronic Mail<br>emacs = Editor MACroS<br>eval = EVALuate<br>ex = EXtended<br>exec = EXECute<br>fd = file descriptors<br>fg = ForeGround<br>fgrep = Fixed GREP<br>fmt = format<br>fsck = File System ChecK<br>fstab = FileSystem TABle<br>fvwm = F*** Virtual Window Manager<br>gawk = GNU AWK<br>gpg = GNU Privacy Guard<br>groff = GNU troff<br>hal = Hardware Abstraction Layer<br>joe = Joe's Own Editor<br>ksh = Korn SHell<br>lame = Lame Ain't an MP3 Encoder<br>lex = LEXical analyser<br>lisp = LISt Processing = Lots of Irritating Superfluous Parentheses<br>ln = LiNk<br>lpr = Line PRint<br>ls = list<br>lsof = LiSt Open Files<br>m4 = Macro processor Version 4<br>man = MANual pages<br>mawk = Mike Brennan's AWK<br>mc = Midnight Commander<br>mkfs = MaKe FileSystem<br>mknod = MaKe NODe<br>motd = Message of The Day<br>mozilla = MOsaic GodZILLa<br>mtab = Mount TABle<br>mv = MoVe<br>nano = Nano's ANOther editor<br>nawk = New AWK<br>nl = Number of Lines<br>nm = names<br>nohup = No HangUP<br>nroff = New ROFF<br>od = Octal Dump<br>passwd = PASSWorD<br>pg = pager<br>pico = PIne's message COmposition editor<br>pine = "Program for Internet News &amp; Email" = "Pine is not Elm"<br>ping = 拟声 又 = Packet InterNet Grouper<br>pirntcap = PRINTer CAPability<br>popd = POP Directory<br>pr = pre<br>printf = PRINT Formatted<br>ps = Processes Status<br>pty = pseudo tty<br>pushd = PUSH Directory<br>pwd = Print Working Directory<br>rc = runcom = run command, rc还是plan9的shell<br>rev = REVerse<br>rm = ReMove<br>rn = Read News<br>roff = RunOFF<br>rpm = RPM Package Manager = RedHat Package Manager<br>rsh, rlogin, rvim中的r = Remote<br>rxvt = ouR XVT<br>seamoneky = 我<br>sed = Stream EDitor<br>seq = SEQuence<br>shar = SHell ARchive<br>slrn = S-Lang rn<br>ssh = Secure SHell<br>ssl = Secure Sockets Layer<br>stty = Set TTY<br>su = Substitute User<br>svn = SubVersioN<br>tar = Tape ARchive<br>tcsh = TENEX C shell<br>tee = T (T形水管接口)<br>telnet = TEminaL over Network<br>termcap = terminal capability<br>terminfo = terminal information<br>tex = &#964;έ&#967;&#957;&#951;的缩写，希腊文art<br>tr = traslate<br>troff = Typesetter new ROFF<br>tsort = Topological SORT<br>tty = TeleTypewriter<br>twm = Tom's Window Manager<br>tz = TimeZone<br>udev = Userspace DEV<br>ulimit = User's LIMIT<br>umask = User's MASK<br>uniq = UNIQue<br>vi = VIsual = Very Inconvenient<br>vim = Vi IMproved<br>wall = write all<br>wc = Word Count<br>wine = WINE Is Not an Emulator<br>xargs = eXtended ARGuments<br>xdm = X Display Manager<br>xlfd = X Logical Font Description<br>xmms = X Multimedia System<br>xrdb = X Resources DataBase<br>xwd = X Window Dump<br>yacc = yet another compiler compiler</p>
<p>转自<a href="http://frankdavejiwei.blog.163.com/blog/static/31445124200792493937451/"><u><font color=#0000ff>《frankdavejiwei的博客》</font></u></a></p>
<p>这些是补充的：<br>Fish = the Friendly Interactive SHell<br>su = Switch User<br>MIME = Multipurpose Internet Mail Extensions<br>ECMA = European Computer Manufacturers Association</p>
<img src ="http://www.cnitblog.com/houcy/aggbug/42829.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/houcy/" target="_blank">挑灯看剑</a> 2008-04-27 16:52 <a href="http://www.cnitblog.com/houcy/archive/2008/04/27/42829.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>很好的Linux编程链接</title><link>http://www.cnitblog.com/houcy/archive/2008/04/27/42818.html</link><dc:creator>挑灯看剑</dc:creator><author>挑灯看剑</author><pubDate>Sun, 27 Apr 2008 04:58:00 GMT</pubDate><guid>http://www.cnitblog.com/houcy/archive/2008/04/27/42818.html</guid><wfw:comment>http://www.cnitblog.com/houcy/comments/42818.html</wfw:comment><comments>http://www.cnitblog.com/houcy/archive/2008/04/27/42818.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/houcy/comments/commentRss/42818.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/houcy/services/trackbacks/42818.html</trackback:ping><description><![CDATA[<strong>[From <a href="http://www.linuxsir.org/">www.linuxsir.org</a>]<br><br>1、开发环境及开发工具<br><br></strong>GDB的使用<br><a href="http://www.linuxsir.org/bbs/showthread.php?t=171156" target=_blank><font color=#000000>http://www.linuxsir.org/bbs/showthread.php?t=171156</font></a><br><br>Eclipse IDE<br><a href="http://www.linuxsir.org/bbs/showthread.php?t=145249" target=_blank><font color=#000000>http://www.linuxsir.org/bbs/showthread.php?t=145249</font></a><br><br>autotools 使用<br><a href="http://www.linuxsir.org/bbs/showthread.php?t=239728" target=_blank><font color=#000000>http://www.linuxsir.org/bbs/showthread.php?t=239728</font></a><br><br>make 指南<br><a href="http://www.linuxsir.org/bbs/showthread.php?t=44269" target=_blank><font color=#000000>http://www.linuxsir.org/bbs/showthread.php?t=44269</font></a><br><br>CVS使用<br><a href="http://www.linuxsir.org/bbs/showthread.php?t=170538" target=_blank><font color=#000000>http://www.linuxsir.org/bbs/showthread.php?t=170538</font></a><br><br>编程工具列表<br><a href="http://www.linuxsir.org/bbs/showthread.php?t=152770" target=_blank><font color=#000000>http://www.linuxsir.org/bbs/showthread.php?t=152770</font></a><br><br>Kylix<br><a href="http://www.linuxsir.org/bbs/showthread.php?t=46664" target=_blank><font color=#000000>http://www.linuxsir.org/bbs/showthread.php?t=46664</font></a><br><br>JBuider<br><a href="http://www.linuxsir.org/bbs/showthread.php?t=30451" target=_blank><font color=#000000>http://www.linuxsir.org/bbs/showthread.php?t=30451</font></a><br><br>patch使用<br><a href="http://www.linuxsir.org/bbs/showthread.php?t=240802" target=_blank><font color=#000000>http://www.linuxsir.org/bbs/showthread.php?t=240802</font></a><br><br>ICC<br><a href="http://www.linuxsir.org/bbs/showthread.php?t=235230" target=_blank><font color=#000000>http://www.linuxsir.org/bbs/showthread.php?t=235230</font></a><br><br>各种IDE一览<br><a href="http://www.linuxsir.org/bbs/showthread.php?t=91643" target=_blank><font color=#000000>http://www.linuxsir.org/bbs/showthread.php?t=91643</font></a><br><br>嵌入式系统开发工具链<br><a href="http://linuxsir.org/bbs/showthread.php?t=307966" target=_blank><font color=#000000>http://linuxsir.org/bbs/showthread.php?t=307966</font></a><br><br>用gdb调试段错<br><a href="http://linuxsir.org/bbs/showthread.php?t=309275" target=_blank><font color=#000000>http://linuxsir.org/bbs/showthread.php?t=309275</font></a><br><br>GCC扩展<br>长度为0的数组能有什么用处? <br><a href="http://linuxsir.org/bbs/showthread.php?t=313415" target=_blank><font color=#000000>http://linuxsir.org/bbs/showthread.php?t=313415</font></a><br><br><strong>2、输入、输出、文件和目录</strong><br>如何在程序异常退出前输出当前进程的堆栈信息<br><a href="http://www.linuxsir.org/bbs/showthread.php?t=312043" target=_blank><font color=#000000>http://www.linuxsir.org/bbs/showthread.php?t=312043</font></a><br><br>如何获取终端的大小？<br><a href="http://www.linuxsir.org/bbs/showthread.php?t=313380" target=_blank><font color=#000000>http://www.linuxsir.org/bbs/showthread.php?t=313380</font></a><br><br>printf固定长度字符串<br><a href="http://linuxsir.org/bbs/showthread.php?t=309650" target=_blank><font color=#000000>http://linuxsir.org/bbs/showthread.php?t=309650</font></a><br><br>详尽的日志对程序开发非常重要<br><a href="http://linuxsir.org/bbs/showthread.php?t=302451" target=_blank><font color=#000000>http://linuxsir.org/bbs/showthread.php?t=302451</font></a><br><br>串口通信<br><a href="http://www.linuxsir.org/bbs/showthread.php?t=110639" target=_blank><font color=#000000>http://www.linuxsir.org/bbs/showthread.php?t=110639</font></a><br><br>底层键盘操作<br><a href="http://www.linuxsir.org/bbs/showthread.php?t=220094" target=_blank><font color=#000000>http://www.linuxsir.org/bbs/showthread.php?t=220094</font></a>驱动层<br><a href="http://www.linuxsir.org/bbs/showthread.php?t=159824" target=_blank><font color=#000000>http://www.linuxsir.org/bbs/showthread.php?t=159824</font></a>应用层<br><br>关闭文件系统缓冲区<br><a href="http://www.linuxsir.org/bbs/showthread.php?t=197939" target=_blank><font color=#000000>http://www.linuxsir.org/bbs/showthread.php?t=197939</font></a><br><br>读取CMOS时间<br><a href="http://www.linuxsir.org/bbs/showthread.php?t=218171" target=_blank><font color=#000000>http://www.linuxsir.org/bbs/showthread.php?t=218171</font></a><br><br><strong>3、进程和同步</strong><br><br>如何取得线程的PID <br><a href="http://linuxsir.org/bbs/thread317267.html" target=_blank><font color=#000000>http://linuxsir.org/bbs/thread317267.html</font></a><br><br>带参数的进程间信号传递<br><a href="http://linuxsir.org/bbs/showthread.php?t=303161" target=_blank><font color=#000000>http://linuxsir.org/bbs/showthread.php?t=303161</font></a><br><br>进程基础<br><a href="http://www.linuxsir.org/bbs/showthread.php?t=197428" target=_blank><font color=#000000>http://www.linuxsir.org/bbs/showthread.php?t=197428</font></a><br><br>父子进程间传递文件描述符<br><a href="http://www.linuxsir.org/bbs/showthread.php?t=167630" target=_blank><font color=#000000>http://www.linuxsir.org/bbs/showthread.php?t=167630</font></a><br><br>解决线程最多只有300多个限制的问题<br><a href="http://linuxsir.org/bbs/showthread.php?t=201991" target=_blank><font color=#000000>http://linuxsir.org/bbs/showthread.php?t=201991</font></a><br><br>dup和dup2用法<br><a href="http://www.linuxsir.org/bbs/showthread.php?t=26230" target=_blank><font color=#000000>http://www.linuxsir.org/bbs/showthread.php?t=26230</font></a><br><br><strong>4、网络编程</strong><br>somaxconn<br><a href="http://www.linuxsir.org/bbs/thread324532.html" target=_blank><font color=#000000>http://www.linuxsir.org/bbs/thread324532.html</font></a><br><br>实时SIGIO队列与sigwaitinfo的结合使用（提高网络服务效率）<br><a href="http://www.linuxsir.org/bbs/showthread.php?t=310829" target=_blank><font color=#000000>http://www.linuxsir.org/bbs/showthread.php?t=310829</font></a><br><br>ARP欺骗程序<br><a href="http://linuxsir.org/bbs/showthread.php?t=309142" target=_blank><font color=#000000>http://linuxsir.org/bbs/showthread.php?t=309142</font></a><br><br>关于sendmsg的返回值<br><a href="http://linuxsir.org/bbs/showthread.php?t=307008" target=_blank><font color=#000000>http://linuxsir.org/bbs/showthread.php?t=307008</font></a><br><br>socke也用mmap<br><a href="http://www.linuxsir.org/bbs/showthread.php?t=303837" target=_blank><font color=#000000>http://www.linuxsir.org/bbs/showthread.php?t=303837</font></a><br><br>各类TCP服务程序<br><a href="http://www.linuxsir.org/bbs/showthread.php?t=263556" target=_blank><font color=#000000>http://www.linuxsir.org/bbs/showthread.php?t=263556</font></a><br><br>POSIX异步IO实例<br><a href="http://linuxsir.org/bbs/showthread.php?t=285235" target=_blank><font color=#000000>http://linuxsir.org/bbs/showthread.php?t=285235</font></a><br><br>异步SIGIO<br><a href="http://www.linuxsir.org/bbs/showthread.php?t=214611" target=_blank><font color=#000000>http://www.linuxsir.org/bbs/showthread.php?t=214611</font></a><br><br>TCP端口扫描（功能同nmap？？）<br><a href="http://www.linuxsir.org/bbs/showthread.php?t=196598" target=_blank><font color=#000000>http://www.linuxsir.org/bbs/showthread.php?t=196598</font></a><br><br>获取主机所有IP<br><a href="http://www.linuxsir.org/bbs/showthread.php?t=239039" target=_blank><font color=#000000>http://www.linuxsir.org/bbs/showthread.php?t=239039</font></a><br><br>apache模块编程<br><a href="http://www.linuxsir.org/bbs/showthread.php?t=206141" target=_blank><font color=#000000>http://www.linuxsir.org/bbs/showthread.php?t=206141</font></a><br><br>通过接口名取得IP地址<br><a href="http://www.linuxsir.org/bbs/showthread.php?t=195146" target=_blank><font color=#000000>http://www.linuxsir.org/bbs/showthread.php?t=195146</font></a><br><br>libpcap使用<br><a href="http://www.linuxsir.org/bbs/showthread.php?t=193482" target=_blank><font color=#000000>http://www.linuxsir.org/bbs/showthread.php?t=193482</font></a><br><br>使用gethostbyname_r得到dns信息<br><a href="http://www.linuxsir.org/bbs/showthread.php?t=130765" target=_blank><font color=#000000>http://www.linuxsir.org/bbs/showthread.php?t=130765</font></a><br><br>Setsockopt选项<br><a href="http://www.linuxsir.org/bbs/showthread.php?t=55738" target=_blank><font color=#000000>http://www.linuxsir.org/bbs/showthread.php?t=55738</font></a><br><br>UDP超时重传<br><a href="http://www.linuxsir.org/bbs/showthread.php?t=46066" target=_blank><font color=#000000>http://www.linuxsir.org/bbs/showthread.php?t=46066</font></a><br><br>内核NETLINK接口<br><a href="http://linuxsir.org/bbs/showthread.php?t=278469" target=_blank><font color=#000000>http://linuxsir.org/bbs/showthread.php?t=278469</font></a><br><a href="http://linuxsir.org/bbs/showthread.php?t=284220" target=_blank><font color=#000000>http://linuxsir.org/bbs/showthread.php?t=284220</font></a><br><br>如何使用openssl写https服务<br><a href="http://www.linuxsir.org/bbs/thread324654.html" target=_blank><font color=#000000>http://www.linuxsir.org/bbs/thread324654.html</font></a><br><br><strong>5、用户界面编程</strong><br>GTK中工作线程与主线程与UI交互的一个原则<br><a href="http://linuxsir.org/bbs/thread327616.html" target=_blank><font color=#000000>http://linuxsir.org/bbs/thread327616.html</font></a><br><br>console下的文件管理器<br><a href="http://linuxsir.org/bbs/thread83252.html" target=_blank><font color=#000000>http://linuxsir.org/bbs/thread83252.html</font></a><br><br>xlib 基础<br><a href="http://www.linuxsir.org/bbs/showthread.php?t=243208" target=_blank><font color=#000000>http://www.linuxsir.org/bbs/showthread.php?t=243208</font></a><br><br>xlib经典编程文章<br><a href="http://www.linuxsir.org/bbs/showthread.php?t=74857" target=_blank><font color=#000000>http://www.linuxsir.org/bbs/showthread.php?t=74857</font></a><br><br>XPM文件格式<br><a href="http://www.linuxsir.org/bbs/showthread.php?t=275780" target=_blank><font color=#000000>http://www.linuxsir.org/bbs/showthread.php?t=275780</font></a><br><br>呈现XPM文件<br><a href="http://www.linuxsir.org/bbs/showthread.php?t=274181" target=_blank><font color=#000000>http://www.linuxsir.org/bbs/showthread.php?t=274181</font></a><br><br>framebuffer<br><a href="http://www.linuxsir.org/bbs/showthread.php?t=126612" target=_blank><font color=#000000>http://www.linuxsir.org/bbs/showthread.php?t=126612</font></a><br><br>gtkmm框架<br><a href="http://www.linuxsir.org/bbs/showthread.php?t=93745" target=_blank><font color=#000000>http://www.linuxsir.org/bbs/showthread.php?t=93745</font></a><br><br>GTK+ 操作 Mysql 数据库示例 <br><a href="http://www.linuxsir.org/bbs/showthread.php?t=177913" target=_blank><font color=#000000>http://www.linuxsir.org/bbs/showthread.php?t=177913</font></a><br><br>Glade使用<br><a href="http://www.linuxsir.org/bbs/showthread.php?t=49704" target=_blank><font color=#000000>http://www.linuxsir.org/bbs/showthread.php?t=49704</font></a><br><br>Glade 加GTK的应用例子（监视文件内容改变）<br><a href="http://www.linuxsir.org/bbs/thread322046.html" target=_blank><font color=#000000>http://www.linuxsir.org/bbs/thread322046.html</font></a><br><br>GTK＋显示中文<br><a href="http://www.linuxsir.org/bbs/showthread.php?t=58073&amp;page=2" target=_blank><font color=#000000>http://www.linuxsir.org/bbs/showthre...t=58073&amp;page=2</font></a><br><br>[GTK+]怎样获得当前桌面下的鼠标和键盘事件<br><a href="http://www.linuxsir.org/bbs/showthread.php?t=310547" target=_blank><font color=#000000>http://www.linuxsir.org/bbs/showthread.php?t=310547</font></a><br><br>使用libglade分离出界面代码<br><a href="http://www.linuxsir.org/bbs/showthread.php?t=243726" target=_blank><font color=#000000>http://www.linuxsir.org/bbs/showthread.php?t=243726</font></a><br><br><strong>5、RAD</strong><br>moonlight<br><a href="http://linuxsir.org/bbs/showthread.php?t=307977" target=_blank><font color=#000000>http://linuxsir.org/bbs/showthread.php?t=307977</font></a><br><br>XUL介绍<br><a href="http://www.linuxsir.org/bbs/showthread.php?t=243771" target=_blank><font color=#000000>http://www.linuxsir.org/bbs/showthread.php?t=243771</font></a><br><br>安装XUL软件包<br><a href="http://www.linuxsir.org/bbs/showthread.php?t=275789" target=_blank><font color=#000000>http://www.linuxsir.org/bbs/showthread.php?t=275789</font></a><br><br>RDF介绍<br><a href="http://linuxsir.org/bbs/showthread.php?t=289633" target=_blank><font color=#000000>http://linuxsir.org/bbs/showthread.php?t=289633</font></a><br><br>Directfb<br>yv12表面<br><a href="http://linuxsir.org/bbs/showthread.php?t=307155" target=_blank><font color=#000000>http://linuxsir.org/bbs/showthread.php?t=307155</font></a><br><br>简单介绍udevd, hald, dbusd的关系 <br><a href="http://www.linuxsir.org/bbs/thread319781.html" target=_blank><font color=#000000>http://www.linuxsir.org/bbs/thread319781.html</font></a><br><br><br>GTK+ 怎么 发送消息给别的GUI应用程序？<br><a href="http://www.linuxsir.org/bbs/showthread.php?t=313879" target=_blank><font color=#000000>http://www.linuxsir.org/bbs/showthread.php?t=313879</font></a> <br><br><strong>6、驱动程序编程</strong><br><br>驱动程序开发介绍<br><a href="http://www.linuxsir.org/bbs/showthread.php?t=193994" target=_blank><font color=#000000>http://www.linuxsir.org/bbs/showthread.php?t=193994</font></a><br><br>网卡驱动<br><a href="http://www.linuxsir.org/bbs/showthread.php?t=47273" target=_blank><font color=#000000>http://www.linuxsir.org/bbs/showthread.php?t=47273</font></a><br><br>Sis900 网卡驱动程序解析<br><a href="http://www.linuxsir.org/bbs/showthread.php?t=53662" target=_blank><font color=#000000>http://www.linuxsir.org/bbs/showthread.php?t=53662</font></a><br><br><strong>7、Lex与Yacc（做这个编程的人都有！！）</strong><br><br>小型计算器<br><a href="http://www.linuxsir.org/bbs/showthread.php?t=186941" target=_blank><font color=#000000>http://www.linuxsir.org/bbs/showthread.php?t=186941</font></a><br><br>解释器<br><a href="http://www.linuxsir.org/bbs/showthread.php?t=201003" target=_blank><font color=#000000>http://www.linuxsir.org/bbs/showthread.php?t=201003</font></a><br><br>C语言语法<br><a href="http://www.linuxsir.org/bbs/showthread.php?t=200217" target=_blank><font color=#000000>http://www.linuxsir.org/bbs/showthread.php?t=200217</font></a><br><br><strong>8、多媒体编程</strong><br><br>声卡编程<br><a href="http://www.linuxsir.org/bbs/showthread.php?t=238761" target=_blank><font color=#000000>http://www.linuxsir.org/bbs/showthread.php?t=238761</font></a><br><br>视频编程<br><a href="http://www.linuxsir.org/bbs/showthread.php?t=190460" target=_blank><font color=#000000>http://www.linuxsir.org/bbs/showthread.php?t=190460</font></a><br><br>AVS解码器<br><a href="http://www.linuxsir.org/bbs/showthread.php?t=246801" target=_blank><font color=#000000>http://www.linuxsir.org/bbs/showthread.php?t=246801</font></a><br><br><strong>9、数据库编程</strong><br><br>C访问mysql<br><a href="http://www.linuxsir.org/bbs/showthread.php?t=199699" target=_blank><font color=#000000>http://www.linuxsir.org/bbs/showthread.php?t=199699</font></a><br><br><strong>10、软件包管理</strong><br><br><strong>11、GNU轶事</strong><br>《borland传奇》中对Linux社区的污蔑 <br><a href="http://www.linuxsir.org/bbs/showthread.php?t=276061" target=_blank><font color=#000000>http://www.linuxsir.org/bbs/showthread.php?t=276061</font></a><br><br><strong>12、深入程序的内部</strong><br><br>共享库原理<br><a href="http://www.linuxsir.org/bbs/showthread.php?t=210029" target=_blank><font color=#000000>http://www.linuxsir.org/bbs/showthread.php?t=210029</font></a><br><br>从函数调用到符号解析<br><a href="http://www.linuxsir.org/bbs/showthread.php?t=215753" target=_blank><font color=#000000>http://www.linuxsir.org/bbs/showthread.php?t=215753</font></a><br><br>linux-gate是什么<br><a href="http://www.linuxsir.org/bbs/showthread.php?t=218852" target=_blank><font color=#000000>http://www.linuxsir.org/bbs/showthread.php?t=218852</font></a><br><br>深入程序栈<br><a href="http://www.linuxsir.org/bbs/showthread.php?t=216107" target=_blank><font color=#000000>http://www.linuxsir.org/bbs/showthread.php?t=216107</font></a><br><br>线程实现<br><a href="http://www.linuxsir.org/bbs/showthread.php?t=158480" target=_blank><font color=#000000>http://www.linuxsir.org/bbs/showthread.php?t=158480</font></a><br><br>线程原理<br><a href="http://www.linuxsir.org/bbs/showthread.php?t=55666" target=_blank><font color=#000000>http://www.linuxsir.org/bbs/showthread.php?t=55666</font></a><br><br>ELF文件格式分析<br><a href="http://www.linuxsir.org/bbs/showthread.php?t=48381" target=_blank><font color=#000000>http://www.linuxsir.org/bbs/showthread.php?t=48381</font></a><br><a href="http://linuxsir.org/bbs/showthread.php?p=1196195" target=_blank><font color=#000000>http://linuxsir.org/bbs/showthread.php?p=1196195</font></a><br><br><br><br><strong>13、黑客编程（这么重要的章节文章却太少了^_^）</strong><br><br>一次缓冲区溢出攻击试验<br><a href="http://www.linuxsir.org/bbs/showthread.php?t=182124" target=_blank><font color=#000000>http://www.linuxsir.org/bbs/showthread.php?t=182124</font></a><br><br>Heap区溢出技术分析<br><a href="http://www.linuxsir.org/bbs/showthread.php?t=50097" target=_blank><font color=#000000>http://www.linuxsir.org/bbs/showthread.php?t=50097</font></a><br><br>婷婷的实践（高人啊，女黑客简直就是trinidy）<br><a href="http://www.linuxsir.org/bbs/showthread.php?t=34745" target=_blank><font color=#000000>http://www.linuxsir.org/bbs/showthread.php?t=34745</font></a><br><br>ELF文件病毒的分析和编写<br><a href="http://linuxsir.org/bbs/thread323010.html" target=_blank><font color=#000000>http://linuxsir.org/bbs/thread323010.html</font></a><br><br><strong>14、汇编编程</strong><br>LINUX汇编(汇编语言程序设计读书笔记)<br><a href="http://linuxsir.org/bbs/showthread.php?t=289776" target=_blank><font color=#000000>http://linuxsir.org/bbs/showthread.php?t=289776</font></a><br><br><br><br><strong>15、数据结构</strong><br>内核提供的双向循环列表的使用<br><a href="http://linuxsir.org/bbs/showthread.php?t=311575" target=_blank><font color=#000000>http://linuxsir.org/bbs/showthread.php?t=311575</font></a> <br><br><strong>16、TIPS</strong><br><br>C面向对象思想<br><a href="http://www.linuxsir.org/bbs/showthread.php?t=166321" target=_blank><font color=#000000>http://www.linuxsir.org/bbs/showthread.php?t=166321</font></a><br><br>转换编码格式<br><a href="http://www.linuxsir.org/bbs/showthread.php?t=111436" target=_blank><font color=#000000>http://www.linuxsir.org/bbs/showthread.php?t=111436</font></a><br><br>正则表达式<br><a href="http://www.linuxsir.org/bbs/showthread.php?t=7189" target=_blank><font color=#000000>http://www.linuxsir.org/bbs/showthread.php?t=7189</font></a><br><br>JNI<br><a href="http://www.linuxsir.org/bbs/showthread.php?t=237146" target=_blank><font color=#000000>http://www.linuxsir.org/bbs/showthread.php?t=237146</font></a><br><br>操作机箱喇叭<br><a href="http://www.linuxsir.org/bbs/showthread.php?t=218852" target=_blank><font color=#000000>http://www.linuxsir.org/bbs/showthread.php?t=218852</font></a><br><br>在字符终端显示时钟 <br><a href="http://www.linuxsir.org/bbs/showthread.php?t=128547" target=_blank><font color=#000000>http://www.linuxsir.org/bbs/showthread.php?t=128547</font></a><br><br>VT100控制码<br><a href="http://www.linuxsir.org/bbs/showthread.php?t=43530" target=_blank><font color=#000000>http://www.linuxsir.org/bbs/showthread.php?t=43530</font></a><br><br>volatile用法<br><a href="http://www.linuxsir.org/bbs/showthread.php?t=55737" target=_blank><font color=#000000>http://www.linuxsir.org/bbs/showthread.php?t=55737</font></a><br><br>操作大于4G的文件<br><a href="http://www.linuxsir.org/bbs/showthread.php?t=261452" target=_blank><font color=#000000>http://www.linuxsir.org/bbs/showthread.php?t=261452</font></a><br><br>有关wchar_t<br><a href="http://www.linuxsir.org/bbs/showthread.php?t=190840" target=_blank><font color=#000000>http://www.linuxsir.org/bbs/showthread.php?t=190840</font></a><br><a href="http://linuxsir.org/bbs/showthread.php?t=306791" target=_blank><font color=#000000>http://linuxsir.org/bbs/showthread.php?t=306791</font></a><br><br>##的用法<br><a href="http://www.linuxsir.org/bbs/showthread.php?t=199531&amp;page=2" target=_blank><font color=#000000>http://www.linuxsir.org/bbs/showthre...=199531&amp;page=2</font></a><br><br>求素数的算法分析<br><a href="http://linuxsir.org/bbs/showthread.php?t=278294" target=_blank><font color=#000000>http://linuxsir.org/bbs/showthread.php?t=278294</font></a><br><br>libexpat用法实例<br><a href="http://linuxsir.org/bbs/showthread.php?t=206943" target=_blank><font color=#000000>http://linuxsir.org/bbs/showthread.php?t=206943</font></a><br><br>linux shell 快速参考及教程！<br><a href="http://linuxsir.org/bbs/showthread.php?t=294743" target=_blank><font color=#000000>http://linuxsir.org/bbs/showthread.php?t=294743</font></a><br><br>结果不可预知的sprintf用法<br><a href="http://www.linuxsir.org/bbs/showthread.php?t=310378" target=_blank><font color=#000000>http://www.linuxsir.org/bbs/showthread.php?t=310378</font></a><br><br>使用函数指针的一些问题<br><a href="http://www.linuxsir.org/bbs/thread324626.html" target=_blank><font color=#000000>http://www.linuxsir.org/bbs/thread324626.html</font></a><!-- / message --><!-- sig -->
<img src ="http://www.cnitblog.com/houcy/aggbug/42818.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/houcy/" target="_blank">挑灯看剑</a> 2008-04-27 12:58 <a href="http://www.cnitblog.com/houcy/archive/2008/04/27/42818.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>cygwin安装</title><link>http://www.cnitblog.com/houcy/archive/2008/04/26/42792.html</link><dc:creator>挑灯看剑</dc:creator><author>挑灯看剑</author><pubDate>Sat, 26 Apr 2008 11:11:00 GMT</pubDate><guid>http://www.cnitblog.com/houcy/archive/2008/04/26/42792.html</guid><wfw:comment>http://www.cnitblog.com/houcy/comments/42792.html</wfw:comment><comments>http://www.cnitblog.com/houcy/archive/2008/04/26/42792.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/houcy/comments/commentRss/42792.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/houcy/services/trackbacks/42792.html</trackback:ping><description><![CDATA[<h1><strong>下载setup.exe</strong></h1>
<p>安装Cygwin，您需要下载setup.exe，此程序根据您选择的软件包，再从互联网下载所有组件。</p>
<p><a href="http://www.cygwin.cn/setup.exe"><u><font color=#0000ff>点击此处下载setup.exe</font></u></a><br></p>
<h1><strong>安装</strong></h1>
<p>1.双击setup.exe</p>
<p><img height=77 src="http://www.cygwin.cn/site/install/images/setup.png" width=149></p>
<p>2.按照安装提示&#8220;下一步&#8221;</p>
<p>3.选择从&#8220;互联网&#8221;安装：</p>
<p><img height=391 src="http://www.cygwin.cn/site/install/images/source.png" width=512><br>4.选择安装的路径，一般是C:\Cygwin，选择本地临时目录，用于存放下载的软件；选择您连接互联网的方式，一般选&#8220;直接连接&#8221;就可以了。</p>
<p>5.选择下载源，您可以在下载列表里选择：<span style="COLOR: #ff0000">http://www.cygwin.cn</span> 或者，直接在URL里输入<span style="COLOR: #ff0000">http://www.cygwin.cn/pub/</span></p>
<p><img height=389 src="http://www.cygwin.cn/site/install/images/source2.png" width=505></p>
<p>6.根据安装提示，选择需要安装的软件包，完成安装。</p>
<p style="FONT-WEIGHT: bold; FONT-SIZE: 16px; COLOR: #ff0000; TEXT-DECORATION: underline">如果您在国内，Cygwin.cn是您所能使用的最快的镜像。</p>
<br>
<h1><strong>使用</strong></h1>
<ul>
    <li>双击桌面的Cygwin图标，即可启动Cygwin里的Bash。
    <li>或者，你可将C:/Cygwin/bin加到%PATH%当中，您就可以直接在cmd.exe里面使用Linux命令了，比如less, cat, wc , wget
    <li>如果您有一个Bash脚本，您可以直接用C:/Cygwin/bin/bash.exe X:/scripts/Monitor.sh的形式调用。 </li>
</ul>
<img src ="http://www.cnitblog.com/houcy/aggbug/42792.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/houcy/" target="_blank">挑灯看剑</a> 2008-04-26 19:11 <a href="http://www.cnitblog.com/houcy/archive/2008/04/26/42792.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>【转帖】GCC for Win32开发环境介绍（2）</title><link>http://www.cnitblog.com/houcy/archive/2008/04/23/42643.html</link><dc:creator>挑灯看剑</dc:creator><author>挑灯看剑</author><pubDate>Wed, 23 Apr 2008 05:28:00 GMT</pubDate><guid>http://www.cnitblog.com/houcy/archive/2008/04/23/42643.html</guid><wfw:comment>http://www.cnitblog.com/houcy/comments/42643.html</wfw:comment><comments>http://www.cnitblog.com/houcy/archive/2008/04/23/42643.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/houcy/comments/commentRss/42643.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/houcy/services/trackbacks/42643.html</trackback:ping><description><![CDATA[<p style="MARGIN-BOTTOM: 0cm; TEXT-INDENT: 0.64cm" align=left><font face=宋体><font size=2><strong>上文回顾：</strong></font></font></p>
<p style="MARGIN-BOTTOM: 0cm; TEXT-INDENT: 0.64cm" align=left><font face=宋体><font size=2>在上文中，我们了解的</font></font><font face=黑体><font size=2><span lang=en-US>windows</span></font></font><font face=宋体><font size=2>下的</font></font><font face=黑体><font size=2><span lang=en-US>GCC</span></font></font><font face=宋体><font size=2>编译器。这一章我们将来看</font></font><font face=黑体><font size=2><span lang=en-US>IDE</span></font></font><font face=宋体><font size=2>的介绍了。在此，我还要为各位表示抱歉，因为那么久才写出这篇文章。</font></font></p>
<p style="MARGIN-BOTTOM: 0cm; TEXT-INDENT: 0.64cm" align=left><br></p>
<p style="MARGIN-BOTTOM: 0cm" align=center><font face=黑体><font style="FONT-SIZE: 15pt" size=4><span lang=en-US><strong>GCC for Win32 </strong></span></font></font><font face=黑体><font style="FONT-SIZE: 15pt" size=4><strong>开发环境介绍</strong></font></font><font face=黑体><font style="FONT-SIZE: 15pt" size=4><span lang=en-US><strong>(2)</strong></span></font></font></p>
<p style="MARGIN-BOTTOM: 0cm" align=center><br></p>
<p style="MARGIN-BOTTOM: 0cm" align=center><font face=黑体><font size=3><strong>第二章 </strong></font></font><font face=黑体><font size=3><span lang=en-US><strong>GCC</strong></span></font></font><font face=黑体><font size=3><strong>的外衣——</strong></font></font><font face=黑体><font size=3><span lang=en-US><strong>IDE</strong></span></font></font><font face=黑体><font size=3><strong>环境</strong></font></font></p>
<p style="MARGIN-BOTTOM: 0cm"><br></p>
<p style="MARGIN-BOTTOM: 0cm" align=center><font face=黑体><font style="FONT-SIZE: 11pt" size=2><strong>第一节 </strong></font></font><font face=黑体><font style="FONT-SIZE: 11pt" size=2><span lang=en-US><strong>IDE for GCC</strong></span></font></font><font face=黑体><font style="FONT-SIZE: 11pt" size=2><strong>概览</strong></font></font></p>
<p style="MARGIN-BOTTOM: 0cm; TEXT-INDENT: 0.69cm"><br></p>
<p style="MARGIN-BOTTOM: 0cm; TEXT-INDENT: 0.69cm"><font face="Times New Roman, serif"><font size=2><span lang=en-US>IDE</span></font></font><font size=2>，即</font><font face="Times New Roman, serif"><font size=2><span lang=en-US>Integrated development environment</span></font></font><font size=2>，也就是综合开发环境。对于习惯使用</font><font face="Times New Roman, serif"><font size=2><span lang=en-US>VC</span></font></font><font size=2>的</font><font face="Times New Roman, serif"><font size=2><span lang=en-US>windows</span></font></font><font size=2>程序员来说，在</font><font face="Times New Roman, serif"><font size=2><span lang=en-US>windows</span></font></font><font size=2>下，</font><font face="Times New Roman, serif"><font size=2><span lang=en-US>GCC</span></font></font><font size=2>的</font><font face="Times New Roman, serif"><font size=2><span lang=en-US>IDE</span></font></font><font size=2>也许就比较陌生了。所以，想通过这一章简单介绍一下</font><font face="Times New Roman, serif"><font size=2><span lang=en-US>GCC</span></font></font><font size=2>所使用</font><font face="Times New Roman, serif"><font size=2><span lang=en-US>IDE</span></font></font><font size=2>。</font></p>
<p style="MARGIN-BOTTOM: 0cm; TEXT-INDENT: 0.69cm"><font face="Times New Roman, serif"><font size=2><span lang=en-US><strong>GCC</strong></span></font></font><font size=2><strong>的</strong></font><font face="Times New Roman, serif"><font size=2><span lang=en-US><strong>IDE</strong></span></font></font><font size=2><strong>是什么？</strong></font></p>
<p style="MARGIN-BOTTOM: 0cm; TEXT-INDENT: 0.69cm"><font face="Times New Roman, serif"><font size=2><span lang=en-US>IDE</span></font></font><font size=2>，也就是 综合开发环境 。她是为了便于程序员开发，管理项目的软件。对于</font><font face="Times New Roman, serif"><font size=2><span lang=en-US>C/C++</span></font></font><font size=2>来说，她主要包括四个部分。代码编辑器，编译连接器，调试器和工具库。而</font><font face="Times New Roman, serif"><font size=2><span lang=en-US>GCC</span></font></font><font size=2>本身就包含了编译连接器，调试器和工具库。所以，严格的说，</font><font face="Times New Roman, serif"><font size=2><span lang=en-US>GCC</span></font></font><font size=2>的</font><font face="Times New Roman, serif"><font size=2><span lang=en-US>IDE</span></font></font><font size=2>主要功能就是一个代码编辑器，是用于编写代码的软件。</font></p>
<p style="MARGIN-BOTTOM: 0cm; TEXT-INDENT: 0.69cm"><font size=2>所以，从上面我们可以看到一个问题，那就是支持工具库的不是</font><font face="Times New Roman, serif"><font size=2><span lang=en-US>IDE</span></font></font><font size=2>，而是编译器。如果你使用不同的</font><font face="Times New Roman, serif"><font size=2><span lang=en-US>IDE</span></font></font><font size=2>开发项目，只要你使用的编译器是相同的，那么她就能支持相同的工具库。</font></p>
<p style="MARGIN-BOTTOM: 0cm; TEXT-INDENT: 0.69cm"><font face="Times New Roman, serif"><font size=2><span lang=en-US><strong>Windows</strong></span></font></font><font size=2><strong>下的为</strong></font><font face="Times New Roman, serif"><font size=2><span lang=en-US><strong>GCC</strong></span></font></font><font size=2><strong>设计的</strong></font><font face="Times New Roman, serif"><font size=2><span lang=en-US><strong>IDE</strong></span></font></font><font size=2><strong>有那些？</strong></font></p>
<p style="MARGIN-BOTTOM: 0cm; TEXT-INDENT: 0.61cm"><font size=2>许多</font><font face="Times New Roman, serif"><font size=2><span lang=en-US>GCC</span></font></font><font size=2>的</font><font face="Times New Roman, serif"><font size=2><span lang=en-US>IDE</span></font></font><font size=2>，毕竟不是商业化制作的，因此很多地方都有不足的地方。下面是我个人认为不错的几个</font><font face="Times New Roman, serif"><font size=2><span lang=en-US>IDE</span></font></font><font size=2>。</font></p>
<p style="MARGIN-BOTTOM: 0cm; TEXT-INDENT: 0.66cm"><font face="Times New Roman, serif"><font size=2><span lang=en-US><font color=#0000ff>Dev-C++</font></span></font></font><font size=2>，这个</font><font face="Times New Roman, serif"><font size=2><span lang=en-US>IDE</span></font></font><font size=2>可谓是专门为</font><font face="Times New Roman, serif"><font size=2><span lang=en-US>GCC</span></font></font><font size=2>所设计的</font><font face="Times New Roman, serif"><font size=2><span lang=en-US>IDE</span></font></font><font size=2>。</font><font face="Times New Roman, serif"><font size=2><span lang=en-US><font color=#0000ff>Visual-MinGW</font></span></font></font><font size=2>，一个模仿</font><font face="Times New Roman, serif"><font size=2><span lang=en-US>VC6.0</span></font></font><font size=2>界面的</font><font face="Times New Roman, serif"><font size=2><span lang=en-US>IDE</span></font></font><font size=2>。最后是最近最火的</font><font face="Times New Roman, serif"><font size=2><span lang=en-US><font color=#0000ff>Code::Blocks</font></span></font></font><font size=2>，由于也是最近接触，所以也不是太了解，不过，给人的第一印象是，特别像</font><font face="Times New Roman, serif"><font size=2><span lang=en-US>VC.Net</span></font></font><font size=2>的界面。</font></p>
<p style="MARGIN-BOTTOM: 0cm; TEXT-INDENT: 0.66cm"><font size=2>总体来说，各个</font><font face="Times New Roman, serif"><font size=2><span lang=en-US>IDE</span></font></font><font size=2>都有其自身的特点。对于初学者，</font><font face="Times New Roman, serif"><font size=2><span lang=en-US>Dev-C++</span></font></font><font size=2>比较不错，因为各种工具库基本都有为</font><font face="Times New Roman, serif"><font size=2><span lang=en-US>Dev-C++</span></font></font><font size=2>设计的安装包。对于从</font><font face="Times New Roman, serif"><font size=2><span lang=en-US>VC</span></font></font><font size=2>转形到</font><font face="Times New Roman, serif"><font size=2><span lang=en-US>GCC</span></font></font><font size=2>的人来说，</font><font face="Times New Roman, serif"><font size=2><span lang=en-US>Visual-MinGW</span></font></font><font size=2>是一个不错的选择，因为据我所知，大家熟悉和喜爱的还是</font><font face="Times New Roman, serif"><font size=2><span lang=en-US>VC6.0</span></font></font><font size=2>居多，因此模仿</font><font face="Times New Roman, serif"><font size=2><span lang=en-US>VC</span></font></font><font size=2>的</font><font face="Times New Roman, serif"><font size=2><span lang=en-US>Visual-MinGW</span></font></font><font size=2>是一个不错的选择。对于打算用</font><font face="Times New Roman, serif"><font size=2><span lang=en-US>GCC</span></font></font><font size=2>开发项目的人来说，</font><font face="Times New Roman, serif"><font size=2><span lang=en-US>Code::Blocks</span></font></font><font size=2>的确会成为你的最爱，因为她的项目管理实在是太优秀了。其实，每个人都会从中找到适合自己的</font><font face="Times New Roman, serif"><font size=2><span lang=en-US>IDE</span></font></font><font size=2>。</font></p>
<p style="MARGIN-BOTTOM: 0cm; TEXT-INDENT: 0.66cm"><font size=2><strong>本书的</strong></font><font face="Times New Roman, serif"><font size=2><span lang=en-US><strong>IDE</strong></span></font></font></p>
<p style="MARGIN-BOTTOM: 0cm; TEXT-INDENT: 0.66cm"><font size=2>本书使用哪种</font><font face="Times New Roman, serif"><font size=2><span lang=en-US>IDE</span></font></font><font size=2>呢？其实，本书不是专门为哪种</font><font face="Times New Roman, serif"><font size=2><span lang=en-US>IDE</span></font></font><font size=2>所写的。因此，本书所写的都是针对</font><font face="Times New Roman, serif"><font size=2><span lang=en-US>GCC</span></font></font><font size=2>本身所写的。因此，本书中的</font><font face="Times New Roman, serif"><font size=2><span lang=en-US>IDE</span></font></font><font size=2>。其实就是</font><font face="Times New Roman, serif"><font size=2><span lang=en-US>windows</span></font></font><font size=2>下最不起眼的</font><font face="Times New Roman, serif"><font size=2><span lang=en-US>notepad</span></font></font><font size=2>。不过，为了书写便捷，我通常使用</font><font face="Times New Roman, serif"><font size=2><span lang=en-US>Emacs</span></font></font><font size=2>或者</font><font face="Times New Roman, serif"><font size=2><span lang=en-US>Notepad++</span></font></font><font size=2>来书写代码。</font><font face="Times New Roman, serif"><font size=2><span lang=en-US>Emacs</span></font></font><font size=2>是一个</font><font face="Times New Roman, serif"><font size=2><span lang=en-US>Unix</span></font></font><font size=2>环境下优秀的编辑软件，</font><font face="Times New Roman, serif"><font size=2><span lang=en-US>Notepad++</span></font></font><font size=2>是一个</font><font face="Times New Roman, serif"><font size=2><span lang=en-US>notepad</span></font></font><font size=2>增强版，个人感觉比较适合开发程序。本书会在每个例子程序后附带一个</font><font face="Times New Roman, serif"><font size=2><span lang=en-US>Makefile</span></font></font><font size=2>文件，通过这个文件各位就能够非常直接的了解到环境的配置方式，然后根据不同的</font><font face="Times New Roman, serif"><font size=2><span lang=en-US>IDE</span></font></font><font size=2>为你的程序添加不同的参数。</font></p>
<p style="MARGIN-BOTTOM: 0cm; TEXT-INDENT: 0.66cm"><br></p>
<p style="MARGIN-BOTTOM: 0cm; TEXT-INDENT: 0.66cm" align=center><font face=黑体><font style="FONT-SIZE: 11pt" size=2><strong>第二节 最专一的</strong></font></font><font face=黑体><font style="FONT-SIZE: 11pt" size=2><span lang=en-US><strong>Dev-C++</strong></span></font></font></p>
<p style="MARGIN-BOTTOM: 0cm; TEXT-INDENT: 0.66cm"><br></p>
<p style="MARGIN-BOTTOM: 0cm; TEXT-INDENT: 0.66cm"><font size=2><strong>简介</strong></font></p>
<p style="MARGIN-BOTTOM: 0cm; TEXT-INDENT: 0.66cm"><font face="Times New Roman, serif"><font size=2><span lang=en-US>Dev-C++</span></font></font><font size=2><span lang=zh-CN>，全称</span></font><font face="Times New Roman, serif"><font size=2><span lang=en-US>Bloodshed Dev-C++</span></font></font><font size=2><span lang=zh-CN>，是由</span></font><font face="Times New Roman, serif"><font size=2><span lang=en-US>Bloodshed</span></font></font><font size=2><span lang=zh-CN>公司开发的一款</span></font><font face="Times New Roman, serif"><font size=2><span lang=en-US>C/C++</span></font></font><font size=2><span lang=zh-CN>的</span></font><font face="Times New Roman, serif"><font size=2><span lang=en-US>IDE</span></font></font><font size=2><span lang=zh-CN>。她所默认的编译器为</span></font><font face="Times New Roman, serif"><font size=2><span lang=en-US>MinGW</span></font></font><font size=2><span lang=zh-CN>，但是她能够支持</span></font><font face="Times New Roman, serif"><font size=2><span lang=en-US>Cygwin</span></font></font><font size=2><span lang=zh-CN>等其他任何</span></font><font face="Times New Roman, serif"><font size=2><span lang=en-US>GCC</span></font></font><font size=2><span lang=zh-CN>的移植版以及</span></font><font face="Times New Roman, serif"><font size=2><span lang=en-US>GCC</span></font></font><font size=2><span lang=zh-CN>本身。她是使用</span></font><font face="Times New Roman, serif"><font size=2><span lang=en-US>Delphi</span></font></font><font size=2><span lang=zh-CN>开发的，因此有些</span></font><font face="Times New Roman, serif"><font size=2><span lang=en-US>C/C++</span></font></font><font size=2><span lang=zh-CN>开发者觉得她的血统不纯。但是我个人认为，只要适合的，我们又何必在意她用什么开发呢？</span></font></p>
<p style="MARGIN-BOTTOM: 0cm; TEXT-INDENT: 0.66cm"><font size=2><strong>获得与安装</strong></font></p>
<p style="MARGIN-BOTTOM: 0cm; TEXT-INDENT: 0.66cm"><font face="Times New Roman, serif"><font size=2><span lang=en-US>Dev-C++</span></font></font><font size=2>，可以从她的官方网站 </font><font face="Times New Roman, serif"><font size=2><span lang=en-US>http://www.bloodshed.net </span></font></font><font size=2>上获得。在官方网站的下载页上，你将会看到三个安装程序。下面我一一解释一下。</font></p>
<p style="MARGIN-BOTTOM: 0cm; TEXT-INDENT: 0.66cm"><font face="Times New Roman, serif"><font size=2><span lang=en-US>Dev-C++ with Mingw/GCC </span></font></font><font size=2>这个是包含</font><font face="Times New Roman, serif"><font size=2><span lang=en-US>MinGW</span></font></font><font size=2>的安装包。安装这个包以后，你将拥有完整的一个</font><font face="Times New Roman, serif"><font size=2><span lang=en-US>IDE</span></font></font><font size=2>开发环境，自然包括编译器等。</font></p>
<p style="MARGIN-BOTTOM: 0cm; TEXT-INDENT: 0.66cm"><font face="Times New Roman, serif"><font size=2><span lang=en-US>Dev-C++ executable only </span></font></font><font size=2>这个是只有</font><font face="Times New Roman, serif"><font size=2><span lang=en-US>IDE</span></font></font><font size=2>的安装程序，其中不包括任何编译器。所有，如果你没有安装</font><font face="Times New Roman, serif"><font size=2><span lang=en-US>GCC</span></font></font><font size=2>编译器的话，安装这个包以后你将会出现无法编译项目的问题。</font></p>
<p style="MARGIN-BOTTOM: 0cm; TEXT-INDENT: 0.66cm"><font face="Times New Roman, serif"><font size=2><span lang=en-US>Dev-C++ source code </span></font></font><font size=2>这个是源代码包，当然其中只有</font><font face="Times New Roman, serif"><font size=2><span lang=en-US>Dev-C++</span></font></font><font size=2>的代码，没有任何</font><font face="Times New Roman, serif"><font size=2><span lang=en-US>GCC</span></font></font><font size=2>的代码。</font></p>
<p style="MARGIN-BOTTOM: 0cm; TEXT-INDENT: 0.66cm"><font size=2>通常偷懒的人选择 </font><font face="Times New Roman, serif"><font size=2><span lang=en-US>Dev-C++ with MinGW/GCC </span></font></font><font size=2>这个包，这个也是我建议初学者安装的包。如果，你在上一章以后，已经安装了某个</font><font face="Times New Roman, serif"><font size=2><span lang=en-US>GCC</span></font></font><font size=2>的</font><font face="Times New Roman, serif"><font size=2><span lang=en-US>windows</span></font></font><font size=2>移植版，那么你可以选择</font><font face="Times New Roman, serif"><font size=2><span lang=en-US>Dev-C++ executable only</span></font></font><font size=2>这个包。如果你想研究一下</font><font face="Times New Roman, serif"><font size=2><span lang=en-US>Dev-C++</span></font></font><font size=2>的代码，并且对</font><font face="Times New Roman, serif"><font size=2><span lang=en-US>Delphi</span></font></font><font size=2>有所了解，那么</font><font face="Times New Roman, serif"><font size=2><span lang=en-US>Dev-C++ source code</span></font></font><font size=2>是你唯一的选择。</font></p>
<p style="MARGIN-BOTTOM: 0cm; TEXT-INDENT: 0.66cm"><font size=2>下面我对</font><font face="Times New Roman, serif"><font size=2><span lang=en-US>Dev-C++ executable only</span></font></font><font size=2><span lang=zh-CN>的安装方式进行说明。而</span></font><font face="Times New Roman, serif"><font size=2><span lang=en-US>Dev-C++ with MinGW/GCC</span></font></font><font size=2><span lang=zh-CN>的安装和她差不多，只是可以省去后面配置编译器的问题。</span></font></p>
<p style="MARGIN-BOTTOM: 0cm; TEXT-INDENT: 0.66cm"><font color=#0000ff><font size=2>安装</font></font></p>
<p style="MARGIN-BOTTOM: 0cm; TEXT-INDENT: 0.66cm"><font size=2>首先，从官方网站下载</font><font face="Times New Roman, serif"><font size=2><span lang=en-US>Dev-C++</span></font></font><font size=2>。运行安装程序以后，您将看到如下的提示。</font></p>
<p style="MARGIN-BOTTOM: 0cm; TEXT-INDENT: 0.66cm"><font color=#ff0000><font face="Times New Roman, serif"><font size=2><span lang=en-US><img alt="" src="http://p.blog.csdn.net/images/p_blog_csdn_net/VisionCat/216671/o_gcc0.png"></span></font></font></font></p>
<p style="MARGIN-BOTTOM: 0cm; TEXT-INDENT: 0.66cm"><font size=2>这个是让你选择安装时候所使用的语言这里，我们只能选择</font><font face="Times New Roman, serif"><font size=2><span lang=en-US>English</span></font></font><font size=2>，因为没有中文安装界面。</font></p>
<p style="MARGIN-BOTTOM: 0cm; TEXT-INDENT: 0.66cm"><font color=#ff0000><font face="Times New Roman, serif"><font size=2><span lang=en-US><img alt="" src="http://p.blog.csdn.net/images/p_blog_csdn_net/VisionCat/216671/o_gcc1.png"></span></font></font></font></p>
<p style="MARGIN-BOTTOM: 0cm; TEXT-INDENT: 0.66cm"><font size=2>这个是许可证界面，选择 </font><font face="Times New Roman, serif"><font size=2><span lang=en-US>I Agree</span></font></font><font size=2>。感觉现在大家用盗版用多了，对于许可证都不关心了，可是我想作为一名开发者，应该对许可证的内容重视一下，毕竟你的软件也是要被人使用的。</font></p>
<p style="MARGIN-BOTTOM: 0cm; TEXT-INDENT: 0.66cm"><font color=#ff0000><font face="Times New Roman, serif"><font size=2><span lang=en-US><img alt="" src="http://p.blog.csdn.net/images/p_blog_csdn_net/VisionCat/216671/o_gcc2.png"></span></font></font></font></p>
<p style="MARGIN-BOTTOM: 0cm; TEXT-INDENT: 0.66cm"><font size=2>这个是安装选项界面。其中，你可以选择你所要安装的内容和安装的一些选项，比如是否关联文件等。如果你下载的是 </font><font face="Times New Roman, serif"><font size=2><span lang=en-US>Dev-C++ executable only </span></font></font><font size=2>，那么你将无法使用</font><font face="Times New Roman, serif"><font size=2><span lang=en-US>Mingw compiler system(binaries,headers and libraries) </span></font></font><font size=2>这个选项，因为这个安装文件中没有包含这个。</font></p>
<p style="MARGIN-BOTTOM: 0cm; TEXT-INDENT: 0.66cm"><font color=#ff0000><font face="Times New Roman, serif"><font size=2><span lang=en-US><img alt="" src="http://p.blog.csdn.net/images/p_blog_csdn_net/VisionCat/216671/o_gcc3.png"></span></font></font></font></p>
<p style="MARGIN-BOTTOM: 0cm; TEXT-INDENT: 0.66cm"><font size=2>这个界面是让你选择安装路径。你可以在这里选择你安装</font><font face="Times New Roman, serif"><font size=2><span lang=en-US>Dev-C++</span></font></font><font size=2>的路径。我这里假设你安装在</font><font face="Times New Roman, serif"><font size=2><span lang=en-US>$(DEV)</span></font></font><font size=2>下。</font></p>
<p style="MARGIN-BOTTOM: 0cm; TEXT-INDENT: 0.66cm"><font color=#ff0000><font face="Times New Roman, serif"><font size=2><span lang=en-US><img alt="" src="http://p.blog.csdn.net/images/p_blog_csdn_net/VisionCat/216671/o_gcc4.png"></span></font></font></font></p>
<p style="MARGIN-BOTTOM: 0cm; TEXT-INDENT: 0.66cm"><font size=2>这个界面是询问你是否为</font><font face="Times New Roman, serif"><font size=2><span lang=en-US>windows</span></font></font><font size=2>上的所有用户安装</font><font face="Times New Roman, serif"><font size=2><span lang=en-US>Dev-C++</span></font></font><font size=2>。这里，我选择 否。如果你想让本地机上，每个用户都可以使用</font><font face="Times New Roman, serif"><font size=2><span lang=en-US>Dev-C++</span></font></font><font size=2>，那么你可以选择 是。</font></p>
<p style="MARGIN-BOTTOM: 0cm; TEXT-INDENT: 0.66cm"><font size=2>在安装程序结束后，默认会运行</font><font face="Times New Roman, serif"><font size=2><span lang=en-US>Dev-C++</span></font></font><font size=2>。你在首次运行时，会看到如下界面。</font></p>
<p style="MARGIN-BOTTOM: 0cm; TEXT-INDENT: 0.66cm"><font color=#ff0000><font face="Times New Roman, serif"><font size=2><span lang=en-US><img alt="" src="http://p.blog.csdn.net/images/p_blog_csdn_net/VisionCat/216671/o_gcc5.png"></span></font></font></font></p>
<p style="MARGIN-BOTTOM: 0cm; TEXT-INDENT: 0.66cm"><font size=2>这个是选择你</font><font face="Times New Roman, serif"><font size=2><span lang=en-US>Dev-C++</span></font></font><font size=2>所使用的语言，界面图标和窗口风格。如图上选择，我们使用的语言是中文，使用</font><font face="Times New Roman, serif"><font size=2><span lang=en-US>New Look</span></font></font><font size=2>图标，并使用</font><font face="Times New Roman, serif"><font size=2><span lang=en-US>XP</span></font></font><font size=2>风格的窗口。</font></p>
<p style="MARGIN-BOTTOM: 0cm; TEXT-INDENT: 0.66cm"><font color=#ff0000><font face="Times New Roman, serif"><font size=2><span lang=en-US><img alt="" src="http://p.blog.csdn.net/images/p_blog_csdn_net/VisionCat/216671/o_gcc6.png"></span></font></font></font></p>
<p style="MARGIN-BOTTOM: 0cm; TEXT-INDENT: 0.66cm"><font size=2>这个是询问你是否要</font><font face="Times New Roman, serif"><font size=2><span lang=en-US>Dev-C++</span></font></font><font size=2>提供函数补全功能，她将从头文件中读取函数头，然后为你补全。但是要消耗一定的</font><font face="Times New Roman, serif"><font size=2><span lang=en-US>CPU</span></font></font><font size=2>时间。如果，你的机器还可以的话，并且需要此功能那么你可以尝试一下。</font></p>
<p style="MARGIN-BOTTOM: 0cm; TEXT-INDENT: 0.66cm"><font size=2>至此，我们的</font><font face="Times New Roman, serif"><font size=2><span lang=en-US>Dev-C++</span></font></font><font size=2>算是安装成功了。如果，下载的是</font><font face="Times New Roman, serif"><font size=2><span lang=en-US>Dev-C++ with MinGW/GCC</span></font></font><font size=2>，那么后面的内容你可以不关心了。因为，你的</font><font face="Times New Roman, serif"><font size=2><span lang=en-US>IDE</span></font></font><font size=2>环境已经全都配好了。如果不是，那么您还需要自己安装编译器。</font></p>
<p style="MARGIN-BOTTOM: 0cm; TEXT-INDENT: 0.66cm"><font color=#0000ff><font size=2>配置编译器</font></font></p>
<p style="MARGIN-BOTTOM: 0cm; TEXT-INDENT: 0.66cm"><font size=2>按照我第一章所介绍的，安装好某一个</font><font face="Times New Roman, serif"><font size=2><span lang=en-US>GCC</span></font></font><font size=2>移植版编译器，可以是</font><font face="Times New Roman, serif"><font size=2><span lang=en-US>MinGW</span></font></font><font size=2>，也可以是</font><font face="Times New Roman, serif"><font size=2><span lang=en-US>Cygwin</span></font></font><font size=2>。假设，您安装的目录为</font><font face="Times New Roman, serif"><font size=2><span lang=en-US><font color=#0000ff>$(GCC)</font></span></font></font><font size=2>，那么请将如下路径添加到系统变量 </font><font face="Times New Roman, serif"><font size=2><span lang=en-US>PATH </span></font></font><font size=2>后。</font></p>
<p style="MARGIN-BOTTOM: 0cm; TEXT-INDENT: 0.66cm"><font color=#0000ff><font face="Times New Roman, serif"><font size=2><span lang=en-US>$(GCC)\bin;</span></font></font></font></p>
<p style="MARGIN-BOTTOM: 0cm; TEXT-INDENT: 0.66cm"><font size=2>这样，你的</font><font face="Times New Roman, serif"><font size=2><span lang=en-US>Dev-C++</span></font></font><font size=2>就拥有了编译器了。当然，你也可以从</font><font face="Times New Roman, serif"><font size=2><span lang=en-US>Dev-C++</span></font></font><font size=2>的网站上下载</font><font face="Times New Roman, serif"><font size=2><span lang=en-US>MinGW</span></font></font><font size=2>全套的</font><font face="Times New Roman, serif"><font size=2><span lang=en-US>Dev</span></font></font><font size=2>包，然后用</font><font face="Times New Roman, serif"><font size=2><span lang=en-US>Dev-C++</span></font></font><font size=2>带的包管理程序安装</font><font face="Times New Roman, serif"><font size=2><span lang=en-US>MinGW</span></font></font><font size=2>。</font></p>
<p style="MARGIN-BOTTOM: 0cm; TEXT-INDENT: 0.66cm"><br></p>
<p style="MARGIN-BOTTOM: 0cm; TEXT-INDENT: 0.66cm"><font size=2><strong>添加新的工程类型</strong></font></p>
<p style="MARGIN-BOTTOM: 0cm; TEXT-INDENT: 0.66cm"><font size=2>在平时，我们通常会建立自己的工程文件。但是，如果每次都要自己设置环境变量，编译器参数未免也太麻烦了。本处就要介绍，如何将自己定义的工程类型，添加到</font><font face="Times New Roman, serif"><font size=2><span lang=en-US>Dev-C++</span></font></font><font size=2>的新建工程选项里。就如下图所示，</font></p>
<p style="MARGIN-BOTTOM: 0cm; TEXT-INDENT: 0.66cm"><font face="Times New Roman, serif"><font size=2><span lang=en-US><img alt="" src="http://p.blog.csdn.net/images/p_blog_csdn_net/VisionCat/216671/o_gcc7.png"></span></font></font></p>
<p style="MARGIN-BOTTOM: 0cm; TEXT-INDENT: 0.66cm"><font face="Times New Roman, serif"><font size=2><span lang=en-US>Dev-C++</span></font></font><font size=2>的项目模板文件，保存在安装目录的</font><font face="Times New Roman, serif"><font size=2><span lang=en-US>Templates</span></font></font><font size=2>目录下。文件以</font><font face="Times New Roman, serif"><font size=2><span lang=en-US>template</span></font></font><font size=2>后缀结尾，你可以用记事本打开。下面我们一起来建立一个自己的项目。</font></p>
<p style="MARGIN-BOTTOM: 0cm; TEXT-INDENT: 0.66cm"><font size=2>在</font><font face="Times New Roman, serif"><font size=2><span lang=en-US>templates</span></font></font><font size=2>目录下新建一个名为</font><font face="Times New Roman, serif"><font size=2><span lang=en-US>MyProject.template</span></font></font><font size=2>的文本文档。内容如下：</font></p>
<table cellSpacing=0 cellPadding=0 width="100%" border=0>
    <colgroup>
    <col width=256></col>
    <tbody>
        <tr>
            <td vAlign=top width="100%" bgColor=#ccccff>
            <p style="MARGIN-BOTTOM: 0cm"><font face="Times New Roman, serif"><font size=2><span lang=en-US>[Template]</span></font></font></p>
            <p style="MARGIN-BOTTOM: 0cm"><font face="Times New Roman, serif"><font size=2><span lang=en-US>ver=1</span></font></font></p>
            <p style="MARGIN-BOTTOM: 0cm"><font face="Times New Roman, serif"><font size=2><span lang=en-US>Name=MyProject</span></font></font></p>
            <p style="MARGIN-BOTTOM: 0cm"><font face="Times New Roman, serif"><font size=2><span lang=en-US>Icon=0</span></font></font></p>
            <p style="MARGIN-BOTTOM: 0cm"><font face="Times New Roman, serif"><font size=2><span lang=en-US>Description=</span></font></font><font size=2>一个小小的测试</font></p>
            <p style="MARGIN-BOTTOM: 0cm"><font face="Times New Roman, serif"><font size=2><span lang=en-US>Catagory=HOME</span></font></font></p>
            <p style="MARGIN-BOTTOM: 0cm"><br></p>
            <p style="MARGIN-BOTTOM: 0cm"><font face="Times New Roman, serif"><font size=2><span lang=en-US>[Unit0]</span></font></font></p>
            <p style="MARGIN-BOTTOM: 0cm"><font face="Times New Roman, serif"><font size=2><span lang=en-US>CName=main.c</span></font></font></p>
            <p style="MARGIN-BOTTOM: 0cm"><font face="Times New Roman, serif"><font size=2><span lang=en-US>C=MyProjectC.txt</span></font></font></p>
            <p style="MARGIN-BOTTOM: 0cm"><br></p>
            <p style="MARGIN-BOTTOM: 0cm"><font face="Times New Roman, serif"><font size=2><span lang=en-US>[Unit1]</span></font></font></p>
            <p style="MARGIN-BOTTOM: 0cm"><font face="Times New Roman, serif"><font size=2><span lang=en-US>CName=myProject.h</span></font></font></p>
            <p style="MARGIN-BOTTOM: 0cm"><font face="Times New Roman, serif"><font size=2><span lang=en-US>C=MyProjectH.txt</span></font></font></p>
            <p style="MARGIN-BOTTOM: 0cm"><br></p>
            <p style="MARGIN-BOTTOM: 0cm"><font face="Times New Roman, serif"><font size=2><span lang=en-US>[Project]</span></font></font></p>
            <p style="MARGIN-BOTTOM: 0cm"><font face="Times New Roman, serif"><font size=2><span lang=en-US>UnitCount=2</span></font></font></p>
            <p style="MARGIN-BOTTOM: 0cm"><font face="Times New Roman, serif"><font size=2><span lang=en-US>Type=1</span></font></font></p>
            <p style="MARGIN-BOTTOM: 0cm"><font face="Times New Roman, serif"><font size=2><span lang=en-US>IsCpp=0</span></font></font></p>
            <p style="MARGIN-BOTTOM: 0cm"><font face="Times New Roman, serif"><font size=2><span lang=en-US>Compiler=-DPASSWORD</span></font></font></p>
            <p style="MARGIN-BOTTOM: 0cm"><font face="Times New Roman, serif"><font size=2><span lang=en-US>Linker=-O2</span></font></font></p>
            <p style="MARGIN-BOTTOM: 0cm"><font face="Times New Roman, serif"><font size=2><span lang=en-US>Name=My Project</span></font></font></p>
            <p><font face="Times New Roman, serif"><font size=2><span lang=en-US>ProjectIon=0</span></font></font></p>
            </td>
        </tr>
    </tbody>
</table>
<table cellSpacing=0 cellPadding=0 width="100%" border=0>
    <colgroup>
    <col width=33></col>
    <col width=223></col>
    <tbody>
        <tr vAlign=top>
            <td width="13%">
            <p><font face="Times New Roman, serif"><font size=2><span lang=en-US><font color=#0000ff>[Template]</font></span></font></font></p>
            </td>
            <td width="87%">
            <p><font size=2>标签后的内容是对项目的介绍。</font></p>
            </td>
        </tr>
        <tr vAlign=top>
            <td width="13%">
            <p><font face="Times New Roman, serif"><font size=2><span lang=en-US><font color=#0000ff>Ver</font></span></font></font></p>
            </td>
            <td width="87%">
            <p><font size=2>变量是</font><font face="Times New Roman, serif"><font size=2><span lang=en-US>Template</span></font></font><font size=2>文件的版本，这边默认是</font><font face="Times New Roman, serif"><font size=2><span lang=en-US>1</span></font></font><font size=2>不要更改。</font></p>
            </td>
        </tr>
        <tr vAlign=top>
            <td width="13%">
            <p><font face="Times New Roman, serif"><font size=2><span lang=en-US><font color=#0000ff>Name</font></span></font></font></p>
            </td>
            <td width="87%">
            <p><font size=2>变量是项目的名称</font></p>
            </td>
        </tr>
        <tr vAlign=top>
            <td width="13%">
            <p><font face="Times New Roman, serif"><font size=2><span lang=en-US><font color=#0000ff>Icon</font></span></font></font></p>
            </td>
            <td width="87%">
            <p><font size=2>变量是项目图标的路径，如果没有那么就写</font><font face="Times New Roman, serif"><font size=2><span lang=en-US>0</span></font></font></p>
            </td>
        </tr>
        <tr vAlign=top>
            <td width="13%">
            <p><font face="Times New Roman, serif"><font size=2><span lang=en-US><font color=#0000ff>Description</font></span></font></font></p>
            </td>
            <td width="87%">
            <p><font size=2>变量是对这个模板的介绍。</font></p>
            </td>
        </tr>
        <tr vAlign=top>
            <td width="13%">
            <p><font face="Times New Roman, serif"><font size=2><span lang=en-US><font color=#0000ff>Category</font></span></font></font></p>
            </td>
            <td width="87%">
            <p><font size=2>变量是这个项目属于哪种项目，这里我们自己建立了一个名为</font><font face="Times New Roman, serif"><font size=2><span lang=en-US>Home</span></font></font><font size=2>的类型。</font></p>
            </td>
        </tr>
        <tr vAlign=top>
            <td width="13%">
            <p><font face="Times New Roman, serif"><font size=2><span lang=en-US><font color=#0000ff>[Unitx]</font></span></font></font></p>
            </td>
            <td width="87%">
            <p><font size=2>其中</font><font face="Times New Roman, serif"><font size=2><span lang=en-US>x</span></font></font><font size=2>为从</font><font face="Times New Roman, serif"><font size=2><span lang=en-US>0</span></font></font><font size=2>开始的任何整数，是定义项目中所包含的文件。</font></p>
            </td>
        </tr>
        <tr vAlign=top>
            <td width="13%">
            <p><font face="Times New Roman, serif"><span lang=en-US><font size=2><font color=#0000ff>CName</font></font></span></font></p>
            </td>
            <td width="87%">
            <p><span lang=zh-CN><font size=2>变量是说明这个文件在项目保存时默认的文件名。（</font></span><font face="Times New Roman, serif"><span lang=en-US><font size=2>C</font></span></font><span lang=zh-CN><font size=2>语言时使用）</font></span></p>
            </td>
        </tr>
        <tr vAlign=top>
            <td width="13%">
            <p><font face="Times New Roman, serif"><font size=2><span lang=en-US><font color=#0000ff>C</font></span></font></font></p>
            </td>
            <td width="87%">
            <p><font size=2>变量是</font><font face="Times New Roman, serif"><font size=2><span lang=en-US>Cname</span></font></font><font size=2>文件的源文件。（</font><font face="Times New Roman, serif"><font size=2><span lang=en-US>C</span></font></font><font size=2>语言时使用）</font></p>
            </td>
        </tr>
        <tr vAlign=top>
            <td width="13%">
            <p><font face="Times New Roman, serif"><font size=2><span lang=en-US><font color=#0000ff>CppName</font></span></font></font></p>
            </td>
            <td width="87%">
            <p><font size=2>变量同</font><font face="Times New Roman, serif"><font size=2><span lang=en-US>Cname</span></font></font><font size=2>变量，只是在</font><font face="Times New Roman, serif"><font size=2><span lang=en-US>C++</span></font></font><font size=2>语言时使用。</font></p>
            </td>
        </tr>
        <tr vAlign=top>
            <td width="13%">
            <p><font face="Times New Roman, serif"><font size=2><span lang=en-US><font color=#0000ff>Cpp</font> </span></font></font></p>
            </td>
            <td width="87%">
            <p><font size=2>变量同</font><font face="Times New Roman, serif"><font size=2><span lang=en-US>C</span></font></font><font size=2>变量，是在</font><font face="Times New Roman, serif"><font size=2><span lang=en-US>C++</span></font></font><font size=2>语言时使用的。</font></p>
            </td>
        </tr>
        <tr vAlign=top>
            <td width="13%">
            <p><font face="Times New Roman, serif"><font size=2><span lang=en-US><font color=#0000ff>[Project]</font></span></font></font></p>
            </td>
            <td width="87%">
            <p><font size=2>标签是对工程的总体介绍</font></p>
            </td>
        </tr>
        <tr vAlign=top>
            <td width="13%">
            <p><font face="Times New Roman, serif"><font size=2><span lang=en-US><font color=#0000ff>UnitCount</font></span></font></font></p>
            </td>
            <td width="87%">
            <p><font size=2>变量是说明整个项目有多少文件，从</font><font face="Times New Roman, serif"><font size=2><span lang=en-US>1</span></font></font><font size=2>开始。</font></p>
            </td>
        </tr>
        <tr vAlign=top>
            <td width="13%">
            <p><font face="Times New Roman, serif"><font size=2><span lang=en-US><font color=#0000ff>Type</font></span></font></font></p>
            </td>
            <td width="87%">
            <p><font size=2>变量是告诉</font><font face="Times New Roman, serif"><font size=2><span lang=en-US>IDE</span></font></font><font size=2>这个项目采用何种编译方式。</font><font face="Times New Roman, serif"><font size=2><span lang=en-US>0</span></font></font><font size=2>为</font><font face="Times New Roman, serif"><font size=2><span lang=en-US>windows</span></font></font><font size=2>窗口程序，</font><font face="Times New Roman, serif"><font size=2><span lang=en-US>1</span></font></font><font size=2>为控制台程序，</font><font face="Times New Roman, serif"><font size=2><span lang=en-US>2</span></font></font><font size=2>为静态连接库，</font><font face="Times New Roman, serif"><font size=2><span lang=en-US>3</span></font></font><font size=2>为动态连接库。</font></p>
            </td>
        </tr>
        <tr vAlign=top>
            <td width="13%">
            <p><font face="Times New Roman, serif"><font size=2><span lang=en-US><font color=#0000ff>IsCpp</font></span></font></font></p>
            </td>
            <td width="87%">
            <p><font size=2>变量是说当前项目是否只能使用</font><font face="Times New Roman, serif"><font size=2><span lang=en-US>C++</span></font></font><font size=2>语言，</font><font face="Times New Roman, serif"><font size=2><span lang=en-US>0</span></font></font><font size=2>表示不是，</font><font face="Times New Roman, serif"><font size=2><span lang=en-US>1</span></font></font><font size=2>表示是。</font></p>
            </td>
        </tr>
        <tr vAlign=top>
            <td width="13%">
            <p><font color=#0000ff><font face="Times New Roman, serif"><font size=2><span lang=en-US>Compiler</span></font></font></font></p>
            </td>
            <td width="87%">
            <p><font size=2>变量是编译器参数</font></p>
            </td>
        </tr>
        <tr vAlign=top>
            <td width="13%">
            <p><font color=#0000ff><font face="Times New Roman, serif"><font size=2><span lang=en-US>Linker</span></font></font></font></p>
            </td>
            <td width="87%">
            <p><font size=2>变量是连接器参数</font></p>
            </td>
        </tr>
        <tr vAlign=top>
            <td width="13%">
            <p><font face="Times New Roman, serif"><font size=2><span lang=en-US><font color=#0000ff>Name</font></span></font></font></p>
            </td>
            <td width="87%">
            <p><font size=2>变量是项目的名称</font></p>
            </td>
        </tr>
        <tr vAlign=top>
            <td width="13%">
            <p><font face="Times New Roman, serif"><font size=2><span lang=en-US><font color=#0000ff>ProjectIcon</font></span></font></font></p>
            </td>
            <td width="87%">
            <p><font size=2>变量是项目编译以后，主程序的图标文件。</font></p>
            </td>
        </tr>
    </tbody>
</table>
<p style="MARGIN-BOTTOM: 0cm; TEXT-INDENT: 0.66cm"><font size=2>下面给出了</font><font face="Times New Roman, serif"><font size=2><span lang=en-US>MyProjectC.txt</span></font></font><font size=2>和</font><font face="Times New Roman, serif"><font size=2><span lang=en-US>MyProjectH.txt</span></font></font><font size=2>的内容。</font></p>
<table cellSpacing=0 cellPadding=0 width="100%" border=0>
    <colgroup>
    <col width=256></col>
    <tbody>
        <tr>
            <td vAlign=top width="100%" bgColor=#ccccff>
            <p style="MARGIN-BOTTOM: 0cm"><font face="Times New Roman, serif"><font size=2><span lang=en-US>//MyProjectC.txt</span></font></font></p>
            <p style="MARGIN-BOTTOM: 0cm"><font face="Times New Roman, serif"><font size=2><span lang=en-US>#include &lt;stdio.h&gt;</span></font></font></p>
            <p style="MARGIN-BOTTOM: 0cm"><font face="Times New Roman, serif"><font size=2><span lang=en-US>#include &lt;stdlib.h&gt;</span></font></font></p>
            <p style="MARGIN-BOTTOM: 0cm"><font face="Times New Roman, serif"><font size=2><span lang=en-US>#include "myProject.h"</span></font></font></p>
            <p style="MARGIN-BOTTOM: 0cm"><font face="Times New Roman, serif"><font size=2><span lang=en-US>int main(int argc,char *argv[]){</span></font></font></p>
            <p style="MARGIN-BOTTOM: 0cm"><font face="Times New Roman, serif"><font size=2><span lang=en-US>printf("%s\n",S);</span></font></font></p>
            <p style="MARGIN-BOTTOM: 0cm"><font face="Times New Roman, serif"><font size=2><span lang=en-US>return(0);</span></font></font></p>
            <p style="MARGIN-BOTTOM: 0cm"><font face="Times New Roman, serif"><font size=2><span lang=en-US>}</span></font></font></p>
            <p><br></p>
            </td>
        </tr>
    </tbody>
</table>
<p style="MARGIN-BOTTOM: 0cm; TEXT-INDENT: 0.66cm"><br></p>
<table cellSpacing=0 cellPadding=0 width="100%" border=0>
    <colgroup>
    <col width=256></col>
    <tbody>
        <tr>
            <td vAlign=top width="100%" bgColor=#ccccff>
            <p style="MARGIN-BOTTOM: 0cm"><font face="Times New Roman, serif"><font size=2><span lang=en-US>//MyProjectH.txt</span></font></font></p>
            <p style="MARGIN-BOTTOM: 0cm"><font face="Times New Roman, serif"><font size=2><span lang=en-US>#ifdef PASSWORD</span></font></font></p>
            <p style="MARGIN-BOTTOM: 0cm"><font face="Times New Roman, serif"><font size=2><span lang=en-US>#define S "Hello World"</span></font></font></p>
            <p style="MARGIN-BOTTOM: 0cm"><font face="Times New Roman, serif"><font size=2><span lang=en-US>#else</span></font></font></p>
            <p style="MARGIN-BOTTOM: 0cm"><font face="Times New Roman, serif"><font size=2><span lang=en-US>#define S "NO PASSWORD"</span></font></font></p>
            <p><font face="Times New Roman, serif"><font size=2><span lang=en-US>#endif</span></font></font></p>
            </td>
        </tr>
    </tbody>
</table>
<p style="MARGIN-BOTTOM: 0cm; TEXT-INDENT: 0.66cm"></p>
<p style="MARGIN-BOTTOM: 0cm; TEXT-INDENT: 0.66cm"></p>
<p style="MARGIN-BOTTOM: 0cm; TEXT-INDENT: 0.66cm"><font size=2>重新启动</font><font face="Times New Roman, serif"><font size=2><span lang=en-US>Dev-C++</span></font></font><font size=2>，在你的项目中就存在了我们的项目。</font></p>
<p style="MARGIN-BOTTOM: 0cm; TEXT-INDENT: 0.66cm"><font size=2><strong>最后的内容</strong></font></p>
<p style="MARGIN-BOTTOM: 0cm; TEXT-INDENT: 0.66cm"><font size=2>相对来说</font><font face="Times New Roman, serif"><font size=2><span lang=en-US>Dev-C++</span></font></font><font size=2>的功能还是比较简单的。而且，界面也是属于中文的。所以，慢慢摸索你一定可以熟悉这个环境的。</font></p>
<p style="MARGIN-BOTTOM: 0cm; TEXT-INDENT: 0.66cm"><font size=2><strong>文外音：</strong></font></p>
<p style="MARGIN-BOTTOM: 0cm; TEXT-INDENT: 0.66cm"><font size=2>总的来说，</font><font face="Times New Roman, serif"><font size=2><span lang=en-US>Dev-C++</span></font></font><font size=2>是一个不错的</font><font face="Times New Roman, serif"><font size=2><span lang=en-US>IDE</span></font></font><font size=2>。很适合对</font><font face="Times New Roman, serif"><font size=2><span lang=en-US>GCC</span></font></font><font size=2>不是太了解的人使用。当然，这里我还是要表示抱歉，因为最近要忙于考试，所以迟迟没有推出这篇文章。现在经历了漫长的考试时间，我在放假的刚开始，就匆匆写出了一些，赶紧贴出来。这里我还是希望各位能提出一件和疑问。如果各位有什么想法或者意见，疑惑。希望您能到 </font><font face="Times New Roman, serif"><font size=2><span lang=en-US><a href="http://blog.csdn.net/visioncat"><font color=#336699>http://blog.csdn.net/visioncat</font></a> </span></font></font><font size=2>上提出。谢谢。</font></p>
<p style="MARGIN-BOTTOM: 0cm; TEXT-INDENT: 0.66cm"><br></p>
<p style="MARGIN-BOTTOM: 0cm; TEXT-INDENT: 0.69cm" align=right><font face="Times New Roman, serif"><font size=2><span lang=en-US>STUDIO</span></font></font><font size=2>软件开发组</font><font face="Times New Roman, serif"><font size=2><span lang=en-US>(SDT)</span></font></font></p>
<p style="MARGIN-BOTTOM: 0cm; TEXT-INDENT: 0.69cm" align=right><font face="Times New Roman, serif"><font size=2><span lang=en-US>STUDIO Development Team</span></font></font></p>
<p style="MARGIN-BOTTOM: 0cm; TEXT-INDENT: 0.69cm" align=right><font size=2>北斗星君</font><font face="Times New Roman, serif"><font size=2><span lang=en-US>(</span></font></font><font size=2>黄庠魁</font><font face="Times New Roman, serif"><font size=2><span lang=en-US>)</span></font></font></p>
from ：<a href="http://blog.csdn.net/VisionCat/archive/2006/06/30/856499.aspx">http://blog.csdn.net/VisionCat/archive/2006/06/30/856499.aspx</a>
<script type=text/javascript>LoadFeedbackCount();</script>
<!-- tag ad for news template -->
<img src ="http://www.cnitblog.com/houcy/aggbug/42643.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/houcy/" target="_blank">挑灯看剑</a> 2008-04-23 13:28 <a href="http://www.cnitblog.com/houcy/archive/2008/04/23/42643.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>【转帖】GCC for Win32开发环境介绍（1）</title><link>http://www.cnitblog.com/houcy/archive/2008/04/23/42641.html</link><dc:creator>挑灯看剑</dc:creator><author>挑灯看剑</author><pubDate>Wed, 23 Apr 2008 05:26:00 GMT</pubDate><guid>http://www.cnitblog.com/houcy/archive/2008/04/23/42641.html</guid><wfw:comment>http://www.cnitblog.com/houcy/comments/42641.html</wfw:comment><comments>http://www.cnitblog.com/houcy/archive/2008/04/23/42641.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/houcy/comments/commentRss/42641.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/houcy/services/trackbacks/42641.html</trackback:ping><description><![CDATA[<p style="MARGIN-BOTTOM: 0cm" align=center><font size=+0><font style="FONT-SIZE: 15pt" size=4><strong><span>GCC for Win32</span></strong></font></font><font style="FONT-SIZE: 15pt" size=4><strong>开发环境介绍</strong></font><font style="FONT-SIZE: 15pt" size=4><strong>(1)</strong></font></p>
<p style="MARGIN-BOTTOM: 0cm" align=center><br></p>
<p style="MARGIN-BOTTOM: 0cm" align=center><font size=+0><font size=3><strong>第一章 在视窗操作系统下的</strong></font></font><font size=3><strong>GCC</strong></font></p>
<p style="MARGIN-BOTTOM: 0cm" align=center><font size=+0><font style="FONT-SIZE: 11pt" size=2><strong>第一节 </strong></font></font><font style="FONT-SIZE: 11pt" size=2><strong>GCC</strong></font><font style="FONT-SIZE: 11pt" size=2><strong>家族概览</strong></font></p>
<p style="MARGIN-BOTTOM: 0cm"><br></p>
<div style="MARGIN-BOTTOM: 0cm; TEXT-INDENT: 0.69cm"><font size=2>GCC</font><font size=2>是一个原本用于</font><font size=2>Unix-like</font><font size=2>系统下编程的编译器。不过，现在</font><font size=2>GCC</font><font size=2>也有了许多</font><font size=2>Win32</font><font size=2>下的移植版本。所以，也许对于许多</font><font size=2>Windows</font><font size=2>开发者来说，</font><font size=2>GCC</font><font size=2>还是一个比较陌生的东西。所以，我希望通过这章的叙述，让你——一个</font><font size=2>Windows</font><font size=2>开发者对</font><font size=2>GCC</font><font size=2>这一个优秀的编译器有一个大概的了解。</font></div>
<p style="MARGIN-BOTTOM: 0cm; TEXT-INDENT: 0.69cm"><br></p>
<div style="MARGIN-BOTTOM: 0cm; TEXT-INDENT: 0.69cm"><font size=2><strong>历史</strong></font></div>
<p style="MARGIN-BOTTOM: 0cm; TEXT-INDENT: 0.69cm"><font size=2>GCC</font><font size=2>是</font><font size=2>GNU</font><font size=2>公社的一个项目。是一个用于编程开发的自由编译器。最初，</font><font size=2>GCC</font><font size=2>只是一个</font><font size=2>C</font><font size=2>语言编译器，他是</font><font size=+0><font size=2>GNU C Compiler </font></font><font size=2>的英文缩写。随着众多自由开发者的加入和</font><font size=2>GCC</font><font size=2>自身的发展，如今的</font><font size=2>GCC</font><font size=2><span>以经是一个包含众多语言的编译器了。其中包括 </span></font><font size=+0><font size=2>C,C++,Ada,Object C</font></font><font size=2>和</font><font size=2>Java</font><font size=2>等。所以，</font><font size=2>GCC</font><font size=2>也由原来的</font><font size=+0><font size=2>GNU C Compiler</font></font><font size=2>变为</font><font size=+0><font size=2>GNU Compiler Collection</font></font><font size=2>。也就是 </font><font size=2>GNU</font><font size=2>编译器家族 的意思。当然，如今的</font><font size=2>GCC</font><font size=2>借助于他的特性，具有了交叉编译器的功能，即在一个平台下编译另一个平台的代码。</font></p>
<div style="MARGIN-BOTTOM: 0cm; TEXT-INDENT: 0.69cm"><font size=2>直到现在，</font><font size=2>GCC</font><font size=2>的历史仍然在继续，他的传奇仍然被人所传颂。</font></div>
<p style="MARGIN-BOTTOM: 0cm; TEXT-INDENT: 0.69cm"><br></p>
<div style="MARGIN-BOTTOM: 0cm; TEXT-INDENT: 0.69cm"><font size=2><strong>Windows</strong></font><font size=2><strong>下的</strong></font><font size=2><strong>GCC</strong></font><font size=2><strong>家族</strong></font></div>
<p style="MARGIN-BOTTOM: 0cm; TEXT-INDENT: 0.69cm"><br></p>
<div style="MARGIN-BOTTOM: 0cm; TEXT-INDENT: 0.69cm"><font size=2>起初，</font><font size=2>GCC</font><font size=2>是用于</font><font size=2>Unix,Unix-like</font><font size=2>系统的编译器。不过，现在</font><font size=2>Windows</font><font size=2>下也出现了</font><font size=2>GCC</font><font size=2>的稳定移植版。这要感谢</font><font size=2>Internet</font><font size=2>上众多程序员的共同努力。</font></div>
<p style="MARGIN-BOTTOM: 0cm; TEXT-INDENT: 0.69cm"><font size=2>如今，在</font><font size=2>Windows</font><font size=2>下比较流行的</font><font size=2>GCC</font><font size=2>移植版主要有三个。他们是 </font><font size=2>MinGW,Cygwin</font><font size=2>和</font><font size=2>Djgpp</font><font size=2>。虽然，</font><font size=2>Djgpp</font><font size=2>是应用于</font><font size=2>DOS</font><font size=2>系统的，考虑到</font><font size=2>windows</font><font size=2>对</font><font size=2>DOS</font><font size=2>的兼容，所以也将</font><font size=2>Djgpp</font><font size=2>纳入其中了。</font></p>
<div style="MARGIN-BOTTOM: 0cm; TEXT-INDENT: 0.69cm"><font size=2>总体来说，</font><font size=2>MinGW</font><font size=2>，</font><font size=2>Cygwin</font><font size=2>和</font><font size=2>Djgpp</font><font size=2>各有特色，针对不同的应用场合，可以选择不同的移植版来满足需要。</font><font size=2>MinGW</font><font size=2>这个系列的移植，主要方向是让</font><font size=2>GCC</font><font size=2>的</font><font size=2>Windows</font><font size=2>移植版能使用</font><font size=2>Win32API</font><font size=2>来编程。而</font><font size=2>Cygwin</font><font size=2>的目标是能让</font><font size=2>Unix-like</font><font size=2>下的程序代码在</font><font size=2>Windows</font><font size=2>下直接被编译。至于</font><font size=2>Djgpp</font><font size=2>，则是想让</font><font size=2>DOS</font><font size=2>下也能用上</font><font size=2>GCC</font><font size=2>。</font></div>
<div style="MARGIN-BOTTOM: 0cm; TEXT-INDENT: 0.69cm"><font size=2>所以，对于开发人员不同的需求。选择合适的移植版会让工作变得轻松而高效。</font></div>
<p style="MARGIN-BOTTOM: 0cm; TEXT-INDENT: 0.69cm"><br></p>
<div style="MARGIN-BOTTOM: 0cm; TEXT-INDENT: 0.69cm"><font size=2><strong>本书的</strong></font><font size=2><strong>GCC</strong></font></div>
<p style="MARGIN-BOTTOM: 0cm; TEXT-INDENT: 0.69cm"><br></p>
<div style="MARGIN-BOTTOM: 0cm; TEXT-INDENT: 0.69cm"><font size=2>我个人对</font><font size=2>GCC</font><font size=2>的移植版都非常喜欢。不论是</font><font size=2>MinGW</font><font size=2>还是</font><font size=2>Cygwin</font><font size=2>，亦或是</font><font size=2>Djgpp</font><font size=2>。在本书中，除了特殊说明以外，所述的内容适合所有这三种移植版。</font></div>
<div style="MARGIN-BOTTOM: 0cm; TEXT-INDENT: 0.69cm"><font size=2>不过，考虑到现在在</font><font size=2>Windows</font><font size=2>下用的比较多的是</font><font size=2>MinGW</font><font size=2>系列。再加上</font><font size=2>MinGW</font><font size=2>较</font><font size=2>Cygwin</font><font size=2>和</font><font size=2>Djgpp</font><font size=2>安装和使用更为简便。所以，建议读者学习时还是使用</font><font size=2>MinGW</font><font size=2>。</font></div>
<p style="MARGIN-BOTTOM: 0cm; TEXT-INDENT: 0.69cm"><br></p>
<p style="MARGIN-BOTTOM: 0cm; TEXT-INDENT: 0.69cm"><br></p>
<p style="MARGIN-BOTTOM: 0cm; TEXT-INDENT: 0.69cm" align=center><font size=+0><font style="FONT-SIZE: 11pt" size=2><strong>第二节 入乡随俗的</strong></font></font><font style="FONT-SIZE: 11pt" size=2><strong>MinGW</strong></font></p>
<p style="MARGIN-BOTTOM: 0cm; TEXT-INDENT: 0.69cm"><br></p>
<div style="MARGIN-BOTTOM: 0cm; TEXT-INDENT: 0.69cm"><font size=2><strong>简介</strong></font></div>
<p style="MARGIN-BOTTOM: 0cm; TEXT-INDENT: 0.69cm"><font size=2>MinGW</font><font size=2>是</font><font size=+0>Minimalistic GNU for Windows </font><font size=2>的缩写。她是一个建立在</font><font size=2>GCC</font><font size=2>和</font><font size=+0>binutils </font><font size=2>项目上的编译器系统。和其他</font><font size=2>GCC</font><font size=2>的移植版相比，她可以说是最接近</font><font size=2>Win32</font><font size=2>的一个了。因为，</font><font size=2>MinGW</font><font size=2>几乎支持所有的</font><font size=2>Win32API</font><font size=2>，这也是</font><font size=2>MinGW</font><font size=2>的特色之一。她所连接的程序，不需要任何第三方库就可以运行了。在某种程度上看，</font><font size=2>MinGW</font><font size=2>更像是</font><font size=2>VC</font><font size=2>的替代品。</font></p>
<p style="MARGIN-BOTTOM: 0cm; TEXT-INDENT: 0.69cm"><br></p>
<div style="MARGIN-BOTTOM: 0cm; TEXT-INDENT: 0.69cm"><font size=2><strong>获得与安装</strong></font></div>
<p style="MARGIN-BOTTOM: 0cm; TEXT-INDENT: 0.69cm"><font size=2>MinGW</font><font size=2>可以从</font><font size=2>MinGW</font><font size=2>的官方网站 </font><font size=+0><font size=2><a href="http://www.mingw.org/"><u><font color=#0000ff>http://www.mingw.org</font></u></a> </font></font><font size=2>上获得。</font></p>
<div style="MARGIN-BOTTOM: 0cm; TEXT-INDENT: 0.69cm"><font size=2>如果，你要安装</font><font size=2>MinGW</font><font size=2>，那么你有两种安装方案。下面我来一一介绍。</font></div>
<p style="MARGIN-BOTTOM: 0cm; TEXT-INDENT: 0.69cm"><br></p>
<div style="MARGIN-BOTTOM: 0cm; TEXT-INDENT: 0.69cm"><font color=#0000ff><font size=2>安装方案一：</font></font></div>
<p style="MARGIN-BOTTOM: 0cm; TEXT-INDENT: 0.69cm"><font size=2>首先，你要从 </font><font size=+0><font size=2><a href="http://www.mingw.org/download.shtml"><u><font color=#0000ff>http://www.mingw.org/download.shtml</font></u></a> </font></font><font size=2>上下载如下几个压缩包。考虑到文件的更新和文章的灵活性。我将只写出文件的主要部分，将省去版本好和更新日期。</font></p>
<p style="MARGIN-BOTTOM: 0cm; TEXT-INDENT: 0.69cm"><br></p>
<table borderColor=#000000 cellSpacing=0 cellPadding=4 width="100%" border=1>
    <colgroup>
    <col width=45></col>
    <col width=211></col>
    <thead>
        <tr vAlign=top>
            <td width="17%" bgColor=#ccccff>
            <div><font size=2>gcc-core</font></div>
            </td>
            <td width="83%" bgColor=#ccccff>
            <div><font size=2>C</font><font size=2>语言编译器</font></div>
            </td>
        </tr>
    </thead>
    <tbody>
        <tr vAlign=top>
            <td width="17%" bgColor=#ccccff>
            <div><font size=2>gcc-c++</font></div>
            </td>
            <td width="83%" bgColor=#ccccff>
            <div><font size=2>C++</font><font size=2>语言编译器</font></div>
            </td>
        </tr>
        <tr vAlign=top>
            <td width="17%" bgColor=#ccccff>
            <div><font size=2>mingw-runtime</font></div>
            </td>
            <td width="83%" bgColor=#ccccff>
            <div><font size=2>MinGW</font><font size=2>的运行时库（这个必须安装）</font></div>
            </td>
        </tr>
        <tr vAlign=top>
            <td width="17%" bgColor=#ccccff>
            <p><font size=2>win32api </font></p>
            </td>
            <td width="83%" bgColor=#ccccff>
            <div><font size=2>win32</font><font size=2>的</font><font size=2>API</font><font size=2>函数头文件和连接库</font></div>
            </td>
        </tr>
        <tr vAlign=top>
            <td width="17%" bgColor=#ccccff>
            <p><font size=2>binutils </font></p>
            </td>
            <td width="83%" bgColor=#ccccff>
            <div><font size=2>MinGW</font><font size=2>的汇编器和连接器等基础工具</font></div>
            </td>
        </tr>
        <tr vAlign=top>
            <td width="17%" bgColor=#ccccff>
            <p><font size=2>gdb </font></p>
            </td>
            <td width="83%" bgColor=#ccccff>
            <div><font size=2>MinGW</font><font size=2>中的调试工具</font></div>
            </td>
        </tr>
        <tr vAlign=top>
            <td width="17%" bgColor=#ccccff>
            <div><font size=2>mingw32-make</font></div>
            </td>
            <td width="83%" bgColor=#ccccff>
            <div><font size=2>Make</font><font size=2>工具，用以更好的管理你的项目</font></div>
            </td>
        </tr>
    </tbody>
</table>
<p style="MARGIN-BOTTOM: 0cm; TEXT-INDENT: 0.69cm"><br></p>
<div style="MARGIN-BOTTOM: 0cm; TEXT-INDENT: 0.69cm"><font size=2>然后，将上述文件逐一下载，然后全部解压缩到一个目录下就可以了，我这里假设你是移动到</font><font size=2><font color=#0000ff>$(MINGW)</font></font><font size=2>这个目录下了。这样，你的</font><font size=2>MinGW</font><font size=2>就算安装成功了。</font></div>
<p style="MARGIN-BOTTOM: 0cm; TEXT-INDENT: 0.69cm"><font size=2>最后到</font><font size=2>DOS</font><font size=2>终端上，将当前目录转换成 </font><font size=2><font color=#0000ff>$(MINGW)/bin </font></font><font size=2>下。输入</font></p>
<p style="MARGIN-BOTTOM: 0cm; TEXT-INDENT: 0.69cm"><br></p>
<table cellSpacing=0 cellPadding=0 width="100%" border=0>
    <colgroup>
    <col width=256></col>
    <tbody>
        <tr>
            <td vAlign=top width="100%" bgColor=#ccccff>
            <p><font size=+0><font size=2>C:\&gt;gcc -v</font></font></p>
            </td>
        </tr>
    </tbody>
</table>
<p style="MARGIN-BOTTOM: 0cm; TEXT-INDENT: 0.69cm"><br></p>
<div style="MARGIN-BOTTOM: 0cm; TEXT-INDENT: 0.69cm"><font size=2>看到一段</font><font size=2>gcc</font><font size=2>的版本信息，这就能说明，你的</font><font size=2>gcc</font><font size=2>已经可以正常工作了。</font></div>
<p style="MARGIN-BOTTOM: 0cm; TEXT-INDENT: 0.69cm"><br></p>
<div style="MARGIN-BOTTOM: 0cm; TEXT-INDENT: 0.69cm"><font color=#0000ff><font size=2>安装方案二：</font></font></div>
<p style="MARGIN-BOTTOM: 0cm; TEXT-INDENT: 0.69cm"><font size=2>你可以从 </font><font size=+0><font size=2><a href="http://www.mingw.org/download.shtml"><u><font color=#0000ff>http://www.mingw.org/download.shtml</font></u></a> </font></font><font size=2>上下载 </font><font size=+0><font size=2>MinGW5.0.2.exe </font></font><font size=2>这个程序。至少，在我写此文的时候，这个是最新版本。</font></p>
<div style="MARGIN-BOTTOM: 0cm; TEXT-INDENT: 0.69cm"><font size=2>下载以后运行安装，至于安装过程，我想我就不一一介绍了。对于</font><font size=2>Windows</font><font size=2>下的开发人员，我想这个应该不是什么问题了。</font></div>
<div style="MARGIN-BOTTOM: 0cm; TEXT-INDENT: 0.69cm"><font size=2>在一切都选择好以后。这个程序就开始从</font><font size=2>Internet</font><font size=2>上下载所需要的压缩包。然后，逐一解开，安装。</font></div>
<p style="MARGIN-BOTTOM: 0cm; TEXT-INDENT: 0.69cm"><br></p>
<div style="MARGIN-BOTTOM: 0cm; TEXT-INDENT: 0.69cm"><font size=2>总体来说，两种方法各有长处。不过，本人偏爱第一中方法。因为，控制度高，而且，更新也比较简单。自己心里也比较明了。</font></div>
<p style="MARGIN-BOTTOM: 0cm; TEXT-INDENT: 0.69cm"><br></p>
<div style="MARGIN-BOTTOM: 0cm; TEXT-INDENT: 0.69cm"><font size=2><strong>环境设置：</strong></font></div>
<p style="MARGIN-BOTTOM: 0cm; TEXT-INDENT: 0.69cm"><br></p>
<div style="MARGIN-BOTTOM: 0cm; TEXT-INDENT: 0.69cm"><font size=2>对于我们这些使用者来说，最好是能够简单方便的使用工具。所以，我们就需要设置环境，便于我们使用</font><font size=2>MinGW</font><font size=2>。</font></div>
<p style="MARGIN-BOTTOM: 0cm; TEXT-INDENT: 0.69cm"><font size=2>对于设置，我们只需要在环境变量中的</font><font size=2><font color=#0000ff>PATH </font></font><font size=2>变量中，添加</font><font size=2><font color=#0000ff>$(MINGW)/bin</font></font><font size=2>这个路径就可以了。</font></p>
<p style="MARGIN-BOTTOM: 0cm; TEXT-INDENT: 0.69cm"><br></p>
<div style="MARGIN-BOTTOM: 0cm; TEXT-INDENT: 0.69cm"><font size=2>这样，你就可以在任何目录下使用</font><font size=2>MinGW</font><font size=2>了。</font></div>
<p style="MARGIN-BOTTOM: 0cm; TEXT-INDENT: 0.69cm"><br></p>
<p style="MARGIN-BOTTOM: 0cm; TEXT-INDENT: 0.69cm"><br></p>
<p style="MARGIN-BOTTOM: 0cm; TEXT-INDENT: 0.69cm" align=center><font size=+0><font style="FONT-SIZE: 11pt" size=2><strong>第三节 人在曹营心在汉的</strong></font></font><font style="FONT-SIZE: 11pt" size=2><strong>Cygwin</strong></font></p>
<p style="MARGIN-BOTTOM: 0cm; TEXT-INDENT: 0.69cm"><br></p>
<div style="MARGIN-BOTTOM: 0cm; TEXT-INDENT: 0.69cm"><font size=2><strong>介绍</strong></font></div>
<p style="MARGIN-BOTTOM: 0cm; TEXT-INDENT: 0.69cm"><br></p>
<div style="MARGIN-BOTTOM: 0cm; TEXT-INDENT: 0.69cm"><font size=2>Cygwin</font><font size=2>，其实并不是一个</font><font size=2>GCC</font><font size=2>。她是让</font><font size=2>Windows</font><font size=2>拥有</font><font size=2>Unix-like</font><font size=2>环境的软件。所以，</font><font size=2>GCC</font><font size=2>自然也就会包含在里面。不过，对于开发者，</font><font size=2>Cygwin</font><font size=2>是一个开发环境。而对于用户来说</font><font size=2>Cygwin</font><font size=2>是一个运行环境。</font></div>
<div style="MARGIN-BOTTOM: 0cm; TEXT-INDENT: 0.69cm"><font size=2>Cygwin</font><font size=2>唯一和</font><font size=2>MinGW</font><font size=2>最大的区别在于，使用</font><font size=2>Cygwin</font><font size=2>可以在</font><font size=2>Windows</font><font size=2>下调用</font><font size=2>Unix-like</font><font size=2>的系统函数。比如进程函数，等等。所以，虽然说，</font><font size=2>Cygwin</font><font size=2>是运行在</font><font size=2>Windows</font><font size=2>下的，但是她还是使用的是</font><font size=2>Unix-like</font><font size=2>系统的函数和思想。</font></div>
<p style="MARGIN-BOTTOM: 0cm; TEXT-INDENT: 0.69cm"><br></p>
<div style="MARGIN-BOTTOM: 0cm; TEXT-INDENT: 0.69cm"><font size=2><strong>获得与安装</strong></font></div>
<p style="MARGIN-BOTTOM: 0cm; TEXT-INDENT: 0.69cm"><font size=2>Cygwin</font><font size=2>可以从</font><font size=2>Cygwin</font><font size=2>的官方网站获得安装程序 </font><font size=+0><font size=2><a href="http://www.cygwin.com/"><u><font color=#0000ff>http://www.cygwin.com/</font></u></a> </font></font></p>
<div style="MARGIN-BOTTOM: 0cm; TEXT-INDENT: 0.69cm"><font size=2>在网站上下载</font><font size=2>Cygwin</font><font size=2>的安装程序</font><font size=2>setup.exe</font><font size=2>。然后运行便可以了。</font></div>
<div style="MARGIN-BOTTOM: 0cm; TEXT-INDENT: 0.69cm"><font size=2>关于前面的设置，我想不用多做介绍了。因为，对于这些我想</font><font size=2>Windows</font><font size=2>下的开发人员应该相当清楚了。</font></div>
<p style="MARGIN-BOTTOM: 0cm; TEXT-INDENT: 0.69cm"><font size=2>在到了选择安装的组件时，在</font><font size=+0><font size=2><font color=#0000ff>Devel </font></font></font><font size=2>选项下，将</font><font size=2><font color=#0000ff>gcc-core,gcc-g++ </font></font><font size=2>等前的</font><font size=+0><font size=2>skip </font></font><font size=2>点击成你所需要的版本号。</font></p>
<p style="MARGIN-BOTTOM: 0cm; TEXT-INDENT: 0.69cm"><font size=2>然后在 </font><font size=2><font color=#0000ff>Lib</font></font><font size=2>选项卡中，将</font><font size=2><font color=#0000ff>glib2,glib2-devel,glib2-runtime</font></font><font size=2>前的</font><font size=2>skip</font><font size=2>点成版本号。</font></p>
<div style="MARGIN-BOTTOM: 0cm; TEXT-INDENT: 0.69cm"><font size=2>接下来，就点击</font><font size=2>next</font><font size=2>就可以了。在一段漫长的等待时间后，你的</font><font size=2>Cygwin</font><font size=2>开发环境就算安装好了。</font></div>
<div style="MARGIN-BOTTOM: 0cm; TEXT-INDENT: 0.69cm"><font size=2>相对来说，</font><font size=2>Cygwin</font><font size=2>的安装和配置都比较简单。因为，</font><font size=2>Cygwin</font><font size=2>提供了一个比较健全的安装程序。</font></div>
<p style="MARGIN-BOTTOM: 0cm; TEXT-INDENT: 0.69cm"><br></p>
<div style="MARGIN-BOTTOM: 0cm; TEXT-INDENT: 0.69cm"><font size=2><strong>使用</strong></font></div>
<p style="MARGIN-BOTTOM: 0cm; TEXT-INDENT: 0.69cm"><br></p>
<div style="MARGIN-BOTTOM: 0cm; TEXT-INDENT: 0.69cm"><font size=2>在安装目录下，运行</font><font size=2>cygwin.bat</font><font size=2>就可以启动</font><font size=2>cygwin</font><font size=2>环境了。这是一个模拟</font><font size=2>Linux</font><font size=2>的环境，所以很多地方可能和</font><font size=2>Dos</font><font size=2>有比较大的差距。不过，你编译出的程序可以直接在其他没有安装</font><font size=2>Cygwin</font><font size=2>的机器上运行。还有，如果要切换到</font><font size=2>windows</font><font size=2>下的其他盘下，比如</font><font size=2>D</font><font size=2>盘。那么就可以使用</font></div>
<p style="MARGIN-BOTTOM: 0cm; TEXT-INDENT: 0.69cm"><br></p>
<table cellSpacing=0 cellPadding=0 width="100%" border=0>
    <colgroup>
    <col width=256></col>
    <tbody>
        <tr>
            <td vAlign=top width="100%" bgColor=#ccccff>
            <p><font size=+0><font size=2>$cd /cygdrive/d/</font></font></p>
            </td>
        </tr>
    </tbody>
</table>
<p style="MARGIN-BOTTOM: 0cm"><br></p>
<div style="MARGIN-BOTTOM: 0cm; TEXT-INDENT: 0.69cm"><font size=2>对于</font><font size=2>Cygwin</font><font size=2>更多关于使用的内容，你可以到</font><font size=2>Linux</font><font size=2>社区去获得参考。</font></div>
<p style="MARGIN-BOTTOM: 0cm; TEXT-INDENT: 0.69cm"><br></p>
<p style="MARGIN-BOTTOM: 0cm; TEXT-INDENT: 0.69cm" align=center><font size=+0><font style="FONT-SIZE: 11pt" size=2><strong>第四节 脚踏两只船的</strong></font></font><font style="FONT-SIZE: 11pt" size=2><strong>Djgpp</strong></font></p>
<div style="MARGIN-BOTTOM: 0cm; TEXT-INDENT: 0.69cm"><font size=2><strong>介绍</strong></font></div>
<p style="MARGIN-BOTTOM: 0cm; TEXT-INDENT: 0.69cm"><br></p>
<div style="MARGIN-BOTTOM: 0cm; TEXT-INDENT: 0.69cm"><font size=2>Djgpp</font><font size=2>，是一个在纯</font><font size=2>Dos</font><font size=2>下的</font><font size=2>GCC</font><font size=2>移植版本。她使用一些软件将纯</font><font size=2>Dos</font><font size=2>设置成</font><font size=2>32</font><font size=2>位的环境，并运行由她编译出来的程序。总体来说，</font><font size=2>Djgpp</font><font size=2>并不是一个</font><font size=2>Windows</font><font size=2>的移植版。不过，她确实可以在</font><font size=2>Windows</font><font size=2>下运行。对于一些特殊应用。</font><font size=2>Djgpp</font><font size=2>是唯一适合的。</font></div>
<p style="MARGIN-BOTTOM: 0cm; TEXT-INDENT: 0.69cm"><br></p>
<div style="MARGIN-BOTTOM: 0cm; TEXT-INDENT: 0.69cm"><font size=2><strong>获得与安装</strong></font></div>
<p style="MARGIN-BOTTOM: 0cm; TEXT-INDENT: 0.69cm"><font size=2>Djgpp</font><font size=2>，可以从</font><font size=2>Djgpp</font><font size=2>的官方网站上下载 </font><font size=+0><font size=2><a href="http://www.delorie.com/djgpp/"><u><font color=#0000ff>http://www.delorie.com/djgpp/</font></u></a> </font></font></p>
<div style="MARGIN-BOTTOM: 0cm; TEXT-INDENT: 0.69cm"><font size=2>不过，这里</font><font size=2>Djgpp</font><font size=2>为用户做了更好多的安排。她为用户提供了一个定制安装的页面。</font></div>
<div style="MARGIN-BOTTOM: 0cm; TEXT-INDENT: 0.69cm"><font color=#0000ff size=2><a href="http://www.delorie.com/djgpp/zip-picker.html"><u>http://www.delorie.com/djgpp/zip-picker.html</u></a></font></div>
<div style="MARGIN-BOTTOM: 0cm; TEXT-INDENT: 0.69cm"><font size=2>您只需要在上面填写响应的内容，然后递交。她将会给你一份完整的安装方案。</font></div>
<p style="MARGIN-BOTTOM: 0cm; TEXT-INDENT: 0.69cm"><br></p>
<div style="MARGIN-BOTTOM: 0cm; TEXT-INDENT: 0.69cm"><font size=2><strong>使用</strong></font></div>
<p style="MARGIN-BOTTOM: 0cm; TEXT-INDENT: 0.69cm"><br></p>
<div style="MARGIN-BOTTOM: 0cm; TEXT-INDENT: 0.69cm"><font size=2>相对来说，</font><font size=2>Djgpp</font><font size=2>我并不是经常使用。所以，本文中在没有特殊说明情况下，不会使用</font><font size=2>Djgpp</font><font size=2>的。</font></div>
<p style="MARGIN-BOTTOM: 0cm; TEXT-INDENT: 0.69cm"><br></p>
<p style="MARGIN-BOTTOM: 0cm; TEXT-INDENT: 0.69cm"><br></p>
<div style="MARGIN-BOTTOM: 0cm; TEXT-INDENT: 0.69cm"><font size=2><strong>文外音：</strong></font></div>
<p style="MARGIN-BOTTOM: 0cm; TEXT-INDENT: 0.69cm"><font size=2>总体来说，这篇文章写的有些匆忙。所以可能有些地方有不足。所以，希望各位能够多多原谅批评和指教。下一章，我将介绍</font><font size=+0><font size=2>GCC for Win32</font></font><font size=2>的</font><font size=2>IDE</font><font size=2>。同时，从这一章开始，我将向各位读者做一个小小的要求。那就是，希望你们能够将自己对这篇文章感到的不足告诉我，我将随时修改以发表的内容，以适合广大读者的要求。如果各位有什么想法或者意见，疑惑。希望您能到 </font><font size=+0><font size=2><a href="http://blog.csdn.net/visioncat"><u><font color=#0000ff>http://blog.csdn.net/visioncat</font></u></a> </font></font><font size=2>上提出。</font></p>
<p style="MARGIN-BOTTOM: 0cm; TEXT-INDENT: 0.69cm"><br></p>
<p style="MARGIN-BOTTOM: 0cm; TEXT-INDENT: 0.69cm"><br></p>
<p style="MARGIN-BOTTOM: 0cm; TEXT-INDENT: 0.69cm" align=right><font size=2>STUDIO</font><font size=2>软件开发组</font><font size=2>(SDT)<br><font size=2>STUDIO Development Team</font><br>北斗星君</font><font size=2>(</font><font size=2>黄庠魁</font><font size=2>)</font></p>
<img src ="http://www.cnitblog.com/houcy/aggbug/42641.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/houcy/" target="_blank">挑灯看剑</a> 2008-04-23 13:26 <a href="http://www.cnitblog.com/houcy/archive/2008/04/23/42641.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Emacs 快速指南</title><link>http://www.cnitblog.com/houcy/archive/2008/04/23/42640.html</link><dc:creator>挑灯看剑</dc:creator><author>挑灯看剑</author><pubDate>Wed, 23 Apr 2008 04:53:00 GMT</pubDate><guid>http://www.cnitblog.com/houcy/archive/2008/04/23/42640.html</guid><wfw:comment>http://www.cnitblog.com/houcy/comments/42640.html</wfw:comment><comments>http://www.cnitblog.com/houcy/archive/2008/04/23/42640.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/houcy/comments/commentRss/42640.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/houcy/services/trackbacks/42640.html</trackback:ping><description><![CDATA[<p>Emacs 键盘命令通常包含 CONTROL 键（有时候以 CTRL 或 CTL 来标示）和<br>META 键（有时候用 EDIT 或 ALT 来标示）。为了避免每次都要写出全名，我们<br>约定使用下述缩写：</p>
<p>&nbsp;C-&lt;chr&gt;&nbsp; 表示当输入字符 &lt;chr&gt; 时按住 CONTROL 键。<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 因此 C-f 就表示：按住 CONTROL 键再输入 f。</p>
<p>&nbsp;M-&lt;chr&gt;&nbsp; 表示当输入字符 &lt;chr&gt; 时按住 META（或 EDIT 或 ALT）键。<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 如果你的键盘上没有 META 、EDIT 或 ALT 键，用下述方法也等效：<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 先按一下 ESC 键然后放开，再输入 &lt;chr&gt;。我们用 &lt;ESC&gt; 来表示<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ESC 键。</p>
<p>重要提示：要退出 Emacs，请用 C-x C-c（两个连续的组合键）。下文中左边顶<br>行的&#8220;&gt;&gt;&#8221;字样用来提示你尝试键盘命令。比如：</p>
<p><br>&gt;&gt; 现在输入 C-v （查看下一屏文字）移动到下一屏。<br>&nbsp;&nbsp; （别紧张，在输入字符 v 的同时注意要按住 CONTROL 键）<br>&nbsp;&nbsp; 从现在开始，每读完当前一屏你都需要这样做一次。</p>
<p>值得注意的是，当你从上一屏滚到下一屏时，中间会有两行的重复；这样做是为<br>了维持滚屏的连续性，方便你顺畅、连续地阅读。</p>
<p>用编辑器，开门第一件事就是学会在文字中移动。你已经知道了 C-v 可以向下移<br>动一屏，要往上移，请用 M-v （也就是按住 META 键，然后输入v，如果你没有<br>META、EDIT 或 ALT 键那么就先按 &lt;ESC&gt; 再按 v）。</p>
<p>&gt;&gt;&nbsp; 试试 M-v，然后再试试 C-v，来回遛几次。</p>
<p><br>* 小结（SUMMARY）<br>-----------------</p>
<p>以下命令在翻页浏览时相当有用：</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; C-v&nbsp;&nbsp;&nbsp;&nbsp; 向前移动一屏<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; M-v&nbsp;&nbsp;&nbsp;&nbsp; 向后移动一屏<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; C-l&nbsp;&nbsp;&nbsp;&nbsp; 重绘屏幕，并将光标所在行置于屏幕的中央<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; （注意是 CONTROL-L，不是 CONTROL-1）</p>
<p>&gt;&gt; 找到光标，留意其附近的文字，然后输入 C-l。<br>&nbsp;&nbsp; 找找光标在哪里，你会发现其附近的文字并没有变化。</p>
<p>如果你的键盘上有 PageUp 和 PageDn，也可以用这两个键来滚屏。不过使用<br>C-v 和 M-v 的效率要更高一些。</p>
<p><br>* 基本的光标控制（BASIC CURSOR CONTROL）<br>----------------------------------------</p>
<p>整屏的移动很有用，但是如何在文字中精确定位呢？</p>
<p>有几种方式可以选择。用方向键当然可以，不过更有效率的方法是保持双手位于<br>主键盘区，然后使用 C-p 、 C-b 、 C-f 和 C-n 这四个命令。它们的功能和方<br>向键是一样的，如下图所示：</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 上一行 C-p<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; :<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; :<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 向左移 C-b .... 目前光标位置 .... 向右移 C-f<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; :<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; :<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 下一行 C-n</p>
<p>&gt;&gt; 用 C-n 或 C-p 将光标移到上图的中央。<br>&nbsp;&nbsp; 按 C-l，整幅图会被显示在屏幕的中央。</p>
<p>&#8220;P N B F&#8221;四个字母分别代表了四个词，用这四个词记忆这些组合键会更容易：<br>P 代表 previous（上一行），N 代表 next（下一行），B 代表 backward（回<br>退），而 F 则代表 forward（前进）。这些组合键今后将与你形影不离。</p>
<p>&gt;&gt; 按几次 C-n 把光标往下挪到这里。</p>
<p>&gt;&gt; 用 C-f 把光标移动到这一行，然后再用 C-p 往上挪。<br>&nbsp;&nbsp; 注意观察当光标在一行的中央时 C-p 命令的行为。</p>
<p>每行文字都以一个&#8220;换行符&#8221;结束，&#8220;换行符&#8221;把行与行区分开来。文件的最后<br>一行也应该也有一个换行符（不过 Emacs 并不强制要求这一点）。</p>
<p>&gt;&gt; 在一行的行头输入 C-b。<br>&nbsp;&nbsp; 光标应该会移动到前一行的行尾，因为光标在回退过程中越过了换行符。</p>
<p>同样 C-f 也可以像 C-b 一样越过换行符。</p>
<p>&gt;&gt; 连按几次 C-b，感受一下光标的移动。<br>&nbsp;&nbsp; 然后按几次 C-f 回到本行的行尾。<br>&nbsp;&nbsp; 再按一次 C-f，光标会移动到下一行。</p>
<p>当你移动光标穿越屏幕的上下边界时，在边界外的文字会移动到屏幕内，这称为<br>&#8220;滚动&#8221;（scrolling）。滚动使得光标可以被移动到文字中的任何位置，并且还<br>不会让光标跑到屏幕外边去。</p>
<p>&gt;&gt; 用 C-n 将光标下移，一直越过屏幕边界，同时观察发生了什么变化。</p>
<p>如果你嫌一个字符一个字符地挪光标太慢，你还可以一个词一个词地跳。M-f<br>(META-f) 可以将光标往前移动一个词，而 M-b 则是往后移。【这里的&#8220;词&#8221;指<br>英文单词，对中文来说，则是指移动到下一个标点符号。】</p>
<p>&gt;&gt; 试试 M-f 和 M-b。</p>
<p>如果光标停在一个词的中间，M-f 会移动到这个词的末尾。如果光标处于词与词<br>之间的空白处，M-f 会移动到下一个词的末尾。M-b 的功能类似，只是方向相反。</p>
<p>&gt;&gt; 按几次 M-f 和 M-b，中间夹杂一些 C-f 和 C-b。<br>&nbsp;&nbsp; 你可以观察到 M-f 和 M-b 在不同位置上所表现出来的不同行为。</p>
<p>请注意 C-f 、C-b 和 M-f 、M-b 两对之间的类比关系。通常的惯例是：META 系<br>列组合键用来操作&#8220;由语言定义的单位（比如词、句子、段落）&#8221;，而 CONTROL<br>系列组合键用来操作&#8220;与语言无关的基本单位（比如字符、行等等）&#8221;。</p>
<p>类似的惯例在&#8220;行&#8221;与&#8220;句子&#8221;之间也同样适用：C-a 和 C-e 可以将光标移动到<br>&#8220;一行&#8221;的头部和尾部；而 M-a 和 M-e 则将光标移动到&#8220;一句&#8221;的头部和尾部。</p>
<p>&gt;&gt; 按两次 C-a，再按两次 C-e。<br>&nbsp;&nbsp; 按两次 M-a，再按两次 M-e。</p>
<p>想一想为什么重复的 C-a 命令会没有作用，而重复的 M-a 命令则会让光标不断<br>地回退到上一个句子。虽然这个类比规律并不严格，但是很自然。</p>
<p>光标停留的位置也可以称作&#8220;点位&#8221;（point）。或者干脆说，光标指示出了屏幕<br>上&#8220;点位&#8221;在文本中的位置。</p>
<p>这里对简单的光标移动命令做一个总结，其中也包括了整词和整句的移动：</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; C-f&nbsp;&nbsp;&nbsp;&nbsp; 向右移动一个字符<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; C-b&nbsp;&nbsp;&nbsp;&nbsp; 向左移动一个字符</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; M-f&nbsp;&nbsp;&nbsp;&nbsp; 向右移动一个词【对中文是移动到下一个标点符号】<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; M-b&nbsp;&nbsp;&nbsp;&nbsp; 向左移动一个词【对中文是移动到上一个标点符号】</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; C-n&nbsp;&nbsp;&nbsp;&nbsp; 移动到下一行<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; C-p&nbsp;&nbsp;&nbsp;&nbsp; 移动到上一行</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; C-a&nbsp;&nbsp;&nbsp;&nbsp; 移动到行首<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; C-e&nbsp;&nbsp;&nbsp;&nbsp; 移动到行尾</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; M-a&nbsp;&nbsp;&nbsp;&nbsp; 移动到句首<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; M-e&nbsp;&nbsp;&nbsp;&nbsp; 移动到句尾</p>
<p>&gt;&gt; 把上面所有的命令都练习几次，这些可都是最常用的命令。</p>
<p>这里还要介绍两个重要的光标移动命令：M-&lt; （META 小于号）可以将光标移动到<br>所有文字的最开头；M-&gt; （META 大于号）可以将光标移动到所有文字的最末尾。</p>
<p>注意，在大部分键盘上，小于号（&lt;）需要用上档键（Shift）来输入，所以在这<br>些键盘上你应该用 Shift 键来输入 M-&lt;，如果不按 Shift 键，你输入的会是<br>M-comma（META 逗号）。</p>
<p>&gt;&gt; 试一试 M-&lt; ，移到本快速指南的最开始。<br>&nbsp;&nbsp; 然后再按几次 C-v 回到这里。</p>
<p>&gt;&gt; 试一试 M-&gt; ，移到本快速指南的最末尾。<br>&nbsp;&nbsp; 然后再按几次 M-v 回到这里。</p>
<p>如果你的键盘上有方向键的话，也可以用它们来移动光标。不过我们有三个理由<br>推荐你学习 C-b 、C-f 、C-n 、和 C-p：（1）它们在任何键盘上都能用。（2）<br>当你熟练使用 Emacs 之后，你会发现用这些组合键比用方向键要快得多，因为你<br>的手不需要离开打字区。（3）一旦你习惯了使用这些组合键，你也可以很容易地<br>适应其它更高级的光标移动命令。</p>
<p>大部分的 Emacs 命令接受数字参数，并且对于多数命令而言，这些数字参数的作<br>用是指定命令的重复次数。为一个命令指定数字参数（也就是重复次数）的方法<br>是：先输入 C-u，然后输入数字作为参数，最后再输入命令。如果你有META （或<br>EDIT 或 ALT）键，那么还有另一种办法：按住 META 键不放，然后输入数字。不<br>过我们还是建议你用 C-u，因为它在任何终端机上都能用。这种数字参数也称为<br>&#8220;前缀参数&#8221;，意思是说这个参数是先于使用它的命令而输入的。</p>
<p>举例来说， C-u 8 C-f 会向前移动 8 个字符。</p>
<p>&gt;&gt; 为 C-n 或者 C-p 指定一个数字参数，这样你可以只用一个命令就把光标移动<br>&nbsp;&nbsp; 到本行的附近。</p>
<p>虽然大部分命令把数字参数解释为其重复次数，但是也有些命令例外，它们将数<br>字参数另做它用。比如有些命令（我们目前还没学到）仅仅将前缀参数作为一个<br>标志――只要给出有一个前缀参数，不管其值为何，它都会改变命令的功能。</p>
<p>而 C-v 和 M-v 则属于另一种类型的例外。当给定一个参数时，它们将滚动你指<br>定的&#8220;行数&#8221;，而不是&#8220;屏数&#8221;。举例来说，C-u 8 C-v 将屏幕向下滚动 8 行，<br>而不是 8 屏。</p>
<p>&gt;&gt; 现在试试看，输入 C-u 8 C-v。</p>
<p>这个命令应该已经将文字向上滚动了 8 行。如果你想将它再次地向下滚动，你可<br>以给定一个参数然后执行 M-v。</p>
<p>如果你正在使用一个窗口系统，比如 X11 或者微软的 Windows，那么在 Emacs<br>窗口的边缘应该有一个长方形的区域叫&#8220;滚动条&#8221;，你可以用鼠标操纵滚动条来<br>滚动文字。</p>
<p>&gt;&gt; 试着在&#8220;滚动条内的反白区域&#8221;上按一下鼠标中键。<br>&nbsp;&nbsp; 文字应该会滚动到鼠标所指示的位置。</p>
<p>&gt;&gt; 当按住中键时，试着将鼠标上下移动。<br>&nbsp;&nbsp; 你会看到文字随着鼠标的移动而上下滚动。<br>&nbsp;&nbsp; 【Windows 版本符合 Windows 程序的传统操作习惯，上述操作不适用。】</p>
<p><br>* 在 EMACS 失去响应的时候（WHEN EMACS IS HUNG）<br>-----------------------------------------------</p>
<p>如果 Emacs 对你的命令失去响应，你可以用 C-g 来安全地终止这条命令。C-g<br>也可以终止一条执行过久的命令。</p>
<p>C-g 还可以取消数字参数和只输入到一半的命令。</p>
<p>&gt;&gt; 输入 C-u 100 设定一个值为 100 的数字参数，然后按 C-g。<br>&nbsp;&nbsp; 现在再按 C-f，光标应该只会移动一个字符，因为你已经用 C-g 取消了参数。</p>
<p>如果你不小心按了一下 &lt;ESC&gt;，你也可以用 C-g 来取消它。<br>【这个说法似乎有问题，因为按照这个按键顺序输入的应该是 C-M-g。<br>&nbsp; 取消 &lt;ESC&gt; 的正确做法是再连按两次 &lt;ESC&gt;。】</p>
<p><br>* 被禁用的命令（DISABLED COMMANDS）<br>-----------------------------------</p>
<p>有一些 Emacs 命令被&#8220;禁用&#8221;了，以避免初学者在不了解其确切功能的情况下误<br>用而造成麻烦。</p>
<p>如果你用到了一个被禁用的命令，Emacs 会显示一个提示消息，告诉你这个命令<br>到底是干什么的，询问你是否要继续，并在得到你的肯定之后再执行这命令。</p>
<p>如果你真的想用这条命令，在 Emacs 询问你的时候应该按空格。一般来说，如果<br>你不想用，就按&#8220;n&#8221;。</p>
<p>&gt;&gt; 试试 C-x C-l （这是一个被禁用的命令）<br>&nbsp;&nbsp; 然后用 n 来回答询问。</p>
<p><br>* 窗格（WINDOWS）<br>-----------------</p>
<p>Emacs 可以有多个窗格，每个窗格显示不同的文字。后面会介绍怎么对付多个窗<br>格，现在我们先学会如何关掉多余的窗格。其实也很简单：</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; C-x 1&nbsp;&nbsp; 只保留一个窗格（也就是关掉其它所有窗格）。</p>
<p>也就是先按 CONTROL-x 然后再按 1。C-x 1 会保留光标所在的窗格，并将其扩大<br>到整个屏幕，同时关掉所有其它的窗格。</p>
<p>&gt;&gt; 把光标移到本行然后输入 C-u 0 C-l。</p>
<p>&gt;&gt; 输入 CONTROL-h k CONTROL-f。观察当一个新窗格出现时当前窗格（用来显示<br>&nbsp;&nbsp; CONTROL-f 命令的文档）是如何缩小的。</p>
<p>&gt;&gt; 输入 C-x 1 关掉文档窗格。</p>
<p>这个命令跟先前学过的命令不太一样，因为它包含了两个字符，以 CONTROL-x 开<br>始。有一系列命令都是以 CONTROL-x 开始的，这些命令许多都跟&#8220;窗格、文件、<br>缓冲区【缓冲区（buffer）会在后文详细介绍】&#8221;等等诸如此类的东西有关，其<br>中有些命令可能包含了 2 个、3 个或者 4 个字符。</p>
<p><br>* 插入与删除（INSERTING AND DELETING）<br>--------------------------------------</p>
<p>插入文字很简单，直接敲键盘就可以了。你能看到的字符，比如 A、7、* 等等，<br>都被 Emacs 视为文字并且可以直接插入。敲 &lt;Return&gt;（回车键）会插入一个换<br>行符。</p>
<p>你可以用 &lt;Delback&gt; 来删除最后输入的一个字符，这个跟你在 Emacs 之外的用<br>法应该一样。一般来说 &lt;Delback&gt; 就是位于 &lt;Return&gt; 键上方某处的一个大块头<br>的键，通常被标示为&#8220;Delete&#8221;、&#8220;Del&#8221;或者&#8220;Backspace&#8221;。</p>
<p>如果你找到了&#8220;Backspace&#8221;键，那么它应该就是 &lt;Delback&gt;；这时哪怕你又在别<br>的地方找到了一个&#8220;Del&#8221;键，那么它也应该不是 &lt;Delback&gt;。</p>
<p>一种更通用的说法是，&lt;Delback&gt; 将删除位于光标前的一个字符。</p>
<p>&gt;&gt; 现在就来试试――敲点字，然后按几下 &lt;Delback&gt; 删除它们。<br>&nbsp;&nbsp; 不用担心文件被修改，你做什么都没关系，这里就是专给你练习用的。</p>
<p>如果一行文字很长、超出了窗格的宽度，显示不下的部分会在紧邻的下一行继续<br>显示。这时会有一个反斜线（在控制台下是反斜线，如果你用图形窗口系统，则<br>应该是一个小小的转弯箭头）显示在右边沿，表明这是某一行的接续显示。</p>
<p>&gt;&gt; 输入文字，一直到屏幕的右边界，然后继续，你会看到一个接续行出现。</p>
<p>&gt;&gt; 用 &lt;Delback&gt; 删掉一些文字，直到此行长度小于窗格宽度，接续行就消失了。</p>
<p>换行符跟其它字符一样可以被删除。两行中间的换行符被删除后，这两行将会合<br>并成一行。如果合并后的这一行太长，超出了窗格宽度，它就会以一个接续行来<br>显示。</p>
<p>&gt;&gt; 移动光标到某行的开头并输入 &lt;Delback&gt;。<br>&nbsp;&nbsp; 这时该行将与其前一行一起被合并为一行。</p>
<p>&gt;&gt; 输入 &lt;Return&gt; 重新插入你刚才删除的换行符。</p>
<p>前面讲过，大部分的 Emacs 命令都可以指定重复次数，这其中也包括输入字符的<br>命令。重复执行输入字符的命令实际上就是输入多个相同的字符。</p>
<p>&gt;&gt;&nbsp; 试试 C-u 8 *，这将会插入 ********。</p>
<p>好，现在你应该已经掌握了最基本的的文本插入和修改功能，其实删除还可以<br>&#8220;以词为单位&#8221;进行，下面是一个关于&#8220;删除&#8221;操作的小结：</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;Delback&gt;&nbsp;&nbsp;&nbsp; 删除光标前的一个字符<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; C-d&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 删除光标后的一个字符</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; M-&lt;Delback&gt;&nbsp; 移除光标前的一个词<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; M-d&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 移除光标后的一个词</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; C-k&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 移除从光标到&#8220;行尾&#8221;间的字符<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; M-k&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 移除从光标到&#8220;句尾&#8221;间的字符</p>
<p>【可能你已经注意到了&#8220;删除（delete）&#8221;和&#8220;移除（kill）&#8221;的用词区别，后<br>文会有详细说明。】</p>
<p>注意&#8220;&lt;Delback&gt; 和 C-d&#8221;还有&#8220;M-&lt;Delback&gt; 和 M-d&#8221;是根据前述惯例从 C-f<br>和 M-f 衍生出来的（其实&lt;Delback&gt;不是控制字符，我们先忽略这一点）。C-k<br>和 M-k 的关系在某种程度上与 C-e 和 M-e 一样――如果把&#8220;一行&#8221;和&#8220;一句&#8221;<br>作一个类比的话。</p>
<p>你也可以用一种通用的办法来移除缓冲区里的任何一部分：首先把光标移动到你<br>想要移除的区域的一端，然后按 C-@ 或 C-SPC（任一即可，SPC指空格）【注意，<br>C-SPC 往往被中文用户设定成输入法热键，如果这样，C-SPC 就被系统拦截而无<br>法传递给 Emacs 了，因此这里还是推荐使用C-@。】，然后将光标移动到另一端，<br>再按 C-w 就可以把位于这两点之间的所有文字移除了。</p>
<p>&gt;&gt; 移动光标到上一段开头的&#8220;你&#8221;字。<br>&gt;&gt; 输入 C-@ 。Emacs 应该会在屏幕的下方显示一个&#8220;Mark set&#8221;的消息。<br>&gt;&gt; 移动光标到第二行中的&#8220;端&#8221;字。<br>&gt;&gt; 输入 C-w，从&#8220;你&#8221;开始到&#8220;端&#8221;之前的文字被全部移除。</p>
<p>注意,&#8220;移除（kill）&#8221;和&#8220;删除（delete）&#8221;的不同在于被移除的东西可以找回<br>来，而被删除的就不行了。【实际上，移除掉的东西虽然看起来&#8220;消失&#8221;了，但<br>实际上被 Emacs 记录了下来，因此还可以找回来；而删除掉的东西虽然也可能还<br>在内存里，但是已经被 Emacs&#8220;抛弃&#8221;了，所以就找不回来了。】重新插入被移<br>除的文字称为&#8220;召回（yank）&#8221;。一般而言，那些可能消除很多文字的命令会把<br>消除掉的文字记录下来（它们被设定成了&#8220;可召回&#8221;），而那些只消除一个字符<br>或者只消除空白的命令就不会记录被消除的内容（自然你也就无法召回了）。</p>
<p>&gt;&gt; 移动光标到一非空白行的行头，然后输入 C-k 移除那一行上的文字。</p>
<p>&gt;&gt; 再次 C-k，你可以看到它移除了跟在那一行后面的换行符。</p>
<p>注意，单独的 C-k 会把一行的内容移除，而第二个 C-k 则会移除换行符，并使<br>其后所有的行都向上移动。C-k 处理数字参数的方式很特别，它会把参数指定的<br>那么多行连同其后的换行符一起移除，而不仅仅是重复 C-k 而已。比如 C-u 2<br>C-k 会把两行以及它们的换行符移除；而如果只是输入 C-k 两次显然不是这个结<br>果。</p>
<p>将被移除的文字恢复的动作称为&#8220;召回（yanking）&#8221;。（就好像把别人从你身边<br>移走的东西又猛力地拉回来。）你可以在你删除文字的地方召回，也可以在别的<br>地方召回，还可以多次召回同样的文字以得到它的多个拷贝。</p>
<p>召回的命令是 C-y。它会在光标所在处插入你最后移除的文字。</p>
<p>&gt;&gt; 试试看，输入 C-y 将文字召回。</p>
<p>如果你一次连按了好几下 C-k，那么所有被移除的行会被存储在一起，只要一个<br>C-y 就可以把它们都召回。</p>
<p>&gt;&gt; 在这里试试，连续按几次 C-k。</p>
<p>现在再来恢复刚刚被我们移除的文字：</p>
<p>&gt;&gt; 按 C-y。然后把光标往下移动几行，再按一次 C-y。<br>&nbsp;&nbsp; 现在你应该知道怎么复制文字了。</p>
<p>C-y 可以召回最近一次移除的内容，那如何召回前几次移除的内容呢？它们当然<br>没有丢，你可以用 M-y 来召回它们。在用 C-y 召回最近移除的文字之后，紧接<br>着再按 M-y 就可以召回再前一次被移除的内容，再按一次 M-y 又可以召回再上<br>一次的&#8230;&#8230;连续使用 M-y 直到找到你想要召回的东西，然后什么也不用做，继续<br>编辑就行了。</p>
<p>如果连续按 M-y 很多次，你可能会回到起始点，也就是最近移除的文字。<br>【看得出这实际上是一个环。】</p>
<p>&gt;&gt; 移除一行，移动一下光标，然后再移除另外一行。<br>&nbsp;&nbsp; 按 C-y 将第二次移除的那行召回来。<br>&nbsp;&nbsp; 紧接着再按 M-y，它将会被第一次移除的那行取代。<br>&nbsp;&nbsp; 试着再按几下 M-y 看看会发生什么。<br>&nbsp;&nbsp; 再继续，直到第二行被召回来，然后再做个几次。<br>&nbsp;&nbsp; 如果感兴趣，你可以试着给 M-y 指定一个正的或负的参数。</p>
<p><br>* 撤销（UNDO）<br>--------------</p>
<p>如果你修改了一段文字，又觉得改得不好，可以用 undo 命令进行撤销：<br>C-x u。</p>
<p>通常 C-x u 会消除一个命令所造成的所有改变；如果你在一行中连续多次地使用<br>C-x u，你会把以前的命令也依次撤销。</p>
<p>但是有两个例外：<br>1） 没有改变文字的命令不算（包括光标移动命令和滚动命令）<br>2） 从键盘输入的字符以组为单位――每组 20 个字符――来进行处理。<br>&nbsp;&nbsp;&nbsp; （这是为了减少你在撤销&#8220;插入文字&#8221;动作时需要输入 C-x u 的次数）</p>
<p>&gt;&gt; 用 C-k 将这一行移除，然后输入 C-x u ，它会再次出现。</p>
<p>C-_ 也是撤销命令；它的作用跟 C-x u 一样，但是它比较容易多次输入。C-_ 的<br>缺点是在某些键盘上可能不太容易按，这也正是我们同时提供 C-x u 的原因。在<br>某些终端上，你可以按住 CONTROL 再按&#8220;/&#8221;来输入 C-_。</p>
<p>数字参数对于 C-_ 和 C-x u 的意义是执行撤销的重复次数。</p>
<p><br>* 文件（FILE）<br>--------------</p>
<p>想保存工作成果就要记得存盘，否则一旦退出 Emacs 你编辑的文字就会丢失。要<br>存盘，就要在编辑前&#8220;寻找&#8221;到一个存盘文件。（这个过程通常也被称为&#8220;访问&#8221;<br>文件。）</p>
<p>寻找到一个文件意味着你可以在 Emacs 里查看这个文件的内容。从许多角度看，<br>这就等于你在直接编辑这个文件，只是你所做的修改只有在&#8220;存盘&#8221;的时候才会<br>被写入文件。也正因为如此，你可以丢弃一个写到一半的文件而不必把这个残缺<br>文件也保存到计算机上。在存盘的时候，Emacs 会把存盘前的文件重命名保存，<br>以防你改完之后又想反悔。</p>
<p>在屏幕的下方，你应该能够看到头尾都是短线&#8220;-&#8221;的一行，行首通常是一些诸如<br>&#8220;--:-- TUTORIAL.cn&#8221;的文字，这些文字代表了你当前正在访问的文件。比如你<br>现在正在访问的文件叫&#8220;TUTORIAL.cn&#8221;，它只是一个给你临时使用的拷贝。每当<br>Emacs 寻找到一个文件，文件名就会出现在这个位置。</p>
<p>寻找文件的命令有一个特点，那就是你必须给出文件名。我们称这个命令&#8220;从终<br>端读入了一个参数&#8221;（在这里，这个参数显然就是文件名）。在你输入这条命令<br>之后：</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; C-x C-f&nbsp;&nbsp; 寻找一个文件</p>
<p>Emacs 会提示你输入文件名。你输入的文件名会出现在屏幕最底端的一行，这一<br>行被称为小缓冲（minibuffer），在小缓冲里你可以使用通常的 Emacs 编辑命令<br>来编辑文件名。</p>
<p>在小缓冲里输入文件名（其实输入其它东西也一样）时可以用 C-g 取消。</p>
<p>&gt;&gt; 输入 C-x C-f，然后输入 C-g<br>&nbsp;&nbsp; 这会关掉小缓冲，同时也会取消使用小缓冲的 C-x C-f 命令。<br>&nbsp;&nbsp; 当然了，你也没有找任何文件。</p>
<p>用 &lt;Return&gt; 结束文件名的输入。这之后 C-x C-f 命令开始工作并找到你指定的<br>文件。小缓冲在 C-x C-f 命令结束之后也会消失。</p>
<p>眨眼间文件就被显示在屏幕上，你可以开始编辑了。存盘用这条命令：</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; C-x C-s&nbsp;&nbsp; 储存这个文件</p>
<p>这条命令把 Emacs 中的文字存储到文件中。第一次存盘的时候 Emacs 会将原文<br>件重命名以备份。重命名的规则通常是在原文件名之后添加一个&#8220;~&#8221;字符。<br>【对许多人来说，这是一个烦人的特性，关掉文件备份可以用如下命令：<br>&nbsp; M-x customize-variable &lt;Return&gt; make-backup-files &lt;Return&gt;】</p>
<p>存盘结束后，Emacs 会显示写入文件的文件名。你最好养成经常存盘的习惯，这<br>可以减少系统崩溃和死机给你带来的损失。</p>
<p>&gt;&gt; 输入 C-x C-s 把本快速指南存下来。<br>&nbsp;&nbsp; 你会在屏幕的下方看到一条消息：&#8220;Wrote ...TUTORIAL.cn&#8221;。</p>
<p>注意：在某些终端下，输入 C-x C-s 会冻结屏幕【屏幕没有任何输出】，使你看<br>不到 Emacs 的任何变化。其原因是操作系统的&#8220;流量控制&#8221;功能拦截了 C-s 并<br>冻结了屏幕。用 C-q 可以解除屏幕冻结。要解决这个问题，请参考 Emacs 手册<br>里的&#8220;Spontaneous Entry to Incremental Search&#8221;一节【Emacs 手册可能还没<br>有中文翻译】，那里提供了一些有用的建议。</p>
<p>你不但可以寻找一个已有的文件来查看或编辑，还可以寻找一个不存在的文件。<br>实际上这正是 Emacs 创建新文件的方法：找到不存在的新文件。只有在存盘的时<br>候，Emacs 才会真正创建这个文件。而在这之后的一切就跟编辑一个已有文件没<br>有区别了。</p>
<p><br>* 缓冲区（BUFFER）<br>------------------</p>
<p>你可以用 C-x C-f 找到并打开第二个文件，但第一个文件仍然在 Emacs 中。要<br>切回第一个文件，一种办法是再用一次 C-x C-f。这样，你就可以在 Emacs 中同<br>时打开多个文件。</p>
<p>&gt;&gt; 用 C-x C-f foo &lt;Return&gt; 的方式建立一个名为&#8220;foo&#8221;的文件。<br>&nbsp;&nbsp; 输入一些文字，再用 C-x C-s 保存文件&#8220;foo&#8221;。<br>&nbsp;&nbsp; 最后，输入 C-x C-f TUTORIAL.cn &lt;Return&gt; 回到这里。</p>
<p>Emacs 把每个编辑中的文件都放在一个称为&#8220;缓冲区（buffer）&#8221;的地方。每寻<br>找到一个文件，Emacs 就在其内部开辟一个缓冲区。用下面的命令可以列出当前<br>所有的缓冲区：</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; C-x C-b&nbsp;&nbsp; 列出缓冲区</p>
<p>&gt;&gt; 现在就试一下 C-x C-b</p>
<p>观察一下缓冲区是如何被命名的，它很可能跟与其对应的文件同名。实际上，一<br>个 Emacs 窗格里的任何文字都是某个缓冲区的一部分。</p>
<p>&gt;&gt; 输入 C-x 1 离开缓冲区列表</p>
<p>不管存在多少缓冲区，任何时候都只能有一个&#8220;当前&#8221;缓冲区，也就是你正在编<br>辑的这个。如果你想编辑其它的缓冲区，就必须&#8220;切换&#8221;过去。上面讲过，用<br>C-x C-f 是一种办法。不过还有一个更简单的办法，那就是用 C-x b。用这条命<br>令，你必须输入缓冲区的名称。</p>
<p>&gt;&gt; 输入 C-x b foo &lt;Return&gt; 以回到文件&#8220;foo&#8221;的缓冲区。<br>&nbsp;&nbsp; 然后输入 C-x b TUTORIAL.cn &lt;Return&gt; 回到这里。</p>
<p>大多数情况下，缓冲区与跟其对应的文件是同名的（不包括目录名），不过这也<br>不是绝对的。用 C-x C-b 得到的缓冲区列表总是显示缓冲区名。</p>
<p>你在 Emacs 窗格里看到的&#8220;任何&#8221;文字都一定属于某个缓冲区。然而，缓冲区未<br>必有对应文件：比如显示缓冲区列表的缓冲区就是这样。再比如&#8220;*Messages*&#8221;<br>缓冲区也没有对应文件，这个缓冲区里存放的都是在 Emacs 底部出现的消息。</p>
<p>&gt;&gt; 输入 C-x b *Messages* &lt;Return&gt; 瞅瞅消息缓冲区里都有什么东西。<br>&nbsp;&nbsp; 然后再输入 C-x b TUTORIAL.cn &lt;Return&gt; 回到这里。</p>
<p>如果你对某个文件做了些修改，然后切换到另一个文件，这个动作并不会帮你把<br>前一个文件存盘。对第一个文件的修改仍然仅存在于 Emacs 中，也就是在它对应<br>的缓冲区里。并且，对第二个文件的修改也不会影响到第一个文件。这很有用，<br>但是也挺麻烦：因为如果你想要存储第一个文件，还需要先 C-x C-f 切换回去再<br>用 C-x C-s 存盘。你需要一个更简便的方法，而 Emacs 已经为你准备好了：</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; C-x s&nbsp;&nbsp; 保存多个缓冲区</p>
<p>C-x s 会找出所有已被修改但尚未存盘的缓冲区，然后向你逐个询问：是否需要<br>存盘？</p>
<p>&gt;&gt; 插入一行文字，然后输入 C-x s。<br>&nbsp;&nbsp; 它应该会问你，是否要储存名为 TUTORIAL.cn 的缓冲区？<br>&nbsp;&nbsp; 按&#8220;y&#8221;告诉它你想存盘。</p>
<p><br>* 命令集扩展（EXTENDING THE COMMAND SET）<br>-----------------------------------------</p>
<p>Emacs 的命令就像天上的星星，数也数不清。把它们都对应到 CONTROL 和 META<br>组合键上显然是不可能的。Emacs 用扩展（eXtend）命令来解决这个问题，扩展<br>命令有两种风格：</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; C-x&nbsp;&nbsp;&nbsp;&nbsp; 字符扩展。&nbsp; C-x 之后输入另一个字符或者组合键。<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; M-x&nbsp;&nbsp;&nbsp;&nbsp; 命令名扩展。M-x 之后输入一个命令名。</p>
<p>很多扩展命令都相当有用，虽然与你已经学过的命令比起来，他们可能不那么常<br>用。我们早已经见过一些扩展命令了，比如用 C-x C-f 寻找文件和用 C-x C-s<br>保存文件；退出 Emacs 用的 C-x C-c 也是扩展命令。（不用担心退出 Emacs 会<br>给你带来什么损失，Emacs 会在退出之前提醒你存盘的）</p>
<p>在控制台下，C-z 可以暂时离开 Emacs――当然，你还可以再回来。</p>
<p>在允许 C-z 的系统中，C-z 会把 Emacs&#8220;挂起&#8221;，也就是说，它会回到 shell<br>但不退出 Emacs。在常用的 shell 中，通常可以用&#8220;fg&#8221;或者&#8220;%emacs&#8221;命令再<br>次回到 Emacs 中。</p>
<p>在没有提供挂起功能的系统中，C-z 会在 Emacs 之下创建一个子 shell 来让你<br>运行其它程序，并且再次&#8220;回到&#8221;Emacs 中――虽然我们并没有真正离开过。这<br>种情况下，通常用 shell 命令&#8220;exit&#8221;从子 shell 回到 Emacs。</p>
<p>你最好在打算退出登陆的时候再用 C-x C-c。在 Emacs 被诸如邮件处理程序之类<br>的外部程序调用之后，也可以用 C-x C-c 退出。不过一般来讲，如果你不想退出<br>登录，最好还是把 Emacs 挂起而不是退出。</p>
<p>C-x 的扩展命令有很多，下面列出的是你已经学过的：</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; C-x C-f&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 寻找文件。<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; C-x C-s&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 保存文件。<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; C-x C-b&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 列出缓冲区。<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; C-x C-c&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 离开 Emacs。<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; C-x 1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 关掉其它所有窗格，只保留一个。<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; C-x u&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 撤销。</p>
<p>用命令名扩展的命令通常并不常用，或只用在部分模式下。比如 replace-string<br>（字符串替换）这个命令，它会在全文范围内把一个字符串替换成另一个。在输<br>入 M-x 之后，Emacs 会在屏幕底端向你询问并等待你输入命令名。如果你想输入<br>&#8220;replace-string&#8221;，其实只需要敲&#8220;repl s&lt;TAB&gt;&#8221;就行了，Emacs 会帮你自动<br>补齐。输入完之后按 &lt;Return&gt; 。</p>
<p>字符串替换命令需要两个参数――被替换的字符串和用来替换它的字符串。每个<br>参数的输入都以换行符来结束。</p>
<p>&gt;&gt; 将光标移到本行下面第二行的空白处，然后输入<br>&nbsp;&nbsp; M-x repl s&lt;Return&gt;changed&lt;Return&gt;altered&lt;Return&gt;。</p>
<p>&nbsp;&nbsp; 【以下保留一行原文，以应练习之需：】<br>&nbsp;&nbsp; Notice how this line has changed: you've replaced... </p>
<p>请注意这一行的变化：在光标之后的范围内，你已经将&#8220;changed&#8221;这个词――不<br>论它在哪里出现――全部用&#8220;altered&#8221;替换掉了。</p>
<p><br>* 自动保存（AUTO SAVE）<br>-----------------------</p>
<p>如果你已经修改了一个文件，但是还没来得及存盘你的计算机就罢工了，那么你<br>所做的修改就很可能会丢失。为了避免这样的不幸发生，Emacs 会定期将正在编<br>辑的文件写入一个&#8220;自动保存&#8221;文件中。自动保存文件的文件名的头尾各有一个<br>&#8220;#&#8221;字符，比如你正在编辑的文件叫&#8220;hello.c&#8221;，那么它的自动保存文件就叫<br>&#8220;#hello.c#&#8221;。这个文件会在正常存盘之后被 Emacs 删除。</p>
<p>所以，假如不幸真的发生了，你大可以从容地打开原来的文件（注意不是自动保<br>存文件）然后输入 M-x recover file&lt;Return&gt; 来恢复你的自动保存文件。在提<br>示确认的时候，输入 yes&lt;Return&gt;。</p>
<p><br>* 回显区（ECHO AREA）<br>---------------------</p>
<p>如果 Emacs 发现你输入多字符命令的节奏很慢，它会在窗格的下方称为&#8220;回显区&#8221;<br>的地方给你提示。回显区位于屏幕的最下面一行。</p>
<p><br>* 状态栏（MODE LINE）<br>---------------------</p>
<p>位于回显区正上方的一行被称为&#8220;状态栏&#8221;。状态栏上会显示一些信息，比如：</p>
<p>--:**&nbsp; TUTORIAL.cn&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (Fundamental)--L670--54%----------------</p>
<p>状态栏显示了 Emacs 的状态和你正在编辑的文字的一些信息。</p>
<p>你应该知道文件名的意思吧？就是你找到的那个文件嘛。-NN%-- 显示的是光标在<br>全文中的位置。如果位于文件的开头，那么就显示 --Top-- 而不是 --00%--；如<br>果位于文件的末尾，就显示 --Bot--。如果文件很小，一屏就足以显示全部内容，<br>那么状态栏会显示 --All--。</p>
<p>&#8220;L&#8221; 和其后的数字给出了光标所在行的行号。</p>
<p>最开头的星号（*）表示你已经对文字做过改动。刚刚打开的文件肯定没有被改动<br>过，所以状态栏上显示的不是星号而是短线（-）。</p>
<p>状态栏上小括号里的内容告诉你当前正在使用的编辑模式。缺省的模式是<br>Fundamental，就是你现在正在使用的这个。它是一种&#8220;主模式&#8221;。</p>
<p>Emacs 的主模式林林总总。有用来编辑程序代码的――比如 Lisp 模式；也有用<br>来编辑各种自然语言文本的――比如 Text 模式。任何情况下只能应用一个主模<br>式，其名称会显示在状态栏上，也就是现在显示&#8220;Fundamental&#8221;的地方。</p>
<p>主模式通常会改变一些命令的行为。比方说，不管编辑什么语言的程序代码，你<br>都可以用一个相同的命令来添加注释。但是在不同的语言中注释的语法往往是不<br>同的，这时不同的主模式就会用各自不同的语法规则来添加注释。主模式都是可<br>以用 M-x 启动的扩展命令，M-x fundamental-mode 就可以切换到 Fundamental<br>模式。</p>
<p>编辑自然语言文本――比如现在――应该用 Text 模式。</p>
<p>&gt;&gt; 输入 M-x text mode&lt;Return&gt;。</p>
<p>别担心，什么都没变。不过细心一些可以发现，M-f 和 M-b 现在把单引号（'）<br>视为词的一部分了。而在先前的 Fundamental 模式中，M-f 和 M-b 都将单引号<br>视为分隔单词的符号。</p>
<p>主模式通常都会搞一些类似的小动作，因为很多命令其实完成的是&#8220;相同的工<br>作&#8221;，只是在不同环境下会有不同的工作方式而已。【所谓&#8220;求同存异&#8221;，在<br>Emacs 里得到了很好的体现】</p>
<p>用 C-h m 可以查看当前主模式的文档。</p>
<p>&gt;&gt; 用 C-u C-v 将本行带到屏幕的最上方。<br>&gt;&gt; 输入 C-h m，看看 Text 模式与 Fundamental 模式有哪些不同。<br>&gt;&gt; 输入 C-x 1 关掉文档窗格。</p>
<p>主模式之所以称之为&#8220;主（major）&#8221;模式，是因为同时还有&#8220;辅模式&#8221;（minor<br>mode）存在。辅模式并不能替代主模式，而是提供一些辅助的功能。每个辅模式<br>都可以独立地开启和关闭，跟其它辅模式无关，跟主模式也无关。所以你可以不<br>使用辅模式，也可以只使用一个或同时使用多个辅模式。</p>
<p>有一个叫做自动折行（Auto Fill）的辅模式很有用，特别是在编辑自然语言文本<br>的时候。启用自动折行后，Emacs 会在你打字超出一行边界时自动替你换行。</p>
<p>用 M-x auto fill mode&lt;Return&gt; 启动自动折行模式。再用一次这条命令，自动<br>折行模式会被关闭。也就是说，如果自动折行模式没有被开启，这个命令会开启<br>它；如果已经开启了，这个命令会关闭它。所以我们说，这个命令可以用来&#8220;开<br>关（toggle）&#8221;模式。</p>
<p>&gt;&gt; 现在输入 M-x auto fill mode&lt;Return&gt;。然后随便敲点什么，直到你看到它<br>&nbsp;&nbsp; 分成两行。你必须敲一些空格，因为 Auto Fill 只在空白处进行断行。<br>&nbsp;&nbsp; 【输入空格对英文来说是必须的，而对中文则不必。】</p>
<p>行边界通常被设定为 70 个字符【这里指英文字符】，你可以用 C-x f 命令配合<br>数字参数来重新设定它。</p>
<p>&gt;&gt; 输入 C-x f 并传递参数 20： C-u 2 0 C-x f。<br>&nbsp;&nbsp; 然后输入一些文字，观察 Emacs 的自动折行动作<br>&nbsp;&nbsp; 最后再用 C-x f 将边界设回 70。</p>
<p>如果你在段落的中间做了一些修改，那么自动折行模式不会替你把整个段落重新<br>折行，你需要用 M-q 手动折行。注意，光标必须位于你需要折行的那一段里。</p>
<p>&gt;&gt; 移动光标到前一段中，然后输入 M-q。</p>
<p><br>* 搜索（SEARCHING）<br>-------------------</p>
<p>Emacs 可以向前或向后搜索字符串。搜索命令是一个移动光标的命令：搜索成功<br>后，光标会停留在搜索目标出现的地方。</p>
<p>Emacs 的搜索命令的独特之处在于，它是&#8220;渐进的（incremental）&#8221;。意思是搜<br>索与输入同时进行：你在键盘上一字一句地输入搜索词的过程中，Emacs 就已经<br>开始替你搜索了。</p>
<p>C-s 是向前搜索，C-r 是向后搜索。不过手别这么快！别着急试。</p>
<p>在按下 C-s 之后，回显区里会有&#8220;I-search&#8221;字样出现，表明目前 Emacs 正处<br>于&#8220;渐进搜索&#8221;状态，并等待你输入搜索字串。按 &lt;Return&gt; 可以结束搜索。</p>
<p>&gt;&gt; 输入 C-s 开始一个搜索。注意敲慢一点，一次输入一个字符。<br>&nbsp;&nbsp; 慢慢输入&#8220;cursor&#8221;这个词，每敲一个字都停顿一下并观察光标。<br>&nbsp;&nbsp; 现在你应该已曾经找到&#8220;cursor&#8221;这个词了。<br>&gt;&gt; 再按一次 C-s，搜索下一个&#8220;cursor&#8221;出现的位置。<br>&gt;&gt; 现在按四次退格键，看看光标是如何移动的。<br>&gt;&gt; 敲 &lt;Return&gt; 结束搜索。</p>
<p>看仔细了么？在一次渐进式搜索中，Emacs 会尝试跳到搜索目标出现的位置。要<br>跳到下一个命中位置，就再按一次 C-s。如果找不到目标，Emacs 会发出&#8220;哔&#8221;<br>的一声，告诉你搜索失败。在整个过程中，都可以用 C-g 来终止搜索。【你会发<br>现 C-g 会让光标回到搜索开始的位置，而 &lt;Return&gt; 则让光标留在搜索结果上，<br>这是很有用的功能。】</p>
<p>注意：在某些终端下，输入 C-x C-s 会冻结屏幕【屏幕没有任何输出】，使你看<br>不到 Emacs 的任何变化。其原因是操作系统的&#8220;流量控制&#8221;功能拦截了 C-s 并<br>冻结了屏幕。用 C-q 可以解除屏幕冻结。要解决这个问题，请参考 Emacs 手册<br>里的&#8220;Spontaneous Entry to Incremental Search&#8221;一节【Emacs 手册可能还没<br>有中文翻译】，那里提供了一些有用的建议。</p>
<p>在渐进式搜索中，按退格键会删除目标字符串的最后一个字符，并且光标会回到<br>最近一次搜索的命中位置。比如你已经输入了&#8220;c&#8221;，光标就停在&#8220;c&#8221;第一次出<br>现的位置，再输入&#8220;u&#8221;，光标停在&#8220;cu&#8221;第一次出现的位置，这时再按退格键，<br>&#8220;u&#8221;就从搜索字串中消失了，然后光标会回到&#8220;c&#8221;第一次出现的位置。</p>
<p>另外，如果你在搜索的时候输入了 CONTROL 或者 META 组合键的话，搜索可能会<br>结束。（也有例外，比如 C-s 和 M-r 这些用于搜索的命令。）</p>
<p>前面说的都是&#8220;向下&#8221;搜索，如果想&#8220;向上&#8221;搜索，可以用 C-r。C-r 与 C-s<br>相比除了搜索方向相反之外，其余的操作都一样。</p>
<p><br>* 多窗格（MULTIPLE WINDOWS）<br>----------------------------</p>
<p>Emacs 的迷人之处很多，能够在屏幕上同时显示多个窗格就是其中之一。</p>
<p>&gt;&gt; 移动光标到这一行，然后输入 C-u 0 C-l。</p>
<p>&gt;&gt; 现在输入 C-x 2，它会将屏幕划分成两个窗格。<br>&nbsp;&nbsp; 这两个窗格里显示的都是本篇快速指南，而光标则停留在上方的窗格里。</p>
<p>&gt;&gt; 试试用 C-M-v 滚动下方的窗格。<br>&nbsp;&nbsp; （如果你并没有 META 键，用 ESC C-v 也可以。）<br>&nbsp;&nbsp; 【向上滚动是 C-M-S-v，也就是同时按住 CONTROL、META 和 SHIFT 再按 v】</p>
<p>&gt;&gt; 输入 C-x o（&#8220;o&#8221;指的是&#8220;其它（other）&#8221;），<br>&nbsp;&nbsp; 将光标转移到下方的窗格。</p>
<p>&gt;&gt; 在下方的窗格中，用 C-v 和 M-v 来滚动。<br>&nbsp;&nbsp; 同时继续在上方的窗格里阅读这些指导。</p>
<p>&gt;&gt; 再输入 C-x o 将光标移回到上方的窗格里。<br>&nbsp;&nbsp; 光标会回到它在上方窗格中原本所在的位置。</p>
<p>连续使用 C-x o 可以遍历所有窗格。每一个窗格都有它自己的光标位置，但是只<br>有一个窗格会真正显示这个光标。【其它窗格在控制台下不会显示光标，在图形<br>窗口下缺省显示为镂空光标。】一般所有的编辑命令都作用于这个光标所在的窗<br>格，我们称这个窗格为&#8220;被选中的窗格&#8221;。</p>
<p>当你在一个窗格中编辑，但用另一个窗格作为参考的时候，C-M-v 是很有用的命<br>令。你可以始终处于编辑窗格中，然后用 C-M-v 命令滚动另外一个窗格。【比如<br>翻译和校对就很适合用这种方式进行。】</p>
<p>C-M-v 是一个 CONTROL-META 组合键。如果你有 META 键的话，可以同时按住<br>CONTROL 和 META 键并输入 v。CONTROL 和 META 键先按哪个都可以，因为它们<br>只是用来&#8220;修饰（modify）&#8221;你输入的字符的。</p>
<p>如果你并没有 META 键，你也可以用 ESC 来代替，不过这样的话就要注意按键顺<br>序了：你必须先输入 ESC ，然后再输入 CONTROL-v。CONTROL-ESC v 是没用的，<br>因为 ESC 本身是一个字符键，而不是一个修饰键（modifier key）。</p>
<p>&gt;&gt; （在上方窗格里）输入 C-x 1 关掉下方窗格。</p>
<p>（如果你在下方的窗格里输入 C-x 1，那么就会关掉上方的窗格。你可以把这个<br>命令看成是&#8220;只保留一个窗格&#8221;――就是我们正在编辑的这个。）</p>
<p>不同的窗格可以显示不同的缓冲区。如果你在一个窗格里用 C-x C-f 打开了一个<br>文件，另一个窗格并不会发生什么变化。任何一个窗格里都可以用来打开文件。</p>
<p>用下面的方法可以在一个新开窗格里打开文件：</p>
<p>&gt;&gt; 输入 C-x 4 C-f，紧跟着输入一个文件名，再用 &lt;Return&gt; 结束。<br>&nbsp;&nbsp; 可以看到你指定的文件出现在下方的窗格中，同时光标也跳到了那里。</p>
<p>&gt;&gt; 输入 C-x o 回到上方的窗格，然后再用 C-x 1 关掉下方窗格。</p>
<p><br>* 递归编辑（RECURSIVE EDITING LEVELS）<br>--------------------------------------</p>
<p>有时候你会进入所谓的&#8220;递归编辑&#8221;。递归编辑状态由位于状态栏的方括号所指<br>示，其中包含了用小括号来指明的模式名称。比如说，你有时可能会看到<br>[(Fundamental)]，而不是 (Fundamental)。【比如在用 M-% 进行交互式替换的<br>时候你又用了 C-s 进行搜索，这时替换模式并没有结束，但你又进入了搜索模式，<br>这就是所谓的递归编辑。】</p>
<p>离开递归编辑可以用 ESC ESC ESC。这是一个最通用的&#8220;离开&#8221;命令，你甚至可<br>以使用它来关掉多余的窗格，或者离开小缓冲。</p>
<p>&gt;&gt; 输入 M-x 进入小缓冲；然后输入 ESC ESC ESC 离开。</p>
<p>你不能用 C-g 退出递归编辑，因为 C-g 的作用是取消&#8220;本层递归编辑之内&#8221;的<br>命令和其参数（arguments）。</p>
<p><br>* 获得更多帮助（GETTING MORE HELP）<br>-----------------------------------</p>
<p>本快速指南的目的仅仅是帮助你在 Emacs 的海洋里下水，不至于束手无策望洋兴<br>叹。有关 Emacs 的话题可谓汗牛充栋，这里自然是难尽万一。不过 Emacs 很理<br>解你求知若渴的心情，因为它提供的强大功能实在是太多了。为此，Emacs 提供<br>了一些命令来查看 Emacs 的命令文档，这些命令都以 CONTROL-h 开头，这个字<br>符也因此被称为&#8220;帮助（Help）字符&#8221;。</p>
<p>要使用帮助（Help）功能，请先输入 C-h，然后再输入一个字符以说明你需要什<br>么帮助。如果你连自己到底需要什么帮助都不知道，那么就输入 C-h ?，Emacs<br>会告诉你它能提供了哪些帮助。如果你按了 C-h 又想反悔，可以用 C-g 取消。</p>
<p>（有些主机改变了 C-h 的意义，这种以己度人外加一刀切的做法确实不太好，不<br>过倒是让你可以义正辞严地抱怨他们的系统管理员。话说回来，如果你按 C-h 之<br>后没有任何帮助信息显示出来，那么试试 F1 键或者 M-x help &lt;Return&gt; 。）</p>
<p>最基本的帮助功能是 C-h c。输入 C-h c 之后再输入一个组合键，Emacs 会给出<br>这个命令的简要说明。</p>
<p>&gt;&gt; 输入 C-h c C-p。</p>
<p>显示的消息应该会是这样：</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; C-p runs the command previous-line</p>
<p>这条消息显示了 C-p 命令对应的函数名，函数名主要用来定制和扩展 Emacs。命<br>令的功能由函数完成，所以函数名本身也可以被看成是最简单的文档――至少对<br>于你已经学过的命令来说，它们的函数名足以解释它们的功能了。</p>
<p>多字符命令一样可以用 C-h c 来查看。</p>
<p>想得到更多的信息，请把 C-h c 换成 C-h k 试试看。</p>
<p>&gt;&gt; 输入 C-h k C-p。</p>
<p>上面的命令会新打开一个 Emacs 窗格以显示函数的名称及其文档。你读完之后可<br>以用 C-x 1 关掉这个帮助窗格。当然你并不需要立即这样做，你完全可以先在编<br>辑窗格里做点别的事情，然后再关掉帮助窗格。</p>
<p>还有一些其它有用的 C-h 命令：</p>
<p>&nbsp;&nbsp; C-h f&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 解释一个函数。需要输入函数名。</p>
<p>&gt;&gt; 试试看，输入 C-h f previous-line&lt;Return&gt;。<br>&nbsp;&nbsp; Emacs 会给出它所知道的所有有关&#8220;实现 C-p 命令功能的函数&#8221;的信息。</p>
<p>C-h v 用来显示 Emacs 变量的文档。Emacs 变量可以被用来&#8220;定制 Emacs 的行<br>为&#8221;。同样，你需要输入变量的名称。</p>
<p>&nbsp;&nbsp; C-h a&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 相关命令搜索（Command Apropos）。<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 输入一个关键词然后 Emacs 会列出所有命令名中包含此关键词<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 的命令。这些命令全都可以用 M-x 来启动。对于某些命令来说，<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 相关命令搜索还会列出一两个组合键。</p>
<p>&gt;&gt; 输入 C-h a file&lt;Return&gt;。</p>
<p>Emacs 会在另一个窗格里显示一个 M-x 命令列表，这个列表包含了所有名称中含<br>有&#8220;file&#8221;的命令。你可以看到像&#8220;C-x C-f&#8221;这样的组合键显示在&#8220;find-file&#8221;<br>这样的命令名的旁边。</p>
<p>&gt;&gt; 用 C-M-v 来回滚动 help 窗格，多试几次。</p>
<p>&gt;&gt; 输入 C-x 1 来删除 help 窗格。</p>
<p>&nbsp;&nbsp; C-h i&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 阅读联机手册（也就是通常讲的 Info）。<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 这个命令会打开一个称为&#8220;*info*&#8221;的特殊缓冲区，在那里，<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 你可以阅读安装在系统里的软件包使用手册。要读 Emacs 的使<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 用手册，按 m emacs &lt;Return&gt; 就可以了。如果你之前从没用<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 过 Info 系统，那么请按&#8220;?&#8221;，Emacs 会带你进入 Info 的使<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 用指南。在看完本快速指南之后，Emacs Info 会成为你的主要<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 参考文档。</p>
<p><br>* 更多精彩（MORE FEATURES）<br>---------------------------</p>
<p>想学习更多的使用技巧，Emacs 使用手册（manual）值得一读。你可以读纸版的<br>书，也可以看电子版的联机手册（可以从 Help 菜单进入或者按 F10 h r）。提<br>两个你可能会很感兴趣的功能吧，一个是可以帮你少敲键盘的 completion（自动<br>补全），另一个是方便文件处理的 dired（目录编辑）。</p>
<p>Completion 可以替你节省不必要的键盘输入。比如说你想切换到 *Message* 缓<br>冲区，你就可以用 C-x b *M&lt;Tab&gt; 来完成。只要 Emacs 能够根据你已经输入的<br>文字确定你想要输入的内容，它就会自动帮你补齐。有关 Completion 的详细说<br>明可以在 Emacs Info 中的&#8220;Completion&#8221;一节里找到。</p>
<p>Dired 能够在一个缓冲区里列出一个目录下的所有文件（可以选择是否也列出子<br>目录），然后你可以在这个文件列表上完成对文件的移动、访问、重命名或删除<br>等等操作。Dired 也在 Emacs Info 中有详细介绍，参见&#8220;Dired&#8221;一节。</p>
<p>Emacs 使用手册里还有许许多多的精彩功能等着你来了解。</p>
<p><br>* 总结（CONCLUSION）<br>--------------------</p>
<p>记住，要退出 Emacs 请用 C-x C-c。要暂时切换到 shell 并且稍后再回到<br>Emacs 里来，请用 C-z。【切换到 shell 仅对控制台下的 Emacs 有效】</p>
<p>本文完全是为零起点新手所写的起步教程。如果你觉得哪里还看不明白，千万不<br>要怀疑自己，那一定是我们没有写好。我们永远欢迎你的不满和抱怨。</p>
<p><br>* 翻译（TRANSLATION）<br>---------------------</p>
<p>翻译：孙一江 &lt;<a href="&#109;&#97;&#105;&#108;&#116;&#111;&#58;&#115;&#117;&#110;&#121;&#105;&#106;&#105;&#97;&#110;&#103;&#64;&#103;&#109;&#97;&#105;&#108;&#46;&#99;&#111;&#109;">sunyijiang@gmail.com</a>&gt;<br>校对：水木社区（<a href="http://www.newsmth.net/">www.newsmth.net</a>）Emacs 板众多网友及众多 Emacs 中文用户</p>
<p>Emacs 快速指南（Tutorial）早有两个刘昭宏的中文译本，繁简各一。其简体版本<br>（TUTORIAL.cn）基本由繁体版本（TUTORIAL.zh）经词语替换而得。然而繁简中文<br>不仅在用词习惯上有所不同，更有诸多表达方式与句法方面的差异，因此一直以来<br>用户使用 TUTORIAL.cn 都会略觉生硬和晦涩。这次重新翻译 TUTORIAL.cn 的动机<br>正是源于这种体验，希望我们的工作能够让本文更好地发挥其作用。TUTORIAL.zh<br>的译文质量很高，在翻译过程中给予过我们许多借鉴和参考，在此对刘昭宏的工作<br>表示感谢。</p>
<p>翻译过程中最大的挑战莫过于术语译词的选择了。经过水木社区 Emacs 板热心网<br>友小范围内的讨论，我们选择了现在的译法。用户的广泛参与是自由软件生命力<br>的源泉，所以如果你有任何建议、勘误或想法，请用你喜欢的方式向我们提出。<br>你可以通过电子邮件直接联系译者，也可以放到 GNU Emacs 的开发邮件列表或者<br>水木社区的 Emacs 板上进行讨论。</p>
<p>下面列出主要术语的译词对照，并给出注释说明：</p>
<p>&nbsp;&nbsp;&nbsp; command&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 命令<br>&nbsp;&nbsp;&nbsp; cursor&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 光标<br>&nbsp;&nbsp;&nbsp; scrolling&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 滚动<br>&nbsp;&nbsp;&nbsp; numeric argument&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 数字参数<br>&nbsp;&nbsp;&nbsp; window&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 窗格 [1]<br>&nbsp;&nbsp;&nbsp; insert&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 插入<br>&nbsp;&nbsp;&nbsp; delete&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 删除 [2]<br>&nbsp;&nbsp;&nbsp; kill&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 移除 [2]<br>&nbsp;&nbsp;&nbsp; yank&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 召回 [2]<br>&nbsp;&nbsp;&nbsp; undo&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 撤销<br>&nbsp;&nbsp;&nbsp; file&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 文件<br>&nbsp;&nbsp;&nbsp; buffer&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 缓冲区<br>&nbsp;&nbsp;&nbsp; minibuffer&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 小缓冲<br>&nbsp;&nbsp;&nbsp; echo area&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 回显区<br>&nbsp;&nbsp;&nbsp; mode line&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 状态栏<br>&nbsp;&nbsp;&nbsp; search&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 搜索<br>&nbsp;&nbsp;&nbsp; incremental search&nbsp;&nbsp;&nbsp; 渐进式搜索 [3]</p>
<p>[1] &#8220;window&#8221;一词在计算机相关的领域一般都被译为&#8220;窗口&#8221;。但是在 Emacs<br>&nbsp;&nbsp;&nbsp; 中，还有一个&#8220;frame&#8221;的概念。在被广泛使用的 X 窗口系统和微软的视窗<br>&nbsp;&nbsp;&nbsp; （Windows）系列操作系统中，Emacs 的一个&#8220;frame&#8221;就是一个&#8220;窗口&#8221;，因<br>&nbsp;&nbsp;&nbsp; 此把 Emacs 中的&#8220;frame&#8221;译成&#8220;窗口&#8221;更加符合通常的习惯。这样，Emacs<br>&nbsp;&nbsp;&nbsp; 中的&#8220;window&#8221;就只能译成&#8220;窗格&#8221;了。我们认为 Emacs 中 window 和<br>&nbsp;&nbsp;&nbsp; frame 的关系用窗格和窗口来类比是十分形象的。</p>
<p>&nbsp;&nbsp;&nbsp; 《学习GNU Emacs》（第二版）一书对&#8220;window&#8221;和&#8220;frame&#8221;的翻译与本教程<br>&nbsp;&nbsp;&nbsp; 刚好相反（分别译作&#8220;窗口&#8221;和&#8220;窗格&#8221;）。在此特别注明，以消除可能产生<br>&nbsp;&nbsp;&nbsp; 的疑惑。（感谢李旭章 &lt;<a href="&#109;&#97;&#105;&#108;&#116;&#111;&#58;&#108;&#105;&#120;&#117;&#122;&#104;&#97;&#110;&#103;&#64;&#103;&#109;&#97;&#105;&#108;&#46;&#99;&#111;&#109;">lixuzhang@gmail.com</a>&gt; 指出）</p>
<p>[2] 对于&#8220;delete&#8221;和&#8220;kill&#8221;的区别，正文已经给出了详细的说明。&#8220;删除&#8221;和<br>&nbsp;&nbsp;&nbsp; &#8220;移除&#8221;相比较起来，前者更多地隐含着&#8220;破坏&#8221;和&#8220;不可恢复&#8221;的意思，而<br>&nbsp;&nbsp;&nbsp; 后者更多地隐含着&#8220;被转移&#8221;和&#8220;可恢复&#8221;的意思。因此分别选择它们作为上<br>&nbsp;&nbsp;&nbsp; 述两词的译词，希望能够体现出区别。&#8220;yank&#8221;在中文文档中鲜有对应译词出<br>&nbsp;&nbsp;&nbsp; 现，翻译的困难较大。究其本意是：&#8220;a strong sudden pull&#8221;（参见韦氏词<br>&nbsp;&nbsp;&nbsp; 典），即&#8220;猛然拉回&#8221;。在原文档中 yank 被引申为&#8220;将先前移除的东西再移<br>&nbsp;&nbsp;&nbsp; 回来&#8221;这个意思，所以我们选择了&#8220;召回&#8221;一词与其对应。</p>
<p>[3] &#8220;incremental&#8221;一词在计算机著作中广泛出现，被广泛接受的中文译词有两<br>&nbsp;&nbsp;&nbsp; 个：&#8220;增量的&#8221;和&#8220;渐进的&#8221;。&#8220;incremental search&#8221;翻译成&#8220;增量式搜索<br>&nbsp;&nbsp;&nbsp; &#8221;或者&#8220;渐进式搜索&#8221;都讲得通，且都有各自的形象之处。还是参考原文对其<br>&nbsp;&nbsp;&nbsp; 的解释：&#8220;... means that the search happens while you type in the<br>&nbsp;&nbsp;&nbsp; string to search for&#8221;。意思是之所以称其为&#8220;incremental search&#8221;，是<br>&nbsp;&nbsp;&nbsp; 因为&#8220;在你输入搜索字符串的过程中，搜索就已经在进行了&#8221;。我们认为&#8220;增<br>&nbsp;&nbsp;&nbsp; 量的&#8221;更加强调在现有基础上的变化（比如&#8220;增量备份&#8221;，&#8220;增量编译&#8221;）；<br>&nbsp;&nbsp;&nbsp; 而&#8220;渐进的&#8221;更加强调过程的逐渐发展，也更加符合原文的意思。因此我们选<br>&nbsp;&nbsp;&nbsp; 择将&#8220;incremental search&#8221;译作&#8220;渐进式搜索&#8221;。</p>
<p><br>* 版权声明（COPYING）<br>---------------------</p>
<p>This tutorial descends from a long line of Emacs tutorials<br>starting with the one written by Stuart Cracraft for the original Emacs.</p>
<p>This version of the tutorial, like GNU Emacs, is copyrighted, and<br>comes with permission to distribute copies on certain conditions:</p>
<p>Copyright (C) 1985, 1996, 1998, 2001, 2002, 2003, 2004,<br>&nbsp;&nbsp; 2005, 2006, 2007&nbsp; Free Software Foundation, Inc.</p>
<p>&nbsp;&nbsp; Permission is granted to anyone to make or distribute verbatim copies<br>&nbsp;&nbsp; of this document as received, in any medium, provided that the<br>&nbsp;&nbsp; copyright notice and permission notice are preserved,<br>&nbsp;&nbsp; and that the distributor grants the recipient permission<br>&nbsp;&nbsp; for further redistribution as permitted by this notice.</p>
<p>&nbsp;&nbsp; Permission is granted to distribute modified versions<br>&nbsp;&nbsp; of this document, or of portions of it,<br>&nbsp;&nbsp; under the above conditions, provided also that they<br>&nbsp;&nbsp; carry prominent notices stating who last altered them.</p>
<p>The conditions for copying Emacs itself are more complex, but in the<br>same spirit.&nbsp; Please read the file COPYING and then do give copies of<br>GNU Emacs to your friends.&nbsp; Help stamp out software obstructionism<br>("ownership") by using, writing, and sharing free software!</p>
<p>【下面为版权声明的译文，仅供参考。实际法律效力以英文原文为准。】</p>
<p>本快速指南沿袭自历史悠久的 Emacs 快速指南，可上溯至 Stuart Cracraft 为最<br>初的 Emacs 所作的版本。</p>
<p>本篇文档与 GNU Emacs 一样拥有版权，并允许在下列条件的约束下发行其拷贝：</p>
<p>&nbsp;&nbsp; Copyright (C) 1985, 1996, 1998, 2001, 2002, 2003, 2004, 2005, 2006,<br>&nbsp;&nbsp; 2007&nbsp; Free Software Foundation, Inc.</p>
<p>&nbsp;&nbsp; 本文档允许在不变更文档内容的情况下由任何人发布在任何媒体上，同时必须<br>&nbsp;&nbsp; 完整保留版权和许可声明，且需给予受众与发行者完全相同的、如本声明所允<br>&nbsp;&nbsp; 许的再次发行本文档的权利。</p>
<p>&nbsp;&nbsp; 本声明允许在与上述条件相同的情况下发布经过修改的全部或部分文档，同时<br>&nbsp;&nbsp; 必须附带显要的文字以申明文档的最后修改者。</p>
<p>Emacs 自身的版权问题虽比本文档要复杂一些，但也基于相同的精神。敬请阅读文<br>件&#8220;COPYING&#8221;，然后向你的朋友们分发 GNU Emacs 拷贝。让我们以使用、编写和<br>分享自由软件的实际行动来共同祛除软件障碍主义（所谓的&#8220;所有权&#8221;）！</p>
<img src ="http://www.cnitblog.com/houcy/aggbug/42640.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/houcy/" target="_blank">挑灯看剑</a> 2008-04-23 12:53 <a href="http://www.cnitblog.com/houcy/archive/2008/04/23/42640.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>编译安装emacs</title><link>http://www.cnitblog.com/houcy/archive/2008/01/13/38813.html</link><dc:creator>挑灯看剑</dc:creator><author>挑灯看剑</author><pubDate>Sun, 13 Jan 2008 10:06:00 GMT</pubDate><guid>http://www.cnitblog.com/houcy/archive/2008/01/13/38813.html</guid><wfw:comment>http://www.cnitblog.com/houcy/comments/38813.html</wfw:comment><comments>http://www.cnitblog.com/houcy/archive/2008/01/13/38813.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/houcy/comments/commentRss/38813.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/houcy/services/trackbacks/38813.html</trackback:ping><description><![CDATA[系统：Red Flag5.0<br>Emacs版本：22.0.50<br><br>先下载Emacs的稳定版本，据说Emacs-23.*.*不是太稳定，所以决定采用Emacs22，去ChinaUnix找到了安装包 emacs-22.0.50-20050225.tar.gz，点击这里进入下载页面。<br>接下来是解压安装，安装时应该切换到root用户下。<br><br>执行：<br>tar -zxvf emacs-22.0.50-20050225.tar.gz<br>cd emacs-22.0.50<br>./configure<br>make<br>make install<br>make clean<br><br>安装成功！！！<br>以后就可以学着用emacs呵呵<br>
<img src ="http://www.cnitblog.com/houcy/aggbug/38813.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/houcy/" target="_blank">挑灯看剑</a> 2008-01-13 18:06 <a href="http://www.cnitblog.com/houcy/archive/2008/01/13/38813.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>