作者swh (路人甲)
看板LinuxDev
標題[問題] 詢問dlopen()相關的使用法
時間Mon Jul 18 21:46:42 2011
各位版友,有以下的問題想要請教一下:
我今天看到一段程式一直無法理解,所以上來請問一下版友
我先敘述一下問題,有一個shared lib:gpio.so裡面有一個
函式int module_init_gpio(void *data){},在程式中使用dlopen()來呼叫
,程式碼概述如下:
void *module = NULL;
int (*init) (void);
int retval = 0;
module = dlopen("gpio.so", RTLD_LAZY); //回傳值module沒有問題
dlerror(); //清空錯誤訊息
init = dlsym(module, "module_init_gpio");
if (dlerror()) {
printf("don't find");
return NULL;
}
retval = (*init)(); //<<不瞭解這段的用意
if (retval) {
printf("module initiate fail");
return NULL;
}
return module;
我的問題是,這行程式碼 retval = (*init)(); 的用意是什麼
我在module_init_gpio()中印訊息,不知道為何沒有印出來
看來是沒有執行該函式,也有可能是我自己耍笨誤會了,請版友指正謝謝
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 180.177.145.151
1F:→ Spig:那行的用意是取得你要拿來用的函式的指標 07/18 22:39
2F:→ swh:可能吧,我的直覺還是執行了module_init_gpio,不知是不是耍笨 07/18 23:02
3F:→ swh:漏印了,不過如果是function point應該是不用加"*"才對 07/18 23:03
4F:→ chhsieh3:init是函式指標,*init是取得函式位址,(*init)()執行函式 07/19 20:21
5F:→ swh:恩,沒錯,經過實驗,是我沒印出來,這段確實執行了init的對 07/22 00:46
6F:→ swh:映函式,謝謝各位版友的幫忙 07/22 00:46