Provided by: tcl8.6-doc_8.6.14+dfsg-1build1_all bug

NAME

       Tcl_StandardChannels - How the Tcl library deals with the standard channels
________________________________________________________________________________________________________________

DESCRIPTION

       This page explains the initialization and use of standard channels in the Tcl library.

       The  term  standard  channels  comes out of the Unix world and refers to the three channels automatically
       opened by the OS for each new application. They are stdin, stdout and stderr. The first is  the  standard
       input  an application can read from, the other two refer to writable channels, one for regular output and
       the other for error messages.

       Tcl generalizes this concept in a cross-platform way and exposes standard channels to the script level.

   APPLICATION PROGRAMMING INTERFACES
       The  public  API  procedures  dealing  directly  with  standard  channels   are   Tcl_GetStdChannel   and
       Tcl_SetStdChannel.  Additional  public  APIs  to  consider are Tcl_RegisterChannel, Tcl_CreateChannel and
       Tcl_GetChannel.

INITIALIZATION OF TCL STANDARD CHANNELS

       Standard channels are initialized by the Tcl library in three  cases:  when  explicitly  requested,  when
       implicitly required before returning channel information, or when implicitly required during registration
       of a new channel.

       These  cases  differ  in how they handle unavailable platform- specific standard channels.  (A channel is
       not “available” if it could not be successfully opened; for example,  in  a  Tcl  application  run  as  a
       Windows NT service.)

       1)     A  single  standard  channel  is  initialized  when  it  is  explicitly  specified  in  a  call to
              Tcl_SetStdChannel.  The states of the other standard channels are unaffected.

              Missing platform-specific standard channels do not matter here. This approach is not available  at
              the script level.

       2)     All uninitialized standard channels are initialized to platform-specific default values:

              (a)    when  open  channels  are  listed  with  Tcl_GetChannelNames  (or  the file channels script
                     command), or

              (b)    when information about any standard channel is requested with a call to  Tcl_GetStdChannel,
                     or  with  a call to Tcl_GetChannel which specifies one of the standard names (stdin, stdout
                     and stderr).

              In case of missing platform-specific standard channels, the Tcl standard channels  are  considered
              as  initialized  and  then  immediately  closed. This means that the first three Tcl channels then
              opened by the application are designated as the Tcl standard channels.

       3)     All uninitialized standard channels are initialized to platform-specific  default  values  when  a
              user-requested channel is registered with Tcl_RegisterChannel.

       In  case  of  unavailable  platform-specific  standard  channels  the  channel  whose creation caused the
       initialization of the Tcl standard channels is made a normal channel.  The next three Tcl channels opened
       by the application are designated as the Tcl standard channels.  In other words, of the  first  four  Tcl
       channels opened by the application the second to fourth are designated as the Tcl standard channels.

RE-INITIALIZATION OF TCL STANDARD CHANNELS

       Once  a  Tcl  standard channel is initialized through one of the methods above, closing this Tcl standard
       channel will cause the next call to Tcl_CreateChannel to make the new channel the new  standard  channel,
       too.  If more than one Tcl standard channel was closed Tcl_CreateChannel will fill the empty slots in the
       order stdin, stdout and stderr.

       Tcl_CreateChannel will not try to reinitialize an empty slot if that slot was not initialized before.  It
       is  this  behavior  which enables an application to employ method 1 of initialization, i.e. to create and
       designate their own Tcl standard channels.

SHELL-SPECIFIC DETAILS

   tclsh
       The Tcl shell (or rather the function Tcl_Main, which forms the core of the shell's implementation)  uses
       method 2 to initialize the standard channels.

   wish
       The   windowing  shell  (or  rather  the  function  Tk_MainEx,  which  forms  the  core  of  the  shell's
       implementation) uses method 1 to initialize the standard channels (See  Tk_InitConsoleChannels)  on  non-
       Unix  platforms.   On  Unix  platforms,  Tk_MainEx  implicitly  uses  method 2 to initialize the standard
       channels.

SEE ALSO

       Tcl_CreateChannel(3tcl),   Tcl_RegisterChannel(3tcl),   Tcl_GetChannel(3tcl),    Tcl_GetStdChannel(3tcl),
       Tcl_SetStdChannel(3tcl), Tk_InitConsoleChannels(3tk), tclsh(1), wish(1), Tcl_Main(3tcl), Tk_MainEx(3tk)

KEYWORDS

       standard channels

Tcl                                                    7.5                               Standard Channels(3tcl)