BBSˮľÇ廪վ¡Ã¾«»ªÇø
·¢ÐÅÈË: forest (ÇẮС¥~~С¼ªÆª), ÐÅÇø: Unix
±ê Ìâ: [×ªÔØ]unix»·¾³¸ß¼¶±à³Ì--7 (×ªÔØ)
·¢ÐÅÕ¾: BBS ˮľÇ廪վ (Fri Mar 17 17:50:53 2000)
¡¾ ÒÔÏÂÎÄ×Ö×ªÔØ×Ô Linux ÌÖÂÛÇø ¡¿
¡¾ ÔÎÄÓÉ SuperSB Ëù·¢±í ¡¿
·¢ÐÅÈË: 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ˮľÇ廪վ¡Ã¾«»ªÇø