要从C语言中的函数指针获取函数的名称,可以使用dlsym()
函数。dlsym()
函数是一个动态链接库函数,它可以获取到指定函数的指针地址。
以下是一个示例代码,演示如何使用dlsym()
函数获取函数指针并打印函数名称:
#include<stdio.h>
#include <stdlib.h>
#include <dlfcn.h>
int my_function() {
printf("Hello, world!\n");
return 0;
}
int main() {
void *handle;
int (*func_ptr)();
const char *error;
// 加载当前进程的动态链接库
handle = dlopen("./a.out", RTLD_LAZY);
if (!handle) {
fprintf(stderr, "%s\n", dlerror());
exit(1);
}
// 获取函数指针
func_ptr = dlsym(handle, "my_function");
error = dlerror();
if (error != NULL) {
fprintf(stderr, "%s\n", error);
exit(1);
}
// 打印函数名称
printf("Function name: %s\n", dlerror());
// 调用函数
(*func_ptr)();
// 关闭动态链接库
dlclose(handle);
return 0;
}
在这个示例中,我们使用dlopen()
函数加载当前进程的动态链接库,然后使用dlsym()
函数获取my_function()
函数的指针地址。最后,我们打印函数名称并调用函数。
需要注意的是,dlsym()
函数只能获取到动态链接库中的函数指针,因此需要使用dlopen()
函数加载动态链接库。如果函数是静态链接的,则无法使用dlsym()
函数获取函数指针。
领取专属 10元无门槛券
手把手带您无忧上云