40 lines
1.5 KiB
Groff
40 lines
1.5 KiB
Groff
|
|
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 arguments to popen are pointers to null-terminated
|
|
strings containing, respectively, a shell command line and
|
|
an I/O mode, 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 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.
|
|
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
|
|
``popened'' command.
|
|
BUGS
|
|
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,
|
|
e.g. with fflush; see fclose(3S).
|
|
|
|
|