Определение функций инициализации и финализации внутри разделяемой библиотеки позволяет автоматически выполнять код при ее загрузке и выгрузке.
Переменная среды LD_PRELOAD дает возможность загружать разделяемые библиотеки заранее. Используя этот механизм, можно выборочно переопределить функции и другие символы, которые в противном случае были бы найдены в других библиотеках.
Для мониторинга работы динамического компоновщика можно присваивать различные значения переменной среды LD_DEBUG.
Ознакомьтесь с источниками, приведенными в разделе 41.14.
42.1. Напишите программу, которая демонстрирует, что библиотека, закрытая с помощью функции dlclose(), не выгружается из памяти, если ее символы используются другой библиотекой.
42.2. Добавьте в программу из листинга 42.1 (dynload.c) вызов dladdr() для получения сведений об адресе, возвращенном функцией dlsym(). Выведите значения полей полученной структуры Dl_info и проверьте, соответствуют ли они вашим ожиданиям.
43. Краткий обзор межпроцессного взаимодействия
В этой главе представлен краткий обзор механизмов, с помощью которых процессы и потоки выполнения могут общаться друг с другом и синхронизировать свои действия. В следующих главах эта тема будет рассмотрена более подробно.
На рис. 43.1 показано богатое разнообразие механизмов взаимодействия и синхронизации в UNIX. Все они делятся на три категории.
•
•
Некоторые из этих механизмов занимаются синхронизацией, но в целом ко всем им применим термин
Как показано на рис. 43.1, разные механизмы часто предоставляют похожие возможности, связанные с IPC. Тому есть несколько причин:
• похожие механизмы эволюционировали параллельно в разных вариантах UNIX и позже были перенесены на другие системы. Например, очереди FIFO были разработаны для System V, а (потоковые) сокеты впервые появились в BSD;
• некоторые новые механизмы были разработаны для устранения недостатков более ранних аналогов. Например, механизмы POSIX IPC (очереди сообщений, семафоры и разделяемая память) появились в качестве улучшенной версии более старых средств работы с IPC из System V.
Ряд механизмов, объединенных на рис. 43.1, на самом деле обладают довольно разными возможностями. Например, потоковые сокеты могут использоваться для взаимодействия по сети, тогда как очереди FIFO позволяют обмениваться данными только между процессами на одном компьютере.
Различные механизмы взаимодействия, представленные на рис. 43.1, позволяют процессам обмениваться данными друг с другом (эти же механизмы могут быть использованы для обмена информацией между потоками одного и того же процесса, но такая необходимость возникает не часто — потоки могут взаимодействовать с помощью общих глобальных переменных).
Рис. 43.1.
Средства взаимодействия можно разделить на две категории.
•