チャンネルが読出し可能、あるいは書込可能になったらスクリプトを実行します。本コマンドはファイルイベントハンドラを作成するために使われます。ファイルイベントハンドラとは、チャンネルが読出し可能か書込み可能になるたびにスクリプトが評価されるといったチャンネルとスクリプトの間の結び付きです。的にイベント駆動ベースで他のプロセスからデータを受け取るために使われます。これによりレシーバはデータが到着するのを待つ間にもユーザとの対話を継続できます。readを呼び出した際、入力データが届いていなければ、プロセスはブロックします。入力データが到着するまで、他のイベントへのサービスができなくなり、ユーザから見ると"凍結状態"にあります。readを呼び出すことができます。引数が指定されると、fileeventは新しいイベントハンドラを作成します。(これはfileeventの2番目の引数に依存する)になるたびに評価されます。この場合はfileeventは空文字列を返します。作成、削除することができます。あるインタプリタの特定の時点では一つのファイルに対して多くても1つの読込みハンドラと1つの書込みハンドラだけが存在しています。リタに指定されたハンドラが既に存在する場合、新しいスクリプトは古いものに取って代わります。channelIdの現在のスクリプトを返し、または存在しない場合は空文字列を返します。引数が空文字列として指定される場合、イベントハンドラは削除され、呼び出されるスクリプトはなくなります。ファイルイベントハンドラはチャンネルがクローズされた時点、及びインタプリタが削除されるたびに、自動的に削除されます。バックグランドにあるデバイスにまだ読まれていないデータが存在する場合には、チャンネルは読出し可能と見なされます。入力バッファにまだ読まれていないデータが存在する場合も、チャネルは読出し可能と見なされます。この特徴はイベントを使って非ブロックモードで一度に一行づつファイルを読込むことを可能にしています。バックグランドにあるファイルやデバイスがファイルの終わりやエラー状態にあるときも、チャネルは読出し可能と見なされます。これらの状態をチェックし、適切に扱うことはscriptにとって重要なことです。チェックがなければ、scriptがデータを読込めずに制御を戻し、直ちに再び呼び出される、という無限ループが起こる恐れがあります。対象となるファイルやデバイスで少なくても1バイトのデータがブロックされることなく書込みできる場合、及び対象となるファイルやデバイスがエラー状態にある場合には、チャンネルは書込み可能だと見なされます。ドに置かれているチャンネルで最もうまく動作します。多くのデータを与えられるとブロックします。readコマンドは準備されているデータより多くを読もうと試みるとブロックします。コマンドがブロックされている間はいかなるイベントも処理されません。readそしてgetsは決してブロックしません。ブロック、非ブロックチャンネルがどのように扱われるかについての情報は、個々のコマンドのドキュメントを参照してください。ファイルイベントのためのスクリプトはfileeventコマンドが呼び出されたインタプリタにおけるグローバルレベル(あらゆるTclプロシージャの文脈の外側で)で実行されます。スクリプトの実行中にエラーが発生する場合、bgerrorメカニズムでエラーを報告します。エラーを返すと、ファイルイベントハンドラは削除されます。これはバグを含むハンドラによる無限ループを防ぐためです。$chan]この設定において、$chanが読出し可能になるたびに、GetDataはチャネルを引数として呼出されます。よって作成されたaddinputコマンドに基づくものです。