Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

tail -f

3 réponses
Avatar
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 ?

3 réponses

Avatar
Vincent Lefevre
Dans l'article ,
Edwin Vancleef écrit:

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 - Web: <http://www.vinc17.org/>
100% accessible validated (X)HTML - Blog: <http://www.vinc17.org/blog/>
Work: CR INRIA - computer arithmetic / Arenaire project (LIP, ENS-Lyon)

Avatar
espie
In article <20070514111449$,
Vincent Lefevre <vincent+ wrote:
Dans l'article ,
Edwin Vancleef écrit:

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.


Avatar
Klaus
On May 14, 12:31 pm, Edwin Vancleef wrote:
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