fileevent Commandes Internes Tcl
NOM
fileevent - Exécute un script quand un canal devient lisible ou inscriptible
SYNTAXE
fileevent channelId readable ?script?
fileevent channelId writable ?script
DESCRIPTION
Cette commande est utilisée pour créer des
file event handlers Un gestionnaire d'évènement de fichier est une liaison entre un canal et un script, Ainsi le script est évalué chaque fois que le canal devient lisible ou inscriptible. Les gestionnaires d'évènement de fichier sont plus couramment utilisés pour autoriser les données à être reçues d'un autre processus sur une base pilotée par évènement, permettant au récepteur de continuer à interagir avec l'utilisateur en attendant que les données arrivent. Si une application appelle
gets ou
read sur un canal bloquant quand il n'y a pas de données entrantes disponibles, le processus bloquera; jusqu'a ce que les données entrantes arrivent, il ne sera pas capable de prendre en charge d'autres évènements, donc il apparaitra à l'utilisateur "gelé" Avec
fileevent, le processus peut savoir quand les données sont présentes et appeller seulement
gets ou
read quand elles ne bloqueront pas.
L'argument
channelId à
fileevent se refère à un canal ouvert, tel que la valeur de retour d'une précédente commande
open ou
socket. Si l'argument
script est spécifié, alors
fileevent crée un nouveau gestionnaire d'évènement
script qui sera évalué chaque fois que le canal devient lisible ou inscriptible (dépendant du second argument de
fileevent). Dans ce cas
fileevent retourne une chaîne vide. Les gestionnaires d'évènements
readable et
writable sont indépendants, et peuvent être créés et effacés séparément. Néanmoins, il peut y avoir au plus un gestionnaire
readable et
writable pour un fichier à
un instant donné dans un interpréteur donné. Si
fileevent est appelé quand le gestionnaire spécifié existe déjà dans l'interpréteur d'appel, le nouveau script remplace l'ancien.
Si l'argument script n'est pas spécifié, fileevent retourne le script courant de channelId, ou une chaîne vide s'il n'y en a aucun. Si l'argument script est spécifié comme chaîne vide alors le gestionnaire d'évènement est effacé, ainsi aucun script ne sera appelé. Un gestionnaire d'évènement de fichier est aussi effacé automatiquement chaque fois que son canal est fermé ou son interpréteur effacé.
Un canal est consideré lisible si il y a des données non lues disponibles sur le périphérique sous-jacent. Un canal est aussi consideré lisible si il y a des données non lues dans un tampon d'entrée, excepté dans le cas spécial où la plus récente tentative de lire à partir du canal comme un appel à
gets qui n'a pas pu trouver une ligne complète dans le tampon d'entrée. Cette fonctionnalité permet à un fichier d'être lu une ligne à la fois en mode non bloquant en utilisant les évènements. Un canal est aussi consideré lisible si une fin de fichier ou une condition d'erreur est présente sur le fichier ou le périphérique sous-jacent. Il est important pour le
script de vérifier ces conditions et de les gérer opportunément par exemple, s'il n'y a pas de verification spéciale pour la fin du fichier, une boucle infinie peut se produire si le
script ne lit pas de données, retourne, et est immédiatement appelé de nouveau.
Un canal est consideré inscriptible si au moins un octet de données peut être écrit sur le fichier ou périphérique sous-jacent sans bloquer, ou si une condition d'erreur est présente sur le fichier ou périphérique sous-jacent.
Les I/O pilotées par évènements fonctionnent mieux avec les canaux placés en mode non bloquant avec la commande
fconfigure. En mode bloquant, une commande
puts peut bloquer si vous lui donnez plus de données que le fichier ou périphérique sous-jacent peut accepter, et une commande
gets ou
read bloquera si vous tentez de lire plus de données que prètes aucun événement ne sera traité pendant que les commandes bloquent. En mode non bloquant
puts,
read, et
gets ne bloquent jamais. Voir la documentation de ces commandes individuelles pour plus d'informations sur comment elles gèrent les canaux bloquants et non bloquants.
Le script pour un évènement fichier est exécuté au niveau global (en dehors du contexte de quelconque fonction Tcl) dans l'interpréteur dans lequel la commande
fileevent a été appelée. Si une erreur se produit pendant l'exécution du script alors le mécanisme
bgerror est utilisé pour rapporter l'erreur. De plus, le gestionnaire d'évènement fichier est effacé si jamais il retourne une erreur, c'est fait de manière à empêcher les boucles infinies dues aux gestionnaires bogués
CREDITS
fileevent est basée sur la commande addinput créée par Mark Diekhans
VOIR EGALEMENT
Dernière révision: 7.5