Creation et chargement de librairie partagee sous linux recherche en table

Contenu du snippet

Exemple de création et de chargement dynamique d'une librairie partagée.
Recherche d'une chaîne dans un tableau de structures imbriquées. Ce programme est sensiblement plus dense que l'autre programme montrant cette même procédure .

Source / Exemple :


#include <dlfcn.h>
#include <stdio.h>

void*(*lib_search_call)(void*key,void*base,int arg3,int arg4,int arg5,int arg6,
                               int arg7);

void call_sort;

  struct  ele_m
{
  float *member_x;
  float *member_y;
  struct obj_2
  {
   char *member_lin_one ;
   char *member_lin__ref ;
   }         struc_t ;
 } ;

typedef struct ele_m elem ;
array_enr[10] ;

int main()
{
  
int i;
float *val_1,val_2;
char *val_3, *search, *val_4;
int MAX,n_elem,Taille_struct,Taille_ref;
void*retour;
int *rt;
 
MAX=10;
n_elem=1;

for(i=0;i<MAX;i++)
{
printf("enregistrement %d\n", i);
printf("\n");
printf("valeur **donnée 1 structure** entrer un nombre :");
scanf("%f", &val_1);
printf("valeur **donnée 2 structure** entrer un nombre : ");
scanf("%f", &val_2);
printf("valeur **donnée 3 structure** entrer une chaîne -4c-: ");
scanf("%s", &val_3);
printf("valeur **donnée 4 structure** entrer une chaîne -4c-: ");
scanf("%s", &val_4);

array_enr[i].member_x=val_1;
array_enr[i].member_y=val_2;
array_enr[i].struc_t.member_lin_one=val_3;
array_enr[i].struc_t.member_lin__ref=val_4;

}    

printf("**recherche**entrer une chaîne -4c- :");
scanf("%s", &search);
Taille_struct=16;
Taille_ref=1;
if(call_sort=dlopen("/usr/local/lib/lib.so.x.x",RTLD_LAZY))
{
  lib_search_call=dlsym(call_sort,"lib_search");
  retour=(*lib_search_call)(&search,&array_enr[0].struc_t.member_lin__ref, MAX,
                                   n_elem,Taille_struct,Taille_ref,3);
  rt=retour;
  printf("position : %d", *rt);
 }
}

/*

  • code lib
  • Ne pas insérer dans le programme principal
  • /
void*lib_search(void*key,void*base,int arg3,int arg4,int arg5,int arg6, int arg7) { char*v_receive_char,*sup_char; void *ptr; int middle,right,left; int i, j; switch (arg6) { case 1: v_receive_char=key; /* Cette procédure n'est utile que si vous tentez une première évaluation concernant l'ordre de tri croissant ou décroissant completer éventuellement... */ default : break ; } right = arg3-1; left=0; TROUVE=FALSE ; while((right<left)&&(!TROUVE)) { middle=(right+left)/2; sup_char=base+(middle*arg5*arg4) ; v_receive_char=key ; j=0; while((*sup_char==*v_receive_char)&&(j<arg7)) { j++; sup_char++; v_receive_char++; } if(*sup_char==*v_receive_char) { TROUVE=TRUE; } else if(*v_receive_char>*sup_char) { left=middle+1; } else { right=middle-1; } } ptr=&middle; return ptr; }

Conclusion :


Pour compilation voir commentaire même source NIVEAU 2

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.