POPEN(3S) INTERACTIVE UNIX System POPEN(3S)
NAME
popen, pclose - initiate pipe to/from a process
SYNOPSIS
#include <stdio.h>
FILE *popen (command, type)
char *command, *type;
int pclose (stream)
FILE *stream;
DESCRIPTION
The popen function creates a pipe between the calling pro-
gram and the command to be executed. The arguments to popen
are pointers to null-terminated strings. Command consists
of a shell command line. Type is an I/O mode, either r for
reading or w for writing. 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 w, by writing to the file
stream; and one can read from the standard output of the
command, if the I/O mode is r, by reading from the file
stream.
A stream opened by popen should be closed by pclose, which
waits for the associated process to terminate and returns
the exit status of the command.
Because open files are shared, a type r command may be used
as an input filter and a type w as an output filter.
EXAMPLE
A typical call may be:
char *cmd = "ls *.c";
FILE *ptr;
if ((ptr = popen(cmd, "r")) != NULL)
while (fgets(buf, n, ptr) != NULL)
(void) printf("%s ",buf);
This will print in stdout [see stdio (3S)] all the file
names in the current directory that have a ``.c'' suffix.
SEE ALSO
pipe(2), wait(2), fclose(3S), fopen(3S), stdio(3S),
system(3S).
DIAGNOSTICS
The popen function returns a NULL pointer if files or
processes cannot be created.
The pclose function returns -1 if stream is not associated
with a ``popened'' command.
Rev. C Software Development Set Page 1
POPEN(3S) INTERACTIVE UNIX System POPEN(3S)
WARNING
If the original and ``popened'' 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, e.g., with fflush [see fclose(3S)].
Rev. C Software Development Set Page 2