Динамически подключаемая библиотека
Динамически подключаю библиотеку при помощи функции void *dlopen(const char *filename, int flag); Как мне в самом коде библиотеки узнать, какое количество программ подключило и использует данную библиотеку?
Ответы (1 шт):
Если посмотреть на документацию на функцию dlopen, то там видно, что при загрузке библиотеки, линковщик вызывает функцию _init() (но она сейчас считается устаревшей или функцию с атрибутом __attribute__((constructor)). А при выгрузке - _fini/__attribute__((destructor)). Там делайте счетчик и соответственно увеличивать/уменьшать счетчик.
Способ номер два. В каталоге /proc/..../map_files пробежаться по всем файлам и посмотреть, нет ли там Вашей. И счетчик увеличивать. Где то так
ls /proc/*/map_files/ -al | grep libc | wc -l
правда можно заметить, что некоторые библиотеки загружены по несколько раз. Как это интерпретировать - зависит от Вас.