作者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