°æÈ¨ © 2000, 2001, 2002, 2003, 2004, 2005, 2006 The FreeBSD Documentation Project
°æÈ¨ © 2005, 2006 FreeBSD ÖÐÎļƻ®
¡¡¡¡»¶ÓÄúÔĶÁ¡¶FreeBSD¿ª·¢Êֲᡷ¡£ Õâ±¾ÊֲỹÔÚ²»¶ÏÓÉÐí¶àÈ˼ÌÐøÊéд¡£ Ðí¶àÕ½ڻ¹Êǿհף¬ÓеÄÕÂ½ÚØ½´ý¸üС£ Èç¹ûÄú¶ÔÕâ¸öÏîÄ¿¸ÐÐËȤ²¢Ô¸ÒâÓÐËù¹±Ï×£¬Ç뷢Пø FreeBSD Îĵµ¼Æ»®ÓʼþÁÐ±í¡£
¡¡¡¡ ±¾ÎĵµµÄ×îÐÂÓ¢ÎÄÔʼ°æ±¾¿É´Ó FreeBSD Web Õ¾µã »ñµÃ£¬ ÓÉ FreeBSD ÖÐÎļƻ® ά»¤µÄ×îÐÂÒë±¾¿ÉÒÔÔÚ FreeBSD ÖÐÎļƻ® ¿ìÕÕ Web Õ¾µã ºÍ FreeBSD ÖÐÎļƻ® Îĵµ¿ìÕÕ ´¦»ñµÃ£¬ ÕâÒ»Òë±¾»á²»¶ÏÏòÖ÷վͬ²½¡£ ´ËÍ⣬ ÄúÒ²¿ÉÒÔ´Ó FreeBSD FTP ·þÎñÆ÷ »òÖÚ¶àµÄ ¾µÏñÕ¾µã µÃµ½Õâ·ÝÎĵµµÄ¸÷ÖÖÆäËû¸ñʽÒÔ¼°Ñ¹ËõÐÎʽµÄ°æ±¾¡£
ÖØÒª: ±¾ÎÄÖÐÐí¿ÉÖ¤µÄ·Ç¹Ù·½ÖÐÎÄ·Òë½ö¹©²Î¿¼£¬ ²»×÷ΪÅж¨ÈκÎÔðÈεÄÒÀ¾Ý¡£ÈçÓëÓ¢ÎÄÔÎÄÓгöÈ룬ÔòÒÔÓ¢ÎÄÔÎÄΪ׼¡£
ÔÚÂú×ãÏÂÁÐÐí¿ÉÌõ¼þµÄǰÌáÏ£¬ ÔÊÐíÔÙ·Ö·¢»òÒÔÔ´´úÂë (SGML DocBook) »ò ¡°±àÒ롱 (SGML, HTML, PDF, PostScript, RTF µÈ) µÄ¾¹ýÐ޸ĻòδÐ޸ĵÄÐÎʽ£º
ÔÙ·Ö·¢Ô´´úÂë (SGML DocBook) ±ØÐë²»¼ÓÐ޸ĵı£ÁôÉÏÊö°æÈ¨¸æÊ¾¡¢ ±¾Ìõ¼þÇåµ¥ºÍÏÂÊöÆúȨÊé×÷Ϊ¸ÃÎļþµÄ×îÏÈÈô¸ÉÐС£
ÔÙ·Ö·¢±àÒëµÄÐÎʽ (ת»»ÎªÆäËüDTD¡¢ PDF¡¢ PostScript¡¢ RTF »òÆäËüÐÎʽ)£¬ ±ØÐ뽫ÉÏÊö°æÈ¨¸æÊ¾¡¢±¾Ìõ¼þÇåµ¥ºÍÏÂÊöÆúȨÊ鏴֯µ½Óë·Ö·¢Æ·Ò»Í¬ÌṩµÄÎļþ£¬ ÒÔ¼°ÆäËü²ÄÁÏÖС£
ÖØÒª: ±¾ÎĵµÓÉ FREEBSD DOCUMENTATION PROJECT ¡°°´ÏÖ×´Ìõ¼þ¡± Ìṩ£¬ ²¢ÔÚ´ËÃ÷ʾ²»ÌṩÈκÎÃ÷ʾ»ò°µÊ¾µÄ±£ÕÏ£¬ °üÀ¨µ«²»ÏÞÓÚ¶ÔÉÌÒµÊÊÏúÐÔ¡¢ ¶ÔÌØ¶¨Ä¿µÄµÄÊÊÓÃÐԵݵʾ±£ÕÏ¡£ ÈκÎÇé¿öÏ£¬ FREEBSD DOCUMENTATION PROJECT ¾ù²»¶ÔÈκÎÖ±½Ó¡¢ ¼ä½Ó¡¢ żȻ¡¢ ÌØÊâ¡¢ ³Í·£ÐԵģ¬ »ò±ØÈ»µÄËðʧ (°üÀ¨µ«²»ÏÞÓÚÌæ´úÉÌÆ·»ò·þÎñµÄ²É¹º¡¢ ʹÓᢠÊý¾Ý»òÀûÒæµÄËðʧ»òÓªÒµÖжÏ) ¸ºÔ𣬠ÎÞÂÛÊÇÈçºÎµ¼ÖµIJ¢ÒÔÈκÎÓÐÔðÈÎÂß¼µÄ£¬ ÎÞÂÛÊÇ·ñÊÇÔÚ±¾ÎĵµÊ¹ÓÃÒÔÍâÒÔÈκη½Ê½²úÉúµÄÆõÔ¼¡¢ ÑϸñÔðÈλòÊÇÃñÊÂÇÖȨÐÐΪ(°üÀ¨Êèºö»òÆäËü)Öеģ¬ ¼´Ê¹Òѱ»¸æÖª·¢Éú¸ÃËðʧµÄ¿ÉÄÜÐÔ¡£
Redistribution and use in source (SGML DocBook) and 'compiled' forms (SGML, HTML, PDF, PostScript, RTF and so forth) with or without modification, are permitted provided that the following conditions are met:
Redistributions of source code (SGML DocBook) must retain the above copyright notice, this list of conditions and the following disclaimer as the first lines of this file unmodified.
Redistributions in compiled form (transformed to other DTDs, converted to PDF, PostScript, RTF and other formats) must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
ÖØÒª: THIS DOCUMENTATION IS PROVIDED BY THE FREEBSD DOCUMENTATION PROJECT "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FREEBSD DOCUMENTATION PROJECT BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS DOCUMENTATION, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
FreeBSD ÊÇ FreeBSD»ù½ð»áµÄ×¢²áÉ̱ê
Apple, AirPort, FireWire, Mac, Macintosh, Mac OS, Quicktime, ÒÔ¼° TrueType ÊÇ Apple Computer, Inc. ÔÚÃÀ¹úÒÔ¼°ÆäËû¹ú¼ÒµÄ×¢²áÉ̱ꡣ
IBM¡¢ AIX¡¢ EtherJet¡¢ Netfinity¡¢ OS/2¡¢ PowerPC¡¢ PS/2¡¢ S/390 ÒÔ¼° ThinkPad Êǹú¼ÊÉÌÓûúÆ÷¹«Ë¾ÔÚÃÀ¹úºÍÆäËû¹ú¼ÒµÄ×¢²áÉ̱ê»òÉ̱ꡣ
IEEE, POSIX, ºÍ 802 ÊÇ Institute of Electrical and Electronics Engineers, Inc. ÔÚÃÀ¹úµÄ×¢²áÉ̱ꡣ
Intel, Celeron, EtherExpress, i386, i486, Itanium, Pentium, ºÍ Xeon ÊÇ Intel Corporation ¼°Æä·ÖÖ§»ú¹¹ÔÚÃÀ¹úºÍÆäËû¹ú¼ÒµÄÉ̱ê»ò×¢²áÉ̱ꡣ
Linux ÊÇ Linus Torvalds µÄ×¢²áÉ̱ꡣ
Microsoft, IntelliMouse, MS-DOS, Outlook, Windows, Windows Media, ºÍ Windows NT ÊÇ Microsoft Corporation ÔÚÃÀ¹úºÍ/»òÆäËû¹ú¼ÒµÄÉ̱ê»ò×¢²áÉ̱ꡣ
Motif, OSF/1, ºÍ UNIX ÊÇ The Open Group ÔÚÃÀ¹úºÍÆäËû¹ú¼ÒµÄ×¢²áÉ̱ꣻ IT DialTone ºÍ The Open Group ÊÇÆäÉ̱ꡣ
Sun¡¢ Sun Microsystems¡¢ Java¡¢ Java Virtual Machine¡¢ JavaServer Pages¡¢ JDK¡¢ JRE¡¢ JSP¡¢ JVM¡¢ Netra¡¢ Solaris¡¢ StarOffice¡¢ Sun Blade¡¢ Sun Enterprise¡¢ Sun Fire¡¢ SunOS ÒÔ¼° Ultra ÊÇ Sun Microsystems, Inc. ÔÚÃÀ¹úºÍÆäËû¹ú¼ÒµÄÉ̱ê»ò×¢²áÉ̱ꡣ
Ðí¶àÖÆÔìÉ̺;ÏúÉÌʹÓÃһЩ³ÆÎªÉ̱êµÄͼ°¸»òÎÄ×ÖÉè¼ÆÀ´ÕÃÏÔ×Ô¼ºµÄ²úÆ·¡£ ±¾ÎĵµÖгöÏֵģ¬ Ϊ FreeBSD Project ËùÖªÏþµÄÉ̱꣬ºóÃæ½«ÒÔ '™' »ò '®' ·ûºÅÀ´±ê×¢¡£
¡¡¡¡»¶ÓÄúµÄµ½À´¡£ ÏÖÔÚÄúÒѾ°²×°ºÃ²Ù×÷ϵͳ£¬ ²¢×¼±¸¿ªÊ¼±à³ÌÁË¡£ µ«ÊÇ£¬ ´ÓÄÄÀï¿ªÊ¼ÄØ£¿ FreeBSD ÌṩÁËһЩʲô¹¤¾ß£¿ ËüÄܹ»ÎªÎÒ£¬ Ò»¸ö³ÌÐòÔ±Ìá¹©Ê²Ã´ÄØ£¿
¡¡¡¡ÕâЩ¶¼ÊDZ¾ÕÂ×¼±¸»Ø´ðµÄÎÊÌâ¡£ µ±È»£¬ ÓëËùÓÐÆäËûÖ°ÒµÀàËÆ£¬ ÈËÃǶԳÌÐòÉè¼ÆµÄÊìÁ·³Ì¶È×ÜÊÇ´æÔÚ²îÒìµÄ¡£ ¶ÔÓÐЩÈ˶øÑÔ£¬ ËüÖ»ÊÇÒ»ÖÖ°®ºÃ£» ¶ø¶ÔÁíһЩÈ˶øÑÔ£¬ ÕâÔòÊÇËûÃǵÄÖ°Òµ¡£ ÕâÒ»ÕÂÖеÄÄÚÈÝÖ÷ÒªÊÇÕë¶Ô³õѧ³ÌÐòÉè¼ÆµÄÈ˶ø×«Ð´£» µ±È»£¬ ¶ÔÓÚÄÇЩ²»ÊìϤ FreeBSD ƽ̨µÄ³ÌÐòÔ±À´Ëµ£¬ ËüҲʮ·ÖÓÐÓá£
¡¡¡¡¶Ô×î³õµÄÈí¼þ¹¤¾ßÉè¼Æ¹ÛÄîÒÔ¼°¿ÉÓÃÐÔ¡¢ ÐÔÄÜÓëÎȶ¨ÐÔ¸øÓèÓ¦ÓеÄ×ðÖØ£¬ ²¢ÖÆ×÷×î¼ÑµÄÀà UNIX® ²Ù×÷ϵͳÈí¼þ°ü¡£
¡¡¡¡ÏÂÃæµÄÖ¸µ¼ÐÔÉè¼ÆÔÔòÃèÊöÁËÎÒÃǵÄÉè¼ÆÀíÄî
ֻҪijһ¹¦ÄܵÄȱʧ²»»áµ¼ÖÂÎÞ·¨Íê³Éij¸öʵ¼ÊµÄÓ¦ÓóÌÐò£¬ ¾Í²»ÐÂÔö¸Ã¹¦ÄÜ¡£
¾ö¶¨ÏµÍ³²»×ö³ÉʲôÑù×Ó£¬ Óë¾ö¶¨½«Ëü×ö³ÉʲôÑù×ÓͬÑùÖØÒª¡£ ²»È¥Âú×ãËùÓеÄÐèÒª£¬ ¶øÊÇÈÃϵͳ¾ß±¸¿ÉÀ©Õ¹ÐÔ£¬ ʹÆäÄܹ»ÏòÉϼæÈÝ¡£
¾¡¿ÉÄܳéÏó´úÂëÖеÄͨÓò¿·Ö£¬ ³ý·ÇûÓпÉÒÔÓÃÀ´³éÏóµÄʵÀý¡£
Èç¹ûûÓÐÍêÈ«Àí½âÒ»¸öÎÊÌ⣬ ×îºÃ¸É´à²»ÌṩÈκνâ¾ö·½°¸¡£
Èç¹ûÄÜÓà 10% µÄ¹¤×÷Íê³É 90% µÄ¹¤×÷£¬ ÔòÑ¡Ôñ½Ï¼òµ¥µÄ½â¾ö·½°¸¡£
¾¡¿ÉÄܸôÀ븴ÔÓÐÔ¡£
Ìṩ»úÖÆ¶ø·Ç²ßÂÔ¡£ ¾ßÌå¶øÑÔ£¬ ½«Óû§½çÃæ²ßÂÔ½»Óɿͻ§È¥Ñ¡¶¨¡£
¡¡¡¡Õª×Ô Scheifler & Gettys£º "X Window System"
¡¡¡¡FreeBSD µÄÍêÕûÔ´´úÂë¶¼¿ÉÒÔ´ÓÎÒÃǹ«¿ªµÄ CVS ´úÂë¿âÖлñÈ¡¡£ Ô´´úÂëͨ³£»á°²×°µ½ /usr/src Ŀ¼ÖУ¬ Ëü°üÀ¨ÁËÏÂÃæÕâЩĿ¼£º
¡¡¡¡
| Ŀ¼ | ˵Ã÷ |
|---|---|
| bin/ | ÔÚ /bin ÖеÄÎļþµÄÔ´´úÂë |
| contrib/ | ÓÉÆäËû¿ª·¢×é֯ά»¤µÄÔ´´úÂë |
| crypto/ | ÓëÃÜÂëѧÓйصÄÔ´´úÂë |
| etc/ | ÔÚ /etc ÖеÄÎļþµÄÔ´´úÂë |
| games/ | ÔÚ /usr/games ÖеÄÎļþµÄÔ´´úÂë |
| gnu/ | ²ÉÓà GNU Public License ÊÚȨµÄ¹¤¾ß |
| include/ | ÔÚ /usr/include ÖеÄÎļþµÄÔ´´úÂë |
| kerberos5/ | µÚ 5 °æ Kerberos µÄÔ´´úÂë |
| lib/ | ÔÚ /usr/lib ÖеÄÎļþµÄÔ´´úÂë |
| libexec/ | ÔÚ /usr/libexec ÖеÄÎļþµÄÔ´´úÂë |
| release/ | ÓÃÓÚÖÆ×÷ FreeBSD ·¢Ðа汾µÄÎļþ |
| rescue/ | ½¨Ôìϵͳʱ /rescueÖеŤ¾ß |
| sbin/ | ÔÚ /sbin ÖеÄÎļþµÄÔ´´úÂë |
| secure/ | FreeSec µÄÔ´´úÂë |
| share/ | ÔÚ /usr/share ÖеÄÎļþµÄÔ´´úÂë |
| sys/ | Äں˵ÄÔ´´úÂëÎļþ |
| tools/ | ÓÃÓÚά»¤ºÍ×Ô¶¯²âÊÔ FreeBSD µÄ¹¤¾ß |
| usr.bin/ | ÔÚ /usr/bin ÖеÄÎļþµÄÔ´´úÂë |
| usr.sbin/ | ÔÚ /usr/sbin ÖеÄÎļþµÄÔ´´úÂë |
¡¡¡¡ÕâÒ»Õ½éÉÜÁË FreeBSD ÌṩµÄһЩ±à³Ì¹¤¾ß£¬ºÜ¶àÕâЩ¹¤¾ßÔÚÆäËû°æ±¾µÄ UNIX Öж¼ÄÜʹÓá£ÕâÀïÎÒÃDz»»á³¢ÊÔÃèÊöÈκαà³Ìϸ½Ú¡£´ó ¶àÊýÕ½ڼÙÉèÄúÒÔǰûÓлòÖ»ÓкÜÉٵıà³Ì֪ʶ£¬µ«ÎÒÃÇÏ£Íû³ÌÐòÔ±Ò²ÄÜ´ÓÖÐÊÜÒæ¡£
¡¡¡¡FreeBSD ÌṩÁËÒ»¸ö·Ç³£ÓÅÐãµÄ¿ª·¢»·¾³¡£ÓÐ C£¬C++ ºÍ Fortran ±àÒëÆ÷ÒÔ¼° »ù±¾ÏµÍ³×Ô´øµÄÒ»¸ö»ã±àÆ÷¡£¸ü²»ÒªËµ Perl ½âÊÍÆ÷ºÍºÜ¶à¾µä UNIX ¹¤¾ß£¬±ÈÈç sed ºÍ awk¡£Èç¹û»¹²»¹»£¬Ports Öл¹Óиü ¶àµÄ±àÒëÆ÷¡£FreeBSD Óë¶àÖÖ±ê×¼¼æÈÝ£¬ ±ÈÈç POSIX® ºÍ ANSI C, µ±È»»¹ÓÐËü×Ô¼ºµÄ BSD ´«Í³¡£ Òò´Ë£¬ ÎÒÃÇÔÚ FreeBSD ƽ̨ÉÏдµÄÓ¦Óò»¼ÓÐ޸ĻòÉÔ¼ÓÐ޸ľÍÄÜÔÚºÜ¶àÆ½Ì¨ÉÏÔËÐС£
¡¡¡¡Èç¹ûÄã´ÓδÔÚ UNIX ƽ̨ÉÏд¹ý³ÌÐò£¬ËùÓÐÕâЩǿ´óÖ®´¦¿´ÆðÀ´»áÈÃÈËìÅÄ¿¡£ ÕâÆªÎĵµµÄÄ¿µÄ¾ÍÊǰïÖúÄãѸËÙÉÏÊÖ£¬¶ø²»ÐíÒªÉîÈë¸ü¶à¸ß¼¶ÂÛÌâ¡£ÎÒÃǵÄÄ¿µÄ¾ÍÊÇÈà ÕâÆªÎĵµ¸øÄãÌṩ×ã¹»µÄ»ù´¡ÖªÊ¶À´Àí½âÎÒÃǵÄÎĵµ¡£
¡¡¡¡ÕâÆªÎĵµ²»ÒªÇóÄãÓбà³Ì֪ʶ£¬»òÕßÄãÖ»ÓкÜÉٵıà³Ì֪ʶ¡£µ±È»£¬ÎÒÃǼٶ¨Äã »áʹÓà UNIX ²¢ÇÒÔ¸ÒâÀ´Ñ§¡£
¡¡¡¡³ÌÐò¾ÍÊÇһϵÁÐÖ¸ÁîµÄ¼¯ºÏ£¬ÕâЩָÁîÄÜÇýʹ¼ÆËã»úÈ¥×ö²»Í¬µÄÊÂÇé¡£ÓÐʱºò¼Æ Ëã»úÖ´ÐеÄÒ»¸öÖ¸ÁîÈ¡¾öÓÚËüËùÖ´ÐеÄǰһ¸öÖ¸Áî¡£±¾Õ½«½éÉÜÁ½ÖÖÖ÷ÒªµÄ¸ø³öÖ¸Á Ò²½Ð ¡°ÃüÁ£¬µÄ·½Ê½¡£Ò»ÖÖ·½Ê½ÊÇʹÓà ½âÊÍÆ÷ £¬ÁíÒ»ÖÖ·½Ê½ÊÇʹÓà ±àÒëÆ÷¡£ÈËÀàÓïÑÔ¶Ô ÓÚ¼ÆËã»úÀ´ËµÓïÒåÄ£ºýÌ«ÄÑÓÚÀí½â£¬Òò´Ë¼ÆËã»úÃüÁî¶¼ÓÃΪÁËÌØ¶¨Ä¿µÄÉè¼ÆµÄµÄÒ»ÖÖ»ò ÆäËûÖÖ¼ÆËã»úÓïÑÔдµÄ¡£
¡¡¡¡Ê¹ÓýâÊÍÆ÷µÄ¼ÆËã»úÓïÑÔ¾ÍÏñÒ»¸ö»·¾³¡£½âÊÍÆ÷¸ø³öÌáʾ·ûºó£¬ÄãÊäÈëÒ»¸öÃü Á½âÊÍÆ÷¾Í»áÖ´ÐÐÕâ¸öÃüÁî¡£¶ÔÓÚ¸ü¸´ÔӵijÌÐò£¬¿ÉÒÔ°ÑÃüÁîдÈëÒ»¸öÎļþÈ»ºó ÈýâÊÍÆ÷×°ÈëÕâ¸öÎļþÔÙÖ´ÐÐÆäÖеÄÃüÁî¡£Èç¹ûÓдíÎó·¢Éú£¬Ðí¶à½âÊÍÆ÷»á½øÈëÒ»¸ö µ÷ÊÔ»·¾³ÈÃÄãÀ´×·×ÙÎÊÌâ¡£
¡¡¡¡ÕâÖÖ·½Ê½µÄÓŵã¾ÍÊÇ¿ÉÒÔÂíÉÏ¿´¼ûÃüÁîµÄÖ´Ðнá¹û£¬²¢ÇÒѸËٵĸÄÕý´íÎó¡£Èç ¹ûÄãÏëºÍ±ðÈË·ÖÏí×Ô¼ºµÄ³ÌÐò£¬×î´óµÄ»µ´¦¾ÍÏÔÏÖ³öÀ´ÁË¡£±ðÈËÐèÒªºÍÄãÒ»ÑùµÄ½âÊÍ Æ÷£¬»òÕßÄã±ØÐë°Ñ½âÊÍÆ÷¸øËûÃÇ£¬¶øÇÒËûÃÇ»¹ÒªÖªµÀÔõôʹÓÃÕâ¸ö½âÊÍÆ÷¡£Óû§Ò²²» Ï£ÍûÔÚ°´´íÒ»¸ö¼üµÄÇé¿öϾͱ»ÈÓµ½µ÷ÊÔ»·¾³ÖС£´Ó³ÌÐòÖ´ÐÐЧÂÊÀ´¿´£¬½âÊÍÆ÷»á ʹÓúܶàÄڴ棬¶øÇÒͨ³£Çé¿öÏÂÉú³ÉµÄ´úÂëÒ²²»Èç±àÒëÆ÷Éú³ÉµÄÓÐЧÂÊ¡£
¡¡¡¡ÎÒ¾õµÃ£¬Èç¹ûÄã´Óδ±à¹ý³ÌÐò£¬×îºÃ´Ó½âÊÍÀàÓïÑÔ¿ªÊ¼¡£Lisp£¬Smalltalk£¬ Perl ºÍ Basic ÓïÑÔ¾ÍÌṩÁËÕâÑùµÄ»·¾³¡£UNIX ÖÐµÄ shell (sh, csh) ×ÔÉí¾ÍÊÇÒ»¸ö½âÊÍÆ÷¡£Êµ¼ÊÇé ¿öÖУ¬ºÜ¶àÈ˶¼ÔÚËûÃÇ×Ô¼ºµÄ»úÆ÷ÉÏд shell ¡°scripts¡± À´×öºÜ¶à ¡°Î¬»¤¡±¹¤×÷¡£µÄÈ·£¬UNIX µÄÕÜѧÖÐÓÐÒ»²¿·Ö¾ÍÊÇÌṩºÜ¶àС¹¤¾ß£¬ ²¢Ê¹Óà shell scripts °ÑÕâЩ¹¤¾ß×éºÏÆðÀ´È¥×öÓÐÓõŤ×÷¡£
¡¡¡¡ÔÚ FreeBSD Ports Collection ÖУ¬ÓÐÒ»¸öÁбíÁгöÁËÌṩµÄ½âÊÍÆ÷¡£Í¬Ê±»¹¼ò µ¥ÌÖÂÛÁËһЩ¸üÊÜ»¶ÓµÄ½âÊÍÀàÓïÑÔ¡£
¡¡¡¡´Ó Ports Collection ÖÐÈçºÎÈ¡µÃ²¢°²×°Ó¦ÓóÌÐòµÄ½Ì³Ì¿ÉÒÔ´ÓÊÖ²áµÄ Ports section ÖÐÕÒµ½¡£
Beginner's All-purpose Symbollic Instruction Code µÄËõд¡£20ÊÀ ¼Í50Äê´ú±»¿ª·¢³öÀ´¸ø´óѧÉúѧϰ±à³Ì¡£ÔÚ20ÊÀ¼Í80Äê´úÉú²úµÄ¸öÈ˵çÄÔÖаü º¬ÁËÕâÖÖÓïÑÔ¡£BASIC ÓïÑÔÊǺܶà³ÌÐòԱѧϰµÄµÚÒ»¸ö ±à³ÌÓïÑÔ¡£Í¬Ê±£¬ËüÒ²ÊÇ Visual Basic µÄ»ù´¡¡£
Bywater µÄ Basic ½âÊÍÆ÷ÄÜÔÚ Ports Collection ÖÐµÄ lang/bwbasic ÕÒµ½¡£Phil Cockroft µÄ Basic ½âÊÍÆ÷ (ÒÔǰ½Ð Rabbit Basic) ÔÚ lang/pbasic ÖС£
20ÊÀ¼Í50Äê´ú¿ª·¢µÄÒ»ÖÖÓïÑÔ£¬×÷Ϊµ±Ê±ÄÇЩ¡°»ùÓÚÊý×Ö ¡±µÄÓïÑԵIJ¹³ä¡£Lisp²»ÊÇ»ùÓÚÊý×ֵ쬶øÊÇ»ùÓÚÁÐ±í£»Êµ¼ÊÉÏÕâ¸öÓï ÑÔµÄÃû×Ö¾ÍÊÇ ¡°List Processing¡±µÄËõд¡£ÔÚ AI (Artificial Intelligence) Ȧ×ÓÖзdz£ÊÜ»¶Ó¡£
Lisp ÊÇÒ»Öַdz£Ç¿´ó¶ø¸´ÔÓµÄÓïÑÔ¡£µ«Ò²¿ÉÄܱäµÃÒì³£ÅÓ´ó¶øÓ·Öס£
ÔÚ FreeBSD ÖÐµÄ Ports Collection ÀïÃæÓи÷ÖÖ¿ÉÒÔÔÚ UNIX ϵͳÉÏÔË ÐÐµÄ Lisp ʵÏÖ¡£GNU Common Lisp ÔÚ lang/gcl Àï¿ÉÒÔÕÒµ½¡£Bruno Haible ºÍ Michael Stoll µÄ CLISP ÔÚ lang/clisp ÖпÉÒÔÕÒµ½¡£¶øÏñ°üº¬Ò»¸ö¿ÉÒÔ¸ß ¶ÈÓÅ»¯´úÂëµÄ±àÒëÆ÷µÄ CMUCL£¬»òÕßÏñ±È½Ï¼òµ¥µÄ Lisp µÄʵÏÖµÄ SLisp Ôò Óü¸°ÙÐÐ C ´úÂëʵÏÖÁË´ó²¿·Ö Common Lisp µÄ¹¦ÄÜ¡£Á½¸öÓïÑÔ·Ö±ðÔÚ lang/cmucl ºÍ lang/slisp ÖпÉÒÔÕÒµ½¡£
¶ÔÓÚϵͳ¹ÜÀíÔ±À´Ëµ·Ç³£ÊÜ»¶ÓµÄ½Å±¾ÓïÑÔ£»Í¬Ê±Ò²¾³£±»ÓÃÀ´Ð´Íòά Íø·þÎñÆ÷µÄ CGI ½Å±¾¡£
Perl ÔÚ Ports Collection ÖÐµÄ lang/perl5 ¿ÉÒÔÕÒµ½£¬ÊʺÏËùÓÐ FreeBSD °æ±¾¡£ ¶øÇÒÔÚ 4.X °æ±¾ÖÐÊÇ×÷Ϊ»ù±¾ÏµÍ³µÄ /usr/bin/perl À´°²×°µÄ¡£
Lisp µÄÒ»¸ö±äÖÖ¡£±È Common Lisp ¸ü¼Ó½ô´Õ¶øÇåÎú¡£ÔÚ´óѧÀïÃæÏ൱ Á÷ÐÐÒòΪ×ã¹»¼òµ¥¡£ÍùÍùµ±×÷µÚÒ»ÃÅÓïÑԽ̸ø´óѧÉú£¬¶øÇÒÔÚÑо¿ÁìÓòÒ²ÓÐÒ» ¶¨³Ì¶ÈµÄÎüÒýÁ¦¡£
Scheme ÔÚ Ports Collection ÖÐµÄ lang/elk ¿ÉÒÔÕÒµ½ Elk Scheme ½âÊÍÆ÷¡£ lang/mit-scheme ÖеÄÊÇ MIT µÄ Scheme ½âÊÍÆ÷¡£ÔÚ lang/scm ÖÐÊÇ SCM Scheme ½âÊÍÆ÷¡£
Icon ÊÇÒ»Öָ߼¶ÓïÑÔ£¬ÔÚºÜ¶à·½ÃæÊʺϴ¦Àí×Ö·ûºÍ½á¹¹¡£FreeBSD ÖÐµÄ Icon °æ±¾ÔÚ lang/icon ÖпÉÒÔÕÒµ½¡£
Logo ÊÇÒ»ÖÖÈÝÒ×ѧϰµÄÓïÑÔ£¬²¢ÇÒÔÚÐí¶à¿Î³ÌÀïÃæ¶¼×÷Ϊһ¸ö½éÉÜÐÔ µÄ±à³ÌÓïÑÔ´æÔÚ¡£Èç¹û¸øÐ¡º¢×ÓÉϱà³Ì¿Î³Ì£¬Logo ÊÇÒ»¸ö·Ç³£°ôµÄ¿ªÊ¼¡£Òò Ϊ£¬¼´Ê¹¶ÔСº¢×ÓÀ´Ëµ£¬ÒªÓà Logo »Í¼ÐÎÒ²ÊǺÜÈÝÒ×µÄÊÂÇé¡£
FreeBSD ÖÐµÄ Logo ×îа汾¿ÉÒÔÔÚ lang/logo ÖÐÕÒµ½¡£
Python ÊÇÖÖÃæÏò¶ÔÏóµÄ½âÊÍÀàÓïÑÔ¡£Óµ»¤µÄÈ˶¼Ëµ Python ÊÇ¿ªÊ¼Ñ§ ϰ±à³ÌµÄ×î¼ÑÓïÑÔ¡£ÒòΪÏà¶ÔÀ´Ëµ±È½ÏÈÝÒ×Æð²½£¬¶øÇÒÓëÄÇЩÁ÷ÐеÄÄÜ¿ª·¢ÅÓ´ó¶ø¸´ ÔӵĽâÊÍÀàÓïÑÔÀ´±È(Perl ºÍ Tcl ÔÚÕâ¸ö·½ÃæºÜÁ÷ÐÐ)Ò»µãÒ²²»²î¡£
×îа汾µÄ Python ¿ÉÒÔÔÚ Ports Collection µÄ lang/python ÖÐÕÒµ½¡£
Ruby ÊÇÒ»¸ö½âÊÍÀàÓïÑÔ£¬²¢ÇÒÊÇ´¿ÃæÏò¶ÔÏóµÄ¡£ÒòΪÆäÓï·¨ÈÝÒ×Àí½â ¶ø±ä»¯¶à¶Ë²¢ÇÒÊʺϿª·¢ÒÔ¼°Î¬»¤ÅÓ´ó¶ø¸´ÔӵijÌÐò¶ø¹ã·ºÁ÷ÐС£
Ruby ¿ÉÒÔÔÚ Ports Collection ÖÐµÄ lang/ruby18 ÖÐÕÒµ½¡£
Tcl ÊÇÒ»¸öǶÈëʽµÄ½âÊÍÀàÓïÑÔ£¬Äܹ»±»ÒÆÖ²µ½ºÜ¶àƽ̨ÉÏÃæ¡£Òò´Ë±ä µÃ·Ç³£Á÷ÐС£Ëü¼È¿ÉÒÔ¿ìËÙµØÐ´³öСµÄÓ¦ÓóÌÐò£¬Ò²¿ÉÒÔ(ºÍ Tk Ò»ÆðʹÓ㬠һÖÖͼÐι¤¾ß)д³ö¹¦ÄÜ·±¶àµÄ³ÌÐò¡£
FreeBSD Öв»Í¬°æ±¾µÄ Tcl ¶¼ÔÚ ports ÀïÃæ¡£×îа汾£¬Tcl 8.4£¬¿ÉÒÔ ÔÚ lang/tcl84 ÖÐÕÒµ½¡£
¡¡¡¡±àÒëÆ÷Ôò·Ç³£²»Í¬¡£Ê×ÏÈ£¬´úÂë¿ÉÒÔʹÓÃ±à¼Æ÷дµ½Ò»¸ö»ò¶à¸öÎļþÀïÃæ¡£È» ºóÔÙʹÓñàÒëÆ÷À´±àÒë´úÂ룬¿´ÕâЩ´úÂëÊÇ·ñÄܱ»½ÓÊÜ¡£Èç¹û±àÒë²»ÄÜͨ¹ý£¬Ò§½ôÑÀ ¹ØÄúÔÙ´ò¿ª±à¼Æ÷ÖØÐÂÐ޸İɣ»Èç¹û±àÒëͨ¹ý£¬²¢ÇÒ±àÒëÆ÷¸øÁËÄãÒ»¸ö³ÌÐò¡£Äú¿ÉÒÔ ÔÚÃüÁîÐÐÏÂÖ´ÐлòÕßµ½µ÷ÊÔ»·¾³ÖÐÖ´ÐÐÒÔ±ã²é¿´´úÂëÓÐûÓб»ÕýÈ·Ö´ÐС£ [1]
¡¡¡¡ºÜÃ÷ÏÔ£¬ÕâÖÖ·½Ê½²¢²»Èç½âÊÍÆ÷Ö±½Ó¡£µ«È´¿ÉÒÔÈÃÄã×öºÜ¶à½âÊÍÀàÓïÑÔÎÞ·¨×ö µÄÀ§ÄѵÄÉõÖÁÎÞ·¨Íê³ÉµÄ¹¤×÷¡£ÀýÈçÖ±½ÓÓë²Ù×÷ϵͳ½»»¥©¤©¤»òÕߣ¬ÄãÉõÖÁ¿ÉÒÔ Ð´×Ô¼ºµÄ²Ù×÷ϵͳ¡£Èç¹ûÄãҪд·Ç³£ÓÐЧÂʵĴúÂ룬±àÒëÆ÷Ò²ºÜÓÐÓᣱàÒëÆ÷¿ÉÒÔ»¨ һЩʱ¼äÀ´ÓÅ»¯´úÂ룬¶ø½âÊÍÆ÷ÊÇÎÞ·¨Íê³ÉµÄ¡£ÁíÍ⣬·ÖÏíÄãдµÄ±àÒëÀà³ÌÐò±È½âÊÍ ÀàÓïÑÔÒªÖ±½ÓµÃ¶à¡£Ö»Òª°Ñ±àÒëºÃµÄ³ÌÐò¸ø±ðÈ˾ÍÐУ¬µ±È»ÎÒÃǼٶ¨±ðÈ˺ÍÄã¶¼ÓÐͬ Ò»Àà²Ù×÷ϵͳ¡£
¡¡¡¡±àÒëÀàÓïÑÔ°üÀ¨ Pascal£¬C ºÍ C++¡£C ºÍ C++ ºÜÑϸñ£¬ÊʺÏÄÇЩÓиü¶à¾Ñé µÄ³ÌÐòÔ±£»¶ø Pascal£¬´ÓÁíÒ»·½ÃæÀ´Ëµ£¬±»Éè¼Æ³ÉΪһ¸ö½ÌѧÓïÑÔ£¬ÊʺϳõѧÕß¡£ FreeBSD ÔÚ»ù±¾ÏµÍ³ÖÐûÓÐÌṩ Pascal¡£µ«ÊÇÔÚ Ports Collection ÖÐÓÐ GNU Pascal Compiler (GPC) ºÍ Free Pascal Compiler£¬·Ö±ðÔÚ lang/gpc ºÍ lang/fpc ÖпÉÒÔÕÒµ½¡£
¡¡¡¡Èç¹ûÄãʹÓò»Í¬µÄ³ÌÐòÀ´Ð´±àÒëÀàÓïÑÔ£¬±à¼-±àÒë-ÔËÐÐ-µ÷ÊÔ Õâ¸öÑ»·»á±ä µÃºÜ·³ÈË¡£ºÜ¶àÉÌÒµ±àÒëÆ÷¿ª·¢ÁË Integrated Development Environments (ËõдΪ IDE)¡£FreeBSD ÔÚ»ù±¾ÏµÍ³ÖÐûÓаüº¬ IDE£¬µ«ÊÇÔÚ devel/kdevelop ÌṩÁËÒ»¸öÀý×Ó¡£ÄãÒ²¿É ÒÔʹÓà Emacs µ±×÷ IDE¡£°Ñ Emacs µ±×÷ IDE ÔÚ µÚ 2.7 ½Ú ÖÐÓÐÌÖ ÂÛ¡£
¡¡¡¡ÕâÒ»ÕÂÎÒÃÇÖ»ÌÖÂÛ GNU µÄ C ºÍ C++ ±àÒëÆ÷£¬ÒòΪÔÚ FreeBSD µÄ»ù±¾ÏµÍ³ÖÐ¾Í °üº¬ÁË¡£Ö±½ÓÔËÐÐ cc »ò gcc ¾Í¿ÉÒÔ¡£¶ø ÓýâÊÍÆ÷д³ÌÐòµÄϸ½Ú¶ÔÓÚ²»Í¬µÄ½âÊÍÆ÷¶¼ºÜ²»Ïàͬ£¬Í¨³£¿ÉÒÔÔÚÌØ¶¨µÄ½âÊÍÆ÷Îĵµ»ò ÕßÔÚÏß°ïÖúÖÐÕÒµ½¡£
¡¡¡¡Ò»µ©ÄãдÍêÄãµÄ½Ü×÷£¬ÏÂÒ»²½¾ÍÊǰÑÄãµÄ½Ü×÷ת»»³É¿ÉÒÔÔÚ FreeBSD ÉÏÔËÐÐ(Ï£ Íû¿ÉÒÔ£¡)µÄ¶«Î÷¡£Í¨³£Õâ°üº¬¼¸¸ö²½Ö裬²»Í¬µÄ²½ÖèÓɲ»Í¬µÄ³ÌÐòÀ´Íê³É¡£
Ô¤´¦ÀíÄãµÄÔ´´úÂ룬ȥµô×¢ÊÍ£¬ÒÔ¼°ÆäËû¼¼ÇÉÐԵŤ×÷¾ÍÏñÔÚ C ÖÐÕ¹¿ªºê¡£
¼ì²é´úÂëµÄÓï·¨¿´ÄãÊÇ·ñ×ñÊØÁËÕâ¸öÓïÑԵĹæÔò¡£Èç¹ûûÓУ¬±àÒëÆ÷»á¸ø³ö ¾¯¸æ¡£
°ÑÔ´´úÂëת»»Îª»ã±àÓïÑÔ ©¤©¤ ºÍ»úÆ÷´úÂëºÜÏàËÆ£¬ µ«ÊÇÔÚÒ»¶¨Çé¿öÏÂÎÒÃÇÈÔÈ»¿ÉÒÔÀí½â¡£ [2]
°Ñ»ã±àÓïÑÔת»»Îª»úÆ÷ÓïÑÔ©¤©¤Êǵģ¬ÎÒÃÇÔÚ˵λԪºÍ×Ö½Ú£¬¾ÍÊÇ1ºÍ0¡£
¼ì²éÄãÊÇ·ñ׼ȷµØÊ¹ÓÃÁ˺¯ÊýºÍÈ«¾Ö±äÁ¿ÀàËÆµÄ¶«Î÷¡£ÀýÈ磬Èç¹ûÄãµ÷ÓÃÁË Ò»¸ö²»´æÔڵĺ¯Êý£¬±àÒëÆ÷¾Í»á¸ø³ö¾¯¸æ¡£
Èç¹ûÄãÊÇ´Ó¶à¸öÔ´´úÂëÎļþ±àÒ룬¾ÍҪѧ»áÈçºÎ°ÑÕâЩÎļþ×éºÏµ½Ò»Æð¡£
°Ñ²úÉú³öÀ´µÄ¶«Î÷ÓÃϵͳµÄÔËÐÐ×°ÔØÆ÷×°ÈëÄÚ´æ²¢ÔËÐС£
×îºó£¬°Ñ¿ÉÖ´ÐÐÎļþдÈëÎļþϵͳ¡£
¡¡¡¡±àÒë Õâ¸ö´ÊµÄÒâ˼ͨ³£Ö¸ 1 µ½ 4 ²½©¤©¤ÆäËûµÄ ²½Öè½Ð×ö Á¬½Ó¡£ÓÐʱºîµÚÒ»²½½Ð×ö Ô¤´¦Àí ¡£µÚÈýºÍµÚËIJ½½Ð×ö »ã±à ¡£
¡¡¡¡ÐÒÔ˵ÄÊÇ£¬¼¸ºõËùÓÐÕâЩϸ½Ú¶¼ÊÇÒþ²ØµÄ£¬ÒòΪ cc Ö»ÊÇ Ò»¸öǰ¶Ë¡£Ëü¸ù¾ÝÕýÈ·µÄ²ÎÊýµ÷ÓóÌÐòÀ´´¦Àí´úÂë¡£Ö»ÒªÊäÈë
% cc foobar.c
¡¡¡¡¾Í»á°Ñ foobar.c ͨ¹ýÒÔÉϵIJ½Öè±àÒë³öÀ´¡£Èç¹ûÄãÓÐ ¶à¸öÎļþÒª±àÒ룬ֻҪÊäÈë
% cc foo.c bar.c
¡¡¡¡×¢Ò⣬Óï·¨¼ì²é¾ÍÊÇ©¤©¤´¿´âµÄ¼ì²éÓï·¨¡£¶ø²»»á¼ì²âÄã¿ÉÄÜ·¸µÄÈκÎÂß¼ ´íÎó¡£±ÈÈçÎÞÏÞÑ»·£¬»òÕßÊÇÄãÏëÓÃÒ»ÔªÅÅÐòȴʹÓÃÁËðÅÝÅÅÐò¡£ [3]
¡¡¡¡cc ÓкܶàÑ¡ÏÔÚ°ïÖúÊÖ²áÖж¼¿ÉÒÔÕÒµ½¡£ÕâÀïÁгöÁËÒ» Щ×îÖØÒªµÄÑ¡Ï²¢ÇÒÓÐÀý×Ó¡£
-o filenameÊä³öµÄÎļþÃû¡£Èç¹ûÄ㲻ʹÓÃÕâ¸öÑ¡ÏccΪ²úÉú ³öÒ»¸ö½Ð a.out µÄÖ´ÐÐÎļþ¡£ [4]
-c½ö½ö±àÒëÎļþ£¬²»»áÁ¬½Ó¡£Èç¹ûÄãÖ»Ïë¼ì²éÄãдµÄ²âÊÔ³ÌÐòµÄÓï·¨µÄ»°£¬ Õâ¸öÑ¡Ïî·Ç³£ÓÐÓ᣻òÕßÄã»áʹÓà Makefile¡£
Õâ»á²úÉúÒ»¸ö Ä¿±êÎļþ (²»¿ÉÖ´ÐÐ) ½Ð×ö foobar.o¡£Õâ¸öÎļþ¿ÉÒÔºÍÆäËûµÄÄ¿±êÎļþÁ¬½ÓÔÚÒ»Æð ¹¹³ÉÒ»¸ö¿ÉÖ´ÐÐÎļþ¡£
-g²úÉúÒ»¸ö¿Éµ÷ÊԵĿÉÖ´ÐÐÎļþ¡£±àÒëÆ÷»áÔÚ¿ÉÖ´ÐÐÎļþÖÐÖ²ÈëһЩÐÅÏ¢£¬
ÕâЩÐÅÏ¢Äܹ»°ÑÔ´ÎļþÖеÄÐÐÊýºÍ±»µ÷Óõĺ¯ÊýÁªÏµÆðÀ´¡£ÔÚÄãÒ»²½Ò»²½µ÷ÊÔ³Ì
ÐòµÄʱºò£¬µ÷ÊÔÆ÷Äܹ»Ê¹ÓÃÕâЩÐÅÏ¢À´ÏÔʾԴ´úÂë¡£ÕâÊÇ ·Ç³£
ÓÐÓõģ»È±µã¾ÍÊDZ»Ö²ÈëµÄÐÅÏ¢ÈóÌÐò±äµÃ¸ü´ó¡£Í¨³£Çé¿öÏ£¬¿ª ·¢Ò»¸ö³ÌÐòµÄʱºòÎÒÃǾ³£Ê¹ÓÃ
-g£¬µ«ÊÇÎÒÃÇÔÚ±àÒëÒ»¸ö ¡°release °æ±¾¡±
µÄ³ÌÐòµÄʱºò£¬Èç¹û³ÌÐò¹¤×÷µÃÈÃÈËÂúÒâÁË£¬ÎÒ ÃǾͲ»Ê¹Óà -g
±àÒë¡£
Õâ»á²úÉúÒ»¸ö¿Éµ÷ÊÔ°æ±¾µÄ³ÌÐò¡£ [5]
-O²úÉúÒ»¸öÓÅ»¯°æ±¾µÄ¿ÉÖ´ÐÐÎļþ¡£±àÒëÆ÷»áʹÓÃһЩ´ÏÃ÷µÄ¼¼ÇɲúÉú³ö±È
ÆÕͨ±àÒë²úÉúµÄÎļþÖ´Ðиü¿ìµÄ¿ÉÖ´ÐÐÎļþ¡£¿ÉÒÔÔÚ -O ¼Ó
ÉÏÊý×ÖÀ´Ê¹Óøü¸ß¼¶µÄÓÅ»¯¡£µ«ÊÇÕâÑù×ö¾³£»á±©Â¶³ö±àÒëÆ÷µÄÓÅ»¯Æ÷ÖеÄһЩ ´íÎó¡£ÀýÈ磬2.1.0
°æ±¾µÄ FreeBSD ÖÐµÄ cc ÔÚijЩÇé¿ö ÏÂʹÓÃÁË -O2 µÄ»°£¬»á²úÉú³ö´íÎóµÄ´úÂë¡£
ÓÅ»¯Í¨³£Ö»ÔÚ±àÒëÒ»¸ö release °æ±¾µÄʱºò²Å±»´ò¿ª¡£
Õâ»á²úÉúÒ»¸öÓÅ»¯°æ±¾µÄ foobar¡£
¡¡¡¡ÏÂÃæµÄÈý¸ö²ÎÊý»áÆÈʹ cc ¼ì²éÄãµÄ´úÂëÊÇ·ñ·ûºÏһЩ¹ú ¼Ê±ê×¼£¬¾³£±»ÎÒÃǽÐ×ö ANSI ±ê×¼£¬ËäÈ»ÑϸñµÄÀ´ËµËüÊÇÒ»¸ö ISO ±ê×¼¡£
-Wall´ò¿ªËùÓÐ cc µÄ×÷ÕßÈÏΪֵµÃ×¢ÒâµÄ¾¯¸æ¡£²»ÒªÖ» ¿´Õâ¸öÑ¡ÏîµÄÃû×Ö£¬Ëü²¢Ã»Óдò¿ªËùÓÐ cc Äܹ»×¢Òâµ½µÄ ËùÓо¯¸æ¡£
-ansi¹Ø±Õ´ó¶àÊý£¬µ«²¢²»ÊÇËùÓУ¬cc ÌṩµÄ·Ç ANSI C ÌØÐÔ¡£²»ÒªÖ»¿´Ñ¡ÏîµÄÃû×Ö£¬Ëü²¢²»Ñϸñ±£ Ö¤ÄãµÄ´úÂë»á¼æÈݱê×¼¡£
-pedantic¹Ø±Õ ËùÓÐ cc µÄ·Ç ANSI C ÌØÐÔ¡£
¡¡¡¡Ã»ÓÐÕâЩѡÏcc ÄÜÔÊÐíÄã°´ÕÕ±ê׼ʹÓÃһЩ·Ç±ê×¼µÄÀ© Õ¹¡£ÓÐһЩÀ©Õ¹·Ç³£ÓÐÓ㬵«²»ÄÜÓëÆäËû±àÒëÆ÷¼æÈÝ©¤©¤Êµ¼ÊÉÏ£¬Õâ¸ö±ê×¼µÄÖ÷Òª Ä¿µÄÖ®Ò»¾ÍÊÇÔÊÐíÎÒÃÇд³ö¿ÉÒÔÔÚÈκÎϵͳÉϵÄÓÉÈκαàÒëÆ÷±àÒëµÄ´úÂë¡£Õâ¾Í½Ð×ö ¿ÉÒÆÖ²´úÂë
¡¡¡¡Í¨³£À´Ëµ£¬ÄãÓ¦¸ÃÈÃÄãµÄ´úÂ뾡¿ÉÄܵĿÉÒÔÒÆÖ²¡£·ñÔòÄã¾Í²»µÃ²»ÍêÈ«ÖØÐ´ÄãµÄ ´úÂëÒÔ±ãÄܹ»ÔÚÆäËûµØ·½ÔËÐÐÖ®©¤©¤¶øÇÒËÖªµÀ¼¸ÄêºóÄãÊÇ·ñ»¹»áÓÃËü£¿
¡¡¡¡Õâ»áÔÚ¼ì²é foobar.c¶Ô±ê×¼µÄ¼æÈÝÐÔÒÔºó²úÉúÒ»¸ö foobar ¿ÉÖ´ÐÐÎļþ¡£
-llibraryÔÚÁ¬½ÓµÄʱºòÖ¸¶¨Ò»¸öº¯Êý¿â¡£
×î³£¼ûµÄÇé¿ö¾ÍÊǵ±Äã±àÒëÒ»¸öʹÓÃÁËһЩ C ÖеÄÊýѧº¯ÊýµÄʱºò¡£²» Ïñ´ó¶àÊýÆäËûµÄƽ̨£¬ÕâЩº¯Êý¶¼²»ÔÚ C µÄ±ê×¼¿âÀïÃæ¡£Äã±ØÐë¸æËß±àÒëÆ÷¼Ó ÉÏÕâЩ¿â¡£
Õâ¸ö¹æÔò¾ÍÊÇ£¬Èç¹û¿âµÄÃû×Ö½Ð×ö libsomething.a£¬Äã¾Í±Ø Ðë¸ø cc
ÕâÑùµÄÑ¡Ïî -lsomething¡£ÀýÈ磬Êýѧ¿â ½Ð×ö libm.a£¬Òò´ËÄã¸ø cc µÄÑ¡ Ïî¾ÍÊÇ -lm¡£Ò»°ãÇé¿öÏ£¬ÎÒÃÇÒª°ÑÕâ¸öÑ¡Ïî·Åµ½ÃüÁîÐÐµÄ ×îºó¡£
Õâ¸ö»á°ÑÊýѧº¯Êý¿âÁ¬½Óµ½ foobar ÀïÃæ¡£
Èç¹ûÄãÒª±àÒë C++ ´úÂ룬ÄãÐèÒª -lg++£¬»òÕß -lstdc++ Èç¹ûÄãʹÓõÄÊÇ FreeBSD 2.2 »òÕ߸ü¸ß°æ±¾£¬À´ Á¬½Ó C++
¿â¡£»òÕߣ¬Äã¿ÉÒÔÔËÐÐ c++ ¶ø²»ÊÇ cc
À´±àÒë C++ ´úÂë¡£ÔÚ FreeBSD ÉÏ£¬ c++ Ò²¿ÉÒÔͨ¹ýÔËÐÐ g++ À´»½ÐÑ¡£
% cc -o foobar foobar.cc
-lg++ ¶ÔÓÚ FreeBSD 2.1.6 »òÕ߸üµÍµÄ°æ±¾
% cc -o foobar foobar.cc -lstdc++
¶Ô FreeBSD 2.2 »òÕ߸ü¸ßµÄ°æ±¾
% c++ -o foobar foobar.cc
Á½ÖÖÇé¿ö¶¼»á´Ó C++ Ô´Îļþ foobar.cc²úÉúÒ»¸ö ¿ÉÖ´ÐÐÎļþ foobar¡£×¢Ò⣬ÔÚ UNIX ϵͳÖУ¬C++ Ô´ ÎļþµÄ´«Í³ºó׺ÊÇ .C£¬.cxx »ò Õß .cc£¬¶ø²»ÊÇ MS-DOS® ÀàÐ굀 .cpp (Õâ¸öºó׺ÒѾ±»Óõ½ÁËÆäËûµÄµØ·½)¡£ gcc ¸ù¾ÝÕâ¸öÔ¼¶¨À´È·¶¨Ó¦¸ÃʹÓúÎÖÖÀàÐ͵ıàÒëÆ÷À´±à ÒëÔ´Îļþ¡£µ«ÊÇ£¬Õâ¸öÏÞÖÆ²»ÔÙÆð×÷ÓÃÁË£¬Òò´ËÏÖÔÚÄã¿ÉÒÔ×ÔÓɵÄʹÓà .cpp Õâ¸öºó׺À´ÃüÃûÄãµÄ C++ Ô´Îļþ£¡
sin() Õâ¸öº¯
Êý¡£µ«ÊÇÎÒÈ´µÃµ½ÁËÈçϵĴíÎó¡£Õâ¸ö´íÎóÊÇʲôÒâ˼£¿-lm¡£Ò² ¾ÍÊǼÆËã 2.1 µÄ 6 ´Î·½¡£2.4.1.2.
ºÃµÄ£¬ÎÒдÁËÒ»¸ö¼òµ¥µÄ³ÌÐò£¬Á·Ï°Ê¹Óà -lm¡£Ò² ¾ÍÊǼÆËã 2.1 µÄ
6 ´Î·½¡£
È»ºóÎÒ±àÒ룺
¾ÍÏñÄã˵µÄÎÒÓ¦¸Ã×öµÄÄÇÑù¡£µ«ÊÇÎÒÔÚÔËÐеÄʱºòÈ´ÓÐÈçÏÂÌáʾ£º
Õâ¸ö ²» ÊÇÕýÈ·µÄ´ð°¸£¡µ½µ×ÔõôÁË£¿
µ±±àÒëÆ÷¿´¼ûÄãµ÷ÓÃÁËÒ»¸öº¯Êý£¬Ëü»á¼ì²éÊÇ·ñÒѾÓÐÁËÒ»¸öÏàÅäºÏµÄ ÔʼÀàÐÍ (prototype)£¬Èç¹ûûÓУ¬±àÒëÆ÷»á¼Ù¶¨º¯ÊýµÄ·µ»ØÖµÊÇ Õû Êý£¬Ç¡Ç¡²»ÊÇÄãµÄ³ÌÐòÏëÒªµÄ½á¹û¡£
Êýѧº¯ÊýµÄÉùÃ÷ÔÐͶ¼ÔÚ math.h ÀïÃæ¡£Èç¹û ÄãÒýÓÃÁËÕâ¸öÎļþ£¬±àÒëÆ÷¾ÍÄÜÕÒµ½Õâ¸öÔÐÍÈ»ºó¾Í²»»á¶ÔÄãµÄ¼ÆËã×öÆæ¹ÖµÄ ¸ÉÈÅ¡£
ÏñÒÔǰһÑù±àÒ룬ȻºóÔÙÔËÐУº
Èç¹ûÄãʹÓÃÁËÈκÎÒ»¸öÊýѧº¯Êý£¬Ò»¶¨Òª¼ÇµÃ ÒýÓà math.h Õâ¸öÎļþ£¬²¢ÇÒÁ¬½ÓÊýѧº¯Êý¿â¡£
2.4.1.7. ÎÒ±àÒëÁËÒ»¸ö³ÌÐò£¬¿ªÊ¼¿´ÆðÀ´ÔËÐеò»´í¡£µ«ÊǺóÀ´µ÷ÊÔÁË£¬ËµÊ²Ã´ ¡°core dumped¡±¡£Õâ¸öÊÇʲôÒâ˼£¿
core dump Õâ¸öÃû×Ö¿ÉÒÔ×·Ëݵ½ UNIX µÄÔç ÆÚÀúÊ·£¬µ±Ê±µÄ¼ÆËã»ú¶¼Ê¹ÓÃÏßȦÄÚ´æ´¢´æÊý¾Ý¡£Í¨³£Çé¿öÏ£¬Èç¹ûÒ»¸ö³ÌÐò ÔÚÒ»¶¨µÄÇé¿öÏÂÖ´ÐÐʧ°ÜÁË£¬ÏµÍ³¾Í»á°ÑÏßȦÄÚ´æµÄÄÚÈÝдµ½´ÅÅÌÉϵÄÒ»¸öÎÄ ¼þÖУ¬Õâ¸öÎļþ¾Í½Ð core¡£Í¨¹ýÑо¿Õâ¸öÎļþ£¬³ÌÐò Ô±¾Í¿ÉÒÔ·¢ÏÖÎÊÌâÖ®ËùÔÚ¡£
ʹÓà gdb ·ÖÎöÕâ¸ö core Îļþ (¼û µÚ 2.6 ½Ú)¡£
»ù±¾ÉÏÊÇÄãµÄ³ÌÐò³¢ÊÔ¶ÔÄÚ´æ½øÐÐijÖÖ·Ç·¨µÄ²Ù×÷µ¼Öµġ£UNIX ÔÚ Éè¼ÆÉÏÒª±£»¤²Ù×÷ϵͳ±¾ÉíºÍÆäËû³ÌÐò²»ÊÜ·Ç·¨³ÌÐòµÄ¸ÉÈÅ¡£
ͨ³£µÄÔÒòÓÐÈçÏÂÕâЩ£º
³¢ÊÔ¸³Öµ¸øÒ»¸ö NULL Ö¸Õ룬ÀýÈç
char *foo = NULL;
strcpy(foo, "bang!");
ʹÓÃÒ»¸öδ±»³õʼ»¯µÄÖ¸Õ룬ÀýÈç
char *foo;
strcpy(foo, "bang!");
ÔÚijÖÖÇé¿öÏ£¬Ö¸ÕëËù°üº¬µÄÖµ»áÖ¸ÏòÄÚ´æÖÐij¸öÇøÓò£¬Õâ¸öÇøÓò ¶ÔÄãµÄ³ÌÐòÊDz»¿É²Ù×÷µÄ¡£ÔÚÄãµÄ³ÌÐòÔì³ÉÈÎºÎÆÆ»µÖ®Ç°£¬Äں˻áÖÕÖ¹³Ì Ðò¡£Èç¹ûÄãÔËÆø²»ºÃ£¬Õâ¸öÖ¸Õë»áÖ¸ÏòÄã×Ô¼ºµÄ³ÌÐòÔÚÄÚ´æÖеÄij¸öÇøÓò£¬ ´Ó¶øÆÆ»µ×ÔÉíµÄijЩÊý¾Ý½á¹¹£¬µ¼Ö³ÌÐòÆæ¹ÖµØ±ÀÀ£¡£
Êý×éÔ½½ç£¬ÀýÈç
int bar[20];
bar[27] = 6;
³¢ÊÔÔÚÖ»¶ÁÄÚ´æÖд¢´æÊý¾Ý£¬ÀýÈç
char *foo = "My string";
strcpy(foo, "bang!");
UNIX ±àÒëÆ÷¾³£°ÑÏñ "My string" ÕâÑù µÄ×Ö·û´®·Åµ½Ö»¶ÁÄÚ´æÖС£
´íÎóµÄʹÓú¯Êý malloc() ºÍ free()£¬ÀýÈç
char bar[80];
free(bar);
or
char *foo = malloc(27);
free(foo);
free(foo);
ÕâЩ´íÎó²¢²»×ܻᵼÖÂÄãµÄ³ÌÐò±ÀÀ££¬µ«ÕâЩ¶¼ÊÇ»µµÄϰ¹ß¡£ÓÐЩϵͳ ºÍ±àÒëÆ÷±ÈÆäËûµÄϵͳºÍ±àÒëÆ÷Óиü¶àµÄÈÝ´íÐÔ£¬Õâ¾ÍÊÇΪʲôһЩ³ÌÐòÔÚÒ» ¸öϵͳÉÏ¿ÉÒÔÔËÐкܺ㬶øÔÚÁíÒ»¸öϵͳÉÏÈ´»á±ÀÀ£¡£
2.4.1.10. ÓÐʱºòµ±Îҵõ½Ò»¸ö core dump£¬Ìáʾ˵ ¡°bus error¡±¡£ÎÒµÄ UNIX ½Ì²ÄÀïÃæËµÕâÒâζÕâÓ²¼þ´íÎ󣬵«ÊǼÆËã »ú¿´ÆðÀ´ÔËÐкÜÕý³£¡£ÕâÊÇÕæµÄÂð£¿
²»ÊÇÕæµÄ£¬ºÜÐÒÔ˲»ÊÇ(³ý·ÇÄãÕæµÄÓö¼ûÁËÒ»¸öÓ²¼þÎÊÌâ...)¡£Õâ ͨ³£ÊÇÓÃÁíÒ»ÖÖ·½Ê½ËµÄã³¢ÊÔ¶Áдһ¿éÎÞȨ¶ÁдµÄÄÚ´æ¡£
2.4.1.11. Èç¹ûÎÒ¿ÉÒÔÈà core dump ÔÚÐèÒªµÄʱºò²úÉú£¬ÄǾÍÕæµÄºÜ²»´í¡£ÎÒÄÜ ÕâÑù×öÂ𣬻òÕßÎҵõÈÖ±µ½·¢ÉúÒ»¸ö´íÎó£¿
¿ÉÒÔ£¬Çл»µ½ÁíÒ»¸ö¿ØÖÆÌ¨»òÕßÆð¶¯ xterm, Ö´ÐÐ
% ps
ÕÒµ½ÄãµÄ³ÌÐòµÄ½ø³ÌºÅ£¬È»ºóÖ´ÐÐ
% kill -ABRT pid
ÆäÖÐµÄ pid
¾ÍÊÇÄãÕÒµ½µÄ½ø³ÌºÅ¡£
Èç¹ûÄãµÄ³ÌÐòÏÝÈëÁËÒ»¸öÎÞÏÞÑ»·£¬ÕâÑù×ö¾ÍºÜÓÐÓô¦¡£Èç¹ûÄãµÄ³ÌÐò żȻµÃµ½ÁË SIGABRT Ðźţ¬»¹ÓÐһЩÀàËÆµÄÐźÅÒ²ÓÐͬÑù µÄ¹¦Óá£
»òÕߣ¬Äã¿ÉÒÔʹÓú¯Êý abort() ÔÚ×Ô¼ºµÄ³ÌÐò ÖвúÉúÒ»¸ö
core dump¡£Çë²Î¿¼ÊÖ²áµÄ abort(3)
À´Á˽â¸ü¶à¡£
Èç¹ûÄãÏëÔÚ×Ô¼ºµÄ³ÌÐòÖ®Íâ²úÉúÒ»¸ö core dump£¬¶ø²»ÈóÌÐòÖÕÖ¹£¬ ÄÇôÄã¿ÉÒÔÓÃÃüÁî gcore¡£Çë²Î¿¼ÊÖ²áµÄ gcore(1) Á˽â¸ü¶à¡£
¡¡¡¡µ±Äãдһ¸ö¼òµ¥µÄ³ÌÐò£¬Ö»ÓÐÒ»µ½Á½¸öÔ´ÎļþµÄʱºò£¬ÊäÈë
% cc file1.c file2.c
¡¡¡¡¾ÍûʲôÎÊÌ⣬µ«Èç¹ûÓкܶàÔ´Îļþ¾Í»áºÜ·³ÈË©¤©¤±àÒëµÄʱ¼äÒ²»áºÜ³¤¡£
¡¡¡¡Ò»¸ö·½·¨¾ÍÊÇʹÓÃÄ¿±êÎļþ£¬Ö»ÔÚÔ´ÎļþÓиıäµÄÇé¿öϲÅÖØÐ±àÒëÔ´Îļþ¡£ Òò´ËÄã¿ÉÒÔÕâÑù×ö£º
% cc file1.o file2.o ... file37.c ...
¡¡¡¡ÉϴαàÒëºó£¬file37.c ·¢ÉúÁ˸ı䣬µ«ÆäËûÎÄ ¼þûÓС£ÕâÑù×ö¿ÉÒÔÈñàÒë¹ý³Ì¿ìºÜ¶à£¬µ«ÊÇÒ²²»Äܽâ¾öÀÛÈ˵ÄÊäÈëÎÊÌâ¡£
¡¡¡¡»òÕßÎÒÃÇ¿ÉÒÔʹÓÃÒ»¸ö shell script À´½â¾öÊäÈëÎÊÌ⣬µ«ÊÇÒ²ÐèÒªÖØÐ±àÒë ËùÓÐÎļþ£¬ÔÚ´óÐÍÏîÄ¿ÉϺÜûÓÐЧÂÊ¡£
¡¡¡¡Èç¹ûÓгɰÙÉÏǧµÄÔ´ÎļþµÄ»°Ôõô°ì£¿Èç¹ûÎÒÃÇÔÚÓëºÜ¶àÈ˺Ï×÷д³ÌÐò£¬±ðÈË ¶ÔÔ´Îļþ½øÐÐÁËÐ޸ģ¬ÓÖûÓиæËßÄ㣬¸ÃÔõô°ì£¿
¡¡¡¡Ò²ÐíÎÒÃÇ¿ÉÒÔ°ÑÒÔÉÏÁ½ÖÖ·½·¨½áºÏ£¬Ð´Ò»ÖÖÏñ shell script Ò»ÑùµÄ¶«Î÷¡£Õâ ÖÖÎļþ°üº¬Ä³ÖÖ¼¼ÇÉ¿ÉÒÔ¾ö¶¨Ê²Ã´Ê±ºò¸Ã¶ÔÔ´Îļþ½øÐбàÒë¡£ÏÖÔÚËùÓÐÎÒÃÇÒªµÄ¾ÍÊÇ Ò»¸ö³ÌÐò¿ÉÒÔ¶®µÃÕâÖÖ¼¼ÇÉ£¬ÒòΪҪ¶®µÃÕâÖÖ¼¼ÇÉ£¬shell »¹Ã»ÄÇô´óµÄÄÜÄÍ¡£
¡¡¡¡Õâ¸ö³ÌÐò¾Í½Ð make¡£Ëü¶ÁÈëÒ»¸öÎļþ£¬½Ð makefile£¬Õâ¸öÎļþ¾ö¶¨ÁËÔ´ÎļþÖ®¼äµÄÒÀÀµ¹ØÏµ¡£¶øÇÒ ¾ö¶¨ÁËÔ´Îļþʲôʱºò¸Ã±àÒëʲôʱºò²»Ó¦¸Ã±àÒë¡£ÀýÈ磬ij¸ö¹æÔò¿ÉÒÔ˵ ¡° Èç¹û fromboz.o ±È fromboz.c Òª¾É£¬ Òâ˼¾ÍÊÇÓÐÈËÐÞ¸ÄÁË fromboz.c£¬Òò´ËÎÒÃÇÐèÒªÖØÐ±àÒëÕâ ¸öÎļþ¡£¡±Õâ¸ö makefile »¹ÓйæÔò֪ͨ make ¸Ã Ôõô ÖØÐ±àÒëÔ´Îļþ£¬Òò´Ë make ÊÇÒ»¸öÇ¿´óµÃ¶àµÄ¹¤¾ß¡£
¡¡¡¡makefile ͨ³£ºÍÏà¹ØµÄÔ´Îļþ±£´æÔÚͬһ¸öĿ¼Ï£¬¿ÉÒÔ½Ð×ö makefile£¬Makefile »òÕß MAKEFILE¡£´ó¶àÊý³ÌÐòÔ±»áʹÓà Makefile Õâ¸öÃû×Ö£¬ÒòΪÕâÑù¿ÉÒÔÈÃÕâ¸öÎļþ±»·ÅÔÚĿ¼ÁÐ ±íµÄ¶¥¶Ë£¬¿ÉÒÔºÜÈÝÒ׵ÿ´¼û¡£ [6]
¡¡¡¡ÕâÊÇÒ»¸ö·Ç³£¼òµ¥µÄ make Îļþ£º
foo: foo.c
cc -o foo foo.c
¡¡¡¡°üº¬Á½ÐУ¬Ò»ÐÐÊÇÒÀÀµ¹ØÏµ£¬Ò»ÐÐÊÇÖ´Ðж¯×÷¡£
¡¡¡¡ÒÀÀµ¹ØÏµµÄÄÇÒ»Ðаüº¬Á˳ÌÐòµÄÃû×Ö (½Ð×ö target)£¬½ô¸ú×ÅÒ»¸öðºÅ£¬È»ºóÊǿոñ£¬×îºóÊÇÔ´ÎļþµÄ Ãû×Ö¡£µ± make¶ÁÈëÕâÒ»ÐеÄʱºò£¬»á¼ì²é foo ÊÇ·ñ´æÔÚ£»Èç¹û´æÔÚ£¬¾Í±È½Ï foo ºÍ foo.c ×îºóµÄÐÞ¸Äʱ¼äÓÐʲ ô²»Í¬¡£Èç¹û foo ²»´æÔÚ£¬»òÕß±È foo.c Òª¾É£¬¾Í¼ì²éÖ´Ðж¯×÷ÄÇÒ»Ðп´¿´¸ÃÔõô×ö¡£»»¾ä»° ˵£¬¾ÍÊÇ foo.c ÐèÒªÖØÐ±àÒëµÄʱºò¸ÃÔõô°ì¡£
¡¡¡¡Ö´Ðж¯×÷ÄÇÒ»ÐÐÒÔÒ»¸ö tab (°´Ï tab) ¿ªÊ¼£¬È»ºóÊÇÄãÔÚÃüÁîÐÐϲúÉú foo ËùÖ´ÐеÄÃüÁî¡£Èç¹û foo ¹ýÆÚÁË£¬»òÕß²»´æÔÚ£¬make ¾Í»á Ö´ÐÐÕâ¸öÃüÁîÀ´²úÉú foo¡£»»¾ä»°Ëµ£¬Õâ¾ÍÊÇÖØÐ±àÒë foo.c µÄ¹æÔò¡£
¡¡¡¡Òò´Ë£¬µ±ÄãÊäÈë make ʱ£¬Ëü»áÈ·¶¨ foo ºÍ foo.c ÔÚÐÞ¸Äʱ¼äÉÏÊÇ·ñͬ ²½¡£Õâ¸öÔÔò¿ÉÒÔÔÚ Makefile ÀïÀ©Õ¹µ½³É°ÙÉÏǧµÄÄ¿±êÎÄ ¼þÉÏ©¤©¤Êµ¼ÊÉÏ£¬ÔÚ FreeBSD ÀÄãÖ»ÒªÔÚºÏÊʵÄĿ¼ÏÂÊäÈë make world ¾Í¿ÉÒÔ±àÒëÕû¸ö²Ù×÷ϵͳ£¡
¡¡¡¡makefile ÁíÒ»¸öÓÐÓõÄÌØµã¾ÍÊÇÄ¿±êÎļþ²»Ò»¶¨¾ÍÊdzÌÐò¡£ÀýÈ磬ÎÒÃÇ¿ÉÒÔ ÓÐÕâÑùµÄ make Îļþ¡£
foo: foo.c
cc -o foo foo.c
install:
cp foo /home/me
¡¡¡¡ÎÒÃÇ¿ÉÒÔÊäÈëÈçϵÄÃüÁî¸æËß make ¸ÃÖ´ÐÐÄĸöÄ¿±ê£º
% make target
¡¡¡¡make »áÖ»Ö´ÐÐÕâ¸öÄ¿±ê¶øºöÂÔÆäËûµÄÄ¿±ê¡£ÀýÈ磬Èç¹û ÎÒÃÇÊäÈë make foo£¬¾ÍÖ»ÓÐ foo ±»Ö´ÐУ¬±ØÒªµÄÇé¿öÏÂÖØÐ±àÒë foo ¶ø²»»á¼ÌÐøÖ´ÐÐ install Õâ¸öÄ¿±ê¡£
¡¡¡¡Èç¹ûÎÒÃÇÖ»ÊÇÊäÈë make Õâ¸öÃüÁmake ×Ü»áѰÕÒ µÚÒ»¸öÄ¿±ê£¬²¢ÇÒÔÚÖ´ÐÐÍêÒÔºó¾Í²»¹ÜÆäËûµÄÄ¿±êÁË¡£ÀýÈ磬Èç¹ûÎÒÃÇÊäÈë make foo£¬make ¾Í»áתµ½ foo Õâ¸öÄ¿±ê£¬ÔÚ±ØÒªµÄÇé¿öÏÂÖØÐ±àÒë foo£¬¶ø²»»áÖ´ÐÐ install Ä¿±ê£¬ È»ºó¾ÍÍ£Ö¹ÁË¡£
¡¡¡¡Ò»¶¨Òª×¢Ò⣬install Õâ¸öÄ¿±ê²»ÒÀÀµÈÎºÎÆäËû µÄ¶«Î÷£¡ÕâÒâζ×ÅÎÒÃÇÒ»µ©ÊäÈë make install£¬Õâ¸öÄ¿±ê ϵÄËùÓÐÃüÁî¶¼½«±»Ö´ÐС£ÕâÖÖÇé¿öÏ£¬foo ½«±»°²×°µ½Óà »§µÄ¼ÒĿ¼Ï¡£Ó¦ÓóÌÐòµÄ makefile ÕýÊÇÕâÑùдµÄ£¬ÒÔ±ã³ÌÐòÔÚÕýÈ·±àÒëºó¿ÉÒÔ±» °²×°µ½ÕýÈ·µÄĿ¼¡£
¡¡¡¡Òª³¢ÊÔ½âÊ͵ϰ»á±È½ÏÈÝÒ×ÈÃÈË»ìÏý¡£Èç¹ûÄ㲻̫¶® make ÊÇÈçºÎ¹¤×÷µÄ£¬×îºÃµÄ°ì·¨¾ÍÊÇÏÈдһ¸ö¼òµ¥µÄ³ÌÐòÀýÈç ¡°hello world¡± ÒÔ¼°ºÍÉÏÃæµÄÀý×ÓÏàͬµÄ make ÎļþÔÙȥʵÑ顣Ȼºó ÔÙ½øÒ»²½£¬Ê¹Óöà¸öÔ´Îļþ£¬»òÕßÈÃÄãµÄÔ´Îļþ°üº¬Ò»¸öÍ·Îļþ¡£ touch ÃüÁîÔÚÕâÀï¾Í·Ç³£ÓÐÓÃÁË©¤©¤ËüÄÜÈÃÔÚ²»¸Ä±äÎļþÄÚ ÈݵÄÇé¿öϸıäÎļþµÄÈÕÆÚ¡£
¡¡¡¡C Ô´ÂëµÄ¿ªÍ·¾³£ÓÐһϵÁб»°üº¬µÄÍ·Îļþ£¬ÀýÈç stdio.h¡£ÓÐһЩÊÇϵͳ¼¶µÄ Í·Îļþ£¬ÓÐһЩÊÇÄãÕýÔÚдµÄÏîÄ¿µÄÍ·Îļþ£º
#include <stdio.h> #include "foo.h" int main(....
¡¡¡¡ÒªÈ·¶¨ÔÚÄãµÄ foo.h ±»¸Ä±äÖ®ºó£¬Õâ¸öÎļþÒ²»á±»ÖØ Ð±àÒ룬¾ÍÒªÔÚÄãµÄ Makefile ÕâÑùд£º
foo: foo.c foo.h
¡¡¡¡µ±ÄãµÄÏîÄ¿±äµÃÔ½À´Ô½´ó£¬Äã×Ô¼ºµÄÍ·ÎļþÔ½À´Ô½¶àµÄʱºò£¬Òª×·×ÙËùÓÐÕâЩ
Í·ÎļþºÍËùÓÐÒÀÀµËüµÄÎļþ»áÊÇÒ»¼þÍ´¿àµÄÊÂÇé¡£Èç¹ûÄã¸Ä±äÁËÆäÖÐÒ»¸öÍ·Îļþ£¬È´
ÍüÁËÖØÐ±àÒëËùÓÐÒÀÀµËüµÄÔ´Îļþ£¬½á¹û»áÊǺÜʧÍûµÄ¡£gcc
ÓÐÒ»¸öÑ¡Ïî¿ÉÒÔ·ÖÎöÄãµÄÔ´ÎļþÈ»ºó²úÉúÒ»¸öÍ·ÎļþµÄÁбíºÍËüµÄÒÀÀµ¹ØÏµ£º -MM¡£
¡¡¡¡Èç¹ûÄã°ÑÏÂÃæµÄÄÚÈݼӵ½ÄãµÄ Makefile ÀïÃæ£º
depend:
gcc -E -MM *.c > .depend
¡¡¡¡È»ºóÔËÐÐ make depend£¬¾Í»á²úÉúÒ»¸ö .depend£¬ÀïÃæ°üº¬ÁËÄ¿±êÎļþ£¬C ÎļþºÍÍ·ÎļþµÄÁÐ±í£º
foo.o: foo.c foo.h
¡¡¡¡Èç¹ûÄã¸Ä±äÁË foo.h£¬ÏÂÒ»´ÎÔËÐÐ make µÄʱºò£¬ËùÓÐÒÀÀµ foo.h µÄÎļþ ¾Í»á±»ÖØÐ±àÒë¡£
¡¡¡¡Ã¿Ò»´ÎÄãÔö¼ÓÒ»¸öÍ·ÎļþµÄʱºò£¬±ðÍüÁËÔËÐÐÒ»´Î make depend¡£
¡¡¡¡Ð´ Makefile Îļþ¿ÉÒÔÊǺÜÄѵÄÒ»¼þÊÂÇé¡£ÐÒÔ˵ÄÊÇ£¬Ïñ FreeBSD ÕâÑù»ùÓÚ BSD µÄϵͳ£¬ÏµÍ³±¾Éí¾Í×Ô´øÁËһЩ·Ç³£Ç¿´óµÄ Makefile Îļþ¡£Ò»¸öºÜºÃµÄÀý×Ó¾Í ÊÇ FreeBSD µÄ ports ϵͳ¡£ÕâÀïÁгöÁËÒ»¸öµäÐ굀 ports µÄ Makefile µÄÖØÒª²¿·Ö£º
MASTER_SITES= ftp://freefall.cdrom.com/pub/FreeBSD/LOCAL_PORTS/ DISTFILES= scheme-microcode+dist-7.3-freebsd.tgz .include <bsd.port.mk>
¡¡¡¡ÏÖÔÚ£¬Èç¹ûÎÒÃǽøÈëÕâ¸ö port µÄĿ¼ȻºóÊäÈë make£¬¾ÍÓÐÈçϵIJ½Öè·¢Éú£º
¼ì²éÕâ¸ö port µÄÔ´ÎļþÔÚϵͳÖÐÊÇ·ñ´æÔÚ¡£
Èç¹û²»´æÔÚ£¬¸ù¾Ý MASTER_SITES Ö¸¶¨µÄ URL£¬ÏµÍ³ ½«»áʹÓÃ
FTP Á¬½ÓÏÂÔØÕâ¸öÔ´Îļþ¡£
¼ÆËãÔ´ÎļþµÄУ¼ìÂ룬ȻºóÓëÏÈǰ±»¼Ç¼µÄ£¬ÒÑÖªµÄ£¬ÍêºÃµÄÔ´ÎļþУ¼ì Âë¶Ô±È¡£ÕâÑù×ö¾ÍÊÇҪȷÈÏÔ´ÎļþÔÚ´«Ë͹ý³ÌÖÐûÓÐË𻵡£
Ö´ÐÐÈκÎÈÃÔ´Îļþ¿ÉÒÔÔÚ FreeBSD ÉÏÔËÐеÄÐ޸ĩ¤©¤Õâ½Ð×ö ´ò²¹¶¡¡£
Íê³ÉÔ´ÎļþÐèÒªµÄÌØÊâµÄÅäÖá£(ºÜ¶à UNIX ³ÌÐòÔÚ±»±àÒëµÄʱºò¶¼»á ¼ì²â×Ô¼ºÕýÔÚÄĸö°æ±¾µÄ UNIX ÉÏÃæÒÔ¼°ÄÄЩ¿ÉÑ¡µÄ UNIX ÌØÐÔÊÇ´æÔÚµÄ ©¤©¤ÕâÒ»²½ÀïÃæ£¬ÔÚ FreeBSD µÄ ports ¿ò¼ÜÖÐÕâЩ³ÌÐò½«»áÈ¡µÃÕâЩÐÅÏ¢¡£
±àÒë³ÌÐòµÄÔ´´úÂ롣ʵ¼ÊÉÏ£¬ÎÒÃǽ«½øÈëµ½Ô´´úÂë½âѹºóÉú³ÉµÄĿ¼ÖУ¬ È»ºóÔÙÖ´ÐÐ make©¤©¤³ÌÐò×ÔÉíµÄ make Îļþ°üº¬Á˱à Òë³ÌÐòËùÐèÒªµÄÐÅÏ¢¡£
ÏÖÔÚÎÒÃÇÓÐÁËÒ»¸ö±àÒëºÃµÄ³ÌÐò¡£Èç¹ûÎÒÃÇÔ¸Ò⣬¿ÉÒÔ²âÊÔһϣ»µ±ÎÒÃÇ ¶Ô³ÌÐòÂúÒâÁËÒԺ󣬾ÍÊäÈë make install¡£Õâ¸öÃüÁî ½«°Ñ³ÌÐò×ÔÉí»¹ÓÐÈκÎËüÒÀÀµµÄÎļþ¶¼¸´ÖƵ½ÕýÈ·µÄλÖã»ÔÚÒ»¸ö °üÊý¾Ý¿â Öлá¼ÓÉÏÒ»Ìõ¼Ç¼ÒÔ±ãÎÒÃǸıäÏë·¨µÄʱºò¿É ÒԺܼòµ¥µÄɾ³ýµôÕâ¸ö port¡£
¡¡¡¡ÏÖÔÚÎÒÏëÄãÒ»¶¨»áͬÒ⣬¶ÔÓÚÒ»¸öÖ»ÓÐËÄÐеĽű¾£¬ÕâÈÃÈËÓ¡Ïó·Ç³£Éî¿Ì£¡
¡¡¡¡ÃØÃܾÍÔÚ×îºóÒ»ÐУ¬ÕâÒ»ÐиæËß make È¥ÕÒϵͳ¼¶µÄ make Îļþ£¬½Ð×ö bsd.port.mk¡£ÒªºöÂÔÕâÒ»Ðкܼòµ¥£¬µ«ÊÇ ¾ÍÊÇÕâÒ»ÐÐ×öÁËËùÓдÏÃ÷µÄ¹¤×÷©¤©¤ÓÐÈËÒѾдºÃÁËÒ»¸ö make Îļþ£¬Èà make È¥×ö¸Õ²ÅÌáµ½µÄ²½Öè (¼ÓÉÏһЩÎÒûÌáµ½µÄ£¬°üÀ¨¶Ô¿ÉÄÜ µÄ´íÎóµÄ´¦Àí)¡£¶øÇÒÈκÎÈ˶¼¿ÉÒÔÔÚ×Ô¼ºµÄ make ÎļþÖмòµ¥µÄ¼ÓÉÏÒ»ÐÐÃüÁîÀ´Ê¹ ÓÃÕâ¸öÎļþ£¡
¡¡¡¡Èç¹ûÄãÏë¿´¿´ÕâЩϵͳ¼¶µÄ make Îļþ£¬¿ÉÒÔµ½ /usr/share/mk ÀïÃæÕÒÕÒ¡£²»¹ý×îºÃµÈµ½Äã¶Ô make ÎļþÓÐ ÁËÒ»µãµã¸ÐÐԵľÑéÒÔºóÔÙÈ¥¿´¡£ÒòΪÕâЩÎļþ¶¼·Ç³£¸´ÔÓ(¶øÇÒÈç¹ûÄãÔÚ¿´µÄʱ ºò£¬×îºÃ×¼±¸Ò»´ó±Å¨Å¨µÄÂ̲裡)¡£
¡¡¡¡Make ÊÇÒ»¸ö·Ç³£Ç¿´óµÄ¹¤¾ß£¬ÉõÖÁ»¹¿ÉÒÔ×ö±ÈÒÔÉÏÌáµ½ µÄ¸ü¸´ÔӵŤ×÷¡£²»ÐÒµÄÊÇ£¬make Óв»Í¬µÄ°æ±¾£¬¸÷¸ö°æ±¾Ö® ¼ä²î±ð»¹ºÜ´ó¡£Ñ§Ï°Ê¹ÓÃÕâ¸öÃüÁîµÄ×îºÃµÄ·½·¨¿ÉÄܾÍÊÇÔĶÁÎĵµ©¤©¤Ï£ÍûÕâÒ» ÕÂÄܹ»¸øÄãµÄѧϰ´òÒ»¸ö»ù´¡¡£
¡¡¡¡FreeBSD ×Ô´øµÄ make ½Ð×ö Berkeley make£» /usr/share/doc/psd/12.make ÊÇÒ»¸ö½Ì³Ì¡£Òª¿´Õâ¸ö½Ì³Ì£¬ ÔÚÄǸöĿ¼ÖÐÖ´ÐÐ
% zmore paper.ascii.gz
¡¡¡¡ Ports ÖеĺܶàÓ¦ÓóÌÐòʹÓà GNU make£¬Ëü °üº¬Ò»¸ö·Ç³£°ôµÄ ¡°info¡± Ò³ÃæµÄ¼¯ºÏ¡£Èç¹ûÄã°²×°ÁËÈκÎÒ»¸öÕâÑù µÄ port£¬GNU make ¾Í»á×Ô¶¯±»°²×°Îª gmake ÃüÁî¡£µ±È»ÄãÒ²¿ÉÒÔÓÃÕý³£µÄ port »ò package µÄ·½Ê½ À´°²×°¡£
¡¡¡¡Òª²é¿´ GNU make µÄ info Ò³Ãæ£¬Äã±ØÐë±à¼ /usr/local/info ·¾¶Ï嵀 dir ÎÄ ¼þ£¬ÔÚÆäÖÐÌí¼ÓÒ»¸öÌõÄ¿¡£ÐèÒªÌí¼ÓµÄÄÚÈÝ¿ÉÒÔÊÇÕâÑù
* Make: (make). The GNU Make utility.
¡¡¡¡Ò»µ©ÄãÍê³É±à¼£¬¾Í¿ÉÒÔÊäÈëÃüÁî info È»ºó´Ó²Ë µ¥ÖÐÑ¡Ôñ make (»òÕßÔÚ Emacs ÖУ¬ÊäÈë C-h i)¡£
¡¡¡¡FreeBSD ×Ô´øµÄµ÷ÊÔÆ÷½Ð gdb (GNU debugger)¡£ÒªÔËÐУ¬ÊäÈë
% gdb progname
¡¡¡¡È»¶ø´ó¶àÊýÈËϲ»¶ÔÚ Emacs ÖÐÔËÐÐÕâ¸öÃüÁî¡£ ¿ÉÒÔÕâÑùÀ´Æð¶¯Õâ¸öÃüÁ
M-x gdb RET progname RET
¡¡¡¡µ÷ÊÔÆ÷ÄÜÈÃÄãÔÚÒ»¸ö¿É¿ØÖƵĻ·¾³ÖÐÔËÐÐÒ»¸ö³ÌÐò¡£ÀýÈ磬Äã¿ÉÒÔÒ»´ÎÔËÐÐ³Ì ÐòµÄÒ»ÐдúÂ룬¼ì²é±äÁ¿µÄÖµ£¬¸Ä±äÕâЩֵ£¬»òÕßÈóÌÐòÔËÐе½Ä³¸ö¶¨µãÈ»ºóÍ£Ö¹µÈ µÈ¡£ÄãÉõÖÁ¿ÉÒÔµ÷ÊÔÄںˣ¬µ±È»ÕâÑù»á±ÈÎÒÃǽ«ÒªÌÖÂÛµÄÎÊÌâÒª¶àÒ»µãµã¼¼ÇÉ¡£
¡¡¡¡gdb Óзdz£°ôµÄÔÚÏß°ïÖú£¬»¹ÓÐͬÑù°ôµÄ info Ò³Ãæ¡£ Òò´ËÕâÒ»ÕÂÎÒÃÇ»á°Ñ×¢ÒâÁ¦¼¯Öе½Ò»Ð©»ù±¾µÄÃüÁîÉÏ¡£
¡¡¡¡×îºó£¬Èç¹ûÄ㲻ϰ¹ßÕâ¸öÃüÁîµÄÃüÁîÐнçÃæ£¬ÔÚ ports Öл¹ÓÐÒ»¸öËüµÄͼÐΠǰ¶Ë (xxgdb)¡£
¡¡¡¡ÕâÒ»ÕÂ×¼±¸Ö»½éÉÜ gdb µÄʹÓ÷½·¨£¬¶ø²»»áÇ£Éæµ½ÌØÊâ µÄÎÊÌâ±ÈÈçµ÷ÊÔÄںˡ£
¡¡¡¡Òª×î´óÏ޶ȵÄÀûÓà gdb£¬ÐèҪʹÓà -g Õâ¸öÑ¡ÏîÀ´±àÒëÄãµÄ³ÌÐò¡£Èç¹ûÄãûÓÐÕâÑù×ö£¬ÄÇôÄãÖ»»á¿´
µ½ÄãÕýÔÚµ÷ÊԵĺ¯ÊýÃû×Ö£¬¶ø²»ÊÇËüµÄÔ´´úÂë¡£Èç¹û gdbÆð¶¯
ʱÌáʾ£º
... (no debugging symbols found) ...
¡¡¡¡Äã¾ÍÖªµÀÄãµÄ³ÌÐòÔÚ±àÒëµÄʱºòûÓÐʹÓà -g Ñ¡Ïî¡£
¡¡¡¡µ± gdb ¸ø³öÌáʾ·û£¬ÊäÈë break
main¡£Õâ¾ÍÊǸæËßµ÷ÊÔÆ÷Ìø¹ý³ÌÐòÖÐÔ¤ÏÈÉèÖõĴúÂ룬´ÓÄãµÄ´úÂëµÄ×î ¿ªÍ·¿ªÊ¼¡£È»ºóÊäÈë
run À´¿ªÊ¼ÄãµÄ³ÌÐò©¤©¤Õâ»á´Ó
Ô¤ÏÈÉèÖõĴúÂ뿪ʼȻºóÔÚµ÷ÊÔÆ÷µ÷Óà main() µÄʱºò¾ÍÍ£
ÏÂÀ´¡£(Èç¹ûÄãÔøÃÔ»ó main() ÊÇÔÚÄÄÀï±»µ÷Óõģ¬ÏÖÔÚÓ¦¸Ã
Ã÷°×Á˰ɣ¡)
¡¡¡¡ÏÖÔÚÄã¿ÉÒÔÒ»²½Ò»²½À´¼ì²éÄãµÄ³ÌÐò£¬°´Ï nÒ»´Î¾Í²é Ò»ÐС£Ò»µ©ÄãÅö¼ûÁËÒ»¸öº¯Êýµ÷Ó㬿ÉÒÔÊäÈë f ´Óº¯Êýµ÷ÓÃÖÐ Í˳öÀ´¡£Äã¿ÉÒÔÊäÈë up »ò down À´¿ìËÙ ¼ì²éÕâ¸öµ÷Óá£
¡¡¡¡ÕâÀïÁгöÁËÒ»¸ö¼òµ¥µÄÀý×Ó¡£Õ¹Ê¾ÁËÔõÑùÓà gdb ¶¨Î»Ò»¸ö´í Îó¡£ÕâÊÇÎÒÃǵijÌÐò(ÆäÖÐÓÐÒ»¸öÃ÷ÏԵĴíÎó)£º
#include <stdio.h>
int bazz(int anint);
main() {
int i;
printf("This is my program\n");
bazz(i);
return 0;
}
int bazz(int anint) {
printf("You gave me %d\n", anint);
return anint;
}
¡¡¡¡Õâ¸ö³ÌÐò¸ø i ¸³Öµ 5
²¢°ÑËü´«µÝ¸ø Ò»¸öº¯Êý bazz()£¬Õâ¸öº¯Êý½«´òÓ¡³öÎÒÃǸø³öµÄÊýÖµ¡£
¡¡¡¡ÎÒÃÇÏÖÔÚ±àÒë²¢ÔËÐÐÕâ¸ö³ÌÐò£¬ÎÒÃÇ»áµÃµ½
% cc -g -o temp temp.c % ./temp This is my program anint = 4231
¡¡¡¡µ«Õâ²¢²»ÊÇÎÒÃÇÏëÒªµÄ£¡Ó¦¸Ã¿´¿´µ½µ×·¢ÉúÁËʲô£¡
% gdb temp GDB is free software and you are welcome to distribute copies of it under certain conditions; type "show copying" to see the conditions. There is absolutely no warranty for GDB; type "show warranty" for details. GDB 4.13 (i386-unknown-freebsd), Copyright 1994 Free Software Foundation, Inc. (gdb) break main Skip the set-up code Breakpoint 1 at 0x160f: file temp.c, line 9. gdb puts breakpoint atmain()(gdb) run Run as far asmain()Starting program: /home/james/tmp/temp Program starts running Breakpoint 1, main () at temp.c:9 gdb stops atmain()(gdb) n Go to next line This is my program Program prints out (gdb) s step intobazz()bazz (anint=4231) at temp.c:17 gdb displays stack frame (gdb)
¡¡¡¡Í£×¡£¡Ôõô anint »áÊÇ 4231£¿ÄѵÀ ÎÒÃÇûÓÐÔÚº¯Êý main()
ÖÐÉ趨Ϊ 5 Âð£¿ÏÖÔÚÎÒÃÇתµ½ main()
À´¿´¿´¡£
(gdb) up Move up call stack
#1 0x1625 in main () at temp.c:11 gdb displays stack frame
(gdb) p i Show us the value of i
$1 = 4231 gdb displays 4231
¡¡¡¡Å¶£¬ÌìÄÄ£¡¿´¿´Õâ´úÂ룬ÎÒÃÇÍüÁ˳õʼ»¯ i ÁË¡£±¾À´ÎÒÃÇ
ÊÇÏëµÄ
...
main() {
int i;
i = 5;
printf("This is my program\n");
...
¡¡¡¡µ«ÊÇÎÒÃÇÍüÁË i=5; ÕâÒ»ÐС£ÒòΪÎÒÃÇûÓгõʼ»¯ i£¬Õâ¸ö±äÁ¿ÔÚ³ÌÐòÔËÐеÄʱºò¾Í´¢´æÁËżȻÔÚÄÇ¿éÄÚ´æÖдæÔÚµÄ
ÈÎÒâÖµ¡£
×¢Òâ: gdb »áÏÔʾÎÒÃǽøÈë»òÀ뿪һ¸öº¯ÊýʱµÄÕ»µÄÖµ¡£¼´ ʹÊÇÎÒÃÇÔÚʹÓà up »ò down µÄʱºò¡£ Õâ»áÏÔʾº¯ÊýµÄÃû³Æ»¹ÓвÎÊýµÄÖµ£¬ÈÃÎÒÃÇÖªµÀ×Ô¼ºµÄλÖÃÒÔ¼°ÕýÔÚ·¢ÉúʲôÊÂÇé¡£ (Õ»ÄÜ´¢´æ³ÌÐòÔÚµ÷Óú¯ÊýµÄʱʹÓõIJÎÊý£¬ÒÔ¼°µ÷ÓÃʱµÄλÖã¬ÒÔ±ã³ÌÐòÔÚ´Óº¯ Êýµ÷ÓýáÊøºóÖªµÀ×Ô¼ºµÄλÖá£)
¡¡¡¡»ù±¾ÉÏ core Îļþ¾ÍÊÇÒ»¸ö°üº¬Á˳ÌÐò±ÀÀ£Ê±Õâ¸ö½ø³ÌµÄËùÓÐÐÅÏ¢µÄÎļþ¡£ÔÚÄÇ ¡°Ò£Ô¶µÄ»Æ½ðÄê´ú¡±£¬³ÌÐòÔ±²»µÃ²»°Ñ core ÎļþÒÔÊ®Áù½øÖƵķ½Ê½ÏÔʾ ³öÀ´£¬È»ºóÂúÍ·´óº¹µÄÔĶÁ»úÆ÷ÂëµÄÊֲᣬµ«ÊÇÏÖÔÚÊÂÇé¾Í¼òµ¥µÃ¶àÁË¡£Ë³±ã˵һÏ£¬ ÔÚ FreeBSD ºÍÆäËûµÄ 4.4BSD ϵͳÏ£¬core Îļþ¶¼½Ð×÷ progname.core ¶ø²»ÊǼòµ¥½Ð core£¬ÕâÑù¿ÉÒÔºÜÇå³þµÄ±íʾ³öÕâ¸ö core ÎļþÊÇÊôÓÚÄĸö ³ÌÐò¡£
¡¡¡¡Òª¼ì²éÒ»¸ö core Îļþ£¬ÒÔͨ³£µÄ·½Ê½Æð¶¯ gdb¡£²»Òª ÊäÈë break »òÕß run£¬¶øÒªÊäÈë
(gdb) core progname.core
¡¡¡¡Èç¹ûÄãûÓÐºÍ core ÎļþÔÚͬһ¸öĿ¼£¬Ê×ÏÈÒªÖ´ÐÐ dir /path/to/core/file¡£
¡¡¡¡ÄãÓ¦¸Ã¿ÉÒÔ¿´¼û£º
% gdb a.out GDB is free software and you are welcome to distribute copies of it under certain conditions; type "show copying" to see the conditions. There is absolutely no warranty for GDB; type "show warranty" for details. GDB 4.13 (i386-unknown-freebsd), Copyright 1994 Free Software Foundation, Inc. (gdb) core a.out.core Core was generated by `a.out'. Program terminated with signal 11, Segmentation fault. Cannot access memory at address 0x7020796d. #0 0x164a in bazz (anint=0x5) at temp.c:17 (gdb)
¡¡¡¡ÕâÖÖÇé¿öÏ£¬ÔËÐеijÌÐò½Ð a.out£¬Òò´Ë core Îļþ ¾Í½Ð a.out.core¡£ÎÒÃÇÖªµÀ³ÌÐò±ÀÀ£µÄÔÒò¾ÍÊǺ¯Êý bazz ÊÔͼ·ÃÎÊÒ»¿é²»ÊôÓÚËüµÄÄÚ´æ¡£
¡¡¡¡ÓÐʱºò£¬ÄÜÖªµÀÒ»¸öº¯ÊýÊÇÔõô±»µ÷ÓõÄÊǷdz£ÓÐÓô¦µÄ¡£ÒòΪÔÚÒ»¸ö¸´Ô ³ÌÐòÀïÃæÎÊÌâ¿ÉÄܻᷢÉúÔÚº¯Êýµ÷ÓÃÕ»ÉÏÃæºÜÔ¶µÄµØ·½¡£ÃüÁî bt »áÈà gdb Êä³öº¯Êýµ÷ÓÃÕ»µÄ»ØËÝ×·×Ù¡£
(gdb) bt #0 0x164a in bazz (anint=0x5) at temp.c:17 #1 0xefbfd888 in end () #2 0x162c in main () at temp.c:11 (gdb)
¡¡¡¡º¯Êý end() ÔÚÒ»¸ö³ÌÐò±ÀÀ£µÄʱºò½«±»µ÷Óã»ÔÚ±¾Àý
ÖУ¬º¯Êý bazz() ÊÇ´Ó main()
Öб» µ÷Óõġ£
¡¡¡¡gdb Ò»¸ö×ÖµÄÌØÐÔ¾ÍÊÇËüÄÜÕ³¸¶µ½Ò»¸öÒѾÔÚÔËÐÐ µÄ³ÌÐòÉÏ¡£µ±È»£¬ÎÒÃǵÃÊ×Ïȼٶ¨ÄãÓÐ×ã¹»µÄȨÏÞÕâÑùÈ¥×ö¡£Ò»¸ö³£¼ûµÄÎÊÌâ¾ÍÊÇ£¬ µ±ÎÒÃÇÔÚ×·×ÙÒ»¸ö°üº¬×Ó½ø³ÌµÄ³ÌÐòʱ£¬Èç¹ûÄãҪ׷×Ù×Ó½ø³Ì£¬µ«Êǵ÷ÊÔÆ÷Ö»ÔÊÐíÄã ×·×Ù¸¸½ø³Ì¡£
¡¡¡¡ÄãÒª×öµÄ¾ÍÊÇÆð¶¯ÁíÒ»¸ö gdb£¬È»ºóÓà ps ÕÒ³ö×Ó½ø³ÌµÄ½ø³ÌºÅ¡£È»ºóÔÚ gdbÖÐÖ´ÐÐ
(gdb) attach pid
¡¡¡¡¾Í¿ÉÒÔÏñƽʱһÑùµ÷ÊÔÁË¡£
¡¡¡¡¡°ÕâºÜºÃ£¬¡±Äã¿ÉÄÜÔÚÏ룬¡°µ±ÎÒÕâÑù×öÁËÒÔºó£¬×Ó½ø³Ì¾Í »á²»¼ûÁË¡±¡£±ðÅ£¬Ç×°®µÄ¶ÁÕߣ¬ÎÒÃÇ¿ÉÒÔÕâÑùÀ´×ö(²ÎÕÕ gdb µÄ info Ò³)
...
if ((pid = fork()) < 0) /* _Always_ check this */
error();
else if (pid == 0) { /* child */
int PauseMode = 1;
while (PauseMode)
sleep(10); /* Wait until someone attaches to us */
...
} else { /* parent */
...
¡¡¡¡ÏÖÔÚËùÓÐÄãÒª×öµÄ¾ÍÊÇÕ³¸¶µ½×Ó½ø³Ì£¬ÉèÖà PauseMode Ϊ
0£¬È»ºóµÈ´ýº¯Êý sleep ·µ»Ø£¡
¡¡¡¡ºÜ²»ÐÒ£¬UNIX ϵͳ²»ÏñÆäËûµÄϵͳÄÇÑù´øÓÐÒ»ÖÖ¡°ÄãÒªµÄÈ«ÓУ¬²»ÒªµÄ¸ü¶à¡±µÄ£¬°üº¬ËùÓÐ µÄ£¬¾Þ´óµÄ³ÌÐò¿ª·¢»·¾³¡£ [7] µ«ÊÇ£¬Äã¿ÉÒԴһ¸ö×Ô¼ºµÄ¿ª·¢»·¾³¡£¿ÉÄܲ»»áºÜƯÁÁ£¬Ò²²»»á·Ç³£¼¯³É»¯¡£µ« ÊÇÄã¿ÉÒÔ°´×Ô¼ºµÄÐèÇóÀ´´î½¨¡£¶øÇÒÊÇÃâ·ÑµÄ¡£Ä㽫ӵÓÐËùÓеÄÔ´Âë¡£
¡¡¡¡ÎÊÌâµÄ´ð°¸¾ÍÊÇ Emacs¡£Èç½ñÓкܶàÈËÑá¶ñËü£¬Ò²Óкܶàϲ»¶Ëü¡£Èç¹ûÄãÊÇǰ ÕßÖ®Ò»£¬¿ÖÅÂÕâÒ»Õ²»»áÒýÆðÄãµÄÐËȤ¡£¶øÇÒ£¬ÄãÐèÒªÒ»¶¨Á¿µÄÄÚ´æÀ´ÔËÐÐ Emacs©¤©¤ÎÄ×Ö½çÃæÎÒÍÆ¼ö 8MB£¬¶øÔÚ X ÏÂ×îÉÙÐèÒª 16MB À´»ñµÃºÏÀíµÄÐÔÄÜ¡£
¡¡¡¡Emacs »ù±¾ÉÏÊÇÒ»¸ö¸ß¶È¿ÉÅäÖÃµÄ±à¼Æ÷©¤©¤Êµ¼ÊÉÏ£¬Emacs ¸üÏñÒ»¸ö²Ù ×÷ϵͳ¶ø²»ÏñÒ»¸ö±à¼Æ÷£¡ºÜ¶à¿ª·¢ÈËÔ±ºÍϵͳ¹ÜÀíÔ±°ÑËùÓеÄʱ¼ä¶¼»¨ÔÚ Emacs ÀïÃæ£¬Ö»ÔÚÍ˳öµÇ½µÄʱºò²ÅÍ˳öÕâ¸ö±à¼Æ÷¡£
¡¡¡¡ÒªÔÚÕâÀï¸ÅÀ¨ËùÓÐ Emacs ÄÜ×öµÄÊÂÇéÊDz»¿ÉÄܵ쬵«ÊÇÕâÀïÁгöÁËһЩ¿ª·¢ÈËÔ±¿ÉÄܸРÐËȤµÄÌØÐÔ£º
·Ç³£Ç¿´óµÄ±à¼Æ÷£¬ÔÊÐí¶Ô×Ö´®ºÍÕýÔò±í´ïʽ(ÀàÐÍ)½øÐÐËÑË÷ºÍÌæ´ú¡£Ìø ÖÁ¿é½á¹¹µÄ¿ªÊ¼/ĩ⣬µÈµÈ¡£
ÏÂÀ²Ëµ¥ºÍÔÚÏß°ïÖú¡£
ÓïÑÔÏà¹ØµÄÓï·¨¸ßÁÁÏÔʾºÍËõ½ø¡£
ÍêÈ«¿ÉÅäÖá£
Äã¿ÉÒÔÔÚ Emacs ÖбàÒëºÍµ÷ÊÔ³ÌÐò¡£
³öÏÖ±àÒë´íÎóÒÔºó£¬Äã¿ÉÒÔÖ±½ÓÌøÖÁ³öÎÊÌâµÄÄÇÒ»ÐдúÂë¡£
±È½ÏÓÑºÃµÄ info µÄǰ¶Ë£¬¿ÉÒÔÔĶÁ GNU ³¬Îı¾ÎÄ µµ¡£µ±È»°üÀ¨ Emacs ×Ô¼ºµÄÎĵµ¡£
ÓÑºÃµÄ gdb µÄǰ¶Ë£¬ÔÊÐíÄãÔÚ×·×Ù³ÌÐòµÄʱºò²é¿´ Ô´´úÂë¡£
Äã¿ÉÒÔÔÚ±àÒë³ÌÐòµÄͬʱ²é¿´ Usenet ÐÂÎźÍÔĶÁÓʼþ¡£
¡¡¡¡ºÁÎÞÒÉÎÊ»¹Óкܶ౻ÎÒºöÂԵġ£
¡¡¡¡ÔÚ FreeBSD ÉÏ¿ÉÒÔÓà the Emacs port À´°²×° Emacs¡£
¡¡¡¡Ò»µ©°²×°ºÃÁË£¬¾Í¿ÉÒÔÔËÐÐ Emacs£¬È»ºóÊäÈë C-h t ÔĶÁ Emacs ½Ì³Ì©¤©¤Òâ˼¾ÍÊÇ˵°´×¡ control£¬ÔÙ°´ h£¬ËÉ¿ª control£¬È»ºóÔÙ°´ t¡£(»òÕߣ¬Äã¿ÉÒÔʹÓÃÊó ±ê´Ó Help ²Ëµ¥ÖØÑ¡Ôñ Emacs Tutorial)¡£
¡¡¡¡¾¡¹Ü Emacs Óв˵¥£¬×îºÃ»¹ÊÇѧϰһϼü×éºÏ¡£ÒòΪÔÚÄã±à¼µÄʱºò£¬Á¬Ðø µØ°´ÏÂһϵÁа´¼ü£¬±ÈÕÒµ½Êó±êÈ»ºóµã»÷ÕýÈ·µÄµØ·½Òª¿ìµÃ¶à¡£¶øÇÒ£¬µ±ÄãºÍÒ»¸öÀÏ Emacs Óû§½»Á÷µÄʱºò£¬Äã¾³£»áÅöµ½ÏÂÁеıí´ï ¡°M-x replace-s RET foo RET bar RET¡±£¬Òò´ËÖªµÀÕâЩ¶«Î÷»áºÜÓÐÓ᣶øÇÒÔÚÈÎ ºÎÇé¿öÏ£¬Emacs µÄ²Ëµ¥ÀïÓÀÔ¶·Å²»ÏÂËùÓÐËüʵ¼ÊÉÏÓµÓеÄÓÐÓõŦÄÜ¡£
¡¡¡¡ÐÒÔ˵ÄÊÇ£¬ºÜÈÝÒ×ѧϰ¼ü×éºÏ¡£ÒòΪ²Ëµ¥Ã¿¸öÏîÄ¿µÄºóÃæ¶¼±êʾÁ˶ÔÓ¦µÄ¼ü×é ºÏ¡£ÎҵĽ¨Òé¾ÍÊÇ£¬Ê×ÏÈʹÓò˵¥Ï±ÈÈ磬´ò¿ªÒ»¸öÎļþ£¬Ö±µ½ÄãÃ÷°×ÁËÆäÖеİ Ã²¢ÇÒ¿ÉÒÔ×ÔÐŵÄʹÓÃÕâ¸ö²Ëµ¥ÏÔÙ³¢ÊÔʹÓà C-x C-f¡£µ±ÄãÒ»µãÀ§ÄÑҲûÓÐµÄ Ê±ºò£¬¾Í¿ÉÒÔתµ½ÏÂÒ»¸ö²Ëµ¥Ïî¼ÌÐøÁ·Ï°¡£
¡¡¡¡Èç¹û¼Ç²»×¡Ò»¸öÌØÊâµÄ¼ü×éºÏµ½µ×ÄÜ×öʲô£¬¿ÉÒÔ´Ó Help ²Ëµ¥ÖÐÑ¡Ôñ Describe Key £¬È»ºóÊäÈëÕâ¸ö¼ü×éºÏ©¤©¤Emacs »á¸æËßÄãËüµ½µ×ÄܸÉʲô¡£ÄãÒ²¿ÉÒÔµã»÷ Command AproposÀ´Ñ°ÕÒ°üº¬Ò»¸öÌØ¶¨´ÊµÄÃüÁ ºóÃæ½ô¸úµÄ¾ÍÊǼü×éºÏ¡£
¡¡¡¡ÁíÍ⣬¸Õ²ÅÄǸö±í´ïʽµÄÒâ˼¾ÍÊǰ´×¡ Meta ¼ü£¬°´Ï x ¼ü£¬ËÉ¿ª Meta ¼ü£¬ÊäÈë replace-s (replace-stringµÄ¼òд ©¤©¤Emacs ÁíÒ»¸öÌØÐÔ¾ÍÊÇÃüÁîµÄËõд)£¬°´Ï return¼ü£¬Êä Èë foo(ÄãÒªÌæ»»µÄ×Ö´®)£¬ÊäÈë bar (ÄãÒªÓÃÀ´Ìæ»» foo µÄ×Ö´®) È»ºóÔٴΰ´Ï return ¼ü¡£ Emacs ¾Í»á°´ÄãµÄÒªÇó½øÐÐËÑË÷ºÍÌæ»»²Ù×÷¡£
¡¡¡¡ÄãÒ»¶¨ÔÚÒÉ»ó Meta ¼üÊǸöʲô¼ü¡£ÕâÊÇÒ»¸öºÜ¶à UNIX ¹¤×÷Õ¾¶¼ÓеÄÌØÊâµÄ¼ü¡£ºÜ²»ÐÒ£¬PCûÓÐÕâÑùÒ»¸ö¼ü¡£Í¨³£ÔÚ PC ÉÏÕâ¸ö¼üÊÇ alt ¼ü(Èç¹ûÄãÔËÆø²»ºÃ£¬Õâ¸ö¼üÔÚÄãµÄ PC ÉÏ»áÊÇ escape ¼ü)¡£
¡¡¡¡Å¶£¬ÒªÍ˳ö Emacs£¬¼üÈë C-x C-c (Òâ˼¾ÍÊǰ´×¡ control ¼ü£¬°´Ï x£¬°´Ï c£¬ÔÙËÉ¿ª control ¼ü)¡£Èç¹ûÄ㻹ÓÐÒѾ´ò ¿ªµÄδ±£´æµÄÎļþ£¬Emacs »áÎÊÄãÊÇ·ñÒª±£´æÎļþ¡£(²»ÒªÀí»áÎĵµÖÐ˵µÄÍ˳ö Emacs µÄ³£Ó÷½·¨ C-z©¤©¤Õâ¸ö¼ü×éºÏ»á°Ñ Emacs ·Åµ½ºó ̨£¬¶øÇÒÕâ¸ö·½·¨Ö»ÔÚûÓÐÐéÄâ¿ØÖÆÌ¨µÄϵͳÉÏÓÐÓÃ)¡£
¡¡¡¡Emacs ÄÜ×öºÜ¶àÓÐÓõÄÊÂÇ飻һЩÊÇÄÚÖõģ¬ÁíÍâһЩÐèÒªÎÒÃǽøÐÐÅäÖá£
¡¡¡¡Emacs ûÓÐÓÃÒ»ÖÖ˽ÓеĺêÓïÑÔÀ´ÅäÖÃ×ÔÉí£¬¶øÊÇʹÓÃÁËijÖÖÌØ±ðÊÊÓ¦±à¼Æ÷ µÄ Lisp °æ±¾£¬½Ð×ö Emacs Lisp¡£Èç¹ûÄãÒª¼ÌÐø¶ÁÏÂÈ¥²¢ÇÒÏëѧϰһµã Common Lisp£¬Ñ§Ï°Ê¹Óà Emacs Lisp ÊǺÜÓÐÓõġ£Emacs Lisp Óкܶà Common Lisp µÄÌØÐÔ£¬ ËäȻǰÕßÏ൱С (Òò´Ë¸üÈÝÒ×ÕÆÎÕ)¡£
¡¡¡¡Ñ§Ï° Emacs Lisp ×îºÃµÄ·½·¨¾ÍÊÇÏÂÔØ Emacs Tutorial¡£
¡¡¡¡µ«ÊÇ£¬ÒªÅäÖà Emacs ²¢²»ÐèÒªÈκÎʵ¼ÊµÄ Lisp ֪ʶ£¬ÒòΪÎÒÒѾÁгöÁËÒ» ¸ö .emacs Àý×Ó£¬×ã¹»ÈÃÄã˳ÀûµÄ¿ªÊ¼¹¤×÷¡£Ö»Òª°ÑÕâ¸öÎÄ ¼þ¸´ÖƵ½ÄãµÄ¼ÒĿ¼£¬Èç¹û Emacs ÒѾÔÚÔËÐУ¬¾ÍÖØÐÂÆð¶¯£»Emacs »á´ÓÕâ¸öÎļþ ÖжÁÈ¡ÃüÁȻºó(Ï£Íû)ÄܸøÄãÒ»¸öÓÐÓõĻù±¾ÉèÖá£
¡¡¡¡²»ÐÒµÄÊÇ£¬ÒªÏêϸ½âÊ͵ϰ»°¾Í³¤ÁË£»µ«ÊÇ»¹ÊÇÓÐÒ»Á½µãÖµµÃ×¢Òâ¡£
ÒÔ ; ¿ªÍ·µÄÊÇ×¢ÊÍ£¬»á±» Emacs ºöÂÔµô¡£
µÚÒ»ÐÐÀïÃæµÄ -*- Emacs-Lisp -*- ÄÜ ÈÃÎÒÃÇÔÚ Emacs ÀïÃæ±à¼Õâ¸ö .emacs£¬²¢ÇÒ´ò¿ªËù ÓÐ Emacs Lisp µÄ±à¼ÌØÐÔ¡£Emacs Ò»°ã»á³¢ÊÔ¸ù¾ÝÎļþÃûÀ´²Â²â£¬¶øÇÒºÜÓÐ¿É ÄÜ²Â´í¡£
ÔÚijЩģʽÏ£¬tab ¼ü±»°ó¶¨µ½Ò»¸öËõ½øº¯ÊýÉÏ¡£Òò ´Ë°´Ï tab ¼üºó£¬ËüÄÜËõ½øÒ»ÐдúÂë¡£Èç¹ûÄãÏë°Ñ tab µ±×÷ Ò»¸ö×Ö·û²åÈëµ½Äã±à¼µÄ¶«Î÷ÀïÃæ£¬ÐèÒªÔÚ°´Ï tab ¼üµÄʱ ͬʱ°´×¡ control ¼ü¡£
Õâ¸öÎļþͨ¹ýʶ±ðÎļþÃûºó׺À´Ö§³Ö C£¬C++£¬Perl£¬Lisp ºÍ Scheme µÄÓï·¨¸ßÁÁ¡£
Emacs ÒѾÓÐÒ»¸öÔ¤Ïȶ¨ÒåµÄº¯Êý½Ð next-error¡£
ÔÚÒ»¸ö±àÒë´íÎóÊä³ö´°¿Ú£¬°´Ï M-n ÄÜÈôÓÒ»¸ö±àÒë´íÎó
ÒÆ¶¯µ½ÁíÒ»¸ö£»ÎÒÃÇ»¹¶¨ÒåÁËÒ»¸öÀàËÆµÄº¯Êý£¬ previous-error£¬Õâ¸öº¯ÊýÔÚÄã°´Ï M-p
ºó£¬ÄÜÈÃÄã»Øµ½ÉÏÒ»¸ö±àÒë´íÎ󡣯äÖÐ×îºÃµÄÌØÐÔ¾ÍÊǰ´ Ï C-c C-c
ºó£¬Äܸù¾Ý´íÎó´ò¿ªÏàÓ¦µÄÎļþ²¢ÇÒÌøµ½ÏàÓ¦ µÄÄÇÐдúÂë¡£
ÎÒÃÇ´ò¿ªÁË Emacs ×÷Ϊ ·þÎñ¶ËÔËÐеÄÌØÐÔ£¬ÕâÑùµ±ÄãÔÚ Emacs Íâ×öÒ» ЩÊÂÇéµÄʱºò£¬ÓÖÐèÒª±à¼Ò»¸öÎļþµÄʱºò£¬Ö»ÐèÒªÊäÈë
% emacsclient filename
È»ºó¾Í¿ÉÒÔÔÚ Emacs ±à¼ÄǸöÎļþÁË£¡ [8]
Àý 2-1. Ò»¸ö .emacs ÅäÖÃÎļþµÄÀý×Ó
;; -*-Emacs-Lisp-*-
;; This file is designed to be re-evaled; use the variable first-time
;; to avoid any problems with this.
(defvar first-time t
"Flag signifying this is the first time that .emacs has been evaled")
;; Meta
(global-set-key "\M- " 'set-mark-command)
(global-set-key "\M-\C-h" 'backward-kill-word)
(global-set-key "\M-\C-r" 'query-replace)
(global-set-key "\M-r" 'replace-string)
(global-set-key "\M-g" 'goto-line)
(global-set-key "\M-h" 'help-command)
;; Function keys
(global-set-key [f1] 'manual-entry)
(global-set-key [f2] 'info)
(global-set-key [f3] 'repeat-complex-command)
(global-set-key [f4] 'advertised-undo)
(global-set-key [f5] 'eval-current-buffer)
(global-set-key [f6] 'buffer-menu)
(global-set-key [f7] 'other-window)
(global-set-key [f8] 'find-file)
(global-set-key [f9] 'save-buffer)
(global-set-key [f10] 'next-error)
(global-set-key [f11] 'compile)
(global-set-key [f12] 'grep)
(global-set-key [C-f1] 'compile)
(global-set-key [C-f2] 'grep)
(global-set-key [C-f3] 'next-error)
(global-set-key [C-f4] 'previous-error)
(global-set-key [C-f5] 'display-faces)
(global-set-key [C-f8] 'dired)
(global-set-key [C-f10] 'kill-compilation)
;; Keypad bindings
(global-set-key [up] "\C-p")
(global-set-key [down] "\C-n")
(global-set-key [left] "\C-b")
(global-set-key [right] "\C-f")
(global-set-key [home] "\C-a")
(global-set-key [end] "\C-e")
(global-set-key [prior] "\M-v")
(global-set-key [next] "\C-v")
(global-set-key [C-up] "\M-\C-b")
(global-set-key [C-down] "\M-\C-f")
(global-set-key [C-left] "\M-b")
(global-set-key [C-right] "\M-f")
(global-set-key [C-home] "\M-<")
(global-set-key [C-end] "\M->")
(global-set-key [C-prior] "\M-<")
(global-set-key [C-next] "\M->")
;; Mouse
(global-set-key [mouse-3] 'imenu)
;; Misc
(global-set-key [C-tab] "\C-q\t") ; Control tab quotes a tab.
(setq backup-by-copying-when-mismatch t)
;; Treat 'y' or <CR> as yes, 'n' as no.
(fset 'yes-or-no-p 'y-or-n-p)
(define-key query-replace-map [return] 'act)
(define-key query-replace-map [?\C-m] 'act)
;; Load packages
(require 'desktop)
(require 'tar-mode)
;; Pretty diff mode
(autoload 'ediff-buffers "ediff" "Intelligent Emacs interface to diff" t)
(autoload 'ediff-files "ediff" "Intelligent Emacs interface to diff" t)
(autoload 'ediff-files-remote "ediff"
"Intelligent Emacs interface to diff")
(if first-time
(setq auto-mode-alist
(append '(("\\.cpp$" . c++-mode)
("\\.hpp$" . c++-mode)
("\\.lsp$" . lisp-mode)
("\\.scm$" . scheme-mode)
("\\.pl$" . perl-mode)
) auto-mode-alist)))
;; Auto font lock mode
(defvar font-lock-auto-mode-list
(list 'c-mode 'c++-mode 'c++-c-mode 'emacs-lisp-mode 'lisp-mode 'perl-mode 'scheme-mode)
"List of modes to always start in font-lock-mode")
(defvar font-lock-mode-keyword-alist
'((c++-c-mode . c-font-lock-keywords)
(perl-mode . perl-font-lock-keywords))
"Associations between modes and keywords")
(defun font-lock-auto-mode-select ()
"Automatically select font-lock-mode if the current major mode is in font-lock-auto-mode-list"
(if (memq major-mode font-lock-auto-mode-list)
(progn
(font-lock-mode t))
)
)
(global-set-key [M-f1] 'font-lock-fontify-buffer)
;; New dabbrev stuff
;(require 'new-dabbrev)
(setq dabbrev-always-check-other-buffers t)
(setq dabbrev-abbrev-char-regexp "\\sw\\|\\s_")
(add-hook 'emacs-lisp-mode-hook
'(lambda ()
(set (make-local-variable 'dabbrev-case-fold-search) nil)
(set (make-local-variable 'dabbrev-case-replace) nil)))
(add-hook 'c-mode-hook
'(lambda ()
(set (make-local-variable 'dabbrev-case-fold-search) nil)
(set (make-local-variable 'dabbrev-case-replace) nil)))
(add-hook 'text-mode-hook
'(lambda ()
(set (make-local-variable 'dabbrev-case-fold-search) t)
(set (make-local-variable 'dabbrev-case-replace) t)))
;; C++ and C mode...
(defun my-c++-mode-hook ()
(setq tab-width 4)
(define-key c++-mode-map "\C-m" 'reindent-then-newline-and-indent)
(define-key c++-mode-map "\C-ce" 'c-comment-edit)
(setq c++-auto-hungry-initial-state 'none)
(setq c++-delete-function 'backward-delete-char)
(setq c++-tab-always-indent t)
(setq c-indent-level 4)
(setq c-continued-statement-offset 4)
(setq c++-empty-arglist-indent 4))
(defun my-c-mode-hook ()
(setq tab-width 4)
(define-key c-mode-map "\C-m" 'reindent-then-newline-and-indent)
(define-key c-mode-map "\C-ce" 'c-comment-edit)
(setq c-auto-hungry-initial-state 'none)
(setq c-delete-function 'backward-delete-char)
(setq c-tab-always-indent t)
;; BSD-ish indentation style
(setq c-indent-level 4)
(setq c-continued-statement-offset 4)
(setq c-brace-offset -4)
(setq c-argdecl-indent 0)
(setq c-label-offset -4))
;; Perl mode
(defun my-perl-mode-hook ()
(setq tab-width 4)
(define-key c++-mode-map "\C-m" 'reindent-then-newline-and-indent)
(setq perl-indent-level 4)
(setq perl-continued-statement-offset 4))
;; Scheme mode...
(defun my-scheme-mode-hook ()
(define-key scheme-mode-map "\C-m" 'reindent-then-newline-and-indent))
;; Emacs-Lisp mode...
(defun my-lisp-mode-hook ()
(define-key lisp-mode-map "\C-m" 'reindent-then-newline-and-indent)
(define-key lisp-mode-map "\C-i" 'lisp-indent-line)
(define-key lisp-mode-map "\C-j" 'eval-print-last-sexp))
;; Add all of the hooks...
(add-hook 'c++-mode-hook 'my-c++-mode-hook)
(add-hook 'c-mode-hook 'my-c-mode-hook)
(add-hook 'scheme-mode-hook 'my-scheme-mode-hook)
(add-hook 'emacs-lisp-mode-hook 'my-lisp-mode-hook)
(add-hook 'lisp-mode-hook 'my-lisp-mode-hook)
(add-hook 'perl-mode-hook 'my-perl-mode-hook)
;; Complement to next-error
(defun previous-error (n)
"Visit previous compilation error message and corresponding source code."
(interactive "p")
(next-error (- n)))
;; Misc...
(transient-mark-mode 1)
(setq mark-even-if-inactive t)
(setq visible-bell nil)
(setq next-line-add-newlines nil)
(setq compile-command "make")
(setq suggest-key-bindings nil)
(put 'eval-expression 'disabled nil)
(put 'narrow-to-region 'disabled nil)
(put 'set-goal-column 'disabled nil)
(if (>= emacs-major-version 21)
(setq show-trailing-whitespace t))
;; Elisp archive searching
(autoload 'format-lisp-code-directory "lispdir" nil t)
(autoload 'lisp-dir-apropos "lispdir" nil t)
(autoload 'lisp-dir-retrieve "lispdir" nil t)
(autoload 'lisp-dir-verify "lispdir" nil t)
;; Font lock mode
(defun my-make-face (face color &optional bold)
"Create a face from a color and optionally make it bold"
(make-face face)
(copy-face 'default face)
(set-face-foreground face color)
(if bold (make-face-bold face))
)
(if (eq window-system 'x)
(progn
(my-make-face 'blue "blue")
(my-make-face 'red "red")
(my-make-face 'green "dark green")
(setq font-lock-comment-face 'blue)
(setq font-lock-string-face 'bold)
(setq font-lock-type-face 'bold)
(setq font-lock-keyword-face 'bold)
(setq font-lock-function-name-face 'red)
(setq font-lock-doc-string-face 'green)
(add-hook 'find-file-hooks 'font-lock-auto-mode-select)
(setq baud-rate 1000000)
(global-set-key "\C-cmm" 'menu-bar-mode)
(global-set-key "\C-cms" 'scroll-bar-mode)
(global-set-key [backspace] 'backward-delete-char)
; (global-set-key [delete] 'delete-char)
(standard-display-european t)
(load-library "iso-transl")))
;; X11 or PC using direct screen writes
(if window-system
(progn
;; (global-set-key [M-f1] 'hilit-repaint-command)
;; (global-set-key [M-f2] [?\C-u M-f1])
(setq hilit-mode-enable-list
'(not text-mode c-mode c++-mode emacs-lisp-mode lisp-mode
scheme-mode)
hilit-auto-highlight nil
hilit-auto-rehighlight 'visible
hilit-inhibit-hooks nil
hilit-inhibit-rebinding t)
(require 'hilit19)
(require 'paren))
(setq baud-rate 2400) ; For slow serial connections
)
;; TTY type terminal
(if (and (not window-system)
(not (equal system-type 'ms-dos)))
(progn
(if first-time
(progn
(keyboard-translate ?\C-h ?\C-?)
(keyboard-translate ?\C-? ?\C-h)))))
;; Under UNIX
(if (not (equal system-type 'ms-dos))
(progn
(if first-time
(server-start))))
;; Add any face changes here
(add-hook 'term-setup-hook 'my-term-setup-hook)
(defun my-term-setup-hook ()
(if (eq window-system 'pc)
(progn
;; (set-face-background 'default "red")
)))
;; Restore the "desktop" - do this as late as possible
(if first-time
(progn
(desktop-load-default)
(desktop-read)))
;; Indicate that this file has been read at least once
(setq first-time nil)
;; No need to debug anything now
(setq debug-on-error nil)
;; All done
(message "All done, %s%s" (user-login-name) ".")
¡¡¡¡ÏÖÔÚ£¬Èç¹ûÄãÖ»ÊÇÏëÓà .emacs É趨ºÃµÄÓïÑÔ (C, C++, Perl, Lisp ºÍ Scheme) À´±à³Ì£¬ÊÂÇé¾ÍºÜºÃ°ì¡£µ«ÊÇ£¬Èç¹ûͻȻһ¸öеÄÓï ÑÔ£¬½Ð ¡°whizbang¡±£¬Óкܶ༤¶¯ÈËÐĵÄÌØÐÔ£¬³öÀ´ÁË£¬»á·¢ÉúʲôÊÂÇ飿
¡¡¡¡µÚÒ»¼þÒª×öµÄÊÂÇé¾ÍÊÇÕÒµ½ÊÇ·ñÓÐÈκÎÎļþÄܹ»¸æËß Emacs ¹ØÓÚÕâ¸öÓïÑ﵀ ÐÅÏ¢¡£ÕâÖÖÎļþͨ³£ÒÔ .el ½á⣬ÊÇ ¡°Emacs Lisp¡± µÄËõд¡£ÀýÈ磬Èç¹û whizbang ÊÇ FreeBSD µÄÒ»¸ö port£¬ÄÇôÎÒÃÇ ¿ÉÒÔÓÃÈçÏÂÃüÁîÀ´¶¨Î»ÕâЩÎļþ
% find /usr/ports/lang/whizbang -name "*.el" -print
¡¡¡¡È»ºó°²×°ÕâЩÎļþµ½ Emacs µÄϵͳ¼¶ Lisp Ŀ¼¡£ÔÚ FreeBSD 2.1.0-Release ÀÕâ¸öĿ¼¾ÍÊÇ /usr/local/share/emacs/site-lisp¡£
¡¡¡¡ÀýÈ磬Èç¹û¸Õ²ÅµÄ¶¨Î»ÃüÁîµÄÊä³öÊÇ
/usr/ports/lang/whizbang/work/misc/whizbang.el
¡¡¡¡ÎÒÃÇ¿ÉÒÔÖ´ÐÐ
# cp /usr/ports/lang/whizbang/work/misc/whizbang.el /usr/local/share/emacs/site-lisp
¡¡¡¡ÏÂÒ»²½£¬ÎÒÃÇÐèҪȷ¶¨ whizbang µÄÔ´ÎļþÊÇÒÔʲôºó׺½áβ¡£ÎÒÃǼٶ¨ÕâЩ Ô´Îļþ¶¼ÊÇÒÔ .wiz ½áβ¡£ÎÒÃÇÐèÒªÔÚ .emacs ¼ÓÉÏÒ»Ìõʹ Emacs Äܹ»Ê¹Óà whizbang.el ÖеÄÐÅÏ¢¡£
¡¡¡¡ÔÚ .emacs ÖÐÕÒµ½ auto-mode-alist
entry£¬Îª whizbang Ìí¼ÓÒ»ÐУ¬ÀýÈ磺
...
("\\.lsp$" . lisp-mode)
("\\.wiz$" . whizbang-mode)
("\\.scm$" . scheme-mode)
...
¡¡¡¡Òâ˼¾ÍÊÇ£¬µ±Äã±à¼Ò»¸öÒÔ .wiz ½áβµÄÎļþµÄʱºò£¬ Emacs
»á×Ô¶¯½øÈë whizbang-mode¡£
¡¡¡¡¾ÍÔÚÏÂÃæ£¬Äã»á·¢ÏÖ font-lock-auto-mode-list ÕâÒ»Ìõ¡£
Ìí¼Ó whizbang-mode
;; Auto font lock mode (defvar font-lock-auto-mode-list (list 'c-mode 'c++-mode 'c++-c-mode 'emacs-lisp-mode 'whizbang-mode 'lisp-mode 'perl-mode 'scheme-mode) "List of modes to always start in font-lock-mode")
¡¡¡¡ÕâÒâζ×ŵ±Äã±à¼ .wiz ÎļþµÄʱºò£¬Emacs »á×Ô¶¯ ´ò¿ª
font-lock-mode(¾ÍÊÇÓï·¨¸ßÁÁ)¡£
¡¡¡¡Õâ¾ÍÊÇËùÓбØÒªµÄ²½Öè¡£Èç¹ûÔÚÄã´ò¿ªÒ»¸ö .wiz ÎÄ
¼þµÄʱºò£¬»¹ÓÐÐèÒª×Ô¶¯Ö´ÐеÄÈÎºÎÆäËû²½Ö裬Äã¿ÉÒÔÌí¼ÓÒ»¸ö whizbang-mode hook (²é¿´ my-scheme-mode-hook ÖÐÌí¼Ó auto-indent µÄ²½Öè×÷ΪÀý×Ó)¡£
¡¡¡¡¹ØÓÚ FreeBSD Ï´¿ª·¢»·¾³µÄÐÅÏ¢µÄÐ޸ģ¬¿ÉÒԲο´ development(7)¡£
Brian Harvey and Matthew Wright Simply Scheme MIT 1994. ISBN 0-262-08226-8
Randall Schwartz Learning Perl O'Reilly 1993 ISBN 1-56592-042-2
Patrick Henry Winston and Berthold Klaus Paul Horn Lisp (3rd Edition) Addison-Wesley 1989 ISBN 0-201-08319-1
Brian W. Kernighan and Rob Pike The Unix Programming Environment Prentice-Hall 1984 ISBN 0-13-937681-X
Brian W. Kernighan and Dennis M. Ritchie The C Programming Language (2nd Edition) Prentice-Hall 1988 ISBN 0-13-110362-8
Bjarne Stroustrup The C++ Programming Language Addison-Wesley 1991 ISBN 0-201-53992-6
W. Richard Stevens Advanced Programming in the Unix Environment Addison-Wesley 1992 ISBN 0-201-56317-7
W. Richard Stevens Unix Network Programming Prentice-Hall 1990 ISBN 0-13-949876-1
¡¡¡¡±¾ÕÂÃèÊöÁËÊ®Äê¼äһЩÁîUNIX³ÌÐòÔ±¸Ðµ½À§»óµÄ°²È«ÎÊÌ⣬ ²¢ÌṩÁËһЩÐµĹ¤¾ßÀ´°ïÖú³ÌÐòÔ±±ÜÃâÉú³É¿É±»ÀûÓõĴúÂë¡£
¡¡¡¡±àд°²È«µÄÓ¦ÓóÌÐòÒª´ø×Ž÷É÷ºÍÂÔÓб¯¹ÛµÄÉú»î¹Ûµã¡£³ÌÐòÓ¦¸Ã±¾×Å ¡°×îÐ¡ÌØÈ¨¡±µÄÔÔòÔËÐУ¬ÕâÑù¾Í²»»áÓдø×Å´óÓÚ×ã¹»ÄÜÍê³É Æä¹¦ÄܵÄȨÏ޵Ľø³ÌÔÚÔËÐС£Ô¤ÏȲâÊԵĴúÂëÓ¦¸ÃËæÊ±¿ÉÒÔÖØÓÃÒÔ±ÜÃâÓöµ½ һЩ±¾ÒѾÐÞ¸´µÄͨ³£´íÎó¡£
¡¡¡¡UNIX»·¾³µÄÏÝÚåÖ®Ò»¾ÍÊǺÜÈÝÒ×µÄÖÆÔìÒ»¸öÎȽ¡»·¾³µÄ¼ÙÏó¡£³ÌÐò Ó¦¸ÃÓÀÔ¶²»ÒªÏàÐÅÓû§µÄÊäÈë(ÒÔ¸÷ÖÖÐÎʽ)£¬ÏµÍ³×ÊÔ´£¬½ø³Ì¼äͨѶ£¬»òÕß ´¥·¢Ê¼þµÄʱÖÓ¡£UNIX½ø³Ì²»ÊÇͬ²½ÔËÐУ¬ËùÒÔÂß¼²Ù×÷ºÜÉÙÊÇÔ×ÓÀàÐÍ¡£
¡¡¡¡»º³åÇøÒç³öµÄ©¶´Ëæ×ŷ롤ŵÒÀÂü 1 ¹¹¼ÜµÄ³ö ÏÖ¾ÍÒѾ¿ªÊ¼³öÏÖÁË¡£ ÔÚ1988ÄêËæ×ÅĪÀï˹»¥ÁªÍøÈ䳿µÄ¹ã·º´«²¥ËûÃÇ¿ªÊ¼ÉùÃûÀǽ塣²»ÐÒµÄÊÇ£¬ ͬÑùµÄÕâÖÖ¹¥»÷Ò»Ö±³ÖÐøµ½½ñÌì¡£ 1999ÄêµÄ17¸öCERT(Computer Emergency Response Team, ¿¨ÄÚ»ù÷¡´óѧ¼ÆËã»ú½ô¼±ÏìӦС×é)µÄ°²È«Í¨¸æÖУ¬ ËûÃÇÖеÄ10¸öÖ±½ÓÊÇÓÉÈí¼þµÄ»º³åÇøÒç³ö¶ø µ¼Öµġ£µ½Ä¿Ç°ÎªÖ¹£¬´ó²¿·ÖµÄ»º³åÇøÒç³öµÄ¹¥»÷¶¼ÊÇ»ùÓÚ´Ý»ÙÕ»µÄ·½Ê½¡£
¡¡¡¡´ó²¿·ÖÏÖ´ú¼ÆËã»úϵͳʹÓÃÕ»À´¸ø½ø³Ì´«µÝ²ÎÊý²¢ÇÒ´æ´¢¾Ö²¿±äÁ¿¡£ Õ»ÊÇÒ»ÖÖÔÚ½ø³ÌÓ³ÏóÄÚ´æµÄ¸ßµØÖ·Äڵĺó½øÏȳö(LIFO)µÄ»º³åÇø¡£ µ±³ÌÐòµ÷ÓÃÒ»¸öº¯Êýʱһ¸öеġ°Õ»Ö¡¡±»á±»´´½¨¡£Õâ¸öÕ»Ö¡°üº¬×Å ´«µÝ¸øº¯ÊýµÄ¸÷ÖÖ²ÎÊýºÍһЩ¶¯Ì¬µÄ¾Ö²¿±äÁ¿¿Õ¼ä¡£¡°Õ»Ö¸Õ롱¼Ç¼×ŵ±Ç° Õ»¶¥µÄλÖᣠÓÉÓÚÕ»Ö¸ÕëµÄÖµ»áÒòΪбäÁ¿µÄѹÈëÕ»¶¥¶ø¾³£µÄ±ä»¯£¬Ðí¶àʵÏÖÒ²ÌṩÁË Ò»ÖÖ"Ö¡Ö¸Õë"À´¶¨Î»ÔÚÕ»Ö¡µÄÆðʼλÖã¬ÒÔ±ã¾Ö²¿±äÁ¿¿ÉÒÔ¸üÈÝÒ׵ı»·ÃÎÊ¡£ 1µ÷Óú¯ÊýµÄ·µ»ØµØÖ·Ò²Í¬Ñù´æ´¢ÔÚÕ»ÖУ¬ ÓÉÓÚÔÚº¯ÊýÖеľֲ¿±äÁ¿¸²¸ÇÁ˺¯ÊýµÄ·µ»ØµØÖ·³ÉΪÁËÕ»Òç³öµÄÒ»¸öÔÒò£¬ Õâ¾ÍDZÔÚµÄ×¼ÐíÁËÒ»¸ö¶ñÒâÓû§¿ÉÒÔÖ´ÐÐËû(Ëý)ËùÏëÔËÐеÄÈκδúÂë¡£
¡¡¡¡ËäÈ»»ùÓÚÕ»µÄ¹¥»÷ÊÇĿǰ×î¹ã·ºµÄ£¬ÕâÒ²¿ÉÒÔʹ»ùÓڶѵĹ¥»÷(malloc/ free)±ä³É¿ÉÄÜ¡£
¡¡¡¡C³ÌÐòÓïÑÔ²¢²»ÏñÆäËûһЩ±à³ÌÓïÑÔÒ»Ñù×Ô¶¯µÄ×öÊý×é»òÕßÖ¸ÕëµÄ±ß ½ç¼ì²é¡£ÁíÍ⣬C±ê×¼¿â»¹¾ßÓÐÏ൱һЩ·Ç³£Î£ÏյIJÙ×÷º¯Êý¡£
strcpy(char *dest, const char *src) |
¿Éµ¼ÖÂdest»º³åÇøÒç³ö |
strcat(char *dest, const char *src) |
¿Éµ¼ÖÂdest»º³åÇøÒç³ö |
getwd(char *buf) |
¿Éµ¼ÖÂbuf»º³åÇøÒç³ö |
gets(char *s) |
¿Éµ¼ÖÂs»º³åÇøÒç³ö |
[vf]scanf(const char *format, ...) |
¿Éµ¼Ö²ÎÊýÒç³ö |
realpath(char *path, char resolved_path[]) |
¿Éµ¼ÖÂpath»º³åÇøÒç³ö |
[v]sprintf(char *str, const char *format, ...) |
¿Éµ¼ÖÂstr»º³åÇøÒç³ö |
¡¡¡¡ÏÂÃæµÄʾÀý´úÂë°üº¬ÁËÒ»¸ö»º³åÇøÒç³öµÄÇé¿ö£¬Ëü»á¸²¸Çº¯ÊýµÄ·µ»ØµØÖ·²¢ÇÒ Á¢¼´Ìø¹ýÁ˽ôËæ´Ëº¯ÊýÖ®ºóµ÷Óá£(ÊÚȨÓÚ5)
#include <stdio.h>
void manipulate(char *buffer) {
char newbuffer[80];
strcpy(newbuffer,buffer);
}
int main() {
char ch,buffer[4096];
int i=0;
while ((buffer[i++] = getchar()) != '\n') {};
i=1;
manipulate(buffer);
i=2;
printf("The value of i is : %d\n",i);
return 0;
}
¡¡¡¡ÈÃÎÒÃÇÀ´²é¿´Ò»ÏÂÈç¹ûÔÚÊäÈë»Ø³µÖ®Ç°ÊäÈë160¸ö¿Õ¸ñºóÕâ¸öС³ÌÐò µÄÄÚ´æÓ³ÏóÊǸöʲôÑù×Ó¡£
¡¡¡¡[XXX figure here!]
¡¡¡¡ºÜÃ÷ÏÔ¸ü¶àµÄ¶ñÒâÊäÈëÄܱ»Éè¼Æ³öÖ´ÐÐʵ¼ÊµÄ±àÒëÖ¸Áî(ÀýÈç exec(/bin/sh))¡£
¡¡¡¡¶ÔÓÚÕ»Òç³öµÄ×îÖ±½ÓµÄ½â¾ö·½·¨¾ÍÊÇ×ÜÊÇʹÓó¤¶ÈÓÐÏÞµÄÄÚ´æºÍ ×Ö·û´®¸´Öƺ¯Êý¡£strncpyºÍstrncat
ÊÇC±ê×¼¿âµÄÒ»²¿·Ö¡£ ÕâЩº¯Êý½ÓÊÕÒ»¸ö²»´óÓÚÄ¿±ê»º³åÇø³¤¶ÈµÄÖµ×÷Ϊ²ÎÊý¡£ÕâЩº¯Êý»á´Ó
Ô´µØÖ·¸´ÖÆ´ËÖµ³¤µÄ×Ö½ÚÊýµ½Ä¿±êµØÖ·¡£È»¶øÕâЩº¯Êý»¹ÊÇÓÐһЩÎÊÌâ¡£
Èç¹ûÊäÈ뻺³åÇøµÄ³¤¶ÈºÍÄ¿±ê»º³åÇøµÄÒ»Ñù³¤Ôòº¯Êý²»±£Ö¤Á½Õß¶¼ÒÔNUL ×÷Ϊ½áÊø·û¡£
³¤¶È²ÎÊýÔÚstrncpyºÍstrncatº¯ÊýÖÐͬÑùµÄ²»Ò»ÖºÜÈÝÒ×µ¼Ö³ÌÐòÔ±ÔÚ
Õý³£Ê¹ÓÃʱ¸Ðµ½À§»ó¡£Í¬Ê±µ±¸´ÖÆÒ»¸ö½Ï¶ÌµÄ×Ö·û´®µ½Ò»¸öºÜ´óµÄ»º³å ÇøÖÐʱÏà¶ÔÓÚstrcpyÒ²ÓкÜÖØ´óµÄÐÔÄÜËðʧ£¬ ÒòΪstrncpy»áÓÃNULÌî³äËùÖ¸¶¨µÄ³¤¶È¡£
¡¡¡¡ÔÚOpenBSDÖУ¬ÁíÒ»¸öÄÚ´æ¸´ÖÆµÄʵÏÖÒѾ¹æ±ÜÁËÕâЩÎÊÌâ¡£ º¯ÊýstrlcpyºÍstrlcat
±£Ö¤Á˵±Ö¸¶¨ÁË·ÇÁãµÄ³¤¶È²ÎÊýʱĿ±ê×Ö·û´®×ÜÊÇÒÔNUL×÷Ϊ½áÊø·û¡£
¹ØÓÚÕâЩº¯ÊýµÄ¸ü¶àÐÅÏ¢Çë²Î¿¼7¡£OpenBSD µÄstrlcpyºÍstrlcat
×Ô´ÓFreeBSD3.3µÄ°æ±¾ÒѾ±»ÒýÈëÁË¡£
¡¡¡¡²»ÐÒµÄÊÇÈÓÈ»ÓÐÏ൱ÊýÁ¿µÄ´úÂëÔڹ㷺ʹÓÃäĿµÄÄÚ´æ¸´ÖÆ¹¦ÄÜ ¶ø²»ÊÇÎÒÃÇËùÌá¼°µ½µÄÈκÎÓÐÏÞÖÆµÄ¸´ÖÆÀý³Ì¡£ÐÒÔ˵ÄÊÇ»¹ÓÐÁíÒ»¸ö½â ¾ö·½°¸¡£ÓÐһЩ±àÒëÆ÷²å¼þºÍ¿âÔÚC/C++ÖÐÒ»Ö±ÔÚ×öÔËÐÐʱµÄ±ß½ç¼ì²é¡£
¡¡¡¡×÷Ϊgcc´úÂëÉú³ÉÆ÷µÄÒ»¸öС²¹¶¡StackGuard¾ÍÊÇÕâÑùÒ»¿î²å¼þ¡£ Ô´×ÔStackGuard Õ¾µã:
¡°StackGuard ¼ì²â²¢¿¿×ű£»¤ÔÚÕ»Öеķµ»ØµØÖ·²» Êܵ½¸ü¸ÄÀ´·ÀÓùÕë¶ÔÕ»µÄ¾çÁÒ¹¥»÷¡£µ±º¯Êý±»µ÷ÓÃʱStackGuardÔÚÕ»ÖÐ ½ôÁÚ·µ»ØµØÖ··ÅÖÃÁËÒ»¸ö¡®canary¡¯(ÉÚ±ø»ò̽Õë)¡£Èç¹ûº¯Êý·µ»ØÊ±ÉÚ±ø ÒѾ±»¸Ä±äÁË£¬¾ÍÊÇÓÐÕë¶ÔÕ»µÄ¹¥»÷ʵʩÁË£¬ÄÇô³ÌÐò»áÔÚsyslogÖз¢ ³öÒ»¸öÈëÇÖ¾¯±¨²¢ÇÒÍ£Ö¹ÔËÐС£
¡°StackGuard×÷Ϊgcc´úÂëÉú³ÉÆ÷µÄÒ»¸öС²¹¶¡À´Êµ ÏÖ£¬ÌرðÊÇfunction_prolog()ºÍfunction_epilog()³ÌÐò¡£ ÔöÇ¿µÄfunction_prolog()ÔÚº¯Êý¿ªÊ¼Ê±ÔÚÕ»Öа²×°ÁËÉÚ±ø£¬¶ø function_epilog()ÔÚº¯ÊýÍ˳öʱ¼ì²éÉÚ±øµÄÍêÕûÐÔ¡£ÈÎºÎÆäËûÆÆ»µ·µ »ØµØÖ·µÄÐÐΪÔÚº¯Êý·µ»ØÊ±¾ÍÕâÑù±»¼ì²âµ½ÁË¡£
¡¡¡¡Ê¹ÓÃStackGuardÖØÐ±àÒëÄãµÄ³ÌÐò¿ÉÒÔÓÐЧµÄ·ÀÖ¹´ó²¿·ÖµÄ»º³å ÇøÒç³öµÄ¹¥»÷£¬µ«ÊÇÕâÈÔÈ»ÊǸöÕÛÖԵİ취¡£
¡¡¡¡»ùÓÚ±àÒëÆ÷µÄ»úÖÆ¶ÔÓÚ²»ÄÜÖØÐ±àÒëµÄÖ»Óжþ½øÖƵÄÈí¼þÍê
È«ÎÞÓ᣶ÔÓÚÕâЩÇé¿öÈÔ»¹ÊÇÓкܶà¿â¿ÉÒÔ¶ÔC¿âÖеIJ»°²È«µÄº¯Êý (strcpy, fscanf, getwdµÈ)ÖØÐÂʵÏÖ²¢È·±£ÕâЩº¯Êý¾ö²»»ØÐ´ Õ»Ö¸Õë¡£
libsafe
libverify
libparanoia
¡¡¡¡²»ÐÒµÄÊÇÕâЩ»ùÓÚ¿âµÄ·À»¤ÓÐһЩȱµã¡£ÕâЩ¿â½ö½ö±£»¤ºÍ°²È« Ïà¹ØµÄһС²¿·Ö¼¯ºÏ£¬ËûÃǺöÂÔÁËʵ¼ÊµÄÎÊÌâ¡£Èç¹û³ÌÐòʹÓòÎÊý -fomit-frame-pointer½øÐбàÒëµÄ»°ÕâЩ·À»¤Ò²Ðí»áʧ°Ü¡£Í¬Ñù£¬»·¾³ ±äÁ¿LD_PRELOADºÍLD_LIBRARY_PATHÒ²¿ÉÒÔ±»Óû§È¡Ïû»òÕßÖØÖá£
¡¡¡¡¶ÔÓÚ¸ø¶¨µÄ½ø³ÌÖÁÉÙÓÐ6¸ö²»Í¬µÄIDÓëÖ®¹ØÁª¡£Òò´ËÄã²»µÃ²»·Ç³£ ¹Ø×¢ÄãµÄ³ÌÐòÔÚÈκÎÌØ¶¨Ê±¿ÌµÄȨÏÞÎÊÌâ¡£ÌØ±ðµÄ£¬ËùÓÐseteuidµÄ³ÌÐò ÔÚ²»ÐèÒªµÄʱºò»áÁ¢¿Ì·ÅÆúËûÃǵÄÌØÈ¨¡£
¡¡¡¡Êµ¼ÊÓû§IDÖ»Äܱ»³¬¼¶Óû§½ø³Ì¸Ä±ä¡£µ±Óû§³õʼµÇ½ʱ login³ÌÐòÉèÖÃËü²¢ÇÒ¼«ÉÙ½øÐиü¸Ä¡£
¡¡¡¡Èç¹û³ÌÐò×¼ÐíseteuidλÉèÖõϰÓÐЧÓû§ID»á±»exec()
º¯ÊýÉèÖá£Ó¦ÓóÌÐò¿ÉÒÔµ÷ÓÃseteuid()
ÔÚÈκÎʱºòÉèÖÃÓÐЧµÄÓû§IDΪÈÎÒâµÄʵ¼ÊÓû§ID»òÕß±£´æ ÉèÖÃ-Óû§-ID¡£µ±ÓÐЧÓû§ID±» exec()º¯ÊýÉèÖÃºó£¬ Ç°Ò»¸öIDµÄÖµ»á±»±£´æÔÚÉèÖÃ-Óû§-IDÖС£
¡¡¡¡´«Í³µÄÏÞÖÆ½ø³ÌµÄ·½·¨ÊÇʹÓÃϵͳµ÷ÓÃchroot()
¡£Õâ¸öϵͳµ÷ÓÃʹµÃ´Ó½ø³Ì¼°ÆäÈκÎ×Ó½ø³ÌËùÒýÓÃµÄÆäËûµÄ
·¾¶±äΪ¸ù·¾¶¡£¶ÔÓÚҪʹ³ÌÐòÔËÐгɹ¦Õâ¸öµ÷ÓñØÐëÔÚÒýÓõÄĿ¼ÉÏ
ÓµÓÐÖ´ÐÐ(ËÑË÷)µÄȨÏÞ¡£Ö±µ½ÄãʹÓÃÁËchdir()
ÔÚÄãµÄл·¾³ÖÐËü²Å»áʵ¼ÊµÄÉúЧ¡£Í¬Ê±Ó¦¸Ã×¢Òâµ½Èç¹û³ÌÐò¾ßÓг¬¼¶
Óû§µÄȨÏÞËüºÜÈÝÒ׵İÚÍÑchrootËùÉèÖõĻ·¾³¡£Ëü¿ÉÄÜ¿¿´´½¨É豸½Úµã
À´¶ÁÈ¡Äں˵ÄÄÚÈÝ£¬¶Ô³ÌÐòÔÚjailÍâ°ó¶¨Ò»¸öµ÷ÊÔÆ÷£¬»òÕß¿¿ÆäËû´´ÔìÐÔ µÄ·½·¨À´Íê³É²Ù×÷¡£
¡¡¡¡ÏµÍ³µ÷ÓÃchroot()µÄÐÐΪ¿ÉÒÔ±» sysctl±äÁ¿kern.chroot_allow_open_directories
µÄÖµÔÚÒ»¶¨³Ì¶ÈÉÏ¿ØÖÆ¡£µ±´ËֵΪ0ʱ£¬Èç¹ûÓÐÈκÎĿ¼±»´ò¿ª chroot()½«»á·µ»ØEPERM²¢Ê§°Ü¡£µ±±»ÖÃΪĬÈÏÖµ1£¬Èç¹û
ÈκÎĿ¼±»´ò¿ª²¢ÇÒ½ø³ÌÒѾ׼±¸µ÷Óà chroot() ÄÇôchroot()½«»á·µ»ØEPERM²¢Ê§°Ü¡£¶ÔÓÚÆäËûµÄ
Öµ£¬¶Ô´ò¿ªÄ¿Â¼µÄ¼ì²é»á±»ÍêÈ«µÄºöÊÓ¡£
¡¡¡¡JailµÄ¸ÅÄîÔÚchroot()Ö®ÉÏ×÷ÁËÑÓÉ죬Ëü
¿¿ÏÞÖÆ³¬¼¶Óû§µÄȨÁ¦À´´´½¨ÁËÒ»¸öÕæÕýµÄ"ÐéÄâ·þÎñÆ÷"¡£Ò»µ©Ò»¸ö¼à
Óü±»ÉèÖúúóÕû¸öÍøÂç±ØÐëͨ¹ýÌØ±ðµÄIPµØÖ·²ÅÄܵ½´ï£¬ÔÚÕâÀï"³¬¼¶ÓÃ
»§È¨ÏÞ"µÄÁ¦Á¿ÍêÈ«µÄÊܵ½ÏÞÖÆ¡£
¡¡¡¡µ±ÔÚjailÖÐʱ£¬ËùÓÐÔÚÄÚºËÖÐʹÓÃsuser()
µ÷Óõij¬¼¶Óû§È¨Ï޵ij¢ÊÔ¶¼»áʧ°Ü¡£È»¶ø£¬Ò»Ð©¶Ôsuser()
µÄµ÷ÓÃÒѾ±»¸ü¸ÄΪеĽӿÚsuser_xxx()
¡£Õâ¸öº¯Êý¶ÔÈϿɻòÕ߾ܾø±»ÏÞÖÆµÄ½ø³ÌȥȡµÃ³¬¼¶Óû§µÄȨ ÏÞµÄÐÐΪ¸ºÔð¡£
¡¡¡¡Ò»¸öÔÚJail»·¾³Öеij¬¼¶Óû§½ø³ÌÓÐÒÔÏÂȨÁ¦:
ʹÓÿÉÐÅÈεIJÙ×÷£º setuid, seteuid, setgid, setegid, setgroups, setreuid, setregid, setlogin
ʹÓÃsetrlimitÉèÖÃ×ÊÔ´ÏÞÖÆ
±à¼Ò»Ð©sysctl½ÚµãÖµ (kern.hostname)
chroot()
ÔÚ vnode ÉÏÉèÖñêÖ¾£º chflags¡¢ fchflags
ÉèÖà vnode ½ÚµãµÄÊôÐÔ£¬ Èç·ÃÎÊȨÏÞ¡¢ ËùÓÐÕß¡¢ ËùÓÐ×é¡¢ ³ß´ç¡¢ ÉϴηÃÎÊʱ¼ä£¬ ÒÔ¼°ÐÞ¸Äʱ¼ä¡£
ÔÚ»¥ÁªÍøÓòÉϰó¶¨ÌØÈ¨¶Ë¿Ú (¶Ë¿ÚºÅ < 1024)
¡¡¡¡JailÊÇÒ»¸ö¶ÔÓÚÔÚÒ»¸ö°²È«»·¾³ÖÐ
ÔËÐÐÒ»¸öÈÔÓÐһЩȱµãµÄ³ÌÐò·Ç³£ÓÐÓõŤ¾ß¡£Ä¿Ç°£¬IPC»úÖÆ»¹Ã»Óб» ¸ü¸Äµ½suser_xxxÒÔÖÁÓÚÏñMySQLÖ®ÀàµÄ³ÌÐò»¹²»
ÄÜÔËÐÐÔÚjailÖС£ÔÚjailÖг¬¼¶Óû§µÄ´æÈ¡¿ÉÄÜ»¹Óзdz£ÓÐÏ޵ĺ¬Ò壬
µ«ÊÇûÓÐ;¾¶ÄÜÕýÈ·µÄÖ¸³ö"·Ç³£ÓÐÏÞ"Òâζ×Åʲô¡£
¡¡¡¡POSIXÒѾ·¢²¼ÁËÒ»¸ö¹¤×÷²Ý°¸£¬Ôö¼ÓÁËʼþÉ󼯣¬·ÃÎÊ¿ØÖÆÁÐ±í£¬ ¾«Ï¸ÌØÈ¨¿ØÖÆ£¬ÐÅÏ¢±êÇ©ºÍÇ¿ÖÆ·ÃÎÊ¿ØÖÆ¡£
¡¡¡¡ÕâÊÇÒ»¸öÕýÔÚ½øÕ¹ÖеŤ×÷²¢ÇÒÊÇ TrustedBSDÏîÄ¿µÄÖØµã¡£Ò»Ð©³õʼ»¯µÄ¹¤×÷ÒѾ±»Ìá½»µ½ FreeBSD-CURRENT(cap_set_proc(3))¡£
¡¡¡¡Ò»¸ö³ÌÐòÓ¦¸ÃÓÀÔ¶²»Òª¼ÙÉèÓû§»·¾³Êǽ¡È«µÄ¡£Õâ°üÀ¨(µ«ÊǾö²»ÏÞÓÚ´Ë): Óû§ÊäÈ룬Ðźţ¬»·¾³±äÁ¿£¬×ÊÔ´£¬IPC£¬mmap(ÄÚ´æÓ³Éä)£¬¹¤×÷Ŀ¼µÄÎļþϵͳ£¬ ÎļþÃèÊö·û£¬´ò¿ªÎļþµÄÊýÁ¿£¬µÈµÈ
¡¡¡¡ÄãÓÀÔ¶²»Òª¼ÙÉèÄã¿ÉÒÔ²¶×½µ½ËùÓеÄÓû§¿ÉÄܲúÉúµÄ·Ç·¨ÊäÈëÑùʽ¡£ »»ÑÔÖ®£¬ÄãµÄ³ÌÐòÓ¦¸Ã¹ýÂËÖ»×¼ÐíһЩÄãÈÏΪ°²È«µÄÌØ±ðµÄÊäÈë×Ó¼¯¡£ ²»ÕýÈ·µÄÈ·ÈÏÊý¾Ý»áµ¼Ö¸÷ÖÖ´íÎó£¬ÌرðÊÇÔÚ»¥ÁªÍøÉϵÄCGI½Å±¾¡£ ¶ÔÓÚÎļþÃûÄãÓ¦¸Ã¶îÍâСÐıÈÈç·¾¶("../", "/")£¬·ûºÅÁ¬½ÓºÍshellµÄÍ˳ö·û¡£
¡¡¡¡PerlÓÐÒ»¸ö·Ç³£°ôµÄÌØÐÔ½Ð×ö¡°Taint¡±Ä£Ê½ÄܱÜÃâ½Å±¾´ÓÍⲿ³ÌÐòÔÚ²»
°²È«µÄ;¾¶µÃµ½Ê¹ÓõÄÊý¾Ý¡£Õâ¸ö·½Ê½»á¼ì²éÃüÁîÐвÎÊý£¬»·¾³±äÁ¿£¬Î»Öà ÐÅϢȷ¶¨ÏµÍ³µ÷ÓÃ(readdir(),readlink() ,getpwxxx())µÄ½á¹ûºÍËùÓÐÎļþµÄÊäÈë¡£
¡¡¡¡¾ºÌ¬Ìõ¼þÊÇÓɺÍʼþʱ¼äÏà¹ØµÄÒâÁÏÖ®ÍâµÄÒÀÀµËùµ¼Öµķ´³£ÐÐΪ¡£ »»¾ä»°Ëµ£¬Ò»¸ö³ÌÐòÔ±²»ÕýÈ·µÄ¼ÙÉèÒ»¸öÌØÊâµÄʼþ×ÜÊÇÔÚÁíÒ»¸öʼþ֮ǰ·¢Éú¡£
¡¡¡¡Ò»Ð©Í¨³£µÄµ¼Ö¾ºÌ¬Ìõ¼þµÄÔÒòÊÇÐźţ¬´æÈ¡¼ì²éºÍ´ò¿ªÎļþ²Ù×÷¡£
ÓÉÓÚÐźÅÉúÀ´¾ÍÊÇÒ첽ʼþËùÒÔÔÚ´¦ÀíËûÃÇÊ±ÒªÌØ±ðµ±ÐÄ¡£´æÈ¡¼ì²éÖÐʹ ÓÃaccess(2)È»ºóʹÓÃopen(2)
ÊǺÜÃ÷ÏԵķÇÔ×Ó²Ù×÷¡£Óû§¿ÉÒÔÔÚÁ½´Îµ÷ÓÃÖÐÒÆ×ßÎļþ¡£»»ÑÔÖ®£¬ÓÐÌØ ȨµÄ³ÌÐòÓ¦¸ÃʹÓÃseteuid()È»ºóÖ±½Óµ÷Óà open()¡£ÑØ×Åͬһ˼·£¬Ò»¸ö³ÌÐòÓ¦¸Ã×ÜÊÇÔÚ open()֮ǰÉèÖÃÕýÈ·µÄÑÚÂëÀ´Åųý²»ºÏÂß¼µÄ chmod()µ÷Óá£
¡¡¡¡ÎªÁËʹÄãµÄ³ÌÐò¶ÔÓÚʹÓÃÆäËûÓïÑÔµÄÓû§¸ü¼ÓÓÐÓ㬠ÎÒÃÇÏ£ÍûÄãµÄ³ÌÐòÓ¦¸Ã¹ú¼Ê»¯¡£ GNUµÄgcc±àÒëÆ÷ºÍGUI¿â±ÈÈçQT»òÕßGTKµÈͨ¹ý¶Ô×Ö·û´®µÄÌØÊâ´¦ÀíÀ´Ö§³Ö¹ú¼Ê»¯¡£ Éú³ÉÒ»¸öÖ§³Ö¹ú¼Ê»¯µÄ³ÌÐò·Ç³£ÈÝÒס£ ËüʹµÃ·¢²¼ÕߺܿìµÄ°ÑÄãµÄ³ÌÐòÒÆÖ²³ÉÆäËûÓïÑÔ¡£ Çë²Î¿´ÏêϸµÄI18NÎĵµÀ´»ñµÃ¸ü¶àµÄÐÅÏ¢¡£
¡¡¡¡¶Ô±ÈÓëͨ³£µÄÀí½â£¬¼æÈݹú¼Ê»¯µÄ´úÂë·Ç³£ÈÝÒ×±àд¡£ ͨ³££¬ËüÖ»ÐèҪʹÓÃÒ»Ð©ÌØÊâµÄ¹¦Äܺ¯ÊýÀ´°ü×°Ò»ÏÂÄãµÄ×Ö·û´®¡£ ÁíÍ⣬ÇëÈ·ÈÏÖ§³ÖÁË¿í×Ö·û»òÕß¶à×Ö½Ú×Ö·û¡£
¡¡¡¡ÖµµÃÎÒÃÇ×¢ÒâµÄÊǸ÷¸ö¹ú¼Ò×Ô¼ºµÄI18N/L10N µÄ¹¤×÷ÒѾ±ä³ÉÁËÖØ¸´±Ë´ËµÄ¹¤×÷¡£ ÎÒÃÇÖеÄÐí¶àÈËÒ»Ö±ÔÚ×ö×ÅÖØ¸´µÄÎÞЧÂʵÄÖØ¸´·¢Ã÷¹¤×÷¡£ ÎÒÃÇÏ£Íû¸÷¸öÖ÷ÒªI18NµÄ×éÖ¯Äܾۼ¯³ÉÒ»¸ö´óµÄ×éÖ¯µ£¸ºÆðÏñ ºËÐÄÍŶÓÒ»ÑùµÄÔðÈΡ£
¡¡¡¡µ±Ç°£¬ÎÒÃÇÏ£Íû£¬µ±ÄãÔÚ±àд»òÕßÒÆÖ²I18N³ÌÐòʱ£¬ Äܹ»·¢²¼¸ø¸÷¸ö¹ú¼ÒÏà¹ØµÄFreeBSDÓʼþÁбí×÷Ϊ²âÊÔ¡£ ½«À´£¬ÎÒÃÇÏ£ÍûÄÜÉú³É¿ÉÒÔÖ±½ÓʹÓø÷ÖÖÓïÑÔµÄÓ¦ÓóÌÐò ¶ø²»ÊÇ»¹Òª×öһЩ»ìÂÒµÄÆÆ½â¡£
¡¡¡¡FreeBSD ¹ú¼Ê»¯ÓʼþÁбí ÒѾ½¨Á¢¡£Èç¹ûÄãÊÇÒ»¸öI18N/L10NµÄ¿ª·¢Õߣ¬ Çë·¢Ë͸øÎÒÃÇÈκÎÄãÄÜÏëµ½µÄÓëÖ®Ïà¹ØµÄ˵Ã÷£¬Ïë·¨£¬ÎÊÌâµÈµÈ¡£
¡¡¡¡Michael C. Wu ½«»áά»¤I18NµÄ¹¤×÷£¬Ö÷Ò³ÔÚ http://www.FreeBSD.org/~keichii/i18n/index.html¡£ ÇëͬʱÔĶÁBSDCon2000 I18NµÄÓÉClive Lin£¬Chia-Liang KaoºÍMichael C.Wu ÔÚhttp://www.FreeBSD.org/~keichii/papers/ Ìá³öµÄÎÄÕ¡£
¡¡¡¡PerlºÍPythonÓµÓÐI18NºÍ´¦Àí¿í×Ö·ûµÄ¿â¡£ÇëʹÓÃËûÃÇÀ´¼æÈÝI18N¡£
¡¡¡¡ÔھɵÄFreeBSD°æ±¾ÖУ¬Perl»á¸ø³öһЩûÓÐÔÚÄãµÄϵͳÖа²×°Á˱¾µØ¿í ×Ö·ûµÄ¾¯¸æ¡£Äã¿ÉÒÔÔÚÄãµÄshellÖÐÉèÖû·¾³±äÁ¿LD_PRELOADΪ /usr/lib/libxpg4.so¡£
¡¡¡¡ÔÚ»ùÓÚshµÄshellÖÐ:
LD_PRELOAD=/usr/lib/libxpg4.so
¡¡¡¡ÔÚ»ùÓÚC-shµÄshellÖÐ:
setenv LD_PRELOAD /usr/lib/libxpg4.so
¡¡¡¡ÕâÒ»Õ¼ÇÊöÁË FreeBSD Ô´´úÂëÊ÷¸÷ÖÖ¸÷ÑùµÄÖ¸ÄϺÍÓÐЧµÄά»¤·¢Õ¹²ßÂÔ¡£
¡¡¡¡Èç¹û FreeBSD ·¢²¼µÄijһ²¿·ÖÕýÓÉÒ»¸öÈË»òһȺÈËÀ´Î¬»¤£¬ ËûÃÇ¿ÉÒÔͨ¹ýÔÚÔ´´úÂëÊ÷Öиò¿·ÖµÄ¶¥¼¶Ä¿Â¼ÀïµÄ Makefile ÖÐÌí¼ÓÒ»ÐÐ
MAINTAINER= µç×ÓÐÅÏ䵨ַÀ´°ÑÕâÒ»Çé¿ö¸æËßÈ«ÊÀ½ç¡£ (ÒëÕß×¢£º Ŀǰ src/ µÄά»¤²ßÂÔÒªÇóÈ«²¿´ËÀà˵Ã÷·ÅÔÚ MAINTAINERS Îļþ£¬ ¶ø·ÇÆäËûĿ¼ÖÐµÄ Makefile Àï¡£)
¡¡¡¡¾ßÌåÒâÒåÈçÏÂ:
¡¡¡¡Î¬»¤ÕßÓµÓдúÂë²¢¸ºÔðά»¤´úÂë¡£ ÕâÒâζ×ÅËûÓÐÔðÈÎÐÞÕý´íÎóºÍ»ØÓ¦¹ØÓڸôúÂëµÄÎÊÌⱨ¸æ£» ¶ÔÓÚÀ´×ÔµÚÈý·½µÄÈí¼þ£¬ ά»¤Õß»¹ÓÐÔðÈÎÔÚÊʵ±µÄʱºò¸üÐÂÆä°æ±¾ (ÒëÕß×¢£º ά»¤Õß¿ÉÒÔÊÓµÚÈý·½Èí¼þа汾ÊÇ·ñÒÑÂú×ãÆ·ÖÊÒªÇó¾ö¶¨ÊÇ·ñ¸ú½ø)¡£
¡¡¡¡ÔÚÌá½»¶ÔÓÐά»¤ÕßµÄĿ¼ÖеÄÄÚÈݽøÐиü¸Ä֮ǰ£¬ Ó¦ÏȽ»¸øÎ¬»¤Õ߸´Éó¡£ Ö»ÓдúÂëά»¤ÕßÌ«³¤Ê±¼äûÓлظ´ÓʼþµÄʱºò£¬ ²Å¿ÉÒÔ²»¾Î¬»¤Õ߸´ÉóÖ±½ÓÌá½»¸Ä¶¯¡£ ¾¡¹ÜÈç´Ë£¬ Ö»Òª¿ÉÄܵϰ£¬ ÈÔÈ»½¨ÒéÄúÕÒÁíÍâһЩÈËÀ´¸´ÉóÏ£Íû½øÐеĸ͝¡£
¡¡¡¡µ±È»£¬ ²»¿ÉÄÜËæÒâÈÃÒ»¸öÈË»òÍÅÌå¼ÓÈëά»¤ÕßµÄÐÐÁУ¬ ÒòΪά»¤Õß±ØÐëͬÒâ³Ðµ£Ïà¹ØµÄÔðÈΡ£ ÁíÒ»·½Ã棬 ά»¤Õß²¢²»Ò»¶¨Ö»ÊÇÒ»¸ö committer£¬ ËüÒ²ÍêÈ«¿ÉÒÔÊÇÒ»¸öÍŶӡ£
¡¡¡¡FreeBSD µÄ·¢ÐаæÖУ¬ ¿ÉÄÜÓÐijЩ²¿·Ö°üº¬ÔÚ FreeBSD ÏîĿ֮Íâ»îÔ¾µØÎ¬»¤×ŵÄÈí¼þ¡£ ÓÉÓÚÀúÊ·ÔÒò£¬ ÎÒÃǽ«Æä³ÆÎª contributed Èí¼þ¡£ ¾ÙÀý˵À´£¬ ÓÐ sendmail¡¢ gcc ºÍ patch µÈµÈ¡£
¡¡¡¡ÔÚ¹ýÈ¥¼¸ÄêÖУ¬ ÎÒÃdz¢ÊÔÁËÐí¶à²»Í¬µÄ·½·¨À´´¦ÀíÕâÀàÈí¼þ£¬ ÕâЩ·½·¨¶¼¸÷ÓÐÀû±×£¬ Òò¶øÒ²¾ÍûÓÐÃ÷È·µÄʤÕß¡£
¡¡¡¡»ùÓÚÕâÖÖÇé¿ö£¬ ÔÚ¾ÀúÁËһЩÕù³³Ö®ºó£¬ ÎÒÃÇÑ¡¶¨ÁËÒ»ÖÖ×÷ΪÔÚδÀ´ÒýÈë´ËÀàÈí¼þµÄ ¡°¹Ù·½¡± ×ö·¨¡£ ¸ü½øÒ»²½£¬ ÎÒÃÇÇ¿ÁÒ½¨ÒéÒÑÓеĵÚÈý·½Èí¼þ¶¼Öð½¥¹ý¶Éµ½Ê¹ÓÃÕâÖÖ·½·¨£¬ ÒòΪÓëÏÈǰʹÓõÄ×ö·¨Ïà±È£¬ Ëü¾ßÓÐÊ®·ÖÃ÷ÏÔµÄÓÅÔ½ÐÔ£¬ ÀýÈ磬 È¡µÃÓëÆäËûÈí¼þ×÷Õß (¼´Ê¹Ã»ÓÐÌṩ cvs ·ÃÎÊȨ) ¡°¹Ù·½¡± °æ±¾Ö®¼äµÄ²îÒì»á¸üÈÝÒ×£¬ µÈµÈ¡£ Õâ»áʹµÃ½«ÐÞÕýÄÚÈÝ»ØÀ¡¸øµÚÈý·½Èí¼þµÄÖ÷Òª¿ª·¢Õß±äµÃ·Ç³£ÈÝÒס£
¡¡¡¡µ±È»£¬ ×îÖÕÕâЩ·½·¨ÊÇÐèÒªÓɾßÌåµÄÈËÀ´ÂäʵµÄ¡£ Èç¹ûÕâһģʽʮ·Ö²»ÊÊÓÚij¸ö¾ßÌåµÄÈí¼þ°ü£¬ ÔòÔڵõ½ core team ÒÔ¼°ÆäËû¿ª·¢ÕßÈϿɵÄǰÌáÏ£¬ ¿ÉÒÔÊʵ±µØ½øÐÐÀýÍâ´¦Àí¡£ ÊÇ·ñÄܹ»³ÖÐøÎ¬»¤µÚÈý·½Èí¼þ°ü£¬ ÔòÊǽøÐÐÕâÀà¾ö²ßµÄ¹Ø¼üÒòËØ¡£
×¢Òâ: ÓÉÓÚ RCS Îļþ¸ñʽÒÔ¼° CVS ʹÓà vendor ·Ö֧ʱµÄһЩ²»µ±Éè¼Æ£¬ ¶ÔÓÚÄÇЩÈÔ´¦ÓÚ vendor ·ÖÖ§µÄÎļþÊÇ Ç¿ÁÒ½¨Òé²»Òª ½øÐÐÈκÎС¹æÄ£µÄÒÔ¼°¶Ô´úÂëÐÞÊÎÐÔÐ޸ĵġ£ ÀàËÆ ¡°Æ´Ð´´íÎó¡± ÕâÑùµÄÎÊÌ⣬ ¾ÍÊôÓÚÇ°ÃæÌáµ½µÄ ¡°ÐÞÊÎÐÔ¡± ÐÞ¸ÄÒ»À࣬ Òò´Ë¶ÔÄÇЩ°æ±¾ºÅΪ 1.1.x.x µÄÎļþ£¬ Ó¦¸Ã¾¡Ò»ÇпÉÄܱÜÃâ¡£ ²»Ç¡µ±µØÐÞ¸ÄÒ»¸ö×Ö·û£¬ ¶¼ÓпÉÄÜ»áʹ´úÂë¿â²úÉúÑÏÖØµÄÅòÕÍ¡£
¡¡¡¡½ÓÏÂÀ´½«ÀûÓÃǶÈëʽÓïÑÔ Tcl À´Õ¹Ê¾Ç°ÃæËùÌáµ½µÄÕâÖÖģʽÈçºÎÔË×÷£º
¡¡¡¡src/contrib/tcl Ŀ¼Öаüº¬ÁËÓÉÈí¼þ°ü×÷Õß·¢²¼µÄ´úÂë¡£ ÍêÈ«²»ÊÊÓÚ FreeBSD µÄÄÇЩ²¿·Ö¿ÉÒÔÍêȫɾȥ¡£ ¶ÔÓÚ Tcl ¶øÑÔ£¬ ÔÚµ¼Èë֮ǰ¾Í¿ÉÒÔɾȥ mac¡¢ win ÒÔ¼° compat ÕâЩ×ÓĿ¼ÁË¡£
¡¡¡¡src/lib/libtcl ÖÐÖ»°üº¬ bmake ·ç¸ñµÄ Makefile£¬ ËüʹÓñê×¼µÄ bsd.lib.mk makefile ¹æÔòÀ´Éú³É¿âÎļþ£¬ ²¢°²×°Îĵµ¡£
¡¡¡¡src/usr.bin/tclsh ÖÐÖ»°üº¬Ê¹Óñê×¼µÄ bsd.prog.mk ¹æÔò£¬ ÓÃÓÚÉú³ÉºÍ°²×° tclsh ³ÌÐò¼°ÆäËù¹ØÁªµÄÁª»úÊÖ²áµÄ bmake ·ç¸ñµÄ Makefile¡£
¡¡¡¡src/tools/tools/tcl_bmake Öаüº¬Ò»×é shell-½Å±¾£¬ ÕâЩ½Å±¾¿ÉÒÔÓÃÓÚ°ïÖúÈËÃǸüРtcl Èí¼þ¡£ ÕâÑùµÄ½Å±¾²¢²»×÷ΪÈí¼þ¹¹½¨»ò°²×°¹ý³ÌµÄ×é³É²¿·Ö¡£
¡¡¡¡½ÓÏÂÀ´µÄÖØÒª×¢ÒâÊÂÏî¾ÍÊÇ£¬ src/contrib/tcl Ŀ¼Êǰ´ÕÕÒÔÏµĹæÔò´´½¨µÄ£º Õâ¸öĿ¼ÖеÄÔ´´úÂëÓ¦ÓëÆä×÷Õß·¢²¼µÄÐÎʽ±£³ÖÒ»Ö (ͨ¹ýÊʵ±Ê¹Óà CVS µÄ vendor-·ÖÖ§£¬ ²¢¹Ø±Õ RCS ¹Ø¼ü×ÖÀ©Õ¹)£¬ Ö»¼ÓÈ뾡¿ÉÄÜÉÙµÄרÓÃÓÚ FreeBSD µÄ¸Ä¶¯¡£ Èç¹û¶Ô´ËÓÐÈκÎÒÉÎÊ£¬ ÔòÒ»¶¨ÒªÏÈѯÎÊÒ»ÏÂÓоÑéµÄÈË£¬ ¶ø²»ÒªÔÚ¶ÔËüÄÜ ¡°Õý³£ÔËת¡± µÄÆÚÍûÖÐÖý³É´ó´í¡£ CVS ±¾Éí²¢²»ÄܺöÂÔÓÉÓÚµ¼ÈëʱµÄÊèºöÒý·¢µÄʹʣ¬ ¶ø»ØÍËÕâÖÖÎÊÌ⣬ ¸üÊÇÐèÒª´óÁ¿µÄ¶îÍâ²Ù×÷²ÅÄÜ×öµ½¡£
¡¡¡¡ÓÉÓÚÇ°ÃæÌáµ½µÄÄÇЩ¹ØÓÚ CVS µÄ vendor ·ÖÖ§Éè¼ÆµÄÖÆÔ¼£¬ ÎÒÃÇÒªÇóÀ´×ÔÈí¼þÔ×÷ÕßµÄ ¡°¹Ù·½¡± ²¹¶¡£¬ ±ØÐëÊ×ÏÈ´òÔÚÆä·Ö·¢µÄÔ´´úÂëÖ®ÉÏ£¬ È»ºóÔÙ½«Ð޸ĹýµÄ´úÂëÖØÐµ¼Èëµ½ vendor ·ÖÖ§¡£ ¹Ù·½²¹¶¡ÔÚÈκÎʱºò£¬ ¶¼²»Ó¦Ö±½ÓÓ¦ÓÃÓÚ´Ó FreeBSD Ô´´úÂë¿â¼ì³öµÄÔ´´úÂ룬 ²¢Ö´ÐÐ ¡°commit¡± ²Ù×÷£¬ ÒòΪÕâ»áÆÆ»µ vendor ·ÖÖ§µÄÒ»ÖÂÐÔ£¬ ²¢ÇÒ£¬ ÓÉÓÚÕâÑùµÄ²Ù×÷»áµ¼Ö²úÉúÐ޸ijåÍ»£¬ »á¸øÎ´À´µ¼ÈëаæÊ±´øÀ´Âé·³¡£
¡¡¡¡ÓÉÓÚÐí¶àÈí¼þ°ü¿ÉÄÜ»á°üº¬ÓÃÓÚ FreeBSD ÒÔÍâµÄÌåϵ½á¹¹ºÍ»·¾³µÄÎļþ£¬ ÎÒÃÇÔÊÐíÔÚµ¼Èëǰ´Ó¹Ù·½·¢ÐеĴúÂëÖÐɾȥÄÇЩ¶Ô FreeBSD ÎÞÓõIJ¿·Ö£¬ ÒÔÆÚ½ÚÊ¡´ÅÅ̿ռ䡣 °üº¬°æÈ¨ÉùÃ÷ºÍ·¢ÐÐ˵Ã÷£¬ ÒÔ¼°ÆäËûÀàËÆµÄÓÃÓÚ˵Ã÷ÆäËûÎļþµÄÎĵµ£¬ Ôò ²» Ӧɾ³ý¡£
¡¡¡¡Èç¹û·½±ãµÄ»°£¬ Ó¦¾¡¿ÉÄÜʹÓÃʹÓÃijЩ¹¤¾ßÉú³ÉµÄ bmake Makefile Îļþ£¬ ÕâЩ¹¤¾ß¿ÉÒÔʹÉý¼¶µ½Î´À´µÄа汾ʱµÄ¹¤×÷±äµÃ¼òµ¥¡£ Èç¹ûÄúÍê³ÉÁËÕâÀ๤×÷£¬ ÇëÎñ±Ø½«ÕâЩ¹¤¾ß (Èç¹ûÐèÒªµÄ»°) ·Åµ½ src/tools Ŀ¼ÖÐÓëÄúËùÒÆÖ²µÄ³ÌÐò¶ÔÓ¦µÄĿ¼ÖУ¬ ÒÔ±ãΪ½«À´µÄά»¤ÕßËùÀûÓá£
¡¡¡¡ÔÚ src/contrib/tcl µÄ¶¥¼¶Ä¿Â¼ÖУ¬ Ó¦Ôö¼ÓÒ»¸öÃûΪ FREEBSD-upgrade µÄÎļþ£¬ ÔÚÆäÖÐ˵Ã÷һЩÀàËÆÏÂÃæµÄÄÚÈÝ£º
ɾȥÁËÄÄЩÎļþ¡£
´ÓºÎ´¦¿ÉÒÔ»ñµÃÔʼµÄ·¢Ðа汾£¬ ÒÔ¼°¹Ù·½ÍøÕ¾¡£
Èç¹ûÓв¹¶¡£¬ Ó¦ÈçºÎ·´À¡¸øÔ×÷Õß¡£
Èç¹ûÐèÒªµÄ»°£¬ ¶Ô FreeBSD-רÓÐ ¸Ä¶¯µÄ¸ÅҪ˵Ã÷¡£
¡¡¡¡²»¹ý£¬ Çë²»Òª½« FREEBSD-upgrade ËæµÚÈý·½Èí¼þµÄÔ´´úÂëһͬµ¼Èë¡£ Ïà·´£¬ ÄúÓ¦ÔÚ×î³õµÄ import ²Ù×÷Ö®ºóÓà cvs add FREEBSD-upgrade ; cvs ci À´Íê³ÉÕâÒ»¹¤×÷¡£ ÔÚ src/contrib/cpio ÖУ¬ Õâ¸öÎļþµÄÄÚÈÝÈçÏ£º
This directory contains virgin sources of the original distribution files
on a "vendor" branch. Do not, under any circumstances, attempt to upgrade
the files in this directory via patches and a cvs commit. New versions or
official-patch versions must be imported. Please remember to import with
"-ko" to prevent CVS from corrupting any vendor RCS Ids.
For the import of GNU cpio 2.4.2, the following files were removed:
INSTALL cpio.info mkdir.c
Makefile.in cpio.texi mkinstalldirs
To upgrade to a newer version of cpio, when it is available:
1. Unpack the new version into an empty directory.
[Do not make ANY changes to the files.]
2. Remove the files listed above and any others that don't apply to
FreeBSD.
3. Use the command:
cvs import -ko -m 'Virgin import of GNU cpio v<version>' \
src/contrib/cpio GNU cpio_<version>
For example, to do the import of version 2.4.2, I typed:
cvs import -ko -m 'Virgin import of GNU v2.4.2' \
src/contrib/cpio GNU cpio_2_4_2
4. Follow the instructions printed out in step 3 to resolve any
conflicts between local FreeBSD changes and the newer version.
Do not, under any circumstances, deviate from this procedure.
To make local changes to cpio, simply patch and commit to the main
branch (aka HEAD). Never make local changes on the GNU branch.
All local changes should be submitted to "cpio@gnu.ai.mit.edu" for
inclusion in the next vendor release.
obrien@FreeBSD.org - 30 March 1997
¡¡¡¡Å¼¶û¿ÉÄÜ»áÐèÒªÔÚ FreeBSD Ô´´úÂëÊ÷Éϰüº¬Ä³Ð©·Á°ÐÔµÄÎļþ¡£ ÀýÈ磬 Èç¹ûij¸öÉ豸ÐèÒªÊ×ÏȼÓÔØÒ»Ð¡¶Î¶þ½øÖÆ´úÂë²ÅÄÜÕý³£¹¤×÷£¬ ¶øÎÒÃDz¢Ã»ÓÐÕâЩ´úÂëµÄÔ´Îļþ£¬ ÔòÕâ¸ö¶þ½øÖÆÎļþ¾Í±»ÈÏΪÊÇ·Á°ÐԵġ£ ÔÚ FreeBSD Ô´ÂëÊ÷ÉÏÒýÈëÕâÀà·Á°ÐÔÎļþʱµÄ¹æÔòÈçÏ¡£
ÓÉϵͳ CPU ½âÊÍ»òÖ´ÐеÄÈκÎÒÔ·ÇÔ´´úÂë¸ñʽ±£´æµÄÎļþ£¬ ¶¼±»ÈÏΪÊÇ·Á°ÐԵġ£
ÊÚȨÏÞÖÆ¶àÓÚ BSD »ò GNU µÄÈκÎÎļþ¶¼ÊÇ·Á°ÐԵġ£
³ý·ÇÊÊÓà (1) »ò (2) Ìõ¿î£¬ °üº¬¿ÉÒÔÏÂÔØµ½Ó²¼þÉ豸µÄÎļþ²¢²»±»ÈÏΪÊÇ·Á°ÐԵġ£ ÕâЩÎļþ±ØÐë±£´æÎªÆ½Ì¨ÖÐÁ¢µÄ ASCII ¸ñʽ (ÍÆ¼öʹÓà file2c »ò uuencode À´½øÐбàÂë)¡£
·Á°ÐÔµÄÎļþ£¬ ÔÚ¼ÓÈëµ½ CVS ´úÂë¿â֮ǰ£¬ ±ØÐë»ñµÃ ºËÐÄС×é µÄÃ÷ʾÅú×¼¡£
·Á°ÐÔÎļþÓ¦ÖÃÓÚ src/contrib »ò src/sys/contrib¡£
Ó¦±£³ÖÄ£¿éµÄÕûÌåÐÔ¡£ ³ý·ÇÔÚ·Ç·Á°ÐÔ´úÂëÖ®¼ä´æÔÚ´úÂ븴Ó㬠·ñÔò²»Ó¦½«Æä¸îÁÑ¿ªÀ´¡£
Ô¤±àÒëµÄÄ¿±êÎļþ£¬ Ó¦ÃüÃûΪ Ìåϵ½á¹¹Ãû/ÎļþÃû.o.uu¡£
ÄÚºËÎļþ£º
Óû§¼¶Îļþ£º
ºËÐÄС×é ÓÐȨ¾ö¶¨ÕâЩ´úÂëÊÇ·ñÓ¦³ÉΪ make world µÄÒ»²¿·Ö¡£
Õýʽ·¢Ðй¤³Ìʦ ÓÐȨ¾ö¶¨ÕâЩ´úÂëÊÇ·ñÄܽøÈëÕýʽ·¢Ðа档
¡¡¡¡Èç¹ûÄãÏëÌí¼Ó¹²Ïí¿âÖ§³Öµ½Ò»¸öÔÀ´²»°üº¬¹²Ïí¿âÖ§³ÖµÄ port »òÊÇÆäËüÈí¼þ£¬ ¹²Ïí¿âµÄ°æ±¾ºÅÓ¦¸Ã×ñÑÈçϹæÔò¡£Í¨³£À´Ëµ£¬Óɴ˵óöµÄÊý×ÖÓëÈí¼þµÄ·¢Ðа汾Î޹ء£
¡¡¡¡½¨Á¢¹²Ïí¿âµÄÈý¸öÔÔòÊÇ£º
´Ó1.0¿ªÊ¼
Èç¹û¸Ä¶¯ÓëÒÔǰ°æ±¾Ïà¼æÈÝ£¬Ôö¼Ó¸±°æ±¾ºÅ£¨×¢Ò⣬ELFϵͳºöÂÔ¸±°æ±¾ºÅ£©¡£
Èç¹ûÊǸö²»¼æÈݵĸ͝£¬Ôö¼ÓÖ÷°æ±¾ºÅ¡£
¡¡¡¡ÀýÈ磬Ìí¼Óº¯ÊýºÍÐÞÕý´íÎóµ¼Ö¸±°æ±¾ºÅÔö¼Ó£¬ ¶øÉ¾³ýº¯Êý¡¢º¯Êýµ÷ÓÃÓï·¨¸Ä±äµÈ£¬»áÆÈʹÖ÷°æ±¾ºÅ¸Ä±ä¡£
¡¡¡¡±£³ÖÕâÖÖÐÎʽµÄ°æ±¾ºÅ£ºÖ÷°æ±¾ºÅ.¸±°æ±¾ºÅ (x.y)¡£ ÎÒÃÇµÄ a.out ¶¯Ì¬Á´½ÓÆ÷²»ÄܺܺõĴ¦Àí x.y.z ÐÎʽµÄ°æ±¾ºÅ¡£ÔڱȽϹ²Ïí¿â°æ±¾ºÅÒÔ¾ö¶¨¸úÄĸö¿âÎļþÁ´½ÓµÄʱºò£¬ ÈκÎyÒÔºóµÄ°æ±¾ºÅ(ÄÇÊÇÖ¸µÚÈý¸öÊý×Ö) ×ÜÊǻᱻºöÂÔ¡£ Èç¹û¸ø¶¨µÄÁ½¸ö¹²Ïí¿âµÄ²»Í¬ÔÚÓÚ¡°Ï¸Î¢¡±°æ±¾ (¡°micro¡± revision)µÄ»°£¬ ld.so½«»áÓë½Ï¸ßÐÞ¶©°æ±¾µÄÁ´½Ó¡£¼´£¬Èç¹ûÄãÒªÓë libfoo.so.3.3.3Á´½Ó£¬Á´½ÓÆ÷Ö»ÔÚ(ELFÎļþµÄ)Í·²¿¼Ç¼ 3.3, ²¢ÇÒÔÚÁ¬½Óʱ£¬ÓëÎļþÃûÒÔ libfoo.so.3.(ÈκÎÊý×Ö >= 3).(ÏÖÓеÄ×î¸ßÊý×Ö) ¿ªÍ·µÄÈκÎÎļþÁ´½Ó¡£
×¢Òâ: ld.so ×ÜÊÇ»áʹÓà ¡°¸±¡±°æ±¾ºÅ×î¸ßµÄ¡£ÀýÈ磬¼´Ê¹Ò»¸ö³ÌÐò×î³õÊÇ(±»É趨)Óë libc.so.2.0Á´½ÓµÄ£¬ ld.soÒ²»áÓÅÏÈÑ¡ÔñʹÓà libc.so.2.2£¬¶ø²»ÊÇ libc.so.2.0¡£
¡¡¡¡ÁíÍ⣬ÎÒÃÇµÄ ELF ¶¯Ì¬Á´½ÓÆ÷ÍêÈ«²»´¦Àí¸±°æ±¾ºÅ¡£ ¿ÉÎÒÃÇ»¹ÊÇÓ¦¸ÃÖ¸¶¨Ò»¸öÖ÷°æ±¾ºÅºÍ¸±°æ±¾ºÅ£¬ÒòΪÎÒÃÇµÄ Makefile »á°´ÏµÍ³ÀàÐÍ¡°×öÕýÈ·µÄÊ¡±¡£
¡¡¡¡¶ÔÓÚ²»ÊôÓÚij¸ö port µÄ¿âÎļþ£¬ÎÒÃǵÄÔÔòÊÇÔÚ¸÷¸ö FreeBSD Õýʽ·¢Ðаæ (RELEASE)Ö®¼äÖ»¸Ä±äÒ»´Î¹²Ïí¿â°æ±¾ºÅ(ÒëÕß×¢£ºÒ»°ãÖ»ÊǸ±°æ±¾ºÅ)¡£ ²¢ÇÒ£¬ÔÚ FreeBSD Õýʽ·¢Ðаæ (RELEASE) Ö÷°æ±¾Ö®¼ä(ÄÇÊÇÖ¸Ïñ´Ó 3.x µ½ 4.x)£¬ Ò²Ó¦¸Ã½ö¸Ä±äÒ»´Î¹²Ïí¿âÖ÷°æ±¾ºÅ¡£ µ±ÄãÐèÒª¶Ôϵͳ¿â×öһЩ¸Ä±ä²¢ÒªÔö¼Ó°æ±¾ºÅʱ£¬ Çë²é¿´ MakefileµÄCVSÌá½»ÈÕÖ¾¡£ ÕâÊÇ committer µÄÔðÈΣºÈ·±£×Ô(×î½üµÄ)Õýʽ·¢Ðаæ (RELEASE) Ö®ºóÖ»ÓеÚÒ»´ÎÕâÑùµÄ¸Ä¶¯»áÈÃÔÚ Makefile ÀïµÄ¹²Ïí¿â°æ±¾ºÅ¸üУ¬ ¶øËæºóµÄ(ÔÚÏÂÒ»¸ö RELEASE ֮ǰµÄ)¸Ä¶¯²»»áʹ¹²Ïí¿â°æ±¾ºÅ¸üС£
¡¡¡¡»Ø¹é²âÊÔͨ³£ÓÃÀ´¼ì²âϵͳÖеÄÌØ¶¨²¿·ÖÊÇ·ñÈçÆÚ¹¤×÷£¬ ²¢ÇÒҪȷ¶¨¾ÉµÄ´íÎóûÓÐÖØÐ³öÏÖ¡£
¡¡¡¡FreeBSD µÄ»Ø¹é²âÊÔ¹¤¾ßÄܹ»ÔÚ FreeBSD µÄÔ´´úÂëÊ÷ src/tools/regression ÖÐÕÒµ½¡£
ÕâÒ»Õ°üº¬ÁËһЩÔÚ FreeBSD ÉÏ»òÕß FreeBSD ×ÔÉí×öÊʺϵÄ΢ÐÔÄܲâÊԵĽ¨Òé¡£
ÒªÔÚÿһ´Îµ¥¶ÀµÄ²âÊÔµÄʱºòʹÓÃËùÓÐÎÒÃǸø³öµÄ½¨ÒéÊDz»¿ÉÄܵġ£ µ«ÊÇÄãÓõÃÔ½¶à£¬Äã²âÊÔС²î±ðµÄÄÜÁ¦¾Í»áÔ½ºÃ¡£
¹Ø±Õ APM ºÍÈÎºÎÆäËû¸ÉÈÅʱÖӵĶ«Î÷ (ACPI ?)¡£
½øÈëµ¥Óû§Ä£Ê½¡£ÀýÈ磬cron(8) ºÍÆäËûµÄÊØ»¤½ø³ÌÖ»»áÔö¼Ó²âÊԵIJ»×¼È·ÐÔ¡£sshd(8) Õâ¸öÊØ»¤½ø³ÌÒ²»áÔì³ÉÎÊÌâ¡£Èç¹ûÔÚ²âÊÔµÄʱºòÐèÒª ssh Á¬½Ó£¬ ÄÇôÄã»òÕß¹Ø±Õ SSHv1 µÄÃܳ×ÔÙÉú¹¦ÄÜ£¬»òÕßÔÚ²âÊÔµÄʱºòɱËÀ sshd ¸¸½ø³Ì¡£
²»ÒªÔËÐÐ ntpd(8)¡£
Èç¹ûÓÐ syslog(3) ʼþ·¢Éú£¬Ê¹ÓÃÒ»¸ö¿Õ°×µÄ /etc/syslogd.conf ÔËÐÐ syslogd(8)£¬ »òÕߣ¬²»ÒªÔËÐÐËü¡£
×îС»¯´ÅÅÌ I/O£¬¿ÉÄܵϰ£¬ÒªÍêÈ«±ÜÃâ¡£
²»Òª¹ÒÔØ²»±ØÒªµÄÎļþϵͳ¡£
¿ÉÄܵϰ£¬°Ñ /£¬ /usr£¬ ºÍÆäËûÈκÎÎļþ¹ÒÔØÎªÖ»¶Á¡£ ÕâÑùµÄ»°¿ÉÒÔ´Ó I/O ·½ÃæÈ¥µôµ½´ÅÅ̵ÄÒì²½¸üÐÂ(µÈµÈ)¡£
ʹÓà newfs(8) À´Éú³ÉÒª²âÊÔ¶ÁдµÄÎļþϵͳ¡£ ÔÚÿ´Î²âÊÔÔËÐÐǰʹÓà tar(1) »òÕß dump(8) ¸ø²âÊÔÎļþϵͳ¹àÊäÎļþ¡£²âÊÔ¿ªÊ¼Ç°ÏÈÐ¶ÔØÎļþϵͳ£¬ È»ºóÔÙ¹ÒÔØ¡£ÕâÑù×öµÄ»°Äܵõ½Ò»¸öÁ¬ÐøµÄÎļþϵͳ¸ñ¾Ö¡£ ¶ÔÓÚ¾µä²âÊÔ£¬ÎÒÃÇÒª²âÊÔµÄĿ¼ÊÇ /usr/obj(Óà newfs ÖØÐ³õʼ»¯£¬È»ºóÔÙ¹ÒÔØ)¡£ Òª»ñµÃ 100% µÄÔÙÏÖ£¬ÇëʹÓà dd(1) ²úÉúµÄÎļþÀ´¹àÊäÎļþϵͳ¡£(Ò²¾ÍÊÇ£º dd if=myimage of=/dev/ad0s1h bs=1m)
ʹÓûùÓÚ malloc µÄ»òÕßÔ¤ÏÈ×°ÔØµÄ md(4) ·ÖÇø¡£
²âÊÔµÄÿ´Îµ¥¶Àµü´úÖ®¼äÖØÆôϵͳ¡£ Õâ¿ÉÒÔ¸øÄãÒ»¸ö¸üÁ¬ÐøµÄ״̬¡£
´ÓÄÚºËÖÐÈ¥µôËùÓв»ÖØÒªµÄÉ豸Çý¶¯¡£ÀýÈ磬Èç¹û²âÊÔ²»ÐèÒª USB£¬ ÄÇô¾Í²»Òª°Ñ USB ·Åµ½ÄÚºËÖС£Çý¶¯¼ÓÔØ¾³£»á²úÉúÑÓʱ¡£
²»ÒªÅäÖò»Ê¹ÓõÄÓ²¼þ¡£Èç¹û²âÊÔ²»Ê¹ÓÃÓ²ÅÌ£¬Ê¹Óà atacontrol(8) ºÍ camcontrol(8) È¥µôÓ²ÅÌ¡£
³ý·Ç±ØÒª£¬·ñÔò²»ÒªÅäÖÃÍøÂ磬 »òÕߵȵ½²âÊÔÍêÒª°Ñ²âÊÔ½á¹û´«Êäµ½Áíһ̨»úÆ÷µÄʱºòÔÙÆô¶¯ÍøÂç¡£
Èç¹ûϵͳ±ØÐëÁ¬½Óµ½¹«¹²ÍøÂ磬һ¶¨Òª×¢Òâ¹ã²¥Êý¾Ý¡£ ¼´Ê¹ÕâЩÊý¾ÝºÜÄѱ»×¢Òâµ½£¬Ò²»áÕ¼Óà CPU µÄʱÖÓÖÜÆÚ¡£ ×é²¥Ò²ÓÐÀàËÆµÄÇé¿ö¡£
°Ñÿһ¸öÎļþϵͳ·Åµ½Ëü×Ô¼ºµÄÓ²ÅÌÉÏ¡£ Õâ¿ÉÒÔ×îС»¯´ÅÅ̵ĴÅÍ·ËÑË÷ÓÅ»¯µÄ¶¶¶¯¡£
¾¡Á¿¼õÉٰѽá¹ûÊä³öµ½´®¿Ú»ò VGA ¿ØÖÆÌ¨¡£ ½«½á¹ûµ¼ÈëÎļþ¿ÉÒÔ¼õÉÙÕ𶯸ÉÈÅ¡£ (´®¿ÚÖն˺ÜÈÝÒ×±ä³ÉÒ»¸öÆ¿¾±¡£) ÔÚ²âÊÔµÄʱºò²»Òª´¥Åö¼üÅÌ£¬ÉõÖÁspace »ò back-space ¼üÒ²»áÒÔÊý×ÖÐÎʽÏÔʾ³öÀ´¡£
È·ÈÏÄãµÄ²âÊÔ×ã¹»³¤£¬ µ«²»ÊÇÌ«³¤¡£ Èç¹û²âÊÔÌ«¶Ì£¬ ¾ÍÎÞ·¨ºöÂÔʱ¼ä´ÁµÄÎó²îÓ°Ï죬 ¶øÈç¹ûÌ«³¤£¬ ζȵı仯»áÓ°Ïì¼ÆËã»úÄÚµÄʯӢ¾§ÌåµÄƵÂÊ¡£ ¾ÑéÖµ£º ¶àÓÚÒ»·ÖÖÓ£¬ ÉÙÓÚÒ»¸öСʱ¡£
¾¡Á¿±£Ö¤»úÆ÷ËùÔÚ»·¾³µÄζȺ㶨¡£ Õâ»áͬʱӰÏìʯӢ¾§ÌåºÍ´ÅÅÌÇý¶¯Æ÷µÄËã·¨¡£
ÒªµÃµ½Îȶ¨µÄʱÖÓ£¬¿ÉÒÔ¿¼ÂÇʹÓà Îȶ¨Ê±ÖÓ×¢Èë(stabilized clock injection)¡£ÀýÈ磬ʹÓà OCXO
+ PLL£¬ °Ñ²âÊÔ½á¹û×¢ÈëʱÖӵ緶ø²»ÊÇÖ÷°åÉϵÄxtal¡£ ÒªÁ˽â¸ü¶à£¬ÇëÁªÏµ Poul-Henning Kamp
<phk@FreeBSD.org>¡£
²âÊÔÖÁÉÙÒªÔËÐÐÈý´Î¡£µ«ÊǶÔÓÚ ¡°²âÊÔǰ¡± ºÍ ¡°²âÊÔºó¡± µÄ´úÂ룬×îºÃ·Ö±ð¶¼ÔËÐжþÊ®´ÎÒÔÉÏ¡£ ¾¡¿ÉÄܽ»´íÖ´ÐвâÊÔ£¬ÕâÑù¿ÉÒÔÕì²â²âÊÔ»·¾³¶Ô²âÊÔµÄÓ°Ïì¡£ ²»Òª 1£º1 µÄ½»´í£¬Òª 3£º3 µÄ½»´í£¬ ÕâÑù¾Í¿ÉÒÔ¼ì²âÈË»ú½»»¥¶Ô²âÊÔµÄÓ°Ïì¡£
ºÃµÄÀàÐÍ£¬±ÈÈ磺bababa{bbbaaa}*£¬ ¿ÉÒÔÔÚ 1+1 µÄÔËÐÐºó¸ø³öһЩÌáʾ£¨ÔÚ²âÊÔ³ö´íʱ¿ÉÒÔÍ£Ö¹²âÊÔ£©£¬ ÒÔ¼°ÔÚÊ×´Î 3+3 ÔËÐкóµÄ±ê×¼²î£¨Èç¹û²âÊÔʱ¼ä½Ï³¤¿ÉÒÔ¸ø³öһЩ£©£¬ ºÍ²âÊÔÔËÐеÄÇ÷ÊÆÓëÉÔºóһЩ½»»¥Êý×Ö¡£
ʹÓà usr/src/tools/tools/ministat À´²é¿´Êý×ÖÊÇ·ñÖØÒª¡£Äã¿ÉÒÔÂòÒ»±¾ ¡°Cartoon guide to statistics¡± ISBN: 0062731025£¬¸ß¶ÈÍÆ¼ö£¬ Èç¹ûÄãÒѾÍü¼Ç»òÕ߸ù±¾²»ÖªµÀ±ê×¼²îºÍ Student's T ²âÊÔ¡£
²»ÒªÊ¹Óúǫ́ fsck(8)
³ý·ÇÄãÊÇÔÚ¶Ôºǫ́ fsck½øÐÐ benchmark¡£Í¬Ê±£¬ÔÚ /etc/rc.conf ÖÐ¹Ø±Õ background_fsck£¬³ý·ÇÔÚϵͳÆð¶¯ºó£¬ ÄãµÄ benchmark ÔÚ fsck ÔËÐÐ 60+ ÃëºóÈÔȻû¿ªÊ¼¡£ ÒòΪһµ©¿ªÆôÁ˺ǫ́ fsck£¬rc(8) »á°Ñ fsck »½ÐѲ¢¼ì²éÊÇ·ñÒªÔÚÎļþϵͳÉÏÔËÐÐÖ®¡£
ÀàËÆµÄ£¬³ý·ÇÄãµÄ²âÊÔ¶ÔÏó°üÀ¨ snapshots£¬ ¾ÍҪȷ¶¨ÏµÍ³ÖÐûÓÐÈκΠsnapshots¡£
Èç¹ûÄãµÄ benchmark ÓÐÔ¤ÆÚÖ®ÍâµÄÐÔÄܵÍÏÂÎÊÌ⣬ ¾ÍÒª¼ì²âÓÐûÓÐÀ´×Ôδ֪ϵͳ×ÊÔ´µÄ¸ßƵÂÊÖжϡ£ ÓÐһЩ°æ±¾µÄ ACPI ¾ÍÓÐ ¡°ÔËÐлìÂÒ¡± µÄÎÊÌ⣬²¢ÇÒ»á²úÉú¹ý¶àµÄÖжϡ£ ÒªÕï¶ÏÆæ¹ÖµÄ²âÊÔ½á¹û£¬¿ÉÒÔץһЩ vmstat -i µÄƬ¶ÎÈ»ºó²é¿´ÊÇ·ñÓв»Õý³£µÄÏÖÏó¡£
Òª½÷É÷¶Ô´ýÄں˺ÍÓû§¿Õ¼äµÄÓÅ»¯²ÎÊý£¬¶ÔÓÚµ÷ÊÔÒ²ÊÇÕâÑù¡£ ÒòΪºÜÈÝÒ׾ͻáºöÂÔһЩ¶«Î÷£¬ È»ºó²Å»áÒâʶµ½²âÊÔ²»ÄÜÓÃÀ´±È½ÏͬÑùµÄÊÂÇé¡£
³ý·ÇÄãµÄ²âÊÔ¶ÔÄں˲ÎÊý WITNESS ºÍ INVARIANTS ÓÐÐËȤ£¬·ñÔò²»ÒªÔÚ¿ªÆôÁËÕâЩÄں˲ÎÊýºó½øÐÐÄãµÄ benchmark¡£ WITNESS »áµ¼Ö 400%+ µÄÐÔÄÜËðʧ¡£ ÀàËÆµÄ£¬Óû§Ì¬µÄ malloc(3) ²ÎÊýÔÚ -CURRENT °æ±¾ºÍÉú²ú°æ±¾ÖÐĬÈÏÖµ¶¼ÊDz»Í¬µÄ¡£
¡¡¡¡BSD Ì×½Ó×Ö(socket)½«½ø³Ì¼äͨÐÅÍÆµ½Ò»¸öеÄˮƽ¡£ ±Ë´ËͨÐŵĽø³Ì¿É²»ÔÙ±ØÐëÔËÐÐÔÚͬһ¼ÆËã»úÉÏ¡£ËüÃÇÈÔÈ»»¹ Äܹ»ÔËÐÐÔÚͬһ¼ÆËã»úÉÏ£¬µ«²»ÔÙ±ØÐëÄÇÑù¡£
¡¡¡¡²»½öÕâЩ½ø³Ì²»±ØÔËÐÐÔÚͬһ¼ÆËã»úÉÏ£¬ ËüÃÇÒ²²»±ØÔËÐÐÔÚͬһÖÖ²Ù×÷ϵͳÉÏ¡£ ÓÐÁË BSD Ì×½Ó×Ö£¬ÄãµÄ FreeBSD Èí¼þÄܹ»ÓëÔËÐÐÔÚ Macintosh®ÖеijÌÐò˳ÀûµÄÐͬ¹¤×÷£¬Ò²¿ÉÒÔÓëÁíÒ»¸öÔÚSun™ ¹¤×÷Õ¾Éϵ쬻òÊÇÁíÒ»¸öÔËÐÐÔÚ Windows® 2000Öеģ¬ Ö»ÒªÕâЩϵͳÓÃÒÔÌ«ÍøÐ͵ľÖÓòÍøÏàÁ¬¡£
¡¡¡¡ÄãµÄÈí¼þ»¹¿ÉÒԺܺõÄÓëÔËÐÐÔÚÁíÒ»´±´óÂ¥£¬»òÊÇÔÚÁíÒ»¸ö´ó½¡¢ ÔÚÒ»ËÒDZͧÖе쬻òÊÇÒ»¼Üº½Ìì·É»úÖеĽø³ÌÐͬ¹¤×÷¡£
¡¡¡¡ËüÒ²Äܹ»Óë²¢·ÇÊôÓÚ¼ÆËã»úÒ»²¿·Ö(ÖÁÉÙ´ÓÊõÓïµÄÑϸñÒâÒåÉÏ˵²»ÊÇ) µÄ×é¼þÐͬ¹¤×÷£¬ÕâÖÖÉ豸Ïñ´òÓ¡»ú¡¢ÊýÂëÏà»ú¡¢Ò½ÁÆÉ豸£¬ ´óÖÂÖ»ÒªÊÇÈκÎÄܹ»½øÐÐÊý×ÖͨÐŵĶ«Î÷¡£
¡¡¡¡ÎÒÃÇÒѾ°µÊ¾ÁËÁªÍøµÄ¶àÑùÐÔÎÊÌâ¡£ Ðí¶à²»Í¬µÄϵͳҪ±Ë´Ë¶Ô»°¡£ËüÃDZØÐë˵ͬһÖÖÓïÑÔ¡£Óë´Ëͬʱ£¬ ËüÃÇÒ²±ØÐëÀí½âͬһÖÖÓïÑÔ¡£
¡¡¡¡ÈËÃdz£³£ÈÏΪ֫ÌåÓïÑÔÊÇͨÓõġ£ ÊÂʵ²¢·ÇÈç´Ë¡£»ØÏëÔÚÎÒ¸Õ¸ÕÊ®¼¸Ëêʱ£¬Îҵĸ¸Ç×´øÎÒÈ¥±£¼ÓÀûÑÇ¡£ Ò»´ÎÎÒÃÇÕý×øÔÚË÷·ÇÑÇÒ»×ù¹«Ô°ÀïµÄ×À×ÓÅÔ£¬Ò»¸öС··ÉÏÀ´ÏòÎÒÃÇ ÍÆÏú¿¾ÐÓÈÊ¡£
¡¡¡¡ÄÇʱÎÒ»¹Ã»ÓÐѧϰ¶àÉÙ±£¼ÓÀûÑÇÓÎÒûÓÐ˵¡°²»¡±£¬¶øÊÇÒ¡ÁËÒ¡Í·£¬ ÄÇÊÇ¡°Í¨Óõġ±Ëµ²»µÄÖ«ÌåÓïÑÔ¡£ Ð