Tcl_StandardChannels

ReferenceTOPKeywords

コマンド

Tcl_StandardChannels - Tclライブラリの各種標準チャネルの扱い方。

記述

このページはTclライブラリで標準チャネルの初期化及び使用方法を説明します。

標準チャネル(standard channels)という用語の発祥はUnixの世界です。全ての新規アプリケーションのためにOSによって自動的に開かれた3つのチャネルを意味します。それらはstdinstdout、及びstderrです。1番目はアプリケーションが読むことができる標準入力です。他の2つは書き込みできるチャネルで、1つは標準出力のためのもので、もう1つはエラーメッセージのためのものです。

Tclは異なるプラットフォームでこの概念を一般化し標準チャネルをスクリプトレベルにさらしました。

APIs

直接標準チャネルを扱う共通のAPIプロシージャは Tcl_GetStdChannel、及び Tcl_SetStdChannelです。 追加の共通APIsとしては、 Tcl_RegisterChannelTcl_CreateChannel、及びTcl_GetChannelが考えられます。

TCL標準チャネルの初期化

標準チャネルは3つのケースでTclライブラリによって初期化されます。明白に要求されるのはチャネル情報を返す前に必要とされるとき、新しいチャネルの登録時に必要とされるときです。

これらのケースの使い分けはプラットホーム依存の「利用可能ではない」標準チャネルを扱う時の処理によって分かれます。「利用可能ではない」とは、チャネルが正しくオープンできない場合を指します。例えば、Windows NTサービスとしてのTclアプリケーションの場合です。

1) Tcl_SetStdChannelコールにより明白に指定されたとき、1つの標準チャネルは初期化されます。他の標準チャネルの状態は影響されません。

プラットホーム依存の標準チャネルが見つからないというケースはありえません。 このアプローチはスクリプトレベルでは利用できないからです。

2)全ての初期化されていない標準チャネルは、プラットホーム特定のデフォルト値で初期化されます。
 2-1 オープンチャネルが Tcl_GetChannelNames(もしくはfile channelsスクリプトコマンドと共に)によってリストされるとき。
 2-2 あらゆる標準チャネルに関する情報が Tcl_GetStdChannelコールによって要求されるとき、
     もしくは 標準名前(stdin stdout及びstderr)のうちの1つがTcl_GetChannelコールによって指名で要求されるとき。

プラットホーム特定の標準チャネルが見つからない場合には、Tclの標準チャネルは初期化された後、即座に閉じられたとみなします。これはアプリケーションによって開かれた最初の3つのTclチャネルがTcl標準チャネルとして指定されることを意味します。

3)ユーザーに要求されたチャネルが Tcl_RegisterChannelにより登録されたとき、全ての初期化されていない標準チャネルはプラットホーム特定のデフォルト値に初期化されます。
「利用可能ではない」プラットホーム特定の標準チャネルの場合は、(その作成がTclの標準チャネルの初期化を引き起こしたチャネル)正常なチャネルとみなされます。アプリケーションによって開かれた次の3つのTclチャネルはTclの標準チャネルとしてみなされます。すなわち、アプリケーションによって開かれた最初の4つのTclチャネルのうち2番目から4番目はTclの標準チャネルとして使用されます。

Tcl標準チャネルの再初期化

いったんTclの標準チャネルが上の方法のうちの1つによって初期化されれば、このTclの標準チャネルを閉じると、次のTcl_CreateChannelコールを呼び出されて作成される新しいチャネルは、同時に新しい標準チャネルとして使われます。1つ以上のTcl標準チャネルが閉じられた場合、後継する Tcl_CreateChannelコールがstdinstdout、及びstderrの順で空きチャネルスロットを埋めます。

Tcl_CreateChannelは埋めるべき空きチャネルスロットがそれまでに初期化されなかった場合、そのスロットを再初期化しません。アプリケーションに初期化の方法1を使えるようにチャンスを与えるためです。すなわち、アプリケーション自身のTcl標準チャネルを作成・指定できるようにします。

tclsh

Tclシェル(Tcl_Main) は、 標準チャネルを初期化するには方法2を使います。

理想

Windowsタイプシェル(Tk_MainEx) は非‐Unixプラットホームで標準チャネル (Tk_InitConsoleChannelsを参照)を初期化するために方法1を使います。Unixプラットホームでは、Tk_MainExは標準チャネルを初期化するために方法2を使います。

参照

Tcl_CreateChannel, Tcl_RegisterChannel, Tcl_GetChannel, Tcl_GetStdChannel, Tcl_SetStdChannel, Tk_InitConsoleChannels, tclsh, wish, Tcl_Main, Tk_MainEx

キーワード

standard channels


Copyright © 2001 by ActiveState Corporation Copyright © 1995-1997 Roger E. Critchlow Jr.