Вызов функции библиотеки через указатель на неё(+)

Все о программировании под *nix
spacestranger
Заглянувший
Сообщения: 7
Зарегистрирован: 09 июн 2006, 17:11

Вызов функции библиотеки через указатель на неё(+)

Сообщение spacestranger »

Можно ли вызвать функцию не известную процессу через указатель на неё
или указатель на функцию является локальным для процесса?
В языке Си можно получить указатель на функцию, можно ли передав этот указатель процессу выполнить эту функцию используя полученный указатель или этот указатель являекся локальным для кода в котором мы получаем адрес функции? (как указатели на локальную память процесса)

Аватара пользователя
Llama
Неотъемлемая часть форума
Сообщения: 9749
Зарегистрирован: 06 фев 2002, 11:40
Откуда: Менск

Сообщение Llama »

spacestranger, есть мнение, что нельзя, т.к. адресные порстранства процессов изолированы друг от друга. А что именно вы хотите достигнуть таким образом?
Опыт растет прямо пропорционально выведенному из строя оборудованию

spacestranger
Заглянувший
Сообщения: 7
Зарегистрирован: 09 июн 2006, 17:11

Сообщение spacestranger »

В программе нужно организовать передачу и обработку сообщений между процессами. Во время обработки данных сообщения, процесс мог бы через указатели вызывать функции обработки этого сообщения (указатели на функции обработки находятся среди данных сообщения). Чем то напоминает потход ООП к сообщениям(событиям).
И данные и функции для их обработки в одном обьекте.

Цели:
1. Таким образом хотелось достигнуть возможности добавления типов сообщений(событий) без изменения части программ(процессов) отвечающей за обработку сообщений и их перекомпиляции, просто добавляя к новому типу сообщения указатели на функции его обработки.
2. Посылаемые сообщения должны обрабатыватся несколькими процессами приложения. Сообщения должны удалятся после обработки всеми требуемыми процессами.

Думается что неплохо было бы обрабатывать сообщения используя указатели на функции обработки содержащиеся среди данных сообщения(если такое возможно), а процессы просто передавали бы таким функциям необхобимые данные(например номер процесса который ведёт обработку сообщения). А также защищённо хранить данные управляющие доступом к сообщению и его последующим удалением(после обработки всеми требуемыми процессами) среди данных сообщения.

Аватара пользователя
Llama
Неотъемлемая часть форума
Сообщения: 9749
Зарегистрирован: 06 фев 2002, 11:40
Откуда: Менск

Сообщение Llama »

spacestranger, смотрите в сторону CORBA если вам хочется "удаленного" вызова функций, это слишком много будет для стандартного unix-api. UNIX IPC - это в основном передача данных + блокировки. Для удаленной обработки данных "чужим" кодом существуют SUN RPC и CORBA - оба варианта достаточно порзрачно работают по сети.

PS: строго говоря ваш вариант небезопасен ИМХО - просто-таки провоцируется переполнение буффера с цель скромить процессу данные таким образом чтобы он передак улправление произвольному коду, возможно сожежащемуся в сами данных... Я не специалист по програамиированию такх вещей на C, но тем не менее так бы делать не стал все равно....
Опыт растет прямо пропорционально выведенному из строя оборудованию

Аватара пользователя
fa3a
Неотъемлемая часть форума
Сообщения: 619
Зарегистрирован: 25 июл 2003, 17:22
Откуда: Minsk

Сообщение fa3a »

Llama писал(а):если вам хочется "удаленного" вызова функций
рекомендую gSOAP очень удобный тул!! 8)
Never touch the running program!!!

Ответить