puts - チャネルに書き出します。
puts ?-nonewline? ?channelId? string
stringで与えられた文字をchannelIdで与えられたチャネルに書き出します。
channelIdはTclの標準チャネル(stdoutかstderr)のようなオープンチャネル識別子でなければなりません。それは過去のopenやsocketの呼び出しから返される値か、Tcl拡張で提供したチャネル作成コマンドの結果です。
出力用にオープンされていなければなりません。
channelIdが指定されない場合は stdoutがデフォルトとなります。
putsは普通、stringの後に改行文字を出力します。この仕様は-nonewlineスイッチを指定することで抑制できます。
出力における改行文字はputsによってチャネルに対する-translation
オプションの現在の値に従って、プラットフォーム依存の行末尾シーケンスに翻訳されます
(たとえば、PCでは改行は普通carriage- return-linefeed
シーケンスに置き換えられます。Macintoshでは改行は常にcarriage-returnsに置き換えられます)。fconfigureが出力を変える方法に関する説明はfconfigureマニュアルエントリを参照してください。
Tclは内部的に出力をバッファするので、putsで書き出された文字は出力ファイルやデバイスに直ちに現れるとは限りません。普通
、Tclは出力をバッファがいっぱいになるか、チャネルがクローズされるまでに遅延させます。
flushコマンドで直ちに出力するよう強制することができます。
出力バッファがいっぱいになると、オペレーティングシステムによりputsコマンドは、通
常、すべてのバッファされたデータ
が出力として受け入れられるまでブロックします。 channelIdが非ブロックモードである場合、putsコマンドはオペレーティングシステムがデータを受け入れられなくてもブロックしません。
代わりにTclはデータをバッファし続け、対象となるファイルやデバイスが受け入れられるようになったときにバックグラウンドで書き出します。
Tclのアプリケーションは、非ブロック出力を動作させるために、Tclのイベントループを使う必要があります。そうでないと、Tclはファイルやデバイスがそれ以上の出力データを読めるようになったことに気づきません。非ブロックモードでは任意の大きさのデータがチャンネルでバッファされることができるので、多くのメモリを使われてしまいます。メモリの無駄
を避けるには、非ブロック入出力は、普通 fileeventコマンドを使ってイベント駆動方式で使われるべきです
(ファイルイベントを通してチャネルがもっとデータを読めるとの通知を受けなければputsを呼び出してはなりません)。
file, fileevent,
Tcl_StandardChannels
channel, newline,
output, write
Copyright © 1993 The Regents of the University of California.
Copyright © 1994-1996 Sun Microsystems, Inc.
Copyright © 1995-1997 Roger E. Critchlow Jr.
|