summaryrefslogtreecommitdiffstats
path: root/doc/chan.n
diff options
context:
space:
mode:
Diffstat (limited to 'doc/chan.n')
-rw-r--r--doc/chan.n38
1 files changed, 26 insertions, 12 deletions
diff --git a/doc/chan.n b/doc/chan.n
index 12b2c81..81aa9f4 100644
--- a/doc/chan.n
+++ b/doc/chan.n
@@ -1,4 +1,4 @@
-'\"
+'\"
'\" Copyright (c) 2005-2006 Donal K. Fellows
'\"
'\" See the file "license.terms" for information on usage and redistribution
@@ -200,7 +200,7 @@ generate an error.
.TP
\fB\-translation\fR \fImode\fR
.TP
-\fB\-translation\fR \fB{\fIinMode outMode\fB}\fR
+\fB\-translation\fR \fB{\fIinMode outMode\fB}\fR
.
In Tcl scripts the end of a line is always represented using a single
newline character (\en). However, in actual files and devices the end
@@ -240,7 +240,7 @@ all platforms Tcl chooses \fBcrlf\fR, for all Unix flavors, it chooses
\fBcrlf\fR. The default setting for \fB\-translation\fR is \fBauto\fR
for both input and output.
.TP
-\fBbinary\fR
+\fBbinary\fR
.
No end-of-line translations are performed. This is nearly identical
to \fBlf\fR mode, except that in addition \fBbinary\fR mode also sets
@@ -287,12 +287,14 @@ slow destinations like network sockets.
.RS
.PP
The \fBchan copy\fR command transfers data from \fIinputChan\fR until
-end of file or \fIsize\fR bytes have been transferred. If no
-\fB\-size\fR argument is given, then the copy goes until end of file.
-All the data read from \fIinputChan\fR is copied to \fIoutputChan\fR.
-Without the \fB\-command\fR option, \fBchan copy\fR blocks until the
-copy is complete and returns the number of bytes written to
-\fIoutputChan\fR.
+end of file or \fIsize\fR bytes or characters have been transferred;
+\fIsize\fR is in bytes if the two channels are using the same encoding,
+and is in characters otherwise. If no \fB\-size\fR argument is given,
+then the copy goes until end of file. All the data read from
+\fIinputChan\fR is copied to \fIoutputChan\fR. Without the
+\fB\-command\fR option, \fBchan copy\fR blocks until the copy is
+complete and returns the number of bytes or characters (using the same
+rules as for the \fB\-size\fR option) written to \fIoutputChan\fR.
.PP
The \fB\-command\fR argument makes \fBchan copy\fR work in the
background. In this case it returns immediately and the
@@ -530,8 +532,8 @@ only those channel names that match it (according to the rules of
.
Depending on whether \fImode\fR is \fBinput\fR or \fBoutput\fR,
returns the number of
-bytes of input or output (respectively) currently buffered
-internally for \fIchannelId\fR (especially useful in a readable event
+bytes of input or output (respectively) currently buffered
+internally for \fIchannelId\fR (especially useful in a readable event
callback to impose application-specific limits on input line lengths to avoid
a potential denial-of-service attack where a hostile user crafts
an extremely long line that exceeds the available memory to buffer it).
@@ -546,7 +548,19 @@ separately \fBstderr\fR and \fBstdout\fR from a subprocess. To do
this, spawn with "2>@" or
">@" redirection operators onto the write side of a pipe, and then
immediately close it in the parent. This is necessary to get an EOF on
-the read side once the child has exited or otherwise closed its output.
+the read side once the child has exited or otherwise closed its output.
+.RS
+.PP
+Note that the pipe buffering semantics can vary at the operating system level
+substantially; it is not safe to assume that a write performed on the output
+side of the pipe will appear instantly to the input side. This is a
+fundamental difference and Tcl cannot conceal it. The overall stream semantics
+\fIare\fR compatible, so blocking reads and writes will not see most of the
+differences, but the details of what exactly gets written when are not. This
+is most likely to show up when using pipelines for testing; care should be
+taken to ensure that deadlocks do not occur and that potential short reads are
+allowed for.
+.RE
.VE 8.6
.TP
\fBchan pop \fIchannelId\fR
mn4'>| remove NRE.test & add new test files to Tcl.xcodeprojdas2008-08-031-3/+5 | | * | tclNRE.h die die diedas2008-07-311-3/+1 | | * | stack-3.1 no longer fails when testsuite is run from Xcodedas2008-07-211-2/+2 | | * | add new NRE filesdas2008-07-131-1/+5 | | * | * macosx/Tcl.xcodeproj/project.pbxproj: add tclIORTrans.c; updates anddas2008-06-121-55/+24 | | | | | | | | | | | | cleanup for Xcode 3.1/Leopard. * macosx/Tcl.xcode/project.pbxproj: sync Tcl.xcodeproj changes. * macosx/README: document new build configs. * | typo, skip crashing http.test for gcovdas2008-06-011-14/+14 | | * | * macosx/Tcl.xcodeproj/project.pbxproj: add new tclOO files; add debugdas2008-05-311-7/+198 | | | | | | | | | | | | * macosx/README: targets with corefoundation disabled and with gcov; update to Xcode 3.1. * | remove ioUtil.test, llvm-gcc fixdas2008-04-251-5/+2 |/ * disable codesign on tests targetdas2008-03-281-1/+17 | * * macosx/Tcl.xcodeproj/project.pbxproj: add support for Xcode 3.1das2008-03-122-2/+21 | | | | | * macosx/Tcl.xcodeproj/default.pbxuser: CODE_SIGN_IDENTITY and * macosx/Tcl-Common.xcconfig: 'xcodebuild install'. * * macosx/Tcl.xcodeproj/project.pbxproj: add support for Xcode 3.1 anddas2008-03-112-3/+199 | | | | | | | | | | | * macosx/Tcl.xcodeproj/default.pbxuser: targets for building with * macosx/Tcl-Common.xcconfig: gcc-4.2 and llvm-gcc-4.2. * unix/tclUnixPort.h: workaround vfork() problems in llvm-gcc-4.2.1 -O4 build. * unix/tclUnixPort.h: move MODULE_SCOPE compat define to top [Bug 1911102]. * merge stable branch onto HEADdgp2007-12-131-1/+1 | * * macosx/Tcl.xcodeproj/project.pbxproj: add new chanio.test.das2007-11-151-2/+4 | | | | * macosx/Tcl.xcode/project.pbxproj: * * generic/tclDTrace.d (new file): add DTrace provider for Tcl; allowsdas2007-09-131-1/+5 | | | | | | | | | | | | | | | | | | * generic/tclCompile.h: tracing of proc and command entry & * generic/tclBasic.c: return, bytecode execution, object * generic/tclExecute.c: allocation and more; with essentially * generic/tclInt.h: zero cost when tracing is inactive; * generic/tclObj.c: enable with --enable-dtrace configure * generic/tclProc.c: arg (disabled by default, will only * unix/Makefile.in: enable if DTrace is present). * unix/configure.in: [Patch 1793984] * macosx/GNUmakefile: enable DTrace support. * macosx/Tcl-Common.xcconfig: * macosx/Tcl.xcodeproj/project.pbxproj: * unix/configure: autoconf-2.59 * unix/tclConfig.h.in: autoheader-2.59 * * macosx/Tcl.xcode/project.pbxproj: discontinue unmaintained supportdas2007-09-062-34/+30 | | | | | | | | | | | | | * macosx/Tcl.xcode/default.pbxuser: for Xcode 1.5; replace by Xcode2 project for use on Tiger (with Tcl.xcodeproj to be used on Leopard). * macosx/Tcl.xcodeproj/project.pbxproj: updates for Xcode 2.5 and 3.0. * macosx/Tcl.xcodeproj/default.pbxuser: * macosx/Tcl.xcode/project.pbxproj: * macosx/Tcl.xcode/default.pbxuser: * macosx/Tcl-Common.xcconfig: * macosx/README: document project changes. * * unix/dltest/pkga.c: whitespace & comment cleanup, removedas2007-08-141-3/+1 | | | | | | | | | * unix/dltest/pkgb.c: unused pkgf.c. * unix/dltest/pkgc.c: * unix/dltest/pkge.c: * unix/dltest/pkgf.c (removed): * unix/dltest/pkgua.c: * macosx/Tcl.xcodeproj/project.pbxproj: * * macosx/Tcl.xcodeproj/project.pbxproj: improve support for renamed tcldas2007-06-292-10/+52 | | | | | | | * macosx/Tcl.xcodeproj/default.pbxuser: source dir; add 10.5 SDK build * macosx/Tcl-Common.xcconfig: config; remove tclMathOp.c. * macosx/README: document Tcl.xcodeproj changes. * * macosx/Tcl.xcodeproj/project.pbxproj: add new Tclsh-Info.plist.in.das2007-06-091-1/+3 | * * macosx/Tcl.xcodeproj/project.pbxproj: add settings for Fix&Continue.das2007-06-061-2/+4 | | | | | | | | | | * unix/configure.in (Darwin): add plist for tclsh; link the * unix/Makefile.in (Darwin): Tcl and tclsh plists into their * macosx/Tclsh-Info.plist.in (new): binaries in all cases. * macosx/Tcl-Common.xcconfig: * unix/tcl.m4 (Darwin): fix CF checks in fat 32&64bit builds. * unix/configure: autoconf-2.59 * * macosx/Tcl.xcodeproj/project.pbxproj: add 'DebugUnthreaded' &das2007-05-092-3/+107 | | | | | * macosx/Tcl.xcodeproj/default.pbxuser: 'DebugLeaks' targets and env var settings needed to run the 'leaks' tool. * * macosx/Tcl-Common.xcconfig: enable more warnings.das2007-04-231-0/+40 | | | | | | | | | | | | | | | | | | | | | | | * macosx/Tcl.xcodeproj/project.pbxproj: add 'DebugMemCompile' build configuration that calls configure with --enable-symbols=all; override configure check for __attribute__((__visibility__("hidden"))) in Debug configuration to restore availability of ZeroLink. * macosx/tclMacOSXNotify.c: fix warnings. * macosx/tclMacOSXFCmd.c: const fixes. * macosx/Tcl-Common.xcconfig: fix whitespace. * macosx/Tcl-Debug.xcconfig: * macosx/Tcl-Release.xcconfig: * macosx/README: * macosx/GNUmakefile: fix/add copyright and license refs. * macosx/tclMacOSXBundle.c: * macosx/Tcl-Info.plist.in: * macosx/Wish-Info.plist.in: * macosx/Tcl.xcode/project.pbxproj: * macosx/Tcl.xcodeproj/project.pbxproj: * * macosx/tclMacOSXNotify.c: add spinlock debugging and sanity checks.das2007-03-072-1/+2 | | | | | | | | | | * macosx/Tcl.xcodeproj/project.pbxproj: ensure gcc version used by * macosx/Tcl.xcodeproj/default.pbxuser: Xcode and configure/make are * macosx/Tcl-Common.xcconfig: consistent and independent of gcc_select default and CC env var; fixes for Xcode 3.0. * unix/tcl.m4 (Darwin): s/CFLAGS/CPPFLAGS/ in macosx-version-min check. * unix/configure: autoconf-2.59 * * macosx/Tcl.xcodeproj/project.pbxproj: extract build settings thatdas2007-01-282-285/+280 | | | | | | | | | | | | | | | | | | | * macosx/Tcl.xcodeproj/default.pbxuser: were common to multiple * macosx/Tcl-Common.xcconfig (new file): configurations into external * macosx/Tcl-Debug.xcconfig (new file): xcconfig files; add extra * macosx/Tcl-Release.xcconfig (new file): configurations for building with SDKs and 64bit; convert legacy jam-based 'Tcl' target to native target with single script phase; correct syntax of build setting references to use $() throughout. * macosx/README: document new Tcl.xcodeproj configurations; other minor updates/corrections. * generic/tcl.h: update location of version numbers in macosx files. * macosx/Tcl.xcode/project.pbxproj: restore 'tcltest' target to working * macosx/Tcl.xcode/default.pbxuser: order by replicating applicable changes to Tcl.xcodeproj since 2006-07-20. * * macosx/tclMacOSXFCmd.c (TclMacOSXSetFileAttribute): on some versionsdas2007-01-192-10/+19 | | | | | | | | | | | | | | | | | | | | | | | | | | | of Mac OS X, truncate() fails on resource forks, in that case use open() with O_TRUNC instead. * macosx/tclMacOSXNotify.c: accommodate changes to prototypes of OSSpinLock(Un)Lock API. * macosx/Tcl.xcodeproj/project.pbxproj: ensure HOME and USER env vars * macosx/Tcl.xcodeproj/default.pbxuser: are defined when running testsuite from Xcode. * tests/env.test: add extra system env vars that need to be preserved on some Mac OS X versions for testsuite to work. * unix/Makefile.in: move libtommath defines into configure.in to avoid * unix/configure.in: replicating them across multiple buildsystems. * macosx/Tcl.xcodeproj/project.pbxproj: * unix/tcl.m4: ensure CPPFLAGS env var is used when set. [Bug 1586861] (Darwin): add -isysroot and -mmacosx-version-min flags to CPPFLAGS when present in CFLAGS to avoid discrepancies between what headers configure sees during preprocessing tests and compiling tests. * unix/configure: autoconf-2.59 * unix/tclConfig.h.in: autoheader-2.59 * * tests/macOSXLoad.test (new file): add testing of .bundle loading anddas2006-12-171-1/+29 | | | | | | | | | | | * tests/load.test: unloading on Darwin (in addition to * tests/unload.test: existing tests of .dylib loading). * macosx/Tcl.xcodeproj/project.pbxproj: add building of dltest binaries so that testsuite run from Xcode can use them; fix testsuite run script. * unix/configure.in: add support for building dltest binaries as * unix/dltest/Makefile.in: .bundle (in addition to .dylib) on Darwin. * unix/Makefile.in: add stub lib dependency to dltest target. * unix/configure: autoconf-2.59 * add new platform package files and earlier new test filesdas2006-12-061-0/+22 | * add tclMathOp.cdas2006-11-261-0/+4 | * removed tools/genWinImage.tcl and win/README.binarydas2006-11-231-4/+0 | * suppress linker arch warnings when building universaldas2006-11-101-1/+4 | * * tests/fCmd.test (fCmd-6.26): fix failure when env(HOME) path containsdas2006-11-101-5/+1 | | | | | | | | | | | | | | symlinks. * macosx/Tcl.xcodeproj/project.pbxproj: remove tclParseExpr.c; when running testsuite from inside Xcdoe, skip stack-3.1 (it only fails under those circumstances). * unix/tcl.m4 (Darwin): suppress linker arch warnings when building universal for both 32 & 64 bit and no 64bit CoreFoundation is available; sync with tk tcl.m4 change. * unix/configure.in: whitespace. * unix/configure: autoconf-2.59 * * macosx/Tcl.xcodeproj/project.pbxproj: check autoconf/autoheader exitdas2006-11-031-1/+1 | | | | status and stop build if they fail. * fix configurations of 'tests' targetdas2006-10-201-6/+9 | * * library/msgcat/msgcat.tcl (msgcat::Init): on Darwin, add fallback ofdas2006-09-101-3/+8 | | | | | | | | | | | | | | | | | | * tests/msgcat.test: default msgcat locale to * unix/tclUnixInit.c (TclpSetVariables): current CFLocale identifier if available (via private ::tcl::mac::locale global, set at interp init when on Mac OS X 10.3 or later with CoreFoundation). * library/tcltest/tcltest.tcl: add 'line' verbose level: prints source * doc/tcltest.n: file line information of failing tests. * macosx/Tcl.xcodeproj/project.pbxproj: add new tclUnixCompat.c file; revise tests target to use new tcltest 'line' verbose level. * unix/configure.in: add descriptions to new AC_DEFINEs for MT-safe. * unix/tcl.m4: add caching to new SC_TCL_* macros for MT-safe wrappers. * unix/configure: autoconf-2.59 * unix/tclConfig.h.in: autoheader-2.59 * removed now no longer needed '-constraints newExprParser' arg to tcltestdas2006-08-242-6/+4 | * * unix/tcl.m4 (Darwin): add support for --enable-64bit on x86_64, fordas2006-08-182-2/+111 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | universal builds including x86_64, for 64-bit CoreFoundation on Leopard and for use of -mmacosx-version-min instead of MACOSX_DEPLOYMENT_TARGET. * unix/configure: autoconf-2.59 * unix/tclConfig.h.in: autoheader-2.59 * generic/tcl.h: add fixes for building on Leopard and support * unix/tclUnixPort.h: for 64-bit CoreFoundation on Leopard. * macosx/tclMacOSXFCmd.c: * unix/tclUnixPort.h: on Darwin x86_64, disable use of vfork as it causes execve to fail intermittently. (rdar://4685553) * generic/tclTomMath.h: on Darwin 64-bit, for now disable use of 128-bit arithmetic through __attribute__ ((mode(TI))), as it leads to link errors due to missing fallbacks. (rdar://4685527) * macosx/Tcl.xcodeproj/project.pbxproj: add x86_64 to universal build, switch native release targets to use DWARF with dSYM, Xcode 3.0 changes. * macosx/README: updates for x86_64 and Xcode 2.3. * macosx/Tcl.xcodeproj/default.pbxuser: add test suite target that runs * macosx/Tcl.xcodeproj/project.pbxproj: the tcl test suite at build time and shows clickable test suite errors in the GUI build window. * tests/macOSXFCmd.test: fix use of deprecated resource fork paths. * unix/tclUnixInit.c (TclpInitLibraryPath): move code that is only needed when TCL_LIBRARY is defined to run only in that case. * generic/tclLink.c (LinkTraceProc): fix 64-bit signed-with-unsigned comparison warning from gcc4 -Wextra. * * macosx/tclMacOSXNotify.c (Tcl_InitNotifier, Tcl_WaitForEvent): createdas2006-07-20