Creation et chargement de librairie partagee sous linux recherche en table

Soyez le premier à donner votre avis sur cette source.

Snippet vu 6 802 fois - Téléchargée 35 fois

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

Ajouter un commentaire

Commentaire

Messages postés
2
Date d'inscription
mercredi 8 décembre 2004
Statut
Membre
Dernière intervention
8 décembre 2004

Tu connais "indent" ?
Ca aurait été sympa pour une lecture plus confortable.

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.