???????????дLinux???п?????????????????????????????????????б?????????????????????????????е????????????????????Щ??????ɡ?

???????дC/C++??????????????????????е??????????????????????У?????????????????????????????????????????????????????????????????????????????????????????????????????и??????????????????檔??????ü??????????????????????????????????????????????????????????????????У???????????????????????????????????????????????????????????????????????????????????????????????????????д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??

?????????????????????????????

???????????????????????????????????????????????У????????????????????????е?λ?e?????????????????????

?????????????????ж???????????????????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???????????н?????????