Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

[projet en C] comment gérer des "modules" ?

1 réponse
Avatar
thomas.baruchel
Bonjour,

quelles sont les possibilité pour qu'un programme principal
(écrit en C) puisse dynamiquement chargé des bouts de code
(également écrits en C) venant de l'utilisateur. Je m'explique:
durant l'exécution de mon programme principal, j'aimerais donner
à l'utilisateur la possibilité de rentrer (sous la forme d'une
chaîne de caractères) le nom d'un code écrit et compilé par lui.

Ce code comportera trois fonctions:
- func0, au prototype totalement figé
- func, une fonction interface
- xxx, une fonction déclarant au système func et func0
- (pas de fonction main)

Donc, dans la pratique, je veux que la saisie du nom
du module aboutisse à la lecture du fichier compilé et
à l'exécution de xxx dont je ne sais pas le nom par avance
(et ce nom ne peut être standard, puisque il peut y avoir
plusieurs modules).

On peut cependant admettre que xxx soit systèmatiquement de la
forme:
void mon_joli_module_declare(void)
pour un module appelé "mon_joli_module". Cela dit, j'ignore
comment appeler une fonction à partir de son nom connu comme
chaîne de caractères. Y a-t-il d'autres méthodes ? L'utilisateur
peut-il glisser dans son code quelque chose qui pourrait faire en
sorte que la fonction xxx soit reconnue au chargement comme étant
celle à exécuter ?

Quel type de compilation pour l'utilisateur?
On admettra que le nom du fichier contenant le code est connu
(dérivé du nom du module, avec simplement un suffixe en plus).
Comment "charger" le code et exécuter xxx ?

Autre possibilité: la seule fonction de xxx étant de passer l'adresse
de func et trois valeurs numériques (entier) décrivant le prototype de
func, peut-être peut-on se passer de xxx et laisser le programme
principal faire le travail, ce qui serait peut-être même plus élégant.
Dans ce cas, comment le module peut-il (à son "chargement" transmettre
ces informations: adresse de func et trois entiers) ? Que veut dire ici
"charger" ?

--
« nous devons agir comme si la chose qui peut-être ne sera pas devait
être » (Kant, Métaphysique des moeurs, doctrine du droit, II conclusion)

Thomas Baruchel <baruchel@laposte.net>

1 réponse

Avatar
manu
Thomas Baruchel wrote:

quelles sont les possibilité pour qu'un programme principal
(écrit en C) puisse dynamiquement chargé des bouts de code
(également écrits en C) venant de l'utilisateur.


Tu compiles des .so et tu fais dlopen(3)

--
Emmanuel Dreyfus
A lire: 240 pages en français sur l'administration UNIX avec BSD
http://www.eyrolles.com/php.informatique/Ouvrages/9782212112443.php3