StdChannels.3
上传用户:rrhhcc
上传日期:2015-12-11
资源大小:54129k
文件大小:5k
- '"
- '" Copyright (c) 2001 by ActiveState Corporation
- '"
- '" See the file "license.terms" for information on usage and redistribution
- '" of this file, and for a DISCLAIMER OF ALL WARRANTIES.
- '"
- '" RCS: @(#) $Id: StdChannels.3,v 1.8 2002/11/15 15:34:17 dkf Exp $
- '"
- .so man.macros
- .TH "Standard Channels" 3 7.5 Tcl "Tcl Library Procedures"
- .BS
- '" Note: do not modify the .SH NAME line immediately below!
- .SH NAME
- Tcl_StandardChannels - How the Tcl library deals with the standard channels
- .BE
- .SH DESCRIPTION
- .PP
- This page explains the initialization and use of standard channels in
- the Tcl library.
- .PP
- The term fIstandard channelsfR comes out of the Unix world and
- refers to the three channels automatically opened by the OS for
- each new application. They are fBstdinfR, fBstdoutfR and
- fBstderrfR. 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.
- .PP
- Tcl generalizes this concept in a cross-platform way and
- exposes standard channels to the script level.
- .SH APIs
- .PP
- The public API procedures dealing directly with standard channels are
- fBTcl_GetStdChannelfR and fBTcl_SetStdChannelfR. Additional public
- APIs to consider are fBTcl_RegisterChannelfR,
- fBTcl_CreateChannelfR and fBTcl_GetChannelfR.
- .SH "INITIALIZATION OF TCL STANDARD CHANNELS"
- .PP
- 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.
- .PP
- 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.)
- .TP
- 1)
- A single standard channel is initialized when it is explicitly
- specified in a call to fBTcl_SetStdChannelfR. The state of the
- other standard channels are unaffected.
- .sp
- Missing platform-specific standard channels do not matter here. This
- approach is not available at the script level.
- .TP
- 2)
- All uninitialized standard channels are initialized to
- platform-specific default values:
- .RS
- .TP
- (a)
- when open channels are listed with fBTcl_GetChannelNamesfR (or the
- fBfile channelsfR script command), or
- .TP
- (b)
- when information about any standard channel is requested with a call
- to fBTcl_GetStdChannelfR, or with a call to fBTcl_GetChannelfR
- which specifies one of the standard names (fBstdinfR, fBstdoutfR
- and fBstderrfR).
- .RE
- .sp
- .RS
- 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.
- .RE
- .TP
- 3)
- All uninitialized standard channels are initialized to
- platform-specific default values when a user-requested channel is
- registered with fBTcl_RegisterChannelfR.
- .sp
- 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.
- .PP
- .SH "RE-INITIALIZATION OF TCL STANDARD CHANNELS"
- .PP
- Once a Tcl standard channel is initialized through one of the methods
- above, closing this Tcl standard channel will cause the next call to
- fBTcl_CreateChannelfR to make the new channel the new standard
- channel, too. If more than one Tcl standard channel was closed
- fBTcl_CreateChannelfR will fill the empty slots in the order
- fBstdinfR, fBstdoutfR and fBstderrfR.
- .PP
- fBTcl_CreateChannelfR 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.
- .SH tclsh
- .PP
- The Tcl shell (or rather fBTcl_MainfR) uses method 2 to initialize
- the standard channels.
- .SH wish
- .PP
- The windowing shell (or rather fBTk_MainExfR) uses method 1 to
- initialize the standard channels (See fBTk_InitConsoleChannelsfR)
- on non-Unix platforms. On Unix platforms, fBTk_MainExfR implicitly
- uses method 2 to initialize the standard channels.
- .SH "SEE ALSO"
- Tcl_CreateChannel(3), Tcl_RegisterChannel(3), Tcl_GetChannel(3), Tcl_GetStdChannel(3), Tcl_SetStdChannel(3), Tk_InitConsoleChannels(3), tclsh(1), wish(1), Tcl_Main(3), Tk_MainEx(3)
- .SH KEYWORDS
- standard channels