Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
786 connectés 

  FORUM HardWare.fr
  Programmation
  Perl

  [Perl] Programmation XS

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[Perl] Programmation XS

n°820974
burgergold
5$? va chez l'diable!
Posté le 11-08-2004 à 23:47:50  profilanswer
 

Bin voila, recherchant un max de fonctionnalité, je me suis lancé dans la comprésension de la programmation XS pour pouvoir me créer des librairies Perl à partir de librairie en C
 
j'ai tenté un truc au boulot tantot à l'aide d'un tuto, qui m'a permis de réécrire la fonction time() à partir de sys/time.h
 
donc je vais tentez d'ajouter à ce topic ce que j'apprends, si vous avez des conseils, des questions, posez les ici et on tentera de se démerder à plusieurs :D

mood
Publicité
Posté le 11-08-2004 à 23:47:50  profilanswer
 

n°821023
burgergold
5$? va chez l'diable!
Posté le 12-08-2004 à 01:43:32  profilanswer
 

bon premier truc que j'ai fait à l'aide d'un exemple
 


h2xs /usr/include/time.h


 
Modifier le contenu du Time.xs
 

Code :
  1. #include <unistd.h>
  2. #include <sys/time.h>
  3. #include "EXTERN.h"
  4. #include "perl.h"
  5. #include "XSUB.h"
  6. MODULE = Sys::Time           PACKAGE = Sys::Time
  7. double
  8. time()
  9.     CODE:
  10.         struct timeval tv;
  11.         gettimeofday(&tv,0);
  12.         RETVAL = tv.tv_sec + ((double) tv.tv_usec) / 1000000;
  13.     OUTPUT:
  14.         RETVAL


 


perl Makefile.pl
make
make install


 
on test
 


perl -e 'use Sys::Time; print Sys::Time::time() . "\n"; print time() . "\n";'


 
Le résultat
 


1092267679.73259
1092267679


 
une fonction time hyper précise
 
maintenant je cherche à comprendre le time.xs :D

n°821542
pospos
Posté le 12-08-2004 à 15:15:18  profilanswer
 

pourkoi n'utilise tu pas Inline::C  ?
 
ca donnerais un truc du genre :

Code :
  1. print "CORE::time:  ", time(),"\n";
  2. print "gettimofday: ", my_time(),"\n";
  3. use Inline C => <<'END_C_CODE';
  4. #include <unistd.h>
  5. #include <sys/time.h>
  6. struct timeval tv;
  7. double my_time() {
  8. gettimeofday(&tv,0);
  9. return tv.tv_sec + ((double) tv.tv_usec) / 1000000;
  10. }
  11. END_C_CODE


 
ya juste à le lancer, ca compile (la premiere fois seulement, apres ca ne recompile que si il y a un changement) et on peu en mettre partout dans son code!

n°821547
burgergold
5$? va chez l'diable!
Posté le 12-08-2004 à 15:18:18  profilanswer
 

pospos a écrit :

pourkoi n'utilise tu pas Inline::C  ?
 
ca donnerais un truc du genre :

Code :
  1. print "CORE::time:  ", time(),"\n";
  2. print "gettimofday: ", my_time(),"\n";
  3. use Inline C => <<'END_C_CODE';
  4. #include <unistd.h>
  5. #include <sys/time.h>
  6. struct timeval tv;
  7. double my_time() {
  8. gettimeofday(&tv,0);
  9. return tv.tv_sec + ((double) tv.tv_usec) / 1000000;
  10. }
  11. END_C_CODE


 
ya juste à le lancer, ca compile (la premiere fois seulement, apres ca ne recompile que si il y a un changement) et on peu en mettre partout dans son code!


 
je connaissais simplement aps, mais jvais y jetter un oeil

n°821610
burgergold
5$? va chez l'diable!
Posté le 12-08-2004 à 16:04:02  profilanswer
 

bon ca répond plus ou moins au besoin
 
en gros je vais avoir besoin de me monter un set de librairie pour appeler les fonctions d'un serveur de fichier pas très répendu, et les script devront rouler sur tous les serveurs (meme sans compilateur)
 
donc je préfère me compiler une librairie et en faire des appels que de mettre le code C direct dans le perl
 
mais merci tout de meme pour l'idée

n°821658
pospos
Posté le 12-08-2004 à 16:58:25  profilanswer
 

tu peux recuperer le XS généré par inline, ya une option comme ca

n°862935
burgergold
5$? va chez l'diable!
Posté le 02-10-2004 à 16:48:58  profilanswer
 

up
 
jsuis en train d'essayer de me faire un XS pour un module de process (procinfo.h)
 
le problème, c'est que j'ai X process, chaque process est un élément de struct procsinfo, et jsuis incapable de retourner le tableau complet des process
 
je sais pas trop comment traité ca, j'ai tenté des XPUSHs mais ca semble réservé à des types de bases (int, double, ...) et non à des struct :/

n°864188
pospos
Posté le 04-10-2004 à 14:25:26  profilanswer
 

ben il faut que tu decompose ta structure, en creant un hash par exemple, et en remplissant chaque entrée avec avec hv_store.
 
Sinon regarde du coté de Convert::Binary::C ( http://search.cpan.org/~mhx/Conver [...] inary/C.pm )
 
avec ce truc tu passe directement ta structure et tu la depack dans ton script (apres avoir scanné le .h pour analyser ta structure). Ce sera surement plus rapide à l'execution

n°864760
burgergold
5$? va chez l'diable!
Posté le 05-10-2004 à 05:22:54  profilanswer
 

ouais j'ai compris qu'il fallait que je joue avec l'API de perl dans mon xs pour créer un hash


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Perl

  [Perl] Programmation XS

 

Sujets relatifs
Commencer dans la programmationconcours/defi programmation
[Perl] est-il possible d'exécuter une application Perl sur un hébergeula programmation ... ?
[Perl] Détecter un changement d'heure[Perl] Nombre de jour entre 2 dates
Programmation ASPProgrammation asp
PERL - je n'y connais rien si qqun peut m'aiderPerl :: probleme d'array et de length [resolu]
Plus de sujets relatifs à : [Perl] Programmation XS


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR