Автор: lonesome TSH/Digital Daemons
Дата: .02.2003
Раздел: Низкоуровневое программирование в Linux
Рассмотрим программу на Си, которая загрузит и использует функцию chomp из библиотеки chomp.so
#include <dlfcn.h>
#include <stdio.h>
char string[]="An example of shared object\n";
void main()
{
void *lib;
void (*chomp)(char *);
lib=dlopen("./chomp.so",RTLD_LAZY);
//Функция возвращает обработчик библиотеки
//Или NULL в случае ошибки
if(!lib){
printf("Error loading chomp.so\n");
return;
}
chomp=dlsym(lib,"chomp");
//dlsym() возвращает адрес функции
//Или NULL в случае ошибки
if(!chomp){
printf("Error loading chomp\n");
return;
}
chomp(string);
printf("%s\n",string);
/*
Обратите внимание: после вывода строки на экран
будет выполнен только один переход строки
хотя строка string также содержит символ '\n'
наша функция chomp исправно отрезает конечный '\n'
*/
}
Выгрузка библиотеки из памяти производится функцией dlclose(), в качестве параметра которой передается обработчик библиотеки