## Tcl8.6.17/Tk8.6.17 Documentation > Tcl C API > CrtChnlHdlr

### Tcl/Tk Applications | Tcl Commands | Tk Commands | [incr Tcl] Package Commands | SQLite3 Package Commands | TDBC Package Commands | tdbc::mysql Package Commands | tdbc::odbc Package Commands | tdbc::postgres Package Commands | tdbc::sqlite3 Package Commands | Thread Package Commands | Tcl C API | Tk C API | [incr Tcl] Package C API | TDBC Package C API

  NAME
    Tcl_CreateChannelHandler, Tcl_DeleteChannelHandler — 通信路が読出し可能又は書込み可能になった時に手続函数を呼ぶ call a procedure when a channel becomes readable or writable
  SYNOPSIS
    #include <tcl.h>
    void
    Tcl_CreateChannelHandler(channel, mask, proc, clientData)
    void
    Tcl_DeleteChannelHandler(channel, proc, clientData)
  ARGUMENTS
  DESCRIPTION
  SEE ALSO
  KEYWORDS

### NAME

Tcl_CreateChannelHandler, Tcl_DeleteChannelHandler — 通信路が読出し可能又は書込み可能になった時に手続函数を呼ぶ call a procedure when a channel becomes readable or writable

### SYNOPSIS

#include <tcl.h>
void
Tcl_CreateChannelHandler(channel, mask, proc, clientData)
void
Tcl_DeleteChannelHandler(channel, proc, clientData)

### ARGUMENTS

Tcl_Channel channel (入力in)
  Tcl_CreateChannel によって返されたようなTcl 通信路｡ Tcl channel such as returned by Tcl_CreateChannel.

int mask (入力in)
  その元で proc が呼ばれる条件: TCL_READABLE と TCL_WRITABLE と TCL_EXCEPTION との､論理和の組合せ｡零値は既存の処理機能が臨時的に使えないことを指定する｡ Conditions under which proc should be called: OR-ed combination of TCL_READABLE, TCL_WRITABLE and TCL_EXCEPTION. Specify a zero value to temporarily disable an existing handler.

Tcl_FileProc *proc (入力in)
  何時であれ mask に指定される条件に合う channel に指定される通信路を起動する為の手続函数｡ Procedure to invoke whenever the channel indicated by channel meets the conditions specified by mask.

ClientData clientData (入力in)
  proc に渡される任意の１語値｡ Arbitrary one-word value to pass to proc.

### DESCRIPTION

Tcl_CreateChannelHandler は､何時であれ channel によって識別される通信路上に入力か出力が可能になった時､或は､何時であれ､ channel に関して例外的条件が実在する時､近い将来､呼ばれる為に proc に就いて手配する｡その条件下で proc が起動される重要な条件は､ mask 引数によって指定される｡通信路について読出し可能又は書き込み可能が意味する事の正確な記述に就いては取扱説明書の fileevent 見出しを参照されたい｡ Proc は次の原型に従わねばならない: Tcl_CreateChannelHandler arranges for proc to be called in the future whenever input or output becomes possible on the channel identified by channel, or whenever an exceptional condition exists for channel. The conditions of interest under which proc will be invoked are specified by the mask argument. See the manual entry for fileevent for a precise description of what it means for a channel to be readable or writable. Proc must conform to the following prototype:

    typedef void Tcl_ChannelProc(
            ClientData clientData,
            int mask);

その clientData 引数は処理機能が作成された時 Tcl_CreateChannelHandler に渡された値と同じである｡典型的には､ clientData は通信路に関する応用譜固有の情報を含むデータ構造を指す｡ mask は整数の篩であって､通信路について実際に存在する条件を要求する; それは処理機能が作成された時の Tcl_CreateChannelHandler への mask 引数のビットの部分集合を含む｡ 　　　 The clientData argument is the same as the value passed to Tcl_CreateChannelHandler when the handler was created. Typically, clientData points to a data structure containing application-specific information about the channel. Mask is an integer mask indicating which of the requested conditions actually exists for the channel; it will contain a subset of the bits from the mask argument to Tcl_CreateChannelHandler when the handler was created.

それぞれの通信路処理機能は channel と proc と clientData の唯一の組合せにより識別される｡同一の channel と proc と clientData がない限り何種類でも処理機能があり得る｡ channel と proc と clientData について､既に処理がある時に､もし Tcl_CreateChannelHandler が起動された場合は､新しい処理機能は作成されない; 代りに､既存の処理機能の為の mask が変更される｡ 　　　　　 Each channel handler is identified by a unique combination of channel, proc and clientData. There may be many handlers for a given channel as long as they do not have the same channel, proc, and clientData. If Tcl_CreateChannelHandler is invoked when there is already a handler for channel, proc, and clientData, then no new handler is created; instead, the mask is changed for the existing handler.

Tcl_DeleteChannelHandler は channel と proc と clientData により識別される通信路処理機能を削除する; そのような処理機能が実在しない場合､この呼出しは効果を有さない｡ Tcl_DeleteChannelHandler deletes a channel handler identified by channel, proc and clientData; if no such handler exists, the call has no effect.

通信路処理機能は Tcl 行事仕組み経由で起動されるので､それらは行事駆動される応用譜内でのみ便利である｡註意すべきは､ proc への mask 引数内で指定されている条件は proc が起動された時には最早実在しないかもしれない: 譬えば､もし同じ通信路上に TCL_READABLE の為の二つの処理機能がある場合､第１の処理機能は利用できる全ての入力を消費できるので､第２の処理機能が起動された時には､通信路は､最早､読出し可能ではない｡この理由の為､行事処理機能が存在する通信路上には､非同期入出力の使用が便利である｡ 　　　 Channel handlers are invoked via the Tcl event mechanism, so they are only useful in applications that are event-driven. Note also that the conditions specified in the mask argument to proc may no longer exist when proc is invoked: for example, if there are two handlers for TCL_READABLE on the same channel, the first handler could consume all of the available input so that the channel is no longer readable when the second handler is invoked. For this reason it may be useful to use nonblocking I/O on channels for which there are event handlers.

### SEE ALSO

Notifier, Tcl_CreateChannel, Tcl_OpenFileChannel, vwait

### KEYWORDS

blocking, callback, channel, events, handler, nonblocking
Copyright © 1996 Sun Microsystems, Inc.