Обмен данными между пользователями разделяемой библиотеки - PullRequest
1 голос
/ 15 ноября 2011

У меня есть общая библиотека, скажем, foo.so, которая содержит функцию с именем initialize(). Есть несколько исполняемых файлов, которые открывают foo.so, и каждый вызывает initialize(). Я бы хотел initialize() проверить, был ли он уже вызван другим исполняемым файлом, и если это так, ничего не делать. Каков наилучший способ обмена этой информацией между этими процессами? Есть ли какие-то специальные средства для обмена такой информацией или мне нужно использовать стандартный IPC?

Ответы [ 2 ]

3 голосов
/ 15 ноября 2011

Создайте файл / var / db / mylibname. Если open () возвращает ошибку о том, что файл уже существует, ваша библиотека была инициализирована.

Потребуется добавить обработчик atexit (), который удалит файл при выходе из процесса. Атексит должен быть инициализирован, только если open () вернет успех.

UPDATE:

Если ресурсы должны быть инициализированы только один раз и если они (ресурсы) не зависят от существования какого-либо процесса, который использует библиотеку в то время , то лучше создать файл в / var / запустите каталог (чтобы он был очищен после перезагрузки системы) и забудьте о atexit ().

2 голосов
/ 15 ноября 2011

Вам необходимо использовать стандартный IPC. На ум приходит отображение памяти, но сначала решите, хотите ли вы инициализации для пользователя и для компьютера.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...