popen(3S) 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 arguments to popen are pointers to null-terminated
strings; one string contains a shell command line and the
other contains an I/O mode. The mode may be either r for
reading or w for writing. popen creates a pipe between the
calling program and the command to be executed. The value
returned is a stream pointer. If the I/O mode is w, one can
write to the standard input of the command by writing to the
file stream; if the I/O mode is r, one can read from the
standard output of the command, 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.
SEE ALSO
pipe(2), wait(2), fclose(3S), fopen(3S), system(3S).
DIAGNOSTICS
popen returns a NULL pointer if files or processes cannot be
created or if the shell cannot be accessed.
pclose returns -1 if stream is not associated with a command
opened by popen.
BUGS
If the original processes and processes opened by popen
concurrently read or write a common file, neither should use
buffered I/O, because the buffering gets all mixed up.
Problems with an output filter may be forestalled by careful
buffer flushing, e.g., by using fflush; see fclose(3S).
If an illegal type is passed, popen will fork and exec the
command line passed to it before it discovers that the type
was illegal. This will result in a NULL pointer being
returned and a broken pipe (with the command executing in
Page 1 (last mod. 1/14/87)
popen(3S) popen(3S)
the background).
Page 2 (last mod. 1/14/87)