看板 LinuxDev 關於我們 聯絡資訊
各位版友,有以下的問題想要請教一下: 我今天看到一段程式一直無法理解,所以上來請問一下版友 我先敘述一下問題,有一個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
Spig:那行的用意是取得你要拿來用的函式的指標 07/18 22:39
swh:可能吧,我的直覺還是執行了module_init_gpio,不知是不是耍笨 07/18 23:02
swh:漏印了,不過如果是function point應該是不用加"*"才對 07/18 23:03
chhsieh3:init是函式指標,*init是取得函式位址,(*init)()執行函式 07/19 20:21
swh:恩,沒錯,經過實驗,是我沒印出來,這段確實執行了init的對 07/22 00:46
swh:映函式,謝謝各位版友的幫忙 07/22 00:46