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 ?
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
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.
Dans l'article <slrnf4gekd.fca.e.vancleef@cayenne.nfrance.com>,
Edwin Vancleef <e.vancleef@nospam.invalid> é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.
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.
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.
In article <20070514111449$5794@prunille.vinc17.org>,
Vincent Lefevre <vincent+news@vinc17.org> wrote:
Dans l'article <slrnf4gekd.fca.e.vancleef@cayenne.nfrance.com>,
Edwin Vancleef <e.vancleef@nospam.invalid> é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.
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.
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 ?"
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
On May 14, 12:31 pm, Edwin Vancleef <e.vancl...@nospam.invalid> 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 ?"
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.
======================== ===============
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. ======================== ===============