Динамически подключаемая библиотека

Динамически подключаю библиотеку при помощи функции void *dlopen(const char *filename, int flag); Как мне в самом коде библиотеки узнать, какое количество программ подключило и использует данную библиотеку?


Ответы (1 шт):

Автор решения: KoVadim

Если посмотреть на документацию на функцию dlopen, то там видно, что при загрузке библиотеки, линковщик вызывает функцию _init() (но она сейчас считается устаревшей или функцию с атрибутом __attribute__((constructor)). А при выгрузке - _fini/__attribute__((destructor)). Там делайте счетчик и соответственно увеличивать/уменьшать счетчик.

Способ номер два. В каталоге /proc/..../map_files пробежаться по всем файлам и посмотреть, нет ли там Вашей. И счетчик увеличивать. Где то так

ls /proc/*/map_files/ -al | grep libc | wc -l

правда можно заметить, что некоторые библиотеки загружены по несколько раз. Как это интерпретировать - зависит от Вас.

→ Ссылка