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

bgerror, fconfigure, gets, puts, read

Dernière révision: 7.5


Index  Précédent  Suivant