CrtPipelin
_________________________________________________________________
NAME
Tcl_CreatePipeline - create one or more child processes,
with I/O redirection
SYNOPSIS
#include <tcl.h>
int
Tcl_CreatePipeline(interp, argc, argv, pidArrayPtr, inPipePtr, outPipePtr, errFilePtr)
ARGUMENTS
Tcl_Interp *interp (in) Interpreter to use
for error reporting.
int argc (in) Number of strings in
argv array.
char **argv (in) Array of strings
describing command(s)
and I/O redirection.
int **pidArrayPtr (out) The value at
*pidArrayPtr is
modified to hold a
pointer to an array
of process
identifiers. The
array is dynamically
allocated and must be
freed by the caller.
int *inPipePtr (out) If this argument is
NULL then standard
input for the first
command in the
pipeline comes from
the current standard
input. If inPipePtr
is not NULL then
Tcl_CreatePipeline
will create a pipe,
arrange for it to be
used for standard
input to the first
command, and store a
file id for writing
to that pipe at
*inPipePtr. If the
command specified its
own input using
redirection, then no
pipe is created and
-1 is stored at
*inPipePtr.
int *outPipePtr (out) If this argument is
NULL then standard
output for the last
command in the
pipeline goes to the
current standard
output. If
outPipePtr is not
NULL then
Tcl_CreatePipeline
will create a pipe,
arrange for it to be
used for standard
output from the last
command, and store a
file id for reading
from that pipe at
*outPipePtr. If the
command specified its
own output using
redirection then no
pipe is created and
-1 is stored at
*outPipePtr.
int *errFilePtr (out) If this argument is
NULL then error
output for all the
commands in the
pipeline will go to
the current standard
error file. If
errFilePtr is not
NULL, error output
from all the commands
in the pipeline will
go to a temporary
file created by
Tcl_CreatePipeline.
A file id to read
from that file will
be stored at
*errFilePtr. The
file will already
have been removed, so
closing the file
descriptor at
*errFilePtr will
cause the file to be
flushed completely.
_________________________________________________________________
DESCRIPTION
Tcl_CreatePipeline processes the argv array and sets up one
or more child processes in a pipeline configuration.
Tcl_CreatePipeline handles pipes specified with ``|'', input
redirection specified with ``<'' or ``<<'', and output
redirection specified with ``>''; see the documentation for
the exec command for details on these specifications. The
return value from Tcl_CreatePipeline is a count of the
number of child processes created; the process identifiers
for those processes are stored in a malloc-ed array and a
pointer to that array is stored at *pidArrayPtr. It is the
caller's responsibility to free the array when finished with
it.
If the inPipePtr, outPipePtr, and errFilePtr arguments are
NULL then the pipeline's standard input, standard output,
and standard error are taken from the corresponding streams
of the process. Non-NULL values may be specified for these
arguments to use pipes for standard input and standard
output and a file for standard error. Tcl_CreatePipeline
will create the requested pipes or file and return file
identifiers that may be used to read or write them. It is
the caller's responsibility to close all of these files when
they are no longer needed. If argv specifies redirection
for standard input or standard output, then pipes will not
be created even if requested by the inPipePtr and outPipePtr
arguments.
If an error occurs in Tcl_CreatePipeline (e.g. ``|'' or
``<'' was the last argument in argv, or it wasn't possible
to fork off a child), then -1 is returned and interp->result
is set to an error message.
SEE ALSO
Tcl_DetachPids, Tcl_ReapDetachedProcs
KEYWORDS
background, child, detach, fork, process, status, wait