Можно ли вызвать функцию не известную процессу через указатель на неё
или указатель на функцию является локальным для процесса?
В языке Си можно получить указатель на функцию, можно ли передав этот указатель процессу выполнить эту функцию используя полученный указатель или этот указатель являекся локальным для кода в котором мы получаем адрес функции? (как указатели на локальную память процесса)
Вызов функции библиотеки через указатель на неё(+)
-
- Заглянувший
- Сообщения: 7
- Зарегистрирован: 09 июн 2006, 17:11
-
- Заглянувший
- Сообщения: 7
- Зарегистрирован: 09 июн 2006, 17:11
В программе нужно организовать передачу и обработку сообщений между процессами. Во время обработки данных сообщения, процесс мог бы через указатели вызывать функции обработки этого сообщения (указатели на функции обработки находятся среди данных сообщения). Чем то напоминает потход ООП к сообщениям(событиям).
И данные и функции для их обработки в одном обьекте.
Цели:
1. Таким образом хотелось достигнуть возможности добавления типов сообщений(событий) без изменения части программ(процессов) отвечающей за обработку сообщений и их перекомпиляции, просто добавляя к новому типу сообщения указатели на функции его обработки.
2. Посылаемые сообщения должны обрабатыватся несколькими процессами приложения. Сообщения должны удалятся после обработки всеми требуемыми процессами.
Думается что неплохо было бы обрабатывать сообщения используя указатели на функции обработки содержащиеся среди данных сообщения(если такое возможно), а процессы просто передавали бы таким функциям необхобимые данные(например номер процесса который ведёт обработку сообщения). А также защищённо хранить данные управляющие доступом к сообщению и его последующим удалением(после обработки всеми требуемыми процессами) среди данных сообщения.
И данные и функции для их обработки в одном обьекте.
Цели:
1. Таким образом хотелось достигнуть возможности добавления типов сообщений(событий) без изменения части программ(процессов) отвечающей за обработку сообщений и их перекомпиляции, просто добавляя к новому типу сообщения указатели на функции его обработки.
2. Посылаемые сообщения должны обрабатыватся несколькими процессами приложения. Сообщения должны удалятся после обработки всеми требуемыми процессами.
Думается что неплохо было бы обрабатывать сообщения используя указатели на функции обработки содержащиеся среди данных сообщения(если такое возможно), а процессы просто передавали бы таким функциям необхобимые данные(например номер процесса который ведёт обработку сообщения). А также защищённо хранить данные управляющие доступом к сообщению и его последующим удалением(после обработки всеми требуемыми процессами) среди данных сообщения.
spacestranger, смотрите в сторону CORBA если вам хочется "удаленного" вызова функций, это слишком много будет для стандартного unix-api. UNIX IPC - это в основном передача данных + блокировки. Для удаленной обработки данных "чужим" кодом существуют SUN RPC и CORBA - оба варианта достаточно порзрачно работают по сети.
PS: строго говоря ваш вариант небезопасен ИМХО - просто-таки провоцируется переполнение буффера с цель скромить процессу данные таким образом чтобы он передак улправление произвольному коду, возможно сожежащемуся в сами данных... Я не специалист по програамиированию такх вещей на C, но тем не менее так бы делать не стал все равно....
PS: строго говоря ваш вариант небезопасен ИМХО - просто-таки провоцируется переполнение буффера с цель скромить процессу данные таким образом чтобы он передак улправление произвольному коду, возможно сожежащемуся в сами данных... Я не специалист по програамиированию такх вещей на C, но тем не менее так бы делать не стал все равно....
Опыт растет прямо пропорционально выведенному из строя оборудованию
рекомендую gSOAP очень удобный тул!!Llama писал(а):если вам хочется "удаленного" вызова функций
Never touch the running program!!!