ºìÁªLinuxÃÅ»§
Linux°ïÖú

Linux»·¾³ÏÂʵÏÖ×é¼þ·µ»ØÏûÏ¢µÄ¼¼ÇÉ

·¢²¼Ê±¼ä:2006-11-01 11:24:41À´Ô´:ºìÁª×÷Õß:M-zone
¡¡¡¡ÎÒÃÇÔÚ±àдLinuxÔËÐпâʱ£¬ÌرðÊÇ×÷Ϊ×é¼þÌá½»¸øÆäËû³ÌÐòԱʹÓÃʱ£¬ºÜÓбØÒªÌṩ·µ»ØÏûÏ¢ÒÔÌá¸ß×é¼þÔÚ¿ª·¢¹ý³ÌÖеĿÉÓÃÐÔ¡£±¾ÎĽ«ÎªÄú½²ÊöһЩʵÓõļ¼ÇÉ¡£

¡¡¡¡ÔÚ±àдC/C++Ó¦ÓÃʱ£¬ÎÒÃǷdz£ÊìϤϵͳµ÷ÓÃÖеķµ»ØÏûÏ¢µÄ´¦Àí¡£ÔÚ·µ»ØÏûÏ¢ÖУ¬°üº¬ÁËÁ½ÀàÐÅÏ¢£¬Ò»¸öÊÇ·µ»ØÐÅÏ¢´úÂ룬ָÃ÷·µ»ØµÄÊǺÎÀàÐÅÏ¢£»ÁíÒ»¸ö·µ»ØµÄÊÇÐÅÏ¢µÄÎÄ×Ö˵Ã÷£¬Ö¸Ã÷µ÷ÓÃÊÇ·ñ³É¹¦¡£ÕâÁ½ÀàÐÅÏ¢¾ùÓи÷×ÔµÄ×÷Ó㬲»ÄÜÏ໥´úÌæ¡£±ÈÈçµ÷ÓüÓÔØÄÚ´æµÄϵͳµ÷Óã¬Èç¹û¸ÃÄÚ´æÒѾ­¼ÓÔØ£¬¸Ãµ÷ÓÿÉÄÜ·µ»Ø´íÎ󣬵«ÊdzÌÐò¿ÉÄÜ»¹»á¼ÌÐøÕýÈ·ÔËÐУ¬Èç¹ûÐèÒªÖÐÖ¹³ÌÐò£¬ÔòÐèÒªÁ˽â³ÌÐòÖÐÖ¹µÄ¾ßÌåÔ­Òò£¬Õâʱ½ö¿¿·µ»ØÏûÏ¢±êʶÊDz»¹»µÄ£¬·µ»ØÐÅÏ¢ÎÄ×Ö˵Ã÷ÔòÁ¢¿ÌÈÃÓû§ÖªµÀ´íÎóÔ­Òò¡£ÎÒÃÇÔÚ±àдLinuxÔËÐпâʱ£¬ÌرðÊÇ×÷Ϊ×é¼þÌá½»¸øÆäËû³ÌÐòԱʹÓÃʱ£¬ºÜÓбØÒªÌṩÀàËÆµÄ·µ»ØÏûÏ¢£¬ÒÔÌá¸ß×é¼þÔÚ¿ª·¢¹ý³ÌÖеĿÉÓÃÐÔ¡£

¡¡¡¡1. ÀûÓñê×¼C¿âÖеķµ»ØÏûÏ¢

¡¡¡¡ÔÚ×Ô¼º×é¼þÖеķ½·¨»ò¹ý³ÌÖУ¬Èç¹ûÏûÏ¢±È½ÏÒ»°ã£¬¿ÉÒÔÖ±½ÓÀûÓñê×¼C¿âÖеķµ»ØÏûÏ¢¡£±ê×¼C¿âÖеķµ»ØÏûÏ¢´úÂ붨ÒåÁÐÔÚÍ·Îļþerrno.hÖУ¬·µ»ØÏûÏ¢ÊÇÓôÓ0¿ªÊ¼µÄÒ»¸öÕûÊýÖµ±íʾµÄ£¬ÆäÖÐ0ΪÕýÈ·µÄ·µ»ØÖµ£¬ÆäËûΪ¾¯¸æÀàÐÍ»ò´íÎóÀàÐ͵ķµ»ØÖµ¡£ÔÚ±ê×¼C¿âÖУ¬ÓÃÁËÒ»¸öÈ«¾Ö±äÁ¿errnoÀ´Ö¸Ã÷µ±Ç°µ÷Óõķµ»ØÏûÏ¢Öµ¡£ÔÚ×é¼þµÄ·½·¨»ò¹ý³ÌÖУ¬¿ÉÒÔÖ±½ÓÉèÖÃerrnoµÄÖµ£¬µ±È»Òª·ûºÏerrno.hÖеÄÀàÐͶ¨Òå¡£ÔÚµ÷ÓÃ×é¼þÖеķ½·¨»ò¹ý³Ìʱ£¬¿ÉÒÔÖ±½Óµ÷ÓÃCÖеĺ¯Êýperror()»òstrerrno()À´Ìá½»·µ»ØÏûÏ¢µÄÎÄ×Ö˵Ã÷¡£

¡¡¡¡2. ʵÏÖ×Ô¶¨ÒåµÄ·µ»ØÏûÏ¢

¡¡¡¡Ò»°ãÇé¿öÏ£¬±ê×¼CÖеÄÏûÏ¢²»×ãÒÔ·´Ó³×Ô¼º×é¼þÖеķ½·¨»ò¹ý³ÌÔËÐÐ״̬µÄ¡£ÕâʱÐèҪʵÏÖ×Ô¼ºÌØÓеķµ»ØÏûÏ¢¡£Ö÷Òª²½ÖèÈçÏ£º

¡¡¡¡µÚÒ»£¬¹æ¶¨·µ»ØÏûÏ¢´úÂë¡£

¡¡¡¡×é¼þÖз½·¨»ò¹ý³ÌµÄÔËÐÐ״̬ÖÐÓÐÒ»²¿·ÖÒª×÷Ϊ·µ»ØÖµ£¬ÕâЩ·µ»ØÖµÒª·´Ó³¶àÖÖ¸´ÔÓµÄÔËÐÐ״̬£¬Óгɹ¦·µ»ØÖµ¡¢Ò»°ãÔËÐÐÏûÏ¢Öµ¡¢¾¯¸æÖµ¡¢Ò»°ã´íÎóÖµ¡¢ÑÏÖØ´íÎóÖµµÈ¡£·µ»ØÏûÏ¢´úÂëÒªÖ±½Ó·´Ó³ÕâЩ״̬¡£ÁíÍ⣬·µ»ØÖµÖл¹ÐèÒª·´Ó³¸Ã·½·¨»ò¹ý³ÌλÓÚÄǸö×é¼þÖС£ÎÒÃÇ¿ÉÒÔÓÃÒ»¸öÕûÊýÖµµÄÍ·Á½Î»±êʶ·µ»ØÀàÐÍ£¬ÆäÖгɹ¦·µ»ØÖµ¡¢Ò»°ãÔËÐÐÏûÏ¢ÖµÓÃÕýÊý£¬¿ÉÒÔ·Ö±ð±êʶΪ0X10000000,0X20000000¡£¾¯¸æÖµ¡¢Ò»°ã´íÎóÖµ¡¢ÑÏÖØ´íÎóÖµÓøºÊýÖµ£¬¿ÉÒÔ·Ö±ð±êʶΪ0X80000000,0X90000000£¬0XA0000000¡£¶ø×é¼þ¿ÉÒÔÓõڶþ¸ö×Ö½Ú±êʶ£¬ÈçÊÂÎñ°²È«×é¼þÓÃ11±êʶ£¬Ôò¿ÉÒÔÓÃ0X000B00000±êʶ¡£·µ»ØÏûÏ¢µÄ¾ßÌå´úÂëÔò¿ÉÒÔÑØÓñê×¼C¿âÖеıíʾ·½·¨£¬ÈçÕýÈ··µ»ØÖµÓÃ0±êʶ£¬Ä³Ò»ÑÏÖØ´íÎó´íÎóÓÃ5±íʾ¡£Ôò¶ÔÓÚÊÂÎñ°²È«×é¼þ£¬ÕâÁ½ÖÖÏûÏ¢¿ÉÒÔ±êʶΪ0X100B0000ºÍ0XA00B0005¡£

¡¡¡¡µÚ¶þ£¬±íÊö·µ»ØÏûÏ¢µÄÎÄ×Ö˵Ã÷

¡¡¡¡±íÊö·µ»ØÏûÏ¢µÄÎÄ×Ö˵Ã÷ÁÐÔÚ×é¼þÀïµÄÒ»¸ö×Ö·û´®Êý×éÖУ¬¸÷¸öÏûÏ¢µÄÎÄ×Ö˵Ã÷ÔÚÊý×éÖеÄλÖð´ÕÕÏûÏ¢µÄ¾ßÌå´úÂëÖµ¾ö¶¨¡£

¡¡¡¡ÀýÈçÊÂÎñ°²È«×é¼þÖж¨ÒåÈçÏÂËĸö·µ»ØÏûÏ¢£º0£¬³É¹¦·µ»ØÖµ£»1£¬ÊÂÎñ¶¨Òå´íÎó£»2£¬ÊÂÎñÌá½»´íÎó£»3£¬ÊÂÎñ·µ»Ø´íÎ󡣿ÉÒÔÔÚ¶¨ÒåÈçÏÂ×Ö·û´®Êý×飺

ÒýÓÃ:
char *ReturnMessage_11[] =
{
"³É¹¦·µ»Ø",
"ÊÂÎñ¶¨Òå´íÎó",
"ÊÂÎñÌá½»´íÎó",
"ÊÂÎñ·µ»Ø´íÎó",
(char *)0
};

};


¡¡¡¡¶ÔÓ¦µÄ·µ»ØÏûÏ¢´úÂë·Ö±ðΪ£º0X100B0000£¬0X900B0001£¬0X900B0002£¬0X900B0003¡£

¡¡¡¡µÚÈý£¬×¢²á×é¼þ·µ»ØÏûÏ¢

¡¡¡¡ÔÚÀûÓÃ×é¼þ¿ª·¢Ó¦ÓÃʱ£¬Ê×ÏÈÔÚ×é¼þµÄ¹¹Ô캯Êý»ò³õʼ»¯º¯ÊýÖÐ×¢²á×é¼þ·µ»ØÏûÏ¢£¬ÕâÒ»²½ÊÇÒþ²ØÔÚ×é¼þÄÚ²¿¡£¶ÔÓÚÍⲿӦÓÃÌṩÁËÒ»¸öÈ«¾ÖµÄÖ¸Ïò×é¼þ·µ»ØÏûÏ¢×Ö·û´®Êý×éµÄÖ¸Õëmsg_ptr¡£×¢²á´úÂëÈçÏ£º

ÒýÓÃ:
void *handle;
char *messageShow;

// ¼ÓÔØ¸Ã×é¼þµÄ¶¯Ì¬¿â
handle = dlopen(NULL, RTLD_LAZY);
// »ñµÃ×é¼þµÄ±êʶ
sprintf(messageShow,"ReturnMessage_%d", ComponentIdx);
// È¡µÃ×é¼þ·µ»ØÏûÏ¢×Ö·û´®Êý×éÖ¸Õë
msg_ptr[ComponentIdx] = dlsym(handle, messageShow);


¡¡¡¡µÚËÄ£¬»ñÈ¡×é¼þ·µ»ØÏûÏ¢µÄÎÄ×Ö˵Ã÷

¡¡¡¡ÔÚ×¢²á×é¼þ·µ»ØÏûÏ¢ºó£¬ÔÚÓ¦Óõ÷ÓÃ×é¼þÖеķ½·¨»ò¹ý³Ìʱ£¬Ò»°ãÇé¿öÏ£¬¿ÉÒÔÖ±½Ó´Ó·µ»Ø´úÂëÖÐÅжϷµ»ØµÄÏûÏ¢ÄÚÈÝ¡£Ò²¿ÉÒÔµ÷ÓÃ×é¼þÖеÄStrError(int rts)·½·¨»ñÈ¡×é¼þ·µ»ØÏûÏ¢µÄÎÄ×Ö˵Ã÷¡£

¡¡¡¡¸Ã·½·¨µÄ´úÂëÈçÏ£º

ÒýÓÃ:
int ErrnoIdx;
int CompomentIdx;
// »ñµÃ·µ»ØÏûÏ¢µÄ¾ßÌå´úÂë
ErrnoIdx = rts & 0xFFFF;
// »ñµÃ×é¼þµÄ±êʶ
CompomentIdx = (rts & 00FF0000) >> 16 ;
// ·µ»Ø×é¼þ·µ»ØÏûÏ¢µÄÎÄ×Ö˵Ã÷
return msg_ptr[CompomentIdx][ErrnoIdx] ;


¡¡¡¡ÀûÓÃÈçÉϵļ¼ÇÉ£¬¿ÉÒÔʹµÃÎÒÃÇ·¢²¼µÄLinux°üÔÚʹÓÃʱ¾ßÓнϺõĿÉÓÃÐÔ¡£
ÎÄÕÂÆÀÂÛ

¹²ÓÐ 0 ÌõÆÀÂÛ