sous Unix - Structures [Perl] - Programmation
Marsh Posté le 01-02-2002 à 17:58:32
Ok, j'ai reussi a trouve comment on lit une structure... 
Un petit unpack en binmode a l'air de marcher 
Le probleme est que je n'arrive pas a bien recuperer les donnees... 
Marsh Posté le 01-02-2002 à 21:01:00
ReplyMarsh Posté le 01-02-2002 à 22:23:13
open(WTMP , $file); 
/* ouverture du fichier */ 
 
$i = 0; 
 
while (sysread(WTMP, $buf, 36)) 
    { 
        ($wtmp[$i]{tty} , $wtmp[$i]{name} , $wtmp[$i]{host} , $wtmp[$i]{time}) = unpack('A8A8A16L4', $buf); /* regarde les options de unpack pour ca la je cherchais des champs specifiques  */
 */  
        $i++; 
    } 
Marsh Posté le 01-02-2002 à 22:31:31
voici un example du perlfaq5 de perl. 
 
Comment manipuler un fichier avec des enregistrements de longueur fixe? 
 
   Le  plus  efficace  est  d'utiliser pack() et unpack(). C'est plus rapide que d'utiliser substr() sur de nombreuses, nombreuses 
   chaînes. C'est plus lent pour seulement quelques unes. 
 
   Voici  un  morceau de code démontrant comment décompiler et recompiler ensuite des lignes formattées selon un schéma donné, ici 
   la sortie du programme ps, version Berkeley: 
    # exemple de ligne: 
    #   15158 p5  T      0:00 perl /home/ram/bin/scripts/now-what 
    $PS_T = 'A6 A4 A7 A5 A*'; 
    open(PS, "ps|" ); 
    print scalar <PS>; 
    while (<PS> ) { 
        ($pid, $tt, $stat, $time, $command) = unpack($PS_T, $_); 
        for $var (qw!pid tt stat time command!) { 
            print "$var: <$$var>\n"; 
        } 
        print 'line=', pack($PS_T, $pid, $tt, $stat, $time, $command), 
                "\n"; 
    } 
 
   Nous  avons  utilisé  $$var  d'une  façon  défendue  par  use  strict 'refs'. En effet, nous promouvons une chaîne au statut de 
   référence  sur  une  variable scalaire par le biais d'une référence symbolique. C'est justifié dans des petits programmes, mais 
   supporte  mal  l'utilisation  intensive.  D'autre  part,  cela ne fonctionne qu'avec des variables globales, par opposition aux 
   lexicales. 
Marsh Posté le 01-02-2002 à 17:00:27
Je voudrais lire dans le fichier /var/adm/wtmp les structures concernant les derniers login... Comment faire ?
Comment lit-on une structure ?
merci d'avance