BBSˮľÇ廪վ¡Ã¾«»ªÇø

·¢ÐÅÈË: SuperSB (¹ÂÓ¥), ÐÅÇø: Linux        
±ê  Ìâ: [×ªÔØ]unix»·¾³¸ß¼¶±à³Ì--7 
·¢ÐÅÕ¾: BBS Ë®Ä¾Ç廪վ (Wed Mar 15 14:29:00 2000) 
 
 
 
 
·¢ÐÅÈË: taosm (128+64-->cool), ÐÅÇø: unix  
±ê  Ìâ: unix»·¾³¸ß¼¶±à³Ì--µÚ7Õ UNIX½ø³ÌµÄ»·¾³  
·¢ÐÅÕ¾: Î÷Ê®°ËBBS (Fri Mar 10 13:19:53 2000), ×ªÐÅ  
   
µÚÆßÕ¡þUnix½ø³ÌµÄ»·¾³ª¥  
7ª±1¡þÒýÑÔª¥  
ÏÂÒ»Õ½«½éÉܽø³Ì¿ØÖÆÔ­ÓÔÚ´Ë֮ǰÐèÏÈÁË½â½ø³ÌµÄ»·¾³¡£ÔÚ±¾ÕÂÖÐÎÒÃǽ«ËµÃ÷  
£ºµ±Ö´ÐР 
һͨ³ÌÐòʱ£¬Æämainº¯ÊýÊÇÈçºÎ±»µ÷Óõģ¬ÃüÁîÐвÎÊýÊÇÈçºÎ´«Ë͸øÖ´ÐгÌÐòµÄ£»  
µäÐ͵Ĵ栠
´¢Æ÷²¼¾ÖÊÇʲôÑùʽ£»ÈçºÎ·ÖÅäÁíÍâµÄ´æ´¢¿Õ¼ä£»½ø³ÌÈçºÎʹÓû·¾³±äÁ¿£»½ø³ÌÖÕ  
Ö¹µÄ²»Í¬  
·½Ê½µÈ¡£ÁíÍ⣬ÎÒÃÇÒ²½«ËµÃ÷longjmpºÍsetjmpº¯ÊýÒÔ¼°ËüÃÇÓëÕ»µÄ½»»¥×÷Óá£ÔÚ  
±¾Õ½áÊø  
֮ǰ£¬ÎÒÃǽ«²é¿´½ø³ÌµÄ×ÊÔ´ÏÞÖÆ¡£ª¥  
7ª±2¡þmainº¯Êýª¥  
Ò»µÀC³ÌÐò×ÜÊÇ´Ómainº¯Êý¿ªÊ¼Ö´ÐС£mainº¯ÊýµÄÔ­ÐÍÊÇ£ºª¥  
int main (int argc,char * argv£Û£Ý)£»ª¥  
ÆäÖУ¬argcÊÇÃüÁîÐвÎÊýÊý£¬argvÊÇÖ¸Ïò²ÎÊýµÄ¸÷¸öÖ¸ÕëËù¹¹³ÉµÄÊý×é¡£ÔÚ7ª±4½Ú  
ÖÐÎÒÃǽ«  
¶ÔÃüÁîÐвÎÊý½øÐÐ˵Ã÷¡£ª¥  
ÔÚϵͳºËÆð¶¯Ò»µÀC³ÌÐòʱ(ÓÃÒ»¸öexecº¯Êý£¬ÎÒÃǽ«ÔÚ8ª±9½ÚÖÐ˵Ã÷execº¯Êý)£¬  
ÔÚµ÷ÓÃmai  
nǰÏȵ÷ÓÃÒ»¸öÌØÊâµÄÆð¶¯Àý³Ì¡£¿ÉÖ´ÐгÌÐòÎļþ½«´ËÆð¶¯Àý³ÌÖ¸¶¨Îª³ÌÐòµÄÆðʼ  
µØÖ·¡¼CD2  
¡½ÕâÊÇÓÉÁ¬½Ó±à¼­³ÌÐòÉèÖõ쬶øÁ¬½Ó±à¼­³ÌÐòÔòÓÉC±àÒë³ÌÐò(ͨ³£ÊÇcc)µ÷Óᣠ 
Æð¶¯Àý³Ì  
´ÓϵͳºËÈ¡µÃÃüÁîÐвÎÊýºÍ»·¾³±äÁ¿Öµ£¬È»ºóΪµ÷ÓÃmainº¯Êý×÷ºÃ°²ÅÅ¡£ª¥  
7ª±3¡þ½ø³ÌÖÕÖ¹ª¥  
ÓÐÎåÖÖ·½Ê½Ê¹½ø³ÌÖÕÖ¹£ºª¥  
1ª±Õý³£ÖÕÖ¹ª¥  
(a)´Ómain·µ»Øª¥  
(b)µ÷ÓÃexitª¥  
(c)µ÷Ó༣ãģ£ª³£²¡½exitª¥  
2ª±Òì³£ÖÕÖ¹ª¥  
(a)µ÷ÓÃabort(µÚÊ®ÕÂ)ª¥  
(b)ÓÉÒ»¸öÐźÅÖÕÖ¹(µÚÊ®ÕÂ)ª¥  
ÉϽÚÌá¼°µÄÆð¶¯Àý³ÌÊÇÕâÑù±àдµÄ£¬Ê¹µÃ´Ómain·µ»Øºó¼´µ÷ÓÃexitº¯Êý¡£Èç¹û½«Æð  
¶¯Àý³ÌÒÔ  
C´úÂ빤±íʾ(ʵ¼ÊÉϸÃÀý³Ì³£³£Óûã±àÓïÑÔ±àд)£¬ÔòËüµ÷ÓÃmainº¯ÊýµÄÐÎʽ¿ÉÄÜ  
ÊÇ£ºª¥  
exit(main(argc,argv));ª¥  
exitºÍ ¼£Ã£Ä££ª³£²¡½exitº¯Êýª¥  
exitºÍ ¼£Ã£Ä££ª³£²¡½exitº¯ÊýÕý³£ÖÕÖ¹Ò»¸ö³ÌÐò£º ¼£Ã£Ä££ª³£²¡½exitÁ¢¼´½øÈë  
ϵͳºË£¬  
exitÔòÏÈÖ´ÐÐһЩÇå³ý´¦Àí(°üÀ¨µÄÓÃÖ´Ðи÷ÖÕÖ¹´¦P2³ÌÐò£¬¹Ø±ÕËùÓбê×¼I£¯£ÏÁ÷  
µÈ)ª¥  
#include <stdlibª±h>ª¥  
void exit(int¡¡ª«status);ª«ª¥  
#include <unistdª±h>ª¥  
void  ¼£Ã£Ä££ª³£²¡½exit (int ª«status);ª«ª¥  
ÎÒÃǽ«ÔÚ8ª±5½ÚÌÖÂÛÕâÁ½¸öº¯Êý¶ÔÆäËü½ø³Ì£¬ÀýÈçÖÕÖ¹½ø³ÌµÄ¸¸¡¢×Ó½ø³ÌµÄÓ°Ïì¡£  
ª¥  
ʹÓò»Í¬Í·ÎļþµÄÔ­ÒòÊÇ£ºexitÊÇÓÉANSIC˵Ã÷µÄ£¬¶ø ¼£Ã£Ä££ª³£²¡½exitÔòÊÇÓÉ  
Posixª±1  
˵Ã÷µÄ¡£ª¥  
ÓÉÓÚÀúÊ·Ô­Òò£¬exitº¯Êý×ÜÊÇÖ´ÐÐÒ»¸ö±ê×¼I/O¿âµÄÇå³ý¹Ø±Õ²Ù×÷£º¶ÔÓÚËùÓдò¿ª  
Á÷µ÷ÓÃfcl  
oseº¯Êý¡£»ØÒä5ª±5½Ú£¬ÕâÔì³ÉËùÓÐÔÚ»º´æÖеÄÊý¾Ý¶¼±»Ë¢ÐÂ(дµ½ÎļþÉÏ)¡£ª¥  
exitºÍ ¼£Ã£Ä££ª³£²¡½exit¶¼´øÒ»¸öÕûÐͲÎÊý£¬ÎÒÃdzƴËΪÖÕֹ״̬¡£´ó¶àÊýUni  
x Shell¶¼  
Ìṩ¼ì²éÒ»¸ö  
½ø³ÌÖÕֹ״̬µÄ·½·¨¡£Èç¹û(a)Èôµ÷ÓÃÕâЩº¯Êýʱ²»´øÖÕֹ״̬£¬»ò(b)mainÖ´ÐÐÁË  
Ò»¸öÎÞ·µ  
»ØÖµµÄreturnÓï¾ä£¬»ò(c)mainÖ´ÐÐÒþʽ·µ»Ø£¬Ôò¸Ã½ø³ÌµÄÖÕֹ״̬ÊÇÄ©¶¨ÒåµÄ¡£  
Õâ¾ÍÒâζ  
×Å£¬ÏÂÁо­µäÐÔµÄCÓïÑÔ³ÌÐòª¥  
#indude <stdioª±h>ª¥  
main ()ª¥  
{ª¥  
¡þ¡þprintf ("hello,world £Ün");ª¥  
}ª¥  
ÊDz»ÍêÕûµÄ£¬ÒòΪmainº¯ÊýûÓÐʹÓÃreturnÓï¾ä·µ»Ø(Òþʽ·µ»Ø)£¬ËüÔÚ·µ»Øµ½CµÄ  
Æð¶¯Àý³Ì  
ʱ²¢Ã»Óзµ»ØÒ»¸öÖµ(ÖÕֹ״̬)¡£ÁíÍ⣬ÈôʹÓꥠ 
return(0);ª¤  
»òÕߪ¥  
exit(0)£»ª¥  
ÔòÏòÆô¶¯Ö´Ðд˳ÌÐòµÄ½ø³Ì(³£³£ÊÇÒ»¸öshell½ø³Ì)·µ»ØÖÕֹ״̬0¡£ÁíÍ⣬mainº¯  
ÊýµÄ˵Ã÷  
ʵ¼ÊÉÏÓ¦µ±ÊÇ£ºª¥  
int main(void)ª¥  
ÔÚÏÂÒ»Õ£¬ÎÒÃÇÕë»áÁ˽⵽һ¸ö½ø³ÌÈçºÎÒ»µÀ³ÌÐòÖ´ÐУ¬ÈçºÎµÈ´ýÖ´ÐиóÌÐòµÄ½ø  
³ÌÍê³É£¬  
È»ºóÈ¡µÃÆäÖÕֹ״̬¡£ª¥  
½«main˵Ã÷Ϊ·µ»ØÒ»¸öÕûÐÍÒÔ¼°ÓÃexit´úÌæreturn£¬¶ÔijЩC±àÒë³ÌÐòºÍUnix Lin  
t(1)³ÌÐò  
¶øÑÔ»á²úÉú²»±ØÒªµÄ¾¯¸æÐÅÏ¢¡£ÎÊÌâÊÇÕâЩ±àÒë³ÌÐò²¢²»Á˽âÔÚmainÖеÄexitÓër  
eturnÓï¾ä  
µÄ×÷ÓÃÏàͬ¡£¾¯¸æÐÅÏ¢¿ÉÄÜÊÇ"control reaches end of nonvoid function¡£"(¿Ø  
ÖÆµ½´ï  
·Çvoidº¯ÊýµÄ½áÊø´¦)£¬±Ü¿ªÕâÖÖ¾¯¸æÐÅÏ¢µÄÒ»ÖÖ·½·¨ÊÇ£ºÔÚmainÖÐʹÓÃreturnÓï  
¾ä¶ø²»ÊÇe  
xit¡£µ«ÊÇÕâÑù×öµÄ½á¹ûÊÇʹÎÒÃDz»ÄÜÓÃUnix¡£ª¥  
grep¹«ÓóÌÐòÀ´ÕÒ³öÒ»µÀ³ÌÐòÖеÄËùÓÐexitµ÷Óá£ÁíÍâÒ»¸ö½â¾ö·½·¨Êǽ«main˵Ã÷  
Ϊ·µ»Øvo  
id¶ø²»ÊÇint£¬È»ºóµÄ¾Éµ÷ÓÃexit¡£ÕâÒ²±Ü¿ªÁ˱àÒë³ÌÐòµÄ¾¯¸æ£¬µ«´Ó³ÌÐòÉè¼Æ½Ç  
¶È¿´È´²¢  
²»ÕýÈ·¡£ÔÚ±¾ÕÂÖУ¬ÎÒÃǽ«main±íʾΪ·µ»ØÒ»¸öÕûÐÍ£¬ÒòΪÕâÊÇANSICºÍPOSIXª±1  
Ëù¶¨ÒåµÄ  
¡£ÎÒÃǽ«²»Àí»á±àÒë³ÌÐò²»±ØÒªµÄ¾¯¸æ¡£ª¥  
atexitº¯Êýª¥  
°´ÕÕANSICµÄ¹æ¶¨£¬Ò»¸ö½ø³Ì¿ÉÒԵǼǶàÖÁ32¸öº¯Êý£¬ÕâЩº¯Êý½«ÓÉexit×Ô¶¯µ÷Óà 
¡£ÎÒÃdzƠ 
ÕâЩº¯ÊýΪÖÕÖ¹´¦Àí³ÌÐò£¬²¢ÓÃatexitº¯ÊýÀ´µÇ¼ÇÕâЩº¯Êý¡£ª¥  
#include <stdlibª±h>ª¥  
int atexit(void (ª«ª³func)ª«(void));ª¤  
Returns:0 if OK,nonzero on error·µ»Ø£ºÈô³É¹¦Îª0£¬³ö´íΪ·Ç0ª¥  
ÆäÖУ¬²ÎÊý(*func)(void)ÊÇÒ»¸öº¯ÊýµØÖ·£¬µ±µ÷Óô˺¯ÊýʱÎÞÐèÏòËü´«ËÍÈκβΠ 
Êý£¬Ò²²»  
ÆÚÍûËü·µ»ØÒ»¸öÖµ¡£exitÒԵǼÇÕâЩº¯ÊýµÄÏ෴˳Ðòµ÷ÓÃËüÃÇ¡£Í¬Ò»º¯ÊýÈçÈôµÇ¼Ç  
¶à´Î£¬Ôò  
Ò²±»µ÷Óöà´Î¡£ª¥  
ÖÕÖ¹´¦Àí³ÌÐòÕâÒ»»úÖÆÊÇÓÉANSICÐÂÒý½øµÄ¡£SVR4ºÍ4ª±3+BSD¶¼ÌṩÕâÖÖ»úÖÆ¡£Ïµ  
ͳVµÄÔçÆÚ  
°æ±¾ºÍ4ª±3BSDÔò¶¼²»Ìṩ´Ë»úÖÆ¡£ª¥  
°´ÕÕANSICºÍPOSIXª±1£¬exitÊ×Ïȵ÷Óø÷ÖÕÖ¹´¦Àí³ÌÐò£¬È»ºó°´Ðè¶à´Îµ÷ÓÃfclose  
£¬¹Ø±ÕËù  
Óдò¿ªÁ÷¡£Í¼7ª±1ÕªÒªÏÔʾÁËÒ»¸öC³ÌÐòÊÇÈçºÎÆð¶¯µÄ£¬ÒÔ¼°ËüÖÕÖ¹µÄ¸÷ÖÖ·½Ê½¡£  
ª¥  
P164ª¥ª¥  
ͼ7ª±1¡þÒ»¸öC³ÌÐòÊÇÈçºÎÆð¶¯ºÍÖÕÖ¹µÄª¥  
×¢Ò⣬ϵͳºËʹһµÀ³ÌÐòÖ´ÐеÄΨһ·½·¨Êǵ÷ÓÃÒ»ÖÖexecº¯Êý¡£Ò»¸ö½ø³Ì×ÔÔ¸ÖÕÖ¹  
µÄΨһ·½  
·¨ÊÇÏÔʾ»òÒþʽµØ(µ÷ÓÃexit)µ÷Ó༣ãģ£ª³£²¡½exit¡£Ò»¸ö½ø³ÌÒ²¿É·Ç×ÔÔ¸µØÓÉ  
Ò»¸öÐźŠ 
ʹÆäÖÕÖ¹(ÔÚͼ7ª±1ÖÐûÓÐÏÔʾ)¡£ª¥  
ʵÀýª¥  
³ÌÐò7ª±1˵Ã÷ÁËÈçºÎʹÓÃatexitº¯Êý¡£Ö´ÐгÌÐò7ª±1²úÉú£ºª¥  
$ aª±outª¥  
main is doneª¥  
first exit handlerª¥  
first exit handlerª¥  
second exit handlerª¥  
×¢Ò⣬ÔÚmainÖÐÎÒÃÇûÓе÷ÓÃexit£¬¶øÊÇÓÃÁËreturnÓï¾ä¡£ª¥  
P165ª¥ª¥  
³ÌÐò7ª±1¡þÖÕÖ¹´¦Àí³ÌÐòµÄʵÀýª¥  
7ª±4¡þÃüÁîÐвÎÊýª¥  
µ±Ö´ÐÐÒ»¸ö³ÌÐòʱ£¬µ÷ÓÃexecµÄ½ø³Ì¿É½«ÃüÁîÐвÎÊý´«µÝ¸ø¸ÃгÌÐò¡£ÕâÊÇUnix  
shellµÄÒ»  
²¿·Ö³£¹æ²Ù×÷¡£ÔÚǰ¼¸ÕµĺܶàʵÀýÖУ¬ÎÒÃÇÒѾ­¿´µ½ÁËÕâÒ»µã¡£ª¥  
ʵÀýª¥  
³ÌÐò7ª±2½«ÆäËùÓÐÃüÁîÐвÎÊý¶¼»ØË͵½±ê×¼Êä³öÉÏ(Unix echo(1)³ÌÐò²»»ØË͵Ú0¸ö  
²ÎÊý¡£)  
±àÒë´Ë³ÌÐò£¬²¢½«Æä¿ÉÖ´ÐдúÂëÎļþ¶¨ÃûΪechoarg£¬Ôòª¥  
$ ª±/echoarg arg1 TEST fooª¥  
argv£Û0£Ý: ª±/echoargª¥  
argv£Û1£Ý: arg1ª¥  
argv£Û2£Ý: TESTª¥  
argv£Û3£Ý: fooª¥ª¥  
P166ª¥  
³ÌÐò7ª±2¡þ½«ËùÓÐÃüÁîÐвÎÊý»ØË͵½±ê×¼Êä³öª¥  
ANSICºÍPOIXª±1¶¼ÒªÇóargv£Ûargc£ÝÊÇÒ»¸ö¿ÕÖ¸Õë¡£Õâ¾ÍʹÎÒÃÇ¿ÉÒÔ½«²ÎÊý´¦ÀíÑ­  
»·¸ÄдΪ  
£ºª¥  
for(i=0;arg£Ûi£Ý!=NULL;i++)ª¥  
7ª±5¡þ»·¾³±íª¥  
ÿ¸ö³ÌÐò¶¼½ÓÊÕµ½Ò»ÕÅ»·¾³±í¡£Óë²ÎÊý±íÒ»Ñù£¬»·¾³±íÒ²ÊÇÒ»¸ö×Ö·ûÖ¸ÕëÊý×飬Æä  
ÖÐÿ¸öÖ¸  
Õë°üº¬Ò»¸öÒÔnull·û½áÊøµÄ×Ö·û´®µÄµØÖ·¡£È«¾Ö±äÁ¿environÔò°üº¬Á˸ÃÖ¸ÕëÊý×é  
µÄµØÖ·¡£  
ª¥  
extern char **environ;ª¥  
ÀýÈ磺Èç¹û¸Ã»·¾³°üº¬ÁËÎå¸ö×Ö·û´®£¬ÄÇôËü¿´ÆðÀ´¿ÉÄÜÈçͼ7ª±2ÖÐËùʾ¡£ª¥  
P166ª¥ª¥  
ͼ7ª±2¡þÓÉÎå¸ö×Ö·û´®×é³ÉµÄ»·¾³ª¥  
ÆäÖУ¬ÔÚÿ¸ö×Ö·û´®µÄ½áÊø´¦¶¼ÓÐÒ»¸önull×Ö·û¡£ÎÒÃdzÆenvironΪ»·¾³Ö¸Õ룬ָ  
ÕëÊý×éΪ  
»·¾³±í£¬ÆäÖи÷Ö¸ÕëÖ¸ÏòµÄ×Ö·û´®Îª»·¾³×Ö·û´®¡£ª¥  
°´ÕÕ¹ßÀý£¬»·¾³Óɪ¥  
name=valueª¥  
ÕâÑùµÄ×Ö·û´®×é³É£¬ÕâÓëͼ7ª±2ÖÐËùʾÏàͬ¡£´ó¶àÊýÓ趨ÒåÃûÊÇÍêÈ«ÓÉ´óд×Öĸ×é  
³ÉµÄ£¬µ«  
ÕâÖ»ÊÇÒ»¸ö¹ßÀý¡£ª¥  
ÔÚÀúÊ·ÉÏ£¬´ó¶àÊýUnixϵͳ¶Ômainº¯ÊýÌṩÁ˵ÚÈý¸ö²ÎÊý£¬Ëü¾ÍÊÇ»·¾³±íµØÖ·£ºª¥  
   
int main(int argc,char *argv£Û£Ý,char *envp£Û£Ý);ª¥  
ÒòΪANSIC¹æ¶¨mainº¯ÊýÖ»ÓÐÁ½¸ö²ÎÊý£¬¶øÇÒµÚÈý¸ö²ÎÊýÓëÈ«¾Ö±äÁ¿environÏà±ÈÒ²  
ûÓдøÀ´  
¸ü¶àÒæ´¦£¬ËùÒÔPOSIXª±1Ò²¹æ¶¨Ó¦Ê¹ÓÃenviron¶ø²»Ê¹ÓõÚÈý¸ö²ÎÊý¡£Í¨³£ÓÃgete  
nvºÍputen  
vº¯Êý(ÔÚ7ª±9½ÚÖÐ˵Ã÷)À´´æÈ¡Ìض¨µÄ»·¾³±äÁ¿£¬¶ø²»ÊÇÓÃenviron±äÁ¿¡£µ«ÊÇ£¬Èç  
¹ûÒª²é¿´  
Õû¸ö»·¾³£¬Ôò±ØÐëʹÓÃenvironÖ¸Õë¡£ª¥  
7ª±6¡þC³ÌÐòµÄ´æ´¢¿Õ¼ä ¼¾Öª¥  
ÓÉÓÚÀúÊ·Ô­Òò£¬C³ÌÐòÒ»Ö±ÓÉÏÂÁм¸²¿·Ö×é³É£ºª¥  
¡¤ÕýÎĶΡ£ÕâÊÇÓÉCPUÖ´ÐеĻúÆ÷Ö¸Á·Ö¡£Í¨³££¬ÕýÎĶÎÊǿɹ²ÏíµÄ£¬ËùÒÔ¼´Ê¹  
ÊǾ­³£Ö´  
ÐеijÌÐò(Îı¾±à¼­³ÌÐò¡¢±àÒë³ÌÐò¡¢shellµÈ)ÔÚ´æ´¢Æ÷ÖÐÒ²Ö»ÐèÓÐÒ»¸ö¸±±¾¡£Áí  
Í⣬ÕýÎÄ  
¶Î³£³£ÊÇÖ»¶ÁµÄ£¬ÒÔ·ÀÖ¹Ò»µÀ³ÌÐòÓÉÓÚ¼ÉÍâ×ӹʶøÐÞ¸ÄÆä×ÔÉíµÄÖ¸Áî¡£ª¥  
¡¤³õʼ»¯Êý¾Ý¶Î¡£Í¨³£½«´Ë¶Î¾Í³ÆÎªÊý¾Ý¶Î£¬Ëü°üº¬Á˳ÌÐòÖÐÐ踳³õÖµµÄ±äÁ¿¡£Àý  
È磺C³Ì  
ÐòÖÐÔÚÈκκ¯ÊýÖ®ÍâµÄ˵Ã÷£ºª¥  
int maxcount=99;ª¥  
ʹ´Ë±äÁ¿ÒÔ³õÖµ´æ·ÅÔÚ³õʼ»¯Êý¾Ý¶ÎÖС£ª¥  
¡¤·Ç³õʼ»¯Êý¾Ý¶Î¡£Í¨³£½«´Ë¶Î³ÆÎª"bss"¶Î£¬ÕâÒ»Ãû³ÆÀ´Ô´ÓÚÔçÆÚ»ã±à³ÌÐòµÄÒ»  
¸ö²Ù×÷  
·û£¬Òâ˼ÊÇ"block started by symbol"(ÓÉ·ûºÅ¿ªÊ¼µÄ¿é)£¬ÔÚ³ÌÐò¿ªÊ¼Ö´ÐÐ֮ǰ  
£¬ÏµÍ³  
ºË½«´Ë¶Î³õʼ»¯Îª0¡£ÔÚº¯ÊýÍâµÄ˵Ã÷ª¥  
long sum£Û1000£Ý;ª¥  
ʹ´Ë±äÁ¿´æ·ÅÔڷdzõʼ»¯Êý¾Ý¶ÎÖС£ª¥  
¡¤Õ»¡£×Ô¶¯±äÁ¿ÒÔ¼°Ã¿´Îº¯Êýµ÷ÓÃʱËùÐè±£´æµÄÐÅÏ¢¶¼´æ·ÅÔڴ˶ÎÖС£Ã¿´Îº¯Êýµ÷  
ÓÃʱ£¬Æä  
·µ»ØµØÖ·¡¢ÒÔ¼°µ÷ÓÃÕߵĻ·¾³ÐÅÏ¢(ÀýÈçijЩ»úÆ÷¼Ä´æÆ÷)¶¼´æ·ÅÔÚÕ»ÖС£È»ºó£¬Ð  
±»µ÷ÓõĠ 
º¯ÊýÔÚÕ»ÉÏΪÆä×Ô¶¯ºÍÁÙʱ±äÁ¿·ÖÅä´æ´¢¿Õ¼ä¡£ÒÔÕâÖÖ·½Ê½Ê¹ÓÃÕ»£¬Cº¯Êý¿ÉÒԵݠ 
¹éµ÷Óᣠ 
ª¥  
¡¤¶Ñ¡£Í¨³£ÔÚ¶ÑÖнøÐж¯Ì¬´æ´¢·ÖÅä¡£ÓÉÓÚÀúÊ·ÉÏÐγɵĹßÀý£¬¶ÑλÓڷdzõʼ»¯Êý  
¶Î¶¥ºÍÕ»  
µ×Ö®¼ä¡£ª¥  
ͼ7ª±3ÏÔʾÁËÕâЩ¶ÎµÄÒ»ÖÖµäÐͰ²ÅÅ·½Ê½¡£ÕâÊÇÒ»¸ö³ÌÐòµÄÂß¼­²¼¾ÖÒ»ËäÈ»²¢²»Òª  
ÇóÒ»¸ö¾ß  
ÌåʵÏÖÒ»¶¨ÒÔÕâÖÖ·½Ê½°²ÅÅÆä´æ´¢¿Õ¼ä¡£¾¡¹ÜÈç´Ë£¬Õâ¸ø³öÁËÒ»¸öÎÒÃDZãÓÚ×÷Óйؠ 
˵Ã÷µÄÒ»  
ÖÖµäÐͰ²ÅÅ¡£ª¥ª¥ª¥  
P168ª¥  
ͼ7ª±3¡þµäÐ͵Ĵ洢Æ÷°²ÅŪ¥  
¶ÔÓÚÔÚVAXÉϵÄ4ª±3+BSD£¬ÕýÎĶÎÔÚ0ºÅµ¥Î»¿ªÊ¼£¬Õ»¶¥ÔòÔÚOª­x7fffffff֮ϿªÊ¼  
¡£ÔÚVAX  
»úÆ÷ÉÏ£¬ÔڶѶ¥ºÍÕ»µ×Ö®¼äδÓõÄÐ鵨ַ¿Õ¼äÊǺܴóµÄ¡£ª¥  
´Óͼ7ª±3»¹¿É×¢Ò⵽ĩ³õʼ»¯Êý¾Ý¶ÎµÄÄÚÈݲ¢²»´æ·ÅÔÚ´ÅÅ̳ÌÐòÎļþÖС£ÐèÒª´æ·Å  
ÔÚ´ÅÅ̳̠ 
ÐòÎļþÖеĶÎÖ»ÓÐÕýÎĶκͳõʼ»¯Êý¾Ý¶Î¡£ª¥  
size(1)ÃüÁ¸æÕýÎĶΡ¢Êý¾Ý¶ÎºÍbass¶ÎµÄ³¤¶È(µ¥Î»£º×Ö½Ú)¡£ÀýÈ磺ª¥  
$ size/bin/cc /bin/shª¥  
text¡þdata¡þbss¡þdec¡þhexª¥  
81920¡þ16384¡þ664¡þ98968¡þ18298¡þ/bin/ccª¥  
90112¡þ16384¡þ0¡þ106496¡þ1a000¡þ/bin/shª¥  
µÚ4ºÍµÚ5ÁÐÊÇ·Ö±ðÒÔÊ®½øÖƺÍÊ®Áù½øÖƱíʾµÄ×ܳ¤¶È¡£ª¥  
7ª±7¡þ¹²Ïí¿âª¥  
ÏÖÔÚ£¬ºÜ¶àUnixϵͳ֧³Ö¹²Ïí¿â¡£Arnold£Û1986£Ý˵Ã÷ÁËÒ»¸öÔÚϵͳVÉϹ²Ïí¿âµÄ  
Ò»¸öÔçÆÚ  
ʵ  
ÏÖ£¬GingellµÈ£Û£±£¹£¸£·£ÝÔò˵Ã÷ÁËÒ»¸öÔÚSunOsÉϵÄÁíÒ»¸öʵÏÖ¡£¹²Ïí¿âʹµÃ¿É  
Ö´ÐÐÎļþ  
Öв»ÔÙÐèÒª°üº¬³£ÓõĿ⺯Êý£¬¶øÖ»ÐèÔÚËùÓнø³Ì¶¼¿É´æ·ÃµÄ´æ´¢ÇøÖб£´æÕâÖÖ¿â  
Àý³ÌµÄÒ»  
¸ö¸±±¾¡£ÔÚ³ÌÐòµÚÒ»´ÎÖ´ÐлòÕßµÚÒ»´Îµ÷ÓÃÿ¸ö¿âº¯Êýʱ£¬Óö¯ÆðÁ¬½Ó·½·¨½«³ÌÐò  
Óë¹²Ïí¿â  
º¯ÊýÏàÁ¬½Ó¡£¹²Ïí¿âµÄÁíÒ»¸öÓŵãÊÇ¿ÉÒÔÓÿ⺯ÊýµÄа汾´úÌæÀϰ汾¶øÎÞÐè¶Ôʹ  
ÓøÿâµÄ  
³ÌÐòÖØÐÂÁ¬½Ó±à¼­¡£(¼Ù¶¨²ÎÊýÊýºÍÀàÐͶ¼Ã»Óз¢Éú¸Ä±ä¡£)ª¥  
²»Í¬µÄϵͳʹÓÃÁ˲»Í¬µÄ·½·¨Ê¹³ÌÐò¿ÉÒÔ˵Ã÷ÊÇ·ñҪʹÓù²Ïí¿â¡£CC(1)ºÍld(1)Ãü  
ÁîµÄÑ¡Ôñ  
ÏîÊǵäÐ͵ġ£×÷Ϊ³¤¶È·½Ãæ·¢Éú±ä»¯µÄÀý×Ó£¬ÏÂÁпÉÖ´ÐÐÎļþ(µäÐ͵Ähelloª±C³Ì  
Ðò)ÏÈÓÃÎÞ  
¹²Ïí¿â·½Ê½´´½¨£ºª¥  
$ ls -1 aª±outª¥  
-rwxrwxr-x¡þ£±¡þstevens¡þ¡þ104859 Aug¡þ2 14£º25 aª±outª¥  
$ size aª±outª¥  
text¡þdata¡þbass¡þdec¡þhexª¥  
49152¡þ49152¡þ0¡þ98304¡þ18000ª¥  
Èç¹ûÎÒÃÇÔÙ±àÒë´Ë³ÌÐòʹÆäʹÓù²Ïí¿â£¬Ôò¿ÉÖ´ÐÐÎļþµÄÕýÎĺÍÊý¾Ý¶ÎµÄ³¤¶È¶¼ÏÔ  
Öø¼õÉÙ£»  
ª¥  
$ ls -1 aª±outª¥  
-rwxrwxr-x¡þ1 stevens¡þ¡þ24576 Aug¡þ2 14£º26 aª±outª¥  
$ size aª±outª¥  
text¡þdata¡þbass¡þdec¡þhexª¥  
8192¡þ8192¡þ0¡þ16384¡þ4000ª¥  
7ª±8¡þ´æ´¢Æ÷·ÖÅ䪥  
ANSIC˵Ã÷ÁËÈý¸öÓÃÓÚ´æ´¢¿Õ¼ä¶¯Ì¬·ÖÅäµÄº¯Êýª¥  
1ª± malloc¡£·ÖÅäÖ¸¶¨×Ö½ÚÊýµÄ´æ´¢Çø¡£ÔÚ´Ë´æ´¢ÇøÖеijõʼֵÊDz»È·¶¨µÄ¡£ª¥  
2ª± calloc¡£ÎªÖ¸¶¨³¤¶ÈµÄ¶ÔÏ󣬷ÖÅäÄÜÈÝÄÉÆäÖ¸¶¨¸öÊýµÄ´æ´¢¿Õ¼ä¡£¸Ã¿Õ¼äÖеĠ 
ÿһλ(b  
it)¶¼³õʼ»¯Îª0¡£ª¥  
3ª± realloc¡£¸ü¸ÄÒÔǰ·ÖÅäÇøµÄ³¤¶È(Ôö¼Ó»ò¼õÉÙ)¡£µ±Ôö¼Ó³¤¶Èʱ£¬¿ÉÄÜÐ轫ÒÔ  
ǰ·ÖÅäÇø  
µÄÄÚÈÝÒÆµ½ÁíÒ»¸ö×ã¹»µÄ´óÇøÓò£¬¶øÐÂÔöÇøÓòÄڵijõʼֵÔò²»È·¶¨¡£ª¥  
#include <stdlibª±h>ª¥  
void *malloc(size ¼£Ã£Ä££ª³£²¡½¡t¡ª«size);ª«ª¥  
void *calloc(size ¼£Ã£Ä££ª³£²¡½¡t¡ª«nobj,ª«size ¼£Ã£Ä££ª³£²¡½t ª«size);  
ª«ª¥  
void *realloc(void ª³ª«ptr,ª«size ¼£Ã£Ä££ª³£²¡½t ª«newsize);ª«ª¥  
All three return:nonnull pointer if OK,NULL on errorª¥  
Èý¸öº¯Êý·µ»Ø£ºÈô³É¹¦Îª·Ç¿ÕÖ¸Õ룬³ö´íΪNULLª¥  
void free(void *ª«ptr)ª«ª¥  
ÕâÈý¸ö·ÖÅ亯ÊýËù·µ»ØµÄÖ¸ÕëÒ»¶¨ÊÇÊʵ±¶ÔÆëµÄ£¬Ê¹Æä¿ÉÓÃÓÚÈκÎÊý¾Ý¶ÔÏó¡£ÀýÈç  
£¬ÔÚÒ»¸ö  
ÌØ¶¨µÄϵͳÉÏ£¬Èç¹û×î¿Á¿ÌµÄ¶ÔÆëÒªÇóÊÇdouble£¬Ôò¶ÔÆë±ØÐëÔÚ8µÄ±¶ÊýµÄµØÖ·µ¥  
Ôª´¦£¬ÄÇ  
ôÕâÈý¸öº¯Êý·µ»ØµÄÖ¸Õë¶¼Ó¦ÕâÑù¶ÔÆë¡£ª¥  
»ØÒäÎÒÃÇÔÚ1ª±6½ÚÖжÔÀàÊôvoid *Ö¸ÕëºÍº¯ÊýÔ­Ð͵ÄÌÖÂÛ¡£ÒòΪÕâÈý¸öallocº¯Êý  
¶¼·µ»ØÀà  
ÊôÖ¸Õ룬Èç¹ûÔÚ³ÌÐòÖаüÀ¨ÁË<stdlibª±h>(°üº¬Á˺¯ÊýÔ­ÐÍ)£¬ÄÇôµ±ÎÒÃǽ«ÕâЩ  
º¯Êý·µ»Ø  
µÄÖ¸Õ븳ÓëÒ»¸ö²»Í¬ÀàÐ͵ÄÖ¸Õëʱ£¬²»ÐèÒª×÷ÀàÐÍÇ¿ÖÆ×ª»»¡£ª¥  
º¯ÊýfreeÊÍ·ÅptrËùÖ¸ÏòµÄ´æ´¢¿Õ¼ä¡£ÕâÖÖ±»ÊͷŵĿռäͨ³£±»ËÍÈë¿ÉÓÃ´æ´¢Çø³Ø  
£¬ÒÔºó¿É  
ÔÚµ÷Ó÷ÖÅ亯ÊýʱÔÙ·ÖÅä¡£ª¥  
reallocʹÎÒÃÇ¿ÉÒÔÔö¡¢¼õÒÔǰ·ÖÅäÇøµÄ³¤¶È(×î³£¼ûµÄÓ÷¨ÊÇÔö¼Ó¸ÃÇø¡£)ÀýÈ磬  
Èç¹ûÏÈ·Ö  
ÅäÒ»¸ö¿ÉÈÝÄɳ¤¶ÈΪ512µÄÊý×éµÄ¿Õ¼ä£¬È»ºóÔÚÔËÐÐʱÌî³äËü£¬È»ºóÓÖ·¢ÏÖ¸ÃÊý×é  
µÄ³¤¶È»¹  
²»·óÓ¦Óã¬Ôò¿Éµ÷ÓÃreallocÒªÇóÀ©³ä¸Ã´æ´¢¿Õ¼ä¡£Èç¹ûÔÚ¸Ã´æ´¢ÇøºóÓÐ×ã¹»¿Õ¼ä  
¿É¹©À©³ä  
£¬Ôò¾ÍÔÚÔ­´æ´¢ÇøÎ»ÖÃÉÏÏò¸ßµØÖ··½ÏòÀ©³ä£¬²¢·µ»Ø´«Ë͸øËüµÄͬÑùµÄÖ¸ÕëÖµ¡£Èç  
¹ûÔÚÔ­´æ  
´¢ÇøºóûÓÐ×ã¹»µÄ¿Õ¼ä£¬Ôòrealloc·ÖÅäÁíÒ»¸ö×ã¹»´óµÄ´æ´¢Çø£¬½«ÏÖ´æµÄ512¸öÔª  
ËØÊý×éµÄ  
ÄÚÈݸ´ÖƵ½Ð·ÖÅäµ½µÄ´æ´¢Çø¡£ÒòΪÕâÖÖ´æ´¢Çø¿ÉÄÜ»áÒÆ¶¯Î»Öã¬ËùÒÔ²»Ó¦µ±Ê¹Óà 
ÈκÎÖ¸Õë  
Ö¸ÔÚ¸ÃÇøÖС£Á·Ï°4ª±18ÏÔʾÁËÔÚgetcwdÖÐÈçºÎʹÓÃrealloc£¬ÒÔ´¦ÀíÈκγ¤¶ÈµÄ·  
³ÌÃû¡£³Ì  
Ðò15ª±27ÊÇʹÓÃreallocµÄÁíÒ»¸öÀý×Ó£¬ÓÃÆä¿ÉÒÔ±ÜÃâʹÓñàÒëʱ¹Ì¶¨³¤¶ÈµÄÊý×é  
¡£ª¥  
×¢Ò⣬reallocµÄ×îºóÒ»¸ö²ÎÊýÊÇ´æ´¢ÇøµÄnewsize(㤶È)£¬²»ÊÇС¢¾É³¤¶ÈÖ®²î  
¡£×÷Ϊ  
Ò»  
¸öÌØÀý£¬ÈôptrÊÇÒ»¸ö¿ÕÖ¸Õ룬ÔòreallocµÄ¹¦ÄÜÓëmallocÏàͬ£¬·ÖÅäÒ»¸öÖ¸¶¨³¤¶È  
newsize  
µÄ´æ´¢Çø¡£ª¥  
´Ë¹¦ÄÜÊÇÓÉANSICÐÂÒý½øµÄ¡£Èç¹û´«ËÍÒ»¸önullÖ¸Õ룬reallocµÄ½ÏÀϰ汾»áʧ°Ü¡£  
½ÏÀϰ汾  
µÄÕâЩÀý³ÌÔÊÐíÎÒÃÇreallocÒ»¿é£¬¸Ã¿éÊÇ×ÔÉÏ´Îmalloc,realloc»òcallocÒÔÀ´ÎÒ  
ÃÇËùÊÍ·Å  
µÄ¡£ÕâÖÖ¼¼ÇɿɻØËݵ½Version7£¬ËüÀûÓÃÁËmallocʵÏÖ´æ´¢Æ÷½ôËõµÄËÑË÷²ßÂÔ¡£4  
ª±3+B5DÈÔ  
Ö§³ÖÕâÒ»¹¦ÄÜ£¬¶øSVR4Ôò²»Ö§³Ö¡£ÕâÖÖ¹¦Äܲ»Ó¦ÔÙʹÓᣪ¥  
ÕâЩ·ÖÅäÀý³Ìͨ³£ÊÇÓÃsbrk(2)ϵͳµ÷ÓÃʵÏֵġ£¸Ãϵͳµ÷ÓÃÀ©³ä(»òËõС)½ø³ÌµÄ  
¶Ñ¡£(²Î¼û  
ͼ7ª±3)¡£mallocºÍfieeµÄÒ»¸öÑù±¾ÊµÏÖÇë¼ûkennighanºÍRitchie£Û£±£¹ ¸£¸£ÝµÄ  
8ª±7½Ú¡£  
ª¥  
ËäÈ»sbrk¿ÉÒÔÀ©³ä»òËõСһ¸ö½ø³ÌµÄ´æ´¢¿Õ¼ä£¬µ«ÊÇ´ó¶àÊýmallocºÍfieeµÄʵÏÖ¶¼  
²»¼õС½ø  
³ÌµÄ´æ´¢¿Õ¼ä¡£ÊͷŵĿռä¿É¹©ÒÔºóÔÙ·ÖÅ䣬µ«½«ËüÃDZ£³ÖÔÚmalloc³ØÖжø²»·µ»Ø  
¸øÏµÍ³ºË  
¡£ª¥  
Ó¦µ±Á˽âµÄÊÇ£¬´ó¶àÊýʵÏÖËù·ÖÅäµÄ´æ´¢¿Õ¼ä±ÈËùÒªÇóµÄÒªÉÔ´óһЩ£¬¶îÍâµÄ¿Õ¼ä  
ÓÃÀ´¼Ç¼  
¹ÜÀíÐÅÏ¢¡¼CD2¡½·ÖÅä¿éµÄ³¤¶È£¬Ö¸ÏòÏÂÒ»¸ö·ÖÅä¿éµÄÖ¸ÕëµÈµÈ¡£Õâ¾ÍÒâζ×ÅÈç¹û  
д¹ýÁËÒ»  
¸öÒÑ·ÖÅäÇøµÄβ¶Ë£¬Ôò»á¸ÄдºóÒ»¿éµÄ¹ÜÀíÐÅÏ¢¡£ÕâÖÖÀàÐ͵ĴíÎóÊÇÔÖÄÑÐԵ쬵«  
ÊÇÒòΪÕâ  
ÖÖ´íÎóС»áºÜ¿ì¾Í±í¶³öÀ´£¬ËùÒÔÒ²¾ÍºÜÄÑ·¢ÏÖ¡£½«Ö¸Ïò·ÖÅä¿éµÄÖ¸ÕëÏòºóÒÆ¶¯Ò²  
¿ÉÄÜ»á¸Äд±¾¿éµÄ¹ÜÀíÐÅÏ¢¡£ª¥  
ÆäËü¿ÉÄܲúÉúµÄÖÂÃüÐԵĴíÎóÊÇ£ºÊÍ·ÅÒ»¸öÒѾ­ÊÍ·ÅÁ˵Ŀ飻µ÷ÓÃfieeʱËùÓõÄÖ¸  
Õë²»ÊÇÈý¸öallocº¯ÊýµÄ·µ»ØÖµµÈ¡£ª¥  
ÒòΪ´æ´¢Æ÷·ÖÅä³ö´íºÜÄѸú×Ù£¬ËùÒÔijЩϵͳÌṩÁËÕâЩº¯ÊýµÄÁíÒ»ÖÖʵÏÖ·½·¨  
¡£Ã¿´Îµ÷Óà 
ÕâÈý¸ö·ÖÅ亯ÊýÖеÄÈÎÒ»¸ö»òfieeʱ¶¼½øÐи½¼ÓµÄ³ö´í¼ìÑé¡£ÔÚµ÷ÓÃÁ¬½Ó±à¼­³ÌÐò  
ʱָ¶¨Ò»  
¸öרÓÿ⣬ÔòÔÚ³ÌÐòÖоͿÉʹÓÃÕâÖÖ°æ±¾µÄº¯Êý¡£Ò²Óй«¹²¿ÉÓõÄ×ÊÔ´(ÀýÈçÓÉ4ª±  
3+BSDËù  
ÌṩµÄ)£¬ÔÚ¶ÔÆä½øÐбàÒëʱʹÓÃÒ»¸öÌØÊâ±êÖ¾¾Í»áʹ¸½¼ÓµÄÔËÐÐʱ¼ì²éÉúЧ¡£ª¥  
   
ÒòΪ´æ´¢¿Õ¼ä·ÖÅä³ÌÐòµÄ²Ù×÷¶ÔijЩӦÓóÌÐòµÄÔËÐÐʱÐÔÄÜÊǷdz£ÖØÒªµÄ£¬ËùÒÔij  
ЩϵͳÌá  
¹©Á˸½¼ÓÄÜÁ¦¡£ÀýÈ磬SVR4ÌṩÁËÃûΪmallopº¯Êý£¬Ëüʹһ¸ö½ø³Ì¿ÉÒÔÉèÖÃһЩ±ä  
Á¿£¬ÓÃËü  
ÃÇÀ´¿ØÖÆ´æ´¢¿Õ¼ä·ÖÅä³ÌÐòµÄ²Ù×÷¡£»¹¿ÉʹÓÃÁíÒ»¸öÃûΪmallinfoµÄº¯Êý£¬ÒÔ¶Ô´æ  
´¢¿Õ¼ä·Ö  
Åä³ÌÐòµÄ²Ù×÷½øÐÐͳ¼Æ¡£Çë²é¿´ÄãËùʹÓÃϵͳµÄmalloc(3)ÊÖ²áʵ£¬ÅªÇå³þÕâЩ¹¦  
ÄÜÊÇ·ñ¿É  
Óᣪ¥  
allocaº¯Êýª¥  
»¹ÓÐÒ»¸öº¯ÊýÒ²ÖµµÃÒ»ÌᣬÕâ¾ÍÊÇalloca¡£Æäµ÷ÓÃÐòÁÐÓëmallocÏàͬ£¬µ«ÊÇËüÊÇÔÚ  
µ±Ç°º¯Êý  
µÄÕ»Ö¡ÉÏ·ÖÅä´æ´¢¿Õ¼ä£¬¶ø²»ÊÇÔÚ¶ÑÖС£ÆäÓŵãÊÇ£ºµ±º¯Êý·µ»ØÊ±£¬×Ô¶¯ÊÍ·ÅËüËù  
ʹÓõÄÕ»  
Ö¡£¬ËùÒÔÎÒÃǾͲ»±ØÔÙΪÊÍ·Å¿Õ¼ä¶ø·ÑÐÄ¡£ÆäȱµãÊÇijЩϵͳÔÚº¯ÊýÒѱ»µ÷Óú󲻠 
ÄÜÔö¼ÓÕ»  
Ö¡³¤¶È£¬ÓÚÊÇÒ²¾Í²»ÄÜÖ§³Öallocaº¯Êý¡£¾¡¹ÜÈç´Ë£¬ºÜ¶àÈí¼þ°üº¯ÊÇʹÓÃallocaº¯  
Êý£¬Ò²ÓР 
ºÜ¶àϵͳ֧³ÖËü¡£ª¥  
7ª±9¡þ»·¾³±äÁ¿ª¥  
ÈçͬǰÊö£¬»·¾³×Ö·û´®µÄÐÎʽÊÇ£ºª¥  
name=vulueª¥  
UnixϵͳºË²¢²»¹ØÐÄÕâÖÖ×Ö·û´®µÄÒâÒ壬ËüÃǵĽâÊÍÍêȫȡ¾öÓÚ¸÷¸öÓ¦ÓóÌÐò¡£Àý  
È磬Shel  
lʹÓÃÁË´óÁ¿µÄ»·¾³±äÁ¿¡£ÆäÖÐijһЩÔڵǼʱ×Ô¶¯ÉèÖÃ(HOME£¬USERµÈ)£¬ÓÐЩÔò  
ÓÉÓû§Éè  
Öá£ÎÒÃÇͨ³£ÔÚÒ»¸öshellÆð¶¯ÎļþÖÐÉèÖû·¾³±äÁ¿ÒÔ¿ØÖÆshellµÄ¶¯×÷¡£ÀýÈ磬Èô  
ÎÒÃÇÉèÖà 
ÁË»·¾³±äÁ¿MAILPATH£¬ÔòËü¾Í¸æËßÁËBourne shellºÍKorn shellµ½ÄÇÀïÈ¥²é¿´Óʼþ  
¡£ª¥  
ANSIC¶¨ÒåÁËÒ»¸öº¯Êýgetenv£¬¿ÉÒÔÓÃÆäÈ¡»·¾³±äÁ¿Öµ£¬µ«ÊǸñê×¼Óֳƻ·¾³µÄÄÚ  
ÈÝÊÇʵÏÖ  
¶¨ÒåµÄ¡£ª¥  
#include <stdlibª±h>ª¥  
char *getenv(const char *ª«name);ª«ª¥  
Returns:pointer to ª«valueª« associated with ª«nameª«,NULL if not found  
ª¥  
·µ»Ø£ºÖ¸ÏòÓëname¹ØÁªµÄvalueµÄÖ¸Õ룬ÈôδÕÒµ½ÔòΪNULLª¥  
×¢Ò⣬´Ëº¯Êý·µ»ØÒ»¸öÖ¸Õ룬ËüÖ¸Ïòname=value×Ö·û´®ÖеÄvalue¡£ÎÒÃÇ×ÜÊÇÓ¦µ±  
ʹÓÃgeter  
v´Ó»·¾³ÖÐȡһ¸ö»·¾³±äÁ¿µÄÖµ£¬¶ø²»ÊÇÖ±½Ó´æÈ¡environ¡£ª¥  
POSIXª±1ºÍXPG3¶¨ÒåÁËijЩ»·¾³±äÁ¿¡£Í¼7ª±4ÁгöÁËÓÉÕâ¶þ¸ö±ê×¼¶¨Òå²¢Êܵ½SVR  
4ºÍ4ª±3+B  
SDÖ§³ÖµÄ»·¾³±äÁ¿¡£SVR4ºÍ4ª±3+BSD»¹Ê¹ÓÃÁ˺ܶàÒÀÀµÓÚʵÏֵĻ·¾³±äÁ¿¡£ª¥  
FIPS 151-1ÒªÇóÒ»¸öµÇ¼shellÒ»¶¨Òª¶¨Òå»·¾³±äÁ¿HOMEºÍLOGNAME¡£ª¥ª¥  
P172ª¥ª¥  
ͼ7ª±4¡þ»·¾³±äÁ¿ª¥  
³ýÁËÈ¡»·¾³±äÁ¿Öµ£¬ÓÐʱҲÐèÒªÉèÖû·¾³±äÁ¿»òÕßÊǸıäÏÖÓбäÁ¿µÄÖµ£¬»òÕßÊÇÔö  
¼ÓÐµĻ·  
¾³±äÁ¿¡£(ÔÚÏÂÒ»Õ½«»áÁ˽⵽£¬ÎÒÃÇÄÜÓ°ÏìµÄÊǵ±Ç°½ø³Ì¼°ÆäºóÉú³ÉµÄ×Ó½ø³ÌµÄ  
»·¾³£¬ÎÒ  
ÃDz»ÄÜÓ°Ï츸½ø³ÌµÄ»·¾³£¬Õâͨ³£ÊÇÒ»¸öshell½ø³Ì¡£¾¡¹ÜÈç´Ë£¬Ð޸Ļ·¾³±íµÄÄÜ  
Á¦ÈÔÈ»ÊÇ  
ºÜÓÐÓõġ£)²»ÐÒµÄÊÇ£¬²¢²»ÊÇËùÓÐϵͳ¶¼Ö§³ÖÕâÖÖÄÜÁ¦¡£Í¼7ª±5ÁгöÁËÓɲ»Í¬µÄ  
±ê×¼¼°Êµ  
ÏÖÖ§³ÖµÄ¸÷ÖÖº¯Êý¡£ª¥ª¥  
P173ª¥ª¥  
ͼ7ª±5¡þ¶ÔÓÚ¸÷ÖÖ»·¾³±íº¯ÊýµÄÖ§³Öª¥  
POSIXª±1±ê׼˵Ã÷putervºÍclearenvÕý±»¿¼ÂǼӵ½POSIXª±1µÄÐÞ¶©°æÖС£ª¥  
ÔÚͼ7ª±5ÖУ¬ÖмäÈý¸öº¯ÊýµÄÔ­ÐÍÊÇ£ºª¥  
#include <stdlibª±h>ª¥  
int putenv(const char *ª«str);ª«ª¥  
int setenv(const char ª«ª³name,ª«const char ª«ª³value,ª«int ª«rewrite);  
ª«ª¥  
Both return:0 if OK,nonzero on errorÁ½¸öº¯Êý·µ»Ø£ºÈô³É¹¦Îª0£¬³ö´íΪ·Ç0ª¥  
   
void unsetenv(const char ª«name);ª«ª¥  
ÕâÈý¸öº¯ÊýµÄ²Ù×÷ÊÇ£ºª¥  
¡¤ putenvÈ¡ÐÎʽΪname=valueµÄ×Ö·û´®£¬½«Æä·Åµ½»·¾³±íÖС£Èç¹ûnameÒѾ­´æÔÚ  
£¬ÔòÏÈɾ  
³ýÆäÔ­À´µÄ¶¨Òå¡£ª¥  
¡¤ setenv½«nameÉèÖÃΪvalue¡£Èç¹ûÔÚ»·¾³ÖÐnameÒѾ­´æÔÚ£¬ÄÇô(a)Èôrewrite·Ç  
0£¬ÔòÊ×  
ÏÈɾ³ýÆäÀí´æµÄ¶¨Ò壻(b)ÈôrewriteΪ0£¬Ôò²»É¾³ýÆäÏִ涨Òå(name²»ÉèÖÃΪÐÂÖµ  
£¬¶øÇÒÒ²  
²»³ö´í)¡£ª¥  
¡¤ unsetenvɾ³ýnameµÄ¶¨Òå¡£¼´Ê¹²»´æÔÚÕâÖÖ¶¨ÒåÒ²²»Ëã³ö´í¡£ª¥  
ÕâЩº¯ÊýÔÚÐ޸Ļ·¾³±íʱÊÇÈçºÎ½øÐвÙ×÷µÄÄØ?»ØÒäÒ»ÏÂͼ7ª±3£¬ÆäÖУ¬»·¾³±í(Ö¸  
Ïòʵ¼Êna  
me=value×Ö·û´®µÄÖ¸ÕëÊý×é)ºÍ»·¾³×Ö·û´®µäÐ͵شæ·ÅÔÚ½ø³Ì´æ´¢¿Õ¼äµÄ¶¥²¿(Õ»Ö®  
ÉÏ)¡£É¾  
³ýÒ»¸ö×Ö·û´®ÊǼòµ¥µÄ¡¼CD2¡½Ö»ÒªÏÈÕÒµ½¸ÃÖ¸Õ룬Ȼºó½«ËùÓкóÐøÖ¸Õë¶¼ÏòÏÂÒÆ  
Ò»¸öλÖà 
£¬µ«ÊÇÔö¼ÓÒ»¸ö×Ö·û´®»òÐÞ¸ÄÒ»¸öÏÖ´æµÄ×Ö·û´®¾Í±È½ÏÀ§ÄÑ¡£ÔÚÕ»ÒÔÉϵĿռäÒòΪ  
ÒÑ´¦ÓÚ½ø  
³Ì´æ´¢¿Õ¼äµÄ¶¥²¿£¬ËùÒÔÎÞ·¨À©³ä£¬¼´ÎÞ·¨ÏòÉÏÀ©³ä£¬Ò²ÎÞ·¨ÏòÏÂÀ©³ä¡£ª¥  
1ª±Èç¹ûÐÞ¸ÄÒ»¸öÏÖ´æµÄname:ª¥  
(a)Èç¹ûÐÂvalueµÄ³¤¶ÈÉÙÓÚ»òµÈÓÚÏÖ´ævalueµÄ³¤¶È£¬ÔòÖ»ÒªÔÚÔ­×Ö·û´®ËùÓÿռ䠠
ÖÐдÈëР 
×Ö·û´®¡£ª¥  
(b)Èç¹ûÐÂvalueµÄ³¤¶È´óÓÚÔ­³¤¶È£¬Ôò±ØÐëµ÷ÓÃmallocΪÐÂ×Ö·û´®·ÖÅä¿Õ¼ä£¬È»ºó  
½«ÐÂ×Ö·û  
дÈë¸Ã¿Õ¼äÖУ¬È»ºóʹ»·¾³±íÖÐÕë¶ÔnameµÄÖ¸ÕëÖ¸ÏòзÖÅäÇø¡£ª¥  
2ª±Èç¹ûÒªÔö¼ÓÒ»¸öеÄname£¬Ôò²Ù×÷¾Í¸ü¼Ó¸´ÔÓ¡£Ê×ÏÈ£¬µ÷ÓÃmallocΪname=val  
ue·ÖÅä¿Õ  
¼ä£¬È»ºó½«¸Ã×Ö·û´®Ð´Èë´Ë¿Õ¼äÖС£ª¥  
(a)È»ºó£¬Èç¹ûÕâÊǵÚÒ»´ÎÔö¼ÓÒ»¸öÐÂname£¬Ôò±ØÐëµ÷ÓÃmallocΪеÄÖ¸Õë±í·ÖÅä  
¿Õ¼ä¡£½«  
Ô­À´µÄ»·¾³±í¸´ÖƵ½Ð·ÖÅäÇø£¬²¢½«Ö¸ÏòÐÂname=valueµÄÖ¸Õë´æÔÚ¸ÃÖ¸Õë±íµÄ±íβ  
£¬È»ºóÓÖ  
½«Ò»¸ö¿ÕÖ¸Õë´æÔÚÆäºó¡£×îºóʹenvironÖ¸ÏòÐÂÖ¸Õë±í¡£ÔÙ¿´Ò»ÏÂͼ7ª±3£¬Èç¹ûÔ­  
À´µÄ»·¾³  
±íλÓÚÕ»¶¥Ö®ÉÏ(ÕâÊÇÒ»ÖÖ³£¼ûÇé¿ö)£¬ÄÇôÎÒÃDZØÐ뽫´Ë±íÒÆÖÁ¶ÑÖС£µ«ÊÇ£¬´Ë±í  
ÖеĴó¶à  
ÊýÖ¸ÕëÈÔÖ¸ÏòÔÚÕ»¶¥Ö®Éϵĸ÷name=value×Ö·û´®¡£ª¥  
(b)Èç¹ûÕâ²»ÊǵÚÒ»´ÎÔö¼ÓÒ»¸öÐÂname£¬Ôò¿ÉÖªÒÔǰÒѵ÷ÓÃmallocÔÚ¶ÑÖÐΪ»·¾³±í  
·ÖÅäÁ˿ՠ 
¼ä£¬ËùÒÔÖ»Òªµ÷ÓÃrealloc£¬ÒÔ·ÖÅä±ÈÔ­¿Õ¼ä¶à´æ·ÅÒ»¸öÖ¸ÕëµÄ¿Õ¼ä¡£È»ºó½«¸ÃÖ¸  
ÏòÐÂname=  
value×Ö·û´®µÄÖ¸Õë´æ·ÅÔڸñí±í⣬ºóÃæ¸ú×ÅÒ»¸ö¿ÕÖ¸Õë¡£ª¥  
7ª±10¡þsetjmpºÍlongjmpº¯Êýª¥  
ÔÚCÖУ¬¿ÉÔÊÐíʹÓÃÌøÔ½º¯ÊýµÄgotoÓï¾ä¡£¶øÖ´ÐÐÕâÖÖÌø×ª¹¦ÄܵÄÊǺ¯ÊýsetjmpºÍ  
longjmp¡£  
ÕâÁ½¸öº¯Êý¶Ô·¢ÉúÔÚºÜÉîµÄǶÌ׺¯Êýµ÷ÓÃÖеijö´íÇé¿ö½øÐд¦ÀíÊǷdz£ÓÐÓõġ£ª¥  
   
¿¼ÂÇһϳÌÐò7ª±3µÄ¹Ç¸É²¿·Ö¡£ÆäÖ÷Ñ­»·ÊÇ´Ó±ê×¼ÊäÈë¶Á1ÐУ¬È»ºóµ÷ÓÃdo  £Ã£Ä  
 £ª³£²¡½l  
ine´¦ÀíÿһÊä  
ÈëÐС£¸Ãº¯ÊýÈ»ºóµ÷ÓÃget ¼£Ã£Ä££ª³£²¡½token´Ó¸ÃÊäÈëÐÐÖÐÈ¡ÏÂÒ»¸ö¼ÇºÅ¡£Ò»ÐР 
ÖеĵÚÒ»  
¸ö¼ÇºÅ¼Ù¶¨ÊÇ  
ijÖÖÐÎʽµÄÒ»ÌõÃüÁÓÚÊÇswitchÓï¾ä¾ÍʵÏÖÃüÁîÑ¡Ôñ¡£ÎÒÃǵijÌÐòÖ»´¦ÀíÒ»ÌõÃü  
Á¶Ô´Ë  
ÃüÁîµ÷ÓÃcmd-addº¯Êý¡£ª¥ª¥  
P175ª¥ª¥  
³ÌÐò7ª±3¡þ½øÐÐÃüÁî´¦ÀíµÄµäÐͳÌÐòµÄ¹Ç¸Éª¥  
³ÌÐò7ª±3ÔÚ¶ÁÃüÁȷ¶¨ÃüÁîµÄÀàÐÍ£¬È»ºóµ÷ÓÃÏàÓ¦º¯Êý´¦ÀíÿһÌõÃüÁîÕâÀà³ÌÐò  
ÖÐÊǷdz£  
µäÐ͵ġ£Í¼7ª±6ÏÔʾÁËÔÚµ÷ÓÃcmd-addÖ®ºóÕ»µÄ´óÖÂʹÓÃÇé¿ö¡£ª¥ª¥ª¥  
P176ª¥ª¥ª¥  
ͼ7ª±6¡þÔÚµ÷ÓÃcmd-addºóµÄ¸÷¸öÕ»Ö¡ª¥  
×Ô¶¯±äÁ¿µÄ´æ´¢µ¥ÔªÔÚÿ¸öº¯ÊýµÄÕ»èåÖС£Êý×éLineÔÚmainµÄÕ»Ö¡Ô±£¬ÕûÐÍcmdÔÚ  
do-lineµÄ  
Õ»Ö¡ÖУ¬ÕûÐÍtokenÔÚcmd-addµÄÕ»Ö¡ÖС£ª¥  
ÕýÈçÉÏÃæËµ¹ý£¬ÕâÖÖÐÎʽµÄÕ»µÈÅÅÊǷdz£µäÐ͵쬵«²¢²»ÒªÇó·ÇÈç´Ë²»¿É¡£Õ»²¢²»  
Ò»¶¨ÒªÏò  
µÍµØÖ··½ÏòÀ©³ä¡£Ä³Ð©ÏµÍ³¶ÔÕ»²¢Ã»ÓÐÌá¹©ÌØÊâµÄÓ²¼þÖ§³Ö£¬´Ëʱһ¸öCʵÏÖ¿ÉÄÜ  
ÒªÓÃÁ¬½Ó  
±íʵÏÖÕ»Ö¡¡£ª¥  
ÔÚ±àдÈç³ÌÐò7ª±3ÕâÑùµÄ³ÌÐò2Öо­³£»áÓöµ½µÄÒ»¸öÎÊÌâÊÇ£¬ÈçºÎ´¦Àí·ÇÖÂÃüÐԵĠ 
´íÎó¡£Àý  
È磬Èôcmd-addº¯Êý·¢ÏÖÒ»¸ö´íÎ󣬯©Èç˵һ¸öÎÞЧµÄÊý£¬ÄÇôËü¿ÉÄÜÏÈ´òÓ¡Ò»¸ö  
³ö´íÏûÏ¢  
£¬È»ºóÏ£ÍûºöÂÔÊäÈëÐеÄÓàϲ¿·Ö£¬·µ»Ømainº¯Êý²¢¶ÁÏÂÒ»ÊäÈëÐС£¶øµ¥µ¥ÓÃCÓï  
ÑԾͱȽϠ 
ÄÑ×öµ½ÕâÒ»µã¡£(ÔÚ±¾ÀýÖУ¬cmd-addº¯ÊýÖ»±ÈmainµÍ¶þ¸ö²ã´Î£¬ÔÚÓÐЩ³ÌÐòÖÐÍùÍù  
Ï£ÍûÏò¸ß  
Îå¡¢Áù¸ö²ã´Î´¦·µ»Ø¡£)Èç¹ûÎÒÃDz»µÃ²»ÒÔ¼ì²é·µ»ØÖµµÄ·½·¨Öð²ã·µ»Ø£¬ÄǾͻá±ä  
µÃºÜÂé·³  
¡£ª¥  
½â¾öÕâÖÖÎÊÌâµÄ·½·¨¾ÍÊÇʹÓ÷Ǿֲ¿Ìø×ª¡¼CD2¡½setjmpºÍlongjmpº¯Êý¡£"·Ç¾Ö²¿  
"±íÊ¾Çø  
²»ÊÇÔÚÒ»¸öº¯ÊýÄ򵀮ÕͨµÄCÓïÑÔgotoÓï¾ä£¬¶øÊÇÔÚÕ»ÉÏÌø¹ýÈô¸Éµ÷ÓÃÖ¡£¬·µ»Øµ½  
µ±Ç°º¯Êý  
µ÷Ó÷¾¶ÉϵÄÒ»¸öº¯Êý¡£ª¥  
#include <setjmpª±h>ª¥  
int setjmp(jmp ¼£Ã£Ä££ª³£²¡½buf ª«env);ª«ª¥  
Returns:0 if called directly,nonzero if returning from a call to longjm  
pª¥  
·µ»Ø£ºÈôÖ±½Óµ÷ÓÃΪ0£¬Èô´Ólongjmp·µ»ØÔòΪ·Ç0ª¥  
void longjmp(jmp ¼£Ã£Ä££ª³£²¡½buf ª«env,ª«int ª«valª«);ª¥  
ÔÚÏ£Íû·µ»Øµ½µÄλÖõ÷ÓÃsetjmp£¬ÔÚÕâ±¾ÀýÖУ¬´ËλÖÃÔÚmainº¯ÊýÖС£ÒòΪÎÒÃÇÖ±  
½Óµ÷Óøà 
º¯Êý£¬ËùÒÔÆä·µ»ØÖµÎª0¡£setjmpµÄ²ÎÊýenvÊÇÒ»¸öÌØÊâÀàÐÍjmp-buf¡£ÕâÒ»Êý¾ÝÀà  
ÐÍÊÇijÖÖ  
ÐÎʽµÄÊý×飬ÆäÖдæ·ÅÔÚµ÷ÓÃlongjmpʱÄÜÓÃÀ´»Ö¸´Õ»×´Ì¬µÄËùÓÐÐÅÏ¢¡£Ò»°ãenv±ä  
Á¿ÊǸöÈ«  
¾Ö±äÁ¿£¬ÒòΪÐèÔÚÁíÒ»¸öº¯ÊýÖÐÒýÓÃËü¡£ª¥  
µ±¼ì²éµ½Ò»¸ö´íÎóʱ£¬ÀýÈçÔÚcmd-addº¯ÊýÖУ¬ÔòÒÔÁ½¸ö²ÎÊýµ÷ÓÃlongjmpº¯Êý¡£µÚ  
Ò»¸ö¾ÍÊÇ  
ÔÚµ÷ÓÃsetjmpʱËùÓõÄenv£»µÚ¶þ¸ö£¬val£¬ÊǸö·Ç0Öµ£¬Ëü³ÉΪ´Ósetjmp´¦·µ»ØµÄ  
Öµ¡£Ê¹Óà 
µÚ¶þ¸ö²ÎÊýµÄÔ­ÒòÊǶÔÓÚÒ»¸ösetjmp¿ÉÒÔÓжà¸ölongjmp¡£ÀýÈ磬¿ÉÒÔÔÚcmd-addÖР 
ÒÔvalΪ1  
µ÷ÓÃlongjmp£¬Ò²¿ÉÔÚget ¼£Ã£Ä££ª³£²¡½tokenÖÐÒÔvalΪ2µ÷ÓÃlongjmp¡£ÔÚmainº¯  
ÊýÖУ¬se  
tjmpµÄ·µ  
»ØÖµ¾Í»áÊÇ1»ò2£¬Í¨¹ý²âÊÔ·µ»ØÖµ¾Í¿ÉÅжÏÊÇ´Ócmd-add»¹ÊÇ´Óget ¼£Ã£Ä££ª³£²¡½  
tokenÀ´  
µÄlongjmp¡£ª¥  
Ôٻص½³ÌÐòʵÀýÖУ¬Í¼7ª±4ÖÐʾ³öÁ˾­Ð޸ĹýµÄmainºÍcmd-addº¯Êý(ÆäËüÁ½¸öº¯Êý  
£¬do-lin  
eºÍget ¼£Ã£Ä££ª³£²¡½tokenδ¾­¸ü¸Ä)¡£ª¥  
P177ª¥ª¥ª¥  
³ÌÐò7ª±4¡þsetjmpºÍlongjmpʵÀýª¥ª¥  
Ö´ÐÐmainʱ£¬µ÷ÓÃsetjmp£¬Ëü½«ËùÐèµÄÐÅÏ¢¼ÇÈë±äÁ¿jmpbufferÖв¢·µ»Ø0¡£È»ºóµ÷  
ÓÃdo-lin  
e£¬ËüÓÖµ÷ÓÃend-add£¬¼Ù¶¨ÔÚÆäÖмì²âµ½Ò»¸ö´íÎó¡£ÔÚcmd-addÖе÷ÓÃlongjmp֮ǰ  
£¬Õ»µÄÐΠ 
ʽÈçͼ7ª±6ÖÐËùʾ¡£µ«ÊÇlongjmpʹջ·´ÈƵ½Ö´ÐÐmainº¯ÊýʱµÄÇé¿ö£¬Ò²¾ÍÊÇÅׯú  
ÁËcmd-add  
ºÍdo-LineµÄÕ»Ö¡¡£µ÷ÓÃlongjmpÔì³ÉÔÚmainÖÐsetjmpµÄ·µ»Ø£¬µ«ÊÇ£¬ÆäÕâÒ»´ÎµÄ·µ  
»ØÖµÊÇ1(  
longjmpµÄµÚ¶þ¸ö²ÎÊý)¡£ª¥  
×Ô¶¯£¬¼Ä´æÆ÷ºÍÒ×ʧ±äÁ¿ª¥  
ÏÂÒ»¸öÎÊÌâÊÇ"ÔÚmainº¯ÊýÖУ¬×Ô¶¯±ä¶¯ºÍ¼Ä´æÆ÷±äÁ¿µÄ״̬ÈçºÎ?"µ±longjmp·µ»Ø  
µ½main  
º¯Êýʱ£¬ÕâЩ±äÁ¿µÄÖµÊÇ·ñÄָܻ´µ½ÒÔǰµ÷ÓÃsetjmpʱµÄÖµ(Ò²Êǹö»ØÔ­ÏÈÖµ)£¬»ò  
ÕßÕâЩ±ä  
Á¿µÄÖµ±£³ÖΪµ÷ÓÃdo-lineʱµÄÖµ(do-lineµ÷ÓÃcmd-add,cmd-addÓÖµ÷ÓÃlongjmp)?  
²»ÐÒµÄÊÇ  
£¬¶Ô´ËÎÊÌâµÄ»Ø´ðÊÇ"ËüÈ¡¾öÓÚ"¡£´ó¶àÊýʵÏÖ²¢²»¹ö»ØÕâЩ×Ô¶¯±äÁ¿ºÍÆ÷±äÁ¿µÄÖµ  
£¬¶øËù  
Óбê×¼Ôò˵ËüÃǵÄÖµÊDz»È·¶¨µÄ¡£Èç¹ûÄãÓÐÒ»¸ö×Ô¶¯±äÁ¿£¬¶øÄã²»ÏëʹÆäÖµ¹ö»Ø£¬  
Ôò¿É¶¨Òå  
ÆäΪ¾ßÓÐvolatileÊôÐÔ¡£ËµÃ÷Ϊȫ¾ÖºÍ¾²Ì¬±äÁ¿µÄÖµÔÚÖ´ÐÐlongjmpʱ±£³Ö²»±ä¡£  
ª¥  
ʵÀýª¥  
ÏÂÃæÎÒÃÇͨ¹ý³ÌÐò7ª±5˵Ã÷ÔÚµ÷ÓÃlongjmpºó£¬×Ô¶¯±äÁ¿¡¢¼Ä´æÆ÷±äÁ¿ºÍÒ×ʧ±äÁ¿  
µÄ²»Í¬Çé  
¿ö¡£Èç¹ûÎÒÃÇÒÔ²»´øÓÅ»¯ºÍ´øÓÅ»¯¶Ô´Ë³ÌÐò·Ö±ð½øÐбàÒ룬ȻºóÔËËüÃÇ£¬ÔòµÃµ½µÄ  
½á¹ûÊDz»  
ͬµÄ£ºª¥  
$ cc testjmpª±c¡þ¡þ¡þ²»½øÐÐÈκÎÓÅ»¯µÄ±àÒ몥  
$ aª±outª¥  
in f1(1):count=97,val=98,sum=99ª¥  
after longjmp:count=97,val=98,sum=99ª¥  
$ cc -o testjmpª±cª¥  
$ aª±outª¥  
in f1(1):count=97,val=98,sum=99ª¥  
after longjmp:count=2,val=3,sum=99ª¥  
×¢Ò⣬Ò×ʧ±äÁ¿(sum)²»ÊÜÓÅ»¯µÄÓ°Ï죬ÔÚlongjmpÖ®ºóµÄÖµ£¬ÊÇËüÔÚµ÷ÓÃf1ʱµÄÖµ  
¡£ÔÚÎÒÃÇ  
ËùʹÓõÄsetjmp(3)ÊÖ²áÒ³ÉÏ˵Ã÷´æ·ÅÔÚ´æ´¢Æ÷ÖеıäÁ¿½«¾ßÓÐlongjmpʱµÄÖµ£¬¶ø  
ÔÚCPUºÍ  
¸¡µã¼Ä´æÆ÷ÖеıäÁ¿Ôò»Ö¸´Îªµ÷ÓÃsetjmpʱµÄÖµ¡£Õâȷʵ¾ÍÊÇÎÒÃÇÔÚÔËÐгÌÐò7ª±  
5ʱËù¹Û²ì  
µ½µÄÖµ¡£²»´øÓÅ»¯Ê±£¬ËùÓÐÕâÈý¸ö±äÁ¿¶¼´æ·ÅÔÚ´æ´¢Æ÷ÖÐ(Ò༴¶ÔvalµÄ¼Ä´æÆ÷´æ´¢  
Àà±»ºöÂÔ  
)¡£¶ø´øÓÅ»¯Ê±£¬countºÍval¶¼´æ·ÅÔڼĴæÆ÷ÖÐ(¼´Ê¹count²¢Ä©ËµÃ÷Ϊregister),  
volatile  
±äÁ¿ÔòÈÔ´æ·ÅÔÚ´æ´¢Æ÷ÖС£Í¨¹ýÕâÒ»Àý×ÓÒªÀí½âµÄÊÇ£¬Èç¹ûÒª±àдһ¸öʹÓ÷ÇÊô²¿  
Ìø×ªµÄ¿É  
ÒÆÖ²³ÌÐò£¬Ôò±ØÐëʹÓÃvolatileÊôÐÔ¡£ª¥ª¥P179ª¥ª¥  
³ÌÐò7ª±5¡þlongjmp¶Ô×Ô¶¯£¬¼Ä´æÆ÷ºÍÒ×ʧ±äÁ¿µÄÓ°Ï쪥  
ÔÚµÚʮյ±ÎÒÃÇÌÖÂÛÐźŴ¦Àí³ÌÐò¼°sigsetjmpºÍsiglongjmpʱ£¬ÎÒÃÇ»áÔٻص½se  
tjmpºÍlon  
gjmpº¯Êý¡£ª¥  
×Ô¶¯±äÁ¿µÄDZÔÚÎÊÌ⪥  
Ç°ÃæÒѾ­ËµÃ÷ÁË´¦ÀíÕ»Ö¡µÄÒ»°ã·½Ê½£¬Óë´ËÏà¹ØÎÒÃÇÏÖÔÚ¿ÉÒÔ·ÖÎöÒ»ÏÂ×Ô¶¯±äÁ¿µÄ  
Ò»¸öDZÔÚ  
³ö´íÇé¿ö¡£»ù±¾¹æÔòÊÇ˵Ã÷×Ô¶¯±äÁ¿µÄº¯ÊýÒѾ­·µ»Øºó£¬¾Í²»ÄÜÔÙÒýÓÃÕâЩ×Ô¶¯±ä  
Á¿¡£ÔÚÕû  
¸öUnixÊÖ²áÖУ¬¹ØÓÚÕâÒ»µãÓкܶྯ¸æ¡£ª¥  
³ÌÐò7ª±6ÊÇÒ»¸öÃûΪopen-dataµÄº¯Êý£¬Ëü´ò¿ªÁËÒ»¸ö±ê×¼I/OÁ÷£¬È»ºóΪ¸ÃÁ÷ÉèÖà 
»º´æ¡£ª¥  
ª¥  
P180ª¥  
³ÌÐò7ª±6¡þ×Ô¶¯±äÁ¿µÄ²»ÕýȷʹÓꥠ 
ÎÊÌâÊÇ£ºµ±open-data·µ»ØÊ±£¬ËüÔÚÕ»ÉÏËùʹÓõĿռ佫ÓÉÏÂÒ»¸ö±»µ÷Óõĺ¯ÊýµÄ  
ջ֡ʹÓà 
¡£µ«ÊÇ£¬±ê×¼I/O¿âº¯Êý½«ÈÔʹÓÃÔ­ÏÈΪdatabufÔÚÕ»ÉÏ·ÖÅäµÄ´æ´¢¿Õ¼ä×÷Ϊ¸ÃÁ÷µÄ  
»º´æ¡£Õâ  
¾Í²úÉúÁ˳åÍ»ºÍ»ìÂÒ¡£ÎªÁ˸ÄÕýÕâÒ»ÎÊÌ⣬ӦÔÚÈ«¾Ö´æ´¢¿Õ¼ä(»òÕßÊǾ²Ì¬µØ(sta  
tic»òexte  
rn)£¬»òÕß¶¯Ì¬µØ(ʹÓÃÒ»ÖÖallocº¯Êý)ΪÊý×édatabuf·ÖÅä¿Õ¼ä¡£ª¥  
7ª±11¡þgetrlimitºÍsetrlimitº¯Êýª¥  
ÿ¸ö½ø³Ì¶¼ÓÐÒ»×é×ÊÔ´ÏÞÖÆ£¬ÆäÖÐijһЩ¿ÉÒÔÓÃgetrlimitºÍsetrlimitº¯Êý²éѯºÍ  
¸ü¸Ä¡£ª¥  
#include <sys/timeª±h>ª¥  
#include <sys/resourceª±h>ª¥  
int getrlimit(int ª«resourceª«,struct rlimit *ª«rlptr);ª«ª¥  
int setrlimit(int ª«resource,ª«const struct rlimit ª«ª³rlptr);ª«ª¥  
Both return: 0 if OK,nonzero on errorÁ½¸öº¯Êý·µ»Ø£ºÈô³É¹¦Îª0£¬³ö´íΪ·Ç0  
ª¥  
¶ÔÕâÁ½¸öº¯ÊýµÄÿһ´Îµ÷Óö¼Ö¸¶¨Ò»¸ö×ÊÔ´ÒÔ¼°Ò»¸öÖ¸ÏòÏÂÁнṹµÄÖ¸Õë¡£ª¥  
struct rlimit{ª¥  
rlim ¼£Ã£Ä££ª³£²¡½t rlim ¼£Ã£Ä££ª³£²¡½cur;¡þ/* ÈíÏÞÖÆ£ºµ±Ç°ÏÞÖÆ */ª¥  
rlim ¼£Ã£Ä££ª³£²¡½t rlim ¼£Ã£Ä££ª³£²¡½max;¡þ£¯* Ó²ÏÞÖÆ£ºrlim ¼£Ã£Ä££ª³£²  
¡½curµÄ  
×î´óÖµ */ª¥  
}£»ª¥  
ÕâÁ½¸öº¯Êý²»ÊôÓÚPOSIXª±1£¬µ«SVR4ºÍ4ª±3+BSDÌṩËüÃÇ¡£ª¥  
SVR4ÔÚÉÏÃæµÄ½á¹¹ÖÐʹÓûù±¾ÏµÍ³Êý¾ÝÀàÐÍrlim ¼£Ã£Ä££ª³£²¡½t¡£ÆäËüϵͳÔò½«  
ÕâÁ½¸ö³É  
Ô±¶¨ÒåΪÕûÐÍ»ò³¤ÕûÐÍ¡£ª¥  
½ø³ÌµÄ×ÊÔ´ÏÞÖÆÍ¨³£ÊÇÔÚϵͳ³õÆôʱÓÉ£°ª¬££½ø³Ì½¨Á¢µÄ£¬È»ºóÓɺóÐø½ø³Ì¼Ì³Ð¡£  
ÔÚSVR4ÖР 
£¬ÏµÍ³Ä¬ÈÏÖµ¿ÉÒԲ鿴Îļþ/etc/conf/cfª±d/mtuneª±ÔÚ4ª±3+BSDÖУ¬ÏµÍ³Ä¬ÈÏÖµ  
·ÖÉ¢ÔÚ¶à  
¸öÍ·ÎļþÖС£ª¥  
ÔÚ¸ü¸Ä×ÊÔ´ÏÞÖÆÊ±£¬Ðë×ñÑ­ÏÂÁÐÈýÌõ¹æÔò£ºª¥  
1ª±ÈκÎÒ»¸ö½ø³Ì¶¼¿É½«Ò»¸öÈíÏÞÖÆ¸ü¸ÄΪСÓÚ»òµÈÓÚÆäÓ²ÏÞÖÆ¡£ª¥  
2ª±ÈκÎÒ»¸ö½ø³Ì¶¼¿É½µµÍÆäÓ²ÏÞÖÆÖµ£¬µ«Ëü±ØÐë´óÓÚ»òµÈÓÚÆäÈíÏÞÖÆÖµ¡£ÕâÖÖ½µ  
µÍ£¬¶ÔÆÕ  
ͨÓû§¶øÑÔÊDz»¿ÉÄæ·´µÄ¡£ª¥  
3ª±Ö»Óг¬¼¶Óû§¿ÉÒÔÌá¸ßÓ²ÏÞÖÆ¡£ª¥  
Ò»¸öÎÞÏÞÁ¿µÄÏÞÖÆÓɳ£ÊýRLIM ¼£Ã£Ä££ª³£²¡½INFINITYÖ¸¶¨¡£ª¥  
ÕâÁ½¸öº¯ÊýµÄresource²ÎÊýÈ¡ÏÂÁÐÖµÖ®Ò»¡£×¢Òâ²¢·ÇËùÓÐ×ÊÔ´ÏÞÖÆ¶¼Êܵ½SVR4ºÍ4  
ª±3+BSDµÄ  
Ö§³Ö¡£ª¥  
RLMIT ¼£Ã£Ä££ª³£²¡½CORE¡þ£¨SVR4¼°4ª±3+BSD)coreÎļþµÄ×î´ó×Ö½ÚÊý£¬ÈôÆäֵΪ  
0Ôò×èÖ¹  
´´½¨coreÎļþ¡£ª¥  
RLIMIT ¼£Ã£Ä££ª³£²¡½CPU¡þ(SVR4¼°4ª±3+BSD)CPUʱ¼äµÄ×î´óÁ¿Öµ(Ãë)£¬µ±³¬¹ý´Ë  
ÈíÏÞֹʱ  
£¬Ïò¸Ã½ø³Ì·¢ËÍSIGXCPUÐźš£ª¥  
RLIMIT ¼£Ã£Ä££ª³£²¡½DATA¡þ(SVR4¼°4ª±3+BSD)Êý¾Ý¶ÎµÄ×î´ó×Ö½Ú³¤¶È¡£ÕâÊÇͼ7  
ª±3Öгõʼ  
»¯Êý¾Ý¡¢·Ç³õʼ»¯Êý¾ÝÒÔ¼°¶ÑµÄ×ܺ͡£ª¥  
RLIMIT ¼£Ã£Ä££ª³£²¡½FSIZE¡þ(SVR4¼°4ª±3+BSD)¿ÉÒÔ´´½¨µÄÒ»¸öÎļþµÄ×î´ó×Ö½Ú  
³¤¶È¡£µ±  
³¬¹ý´ËÈíÏÞÖÆÊ±£¬ÔòÏò¸Ã½ø³Ì·¢ËÍSIGFSZÐźš£ª¥  
RLIMIT ¼£Ã£Ä££ª³£²¡½MEMLOCK¡þ£¨4ª±3+BSD)Ëø¶¨ÔÚ´æ´¢Æ÷µØÖ·¿Õ¼ä(ÉÐĩʵÏÖ)¡£  
ª¥  
RLIMIT ¼£Ã£Ä££ª³£²¡½NOFILE¡þ(SVR4)ÿ¸ö½ø³Ì×î¶à´ò¿ªµÄÎļþÊý¡£¸ü¸Ä´ËÏÞÖÆ½«  
Ó°Ïìµ½sy  
sconfº¯ÊýÔÚ²ÎÊý-sc-OPEN-MAXÖзµ»ØµÄÖµ(2ª±5ª±4½Ú)¡£¼û³ÌÐò2ª±3¡£ª¥  
RLIMIT ¼£Ã£Ä££ª³£²¡½NPROC¡þ(4ª±3+BSD)ÿ¸öʵ¼ÊÓû§IDËùÓµÓеÄ×î´ó×Ó½ø³ÌÊý  
¡£¸ü¸Ä´Ë  
ÏÞÖÆ½«Ó°Ïìµ½sysconfº¯ÊýÔÚ²ÎÊý ¼£Ã£Ä££ª³£²¡½SC ¼£Ã£Ä££ª³£²¡½CHILD ¼£Ã£Ä££  
ª³£²¡½MA  
XÖзµ»ØµÄÖµ(2ª±5ª±4½Ú)¡£ª¥  
RLIMIT ¼£Ã£Ä££ª³£²¡½OFILE¡þ(4ª±3+BSD)ÓëSVR4µÄRLIMIT ¼£Ã£Ä££ª³£²¡½NOFILE  
Ïàͬ¡£ª¥  
RLIMIT ¼£Ã£Ä££ª³£²¡½RSS¡þ£¨4ª±3+BSD)×î´óפÄڴ漯×Ö½Ú³¤¶È(RSS)¡£Èç¹ûÎïÀí  
´æ´¢Æ÷¹©  
×ÓÓ¦Çó£¬ÔòϵͳºË½«´Ó½ø³Ì´¦È¡»Ø³¬¹ýRSSµÄ²¿·Ö¡£ª¥  
RLIMIT ¼£Ã£Ä££ª³£²¡½STACK¡þ(SVR4¼°4ª±3+BSD)Õ»µÄ×î´ó×Ö½Ú³¤¶È¡£¼ûͼ7ª±3¡£  
ª¥  
RLIMIT ¼£Ã£Ä££ª³£²¡½VMEM¡þ£¨SVR4)¿ÉÓ³ÕÕµØÖ·¿Õ¼äµÄ×î´ó×Ö½Ú³¤¶È¡£ÕâÓ°Ïìµ½  
mmapº¯Êý(  
12ª±9½Ú)¡£ª¥  
×ÊÔ´ÏÞÖÆÓ°Ïìµ½µ÷Óýø³Ì²¢ÓÉÆä×Ó½ø³Ì¼Ì³Ð¡£Õâ¾ÍÒâζ×ÅΪÁËÓ°ÏìÒ»¸öÓû§µÄËùÓР 
ºóÐø½ø³Ì  
£¬Ð轫×ÊÔ´ÏÞÖÆÉèÖù¹ÔìÔÚshellÖ®ÖС£È·Êµ£¬Bourne ShellºÍKornshell¾ßÓÐÄÚ²¿  
ulimitÃü  
ÁCShell¾ßÓÐÄÚ²¿limitÃüÁî¡£(umaskºÍchdirÒ²±ØÐëÊÇshellÄÚ²¿µÄ)¡£ª¥  
½ÏÔçµÄBourme Shell£¬ÀýÈçÓɱ´¿ËÀ³ÌṩµÄÒ»ÖÖ£¬²»Ö§³ÖulimitÃüÁî¡£ª¥  
½ÏеÄKornShellµÄulimitÃüÁî¾ßÓÐ-HºÍ-sÑ¡ÔñÏÒÔ·Ö±ð¼ì²éºÍÐÞ¸ÄÓ²ºÍÈíµÄÏÞ  
ÖÆ£¬µ«Ëü  
ÃÇÉÐÄ©±àдÈëÎĵµ¡£ª¥  
ʵÀýª¥  
³ÌÐò7ª±7´òÓ¡ÓÉϵͳ֧³ÖµÄ¶ÔËùÓÐ×ÊÔ´µÄµ±Ç°ÈíÏÞÖÆºÍÓ²ÏÞÖÆ¡£ÎªÁËÔÚSVR4ºÍ4ª±  
3+BSD֮Ϡ 
ÔËÐд˳ÌÐò£¬ÎÒÃDZØÐëÌõ¼þ±àÒ벻ͬµÄ×ÊÔ´Ãû¡£ª¥  
P183ª¥ª¥ª¥  
³ÌÐò7ª±7¡þ´òÓ¡µ±Ç°×ÊÔ´ÏÞÖÆª¥ª¥  
×¢Ò⣬ÎÒÃÇÔÚdoitºêÖÐʹÓÃÁËеÄANSIC×Ö·û´®´´½¨Ëã·û(#)£¬ÒÔ±ãΪÿ¸ö×ÊÔ´Ãû²ú  
Éú×Ö·û´®  
Öµ¡£ÀýÈ磺ª¥  
doit(RLIMIT ¼£Ã£Ä££ª³£²¡½CORE);ª¥  
Õ⽫ÓÉCÓè´¦Àí³ÌÐòÀ©Õ¹Îª£ºª¥  
pr ¼£Ã£Ä££ª³£²¡½limits("RLIMIT ¼£Ã£Ä££ª³£²¡½CORE",RLIMIT ¼£Ã£Ä££ª³£²¡½C  
ORE);ª¥  
ÔÚSVR4ÏÂÔËÐд˳ÌÐò£¬µÃµ½£ºª¥  
$ aª±outª¥  
RLIMIT ¼£Ã£Ä££ª³£²¡½CORE¡þ1048576¡þ1048576ª¥  
RLIMIT ¼£Ã£Ä££ª³£²¡½CPU¡þ(infinite)¡þ£¨infinite)ª¥  
RLIMIT DATA¡þ£±£¶£·£·£·£²£±£¶¡þ£±£¶£·£·£·£²£±£¶ª¥  
RLIMIT ¼£Ã£Ä££ª³£²¡½FSIZE¡þ£²£°£¹£·£±£µ£²¡þ£²£°£¹£·£±£µ£²ª¥  
RLIMIT ¼£Ã£Ä££ª³£²¡½NOFILE¡þ64¡þ1024ª¥  
RLIMIT ¼£Ã£Ä££ª³£²¡½STACK¡þ16777216¡þ16777216ª¥  
RLIMIT ¼£Ã£Ä££ª³£²¡½VMEM¡þ16777216¡þ16777216ª¥  
ÔÚ4ª±3+BSDÏÂÔËÐд˳ÌÐò£¬µÃµ½£ºª¥  
$ aª±outª¥  
RLIMIT ¼£Ã£Ä££ª³£²¡½CORE¡þ(infinite)¡þ(infinite)ª¥  
RLIMIT ¼£Ã£Ä££ª³£²¡½CPU¡þ(infinite)¡þ(infinite)ª¥  
RLIMIT ¼£Ã£Ä££ª³£²¡½DATA¡þ£¸£³£¸£¸£¶£°£¸¡þ£±£¶£·£·£·£²£±£¶ª¥  
RLIMIT ¼£Ã£Ä££ª³£²¡½FSIZE¡þ£¨infinite)¡þ(infinite)ª¥  
RLIMIT ¼£Ã£Ä££ª³£²¡½MEMLOCK¡þ(infinite)¡þ(infinite)ª¥  
RLIMIT ¼£Ã£Ä££ª³£²¡½OFILE¡þ64¡þ(infinite)ª¥  
RLIMIT ¼£Ã£Ä££ª³£²¡½NPROC¡þ£´£°¡þ£¨infinite)ª¥  
RLIMIT ¼£Ã£Ä££ª³£²¡½RSS¡þ27070464¡þ27070464ª¥  
RLIMIT ¼£Ã£Ä££ª³£²¡½STACK¡þ£µ£²£´£²£¸£¸¡þ£±£¶£·£·£·£²£±£¶ª¥  
ÔÚÎÒÃǽéÉÜÁËÐźŻú¹¹ºó£¬Á·Ï°10ª±11½«¼ÌÐøÌÖÂÛ×ÊÔ´ÏÞÖÆ¡£ª¥  
7ª±12¡þÕªÒªª¥  
Àí½âÔÚUnix»·¾³ÖÐC³ÌÐòµÄ»·¾³ÊÇÀí½âUnix½ø³Ì¿ØÖÆÌØÕ÷µÄÏȾöÌõ¼þ¡£ÔÚ±¾ÕÂÖУ¬  
ÎÒÃÇ˵Ã÷  
ÁËÒ»¸ö½ø³ÌÊÇÈçºÎÆð¶¯ºÍÖÕÖ¹µÄ£¬ÈçºÎÏòÆä´«µÝ´«Êý±íºÍ»·¾³¡£ËäÈ»ÕâÁ½Õß¶¼²»ÊÇ  
ÓÉϵͳºË  
½øÐнâÊ͵쬵«ÏµÍ³ºËÆðµ½ÁË´ÓexecµÄµ÷ÓÃÕß½«ÕâÁ½Õß´«µÝ¸øÐ½ø³ÌµÄ×÷Óᣪ¥  
ÎÒÃÇÔÚ±¾ÕÂÖÐҲ˵Ã÷ÁËC³ÌÐòµÄµäÐÍ´æ´¢Æ÷²¼¾Ö£¬ÒÔ¼°Ò»¸ö½ø³ÌÈçºÎ¶¯Ì¬µØ·ÖÅäºÍ  
ÊÍ·Å´æ´¢  
Æ÷¡£ÏêϸµØÁ˽âÓÃÓÚά»¤»·¾³µÄһЩº¯ÊýÊÇÖµµÃµÄ£¬ÒòΪËüÃÇÉæ¼°´æ´¢Æ÷·ÖÅä¡£±¾  
ÕÂÒ²½éÉÜ  
 
ÁËsetjmpºÍlongjmpº¯Êý£¬ËüÃÇÌṩÁËÒ»ÖÖÔÚ½ø³ÌÄڷDZ¾µØ×ªÒƵķ½·¨¡£×îºóÎÒÃÇ  
½éÉÜÁËSVR4ºÍ4ª±3+BSDÌṩµÄ×ÊÔ´ÏÞÖÆ¹¦ÄÜ¡£¡¼£Ì£Í¡½  
   
--  
 
 
-- 
¡ù À´Ô´:¡¤BBS Ë®Ä¾Ç廪վ smth.org¡¤[FROM: 202.38.248.38] 

BBSˮľÇ廪վ¡Ã¾«»ªÇø