Как передать одно значение между программой и библиотекой (используя mkfifo или около того)? - PullRequest
0 голосов
/ 08 июля 2011

У меня есть динамически загружаемая библиотека, которая вычисляет одно специальное значение. Моя программа должна получить доступ к этому значению (на C или C ++). Я думал об именованных каналах. Но они кажутся как-то странными для этой цели. Если это реализовано с помощью канала, моя библиотека запишет одно значение в файл, а затем моя программа его прочитает. Я читал о сигнале SIGPIPE. Зачем мне нужен один из них и нужно ли мне его использовать? Я также читал, что для записи в именованный канал канал должен быть открыт для чтения. Где смысл этого? Я планировал реализовать именованную трубу от mkfifo. Почему-то в примерах я тоже вижу разные звонки, иногда просто создается и открывается файл. Почему я не могу просто сделать это? Я действительно не хочу иметь никаких заблокированных труб.

В конце я просто хочу сохранить одно значение, чтобы оно было доступно для библиотеки и программы. Есть ли другие способы, кроме труб, чтобы это реализовать?

Я не думаю, что возвращаемые значения функции возможны, потому что все функции в библиотеке вызываются изнутри, а не извне моей программой (malloc hook).

1 Ответ

2 голосов
/ 08 июля 2011

Даже если ваша программа, в первую очередь, является ловушкой malloc (загрузка через LD_PRELOAD, я полагаю?), Вы все равно можете получить доступ к символам из нее. Определите функцию (скажем, getMyValue()) в библиотеке, и в вашей основной программе создайте ссылку -ldl и выполните что-то вроде:

void *vpGetMyValue = dlsym(RTLD_DEFAULT, "getMyValue");
if (!vpGetMyValue) {
  // Library not loaded! Do something else
}

int (*pGetMyValue)() = (int(*)())vpGetMyValue;
int myValue = pGetMyValue();
...