tail -f

Le
Edwin Vancleef
Salut,

Est-il possible de coder l'équivalent du -f de "tail -f" en perl ? Sans
installer aucune librairie ? Où est-ce un truc qui necessite des fonctions
internes ?
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Vincent Lefevre
Le #145295
Dans l'article Edwin Vancleef
Est-il possible de coder l'équivalent du -f de "tail -f" en perl ? Sans
installer aucune librairie ? Où est-ce un truc qui necessite des fonctions
internes ?


Il suffit d'utiliser les fonctions standard sur les fichiers.

--
Vincent Lefèvre 100% accessible validated (X)HTML - Blog: Work: CR INRIA - computer arithmetic / Arenaire project (LIP, ENS-Lyon)

espie
Le #145294
In article Vincent Lefevre
Dans l'article Edwin Vancleef
Est-il possible de coder l'équivalent du -f de "tail -f" en perl ? Sans
installer aucune librairie ? Où est-ce un truc qui necessite des fonctions
internes ?


Il suffit d'utiliser les fonctions standard sur les fichiers.


Oui et non, c'est pas si clair que ca... si je regarde l'implementation
d'un tail -f sur mon OpenBSD, elle utilise l'interface kqueue pour etre
un tantinet plus efficace...

Je vois que la variante des coreutils se contente de betes stat, mais
il serait tout a fait possible d'avoir la-aussi quelque chose de plus
efficace en utilisant inotify.


Klaus
Le #145293
On May 14, 12:31 pm, Edwin Vancleef
Est-il possible de coder l'équivalent du -f de "tail -f" en perl ?


Oui, voir perlfaq5, "Comment écrire un tail -f en perl ?"

http://perl.enstimac.fr/DocFr/perlfaq5.html
paragraphe "Comment écrire un tail -f en perl ?"

======================== ===============
Essayez d'abord :
seek(GWFILE, 0, 1);

La ligne seek(GWFILE, 0, 1) ne change pas la position
courante, mais elle efface toute indication de fin de
fichier sur le descripteur, de sorte que le prochain
<GWFILE> conduira Perl à essayer de nouveau de lire
quelque chose.

Si cela ne fonctionne pas (cela demande certaines
propriétés à votre implémentation stdio), alors vous
pouvez essayer quelque chose comme :

for (;;) {
for ($curpos = tell(GWFILE); <GWFILE>;
$curpos = tell(GWFILE)) {
# cherche des trucs, et mets-les quelque part
}
# attendre un peu
seek(GWFILE, $curpos, 0); # retourne où nous en étions
}

Si cela ne marche pas non plus, regardez du côté du module
POSIX. POSIX définit la fonction clearerr() qui peut ôter
la condition de fin de fichier sur le descripteur. La
méthode: lire jusqu'à obtenir une fin de fichier,
clearerr(), lire la suite. Nettoyer, rincer, et ainsi de
suite.

Il existe aussi un module File::Tail sur le CPAN.
======================== ===============



--
Klaus


Publicité
Poster une réponse
Anonyme