IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C Discussion :

Appel successif de fonction de manière dynamique


Sujet :

C

  1. #1
    Membre habitué
    Homme Profil pro
    Apprenti Ingénieur Sécurité des Systèmes Embarqués
    Inscrit en
    Juillet 2020
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Apprenti Ingénieur Sécurité des Systèmes Embarqués
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Juillet 2020
    Messages : 7
    Par défaut Appel successif de fonction de manière dynamique
    Bonjour à tous,

    Je me tourne vers vous aujourd'hui car dans le cadre de mon apprentissage, je dois développer une application de benchmark. L'objectif ce serait de comparer la rapidité d'exécution d'algorithmes de chiffrement (symétrique, asymétrique, hash ...) par des cartes électroniques disposant d'une même famille de microcontrôleur. Pour se faire, on dispose de plusieurs librairies : une développée en interne de mon entreprise, d'autres telles que : Open SSL par exemple.

    Je suis en train de réfléchir à l'architecture de mon programme et je me demandais si il existait un moyen d'appeler successivement des fonctions ayant pratiquement le même nom et les mêmes arguments. Un exemple pour appuyer mes propos :

    --> Lancement du test
    --> Exécution de l'algorithme "Sha_1_Init" puis "Sha_1_Append" et enfin "Sha_1_Finish"
    --> Arrêt du test
    --> Lancement d'un nouveau test
    --> Exécution de l'algorithme "Sha_256_Init" puis "Sha_256_Append" et enfin "Sha_256_Finish"
    --> Arrêt du test

    De part cet exemple, j'aimerai faire une boucle qui récupère différentes valeurs [1,256,512]
    Puis, l'exécution de chaque step "Init", "Append", "Finish" par appel des fonctions tout en modifiant la valeur au moyen de la boucle juste au-dessus.

    Exemple:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    L[2] = {1, 256, 512};
    int i;
    for(i = 0; i < sizeof(L); i++)
    {
        Sha_L[i]_Init(arg1, arg2, ...);
        Sha_L[i]_Append(arg1, arg2, ..);
        Sha_L[i]_Finish(arg1, arg2, ...);
    }
    Cette structure d'appel de fonctions est aberrante pour du C, limite on se rapprocherait plus du Python mais je sollicite vos avis afin de savoir si il existe une manière d'appeler des fonctions dynamiquement en C.

    Je vous remercie d'avance pour vos réponses

  2. #2
    Membre émérite
    Avatar de emixam16
    Homme Profil pro
    Chercheur en sécurité
    Inscrit en
    Juin 2013
    Messages
    335
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Chercheur en sécurité

    Informations forums :
    Inscription : Juin 2013
    Messages : 335
    Par défaut
    Bonjour,

    Oui, en C, presque tout est possible!

    Une façon propre de faire ça est d'utiliser une structure contenant des pointeurs sur fonctions.

    Par exemple, si ta fonction à mesurer est hash1 et que tes librairies ont besoin d'une phase d'initialisation et de libérer des ressources une fois le test terminé tu peux utiliser un structure du type:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    struct library {
        int (*init)(int flags);
        int (*cleanup)();
        int (*hash1)(char* inBuffer, char** outBuffer);
    };
    Tu n'as alors plus qu'a assigner les bonnes fonctions en fonction de la librairie à tester par exemple:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     struct library lib = {
        .init = mylib_init;
        .cleanup = mylib_cleanup;
        .hash1 = mylib_hash;
    };
    Et c'est gagné! Tu peux appeler tes différentes fonctions normalement (ex: lib.hash1(inBuf, outBuf);)

    Pour le reste, on est sur du benchmark tout à fait classique, tu devrais pouvoir t'en sortir tout seul

  3. #3
    Membre habitué
    Homme Profil pro
    Apprenti Ingénieur Sécurité des Systèmes Embarqués
    Inscrit en
    Juillet 2020
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Apprenti Ingénieur Sécurité des Systèmes Embarqués
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Juillet 2020
    Messages : 7
    Par défaut
    Merci à toi emixam16 pour ta solution et tes explications détaillées

    Je passe le sujet en résolu.

    A bientôt !

Discussions similaires

  1. Réponses: 13
    Dernier message: 18/03/2019, 18h22
  2. [AC-2003] Insérer un paramètre dynamique dans une macro pour l'appel d'une fonction
    Par OphyTe dans le forum Macros Access
    Réponses: 11
    Dernier message: 10/02/2015, 15h01
  3. Appeler une feuille XSL de manière dynamique
    Par uNreal dans le forum XSL/XSLT/XPATH
    Réponses: 0
    Dernier message: 02/05/2011, 13h51
  4. Réponses: 4
    Dernier message: 18/01/2007, 05h46
  5. [MySQL] Appel d'une fonction au nom généré dynamiquement
    Par FrankOVD dans le forum PHP & Base de données
    Réponses: 14
    Dernier message: 10/06/2006, 14h36

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo