POPEN(S) UNIX System V POPEN(S)
Name
popen, pclose - initiate pipe to/from a process
Syntax
#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
program 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 (S)) all the file names
in the current directory that have a ``.c'' suffix.
See Also
pipe(S), wait(S), fclose(S), fopen(S), stdio(S), system(S)
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.
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, for example, with fflush (see fclose(S)).
Standards Conformance
pclose and popen are conformant with:
AT&T SVID Issue 2, Select Code 307-127;
and The X/Open Portability Guide II of January 1987.
(printed 6/20/89)