popen, pclose --
initiate pipe to/from a process
FILE popen(const char command, const char type);
int pclose(FILE stream);
creates a pipe between the calling program and the command to be executed.
The arguments to
are pointers to null-terminated strings.
consists of a shell command line.
is an I/O mode, either
for reading or
The value returned is a stream pointer such that
one can write to the standard input of the command,
if the I/O mode is
by writing to the file
and one can read from the standard output of the command,
if the I/O mode is
by reading from the file
popen forks to create a child process that runs the
command interpreter specified by the SHELL environment
variable in the caller's environment.
If SHELL is not set, then /bin/sh is used.
This shell executes command.
A stream opened by
should be closed by
which waits for the associated process to terminate
and returns the exit status of the command.
Because open files are shared, a type
may be used as an input filter
and a type
as an output filter.
if files or processes cannot be created.
returns -1 if
is not associated with a
Here is an example of a typical call:
char *cmd = "/usr/bin/ls *.c";
if ((ptr = popen(cmd, "r")) != NULL)
while (fgets(buf, BUFSIZ, ptr) != NULL)
(void) printf("%s", buf);
This program will print on the standard output
all the file names in the current directory that have a .c suffix.
If the original and
processes concurrently read or write a common file,
neither should use buffered I/O.
Problems with an output filter may be
forestalled by careful buffer flushing,
for example, with
A security hole exists through the IFS and PATH environment
Full pathnames should be used (or PATH reset)
and IFS should be set to space and tab
Previous versions of UnixWare and SCO OpenServer always used /bin/sh as
the shell in which command is executed.
Applications built for previous system versions may require that
SHELL be set to /bin/sh in the caller's environment.
© 2004 The SCO Group, Inc. All rights reserved.
UnixWare 7 Release 7.1.4 - 25 April 2004