POPEN(3S) SysV 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
popen 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 (3S)) all the file names in the
current directory that have a ".c" suffix.
DIAGNOSTICS
popen returns a NULL pointer if files or processes cannot be created.
pclose returns -1 if stream is not associated with a ``popened'' command.
ERRORS
The pclose function fails if
[ECHILD] The status of the child process could not be obtained.
WARNING
If the original and ``popened'' processes 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, for example with fflush [see fclose(3S)].
SEE ALSO
pipe(2), wait(2), fclose(3S), fopen(3S), stdio(3S), system(3S).