popen
, pclose
—tie a stream to a command string ¶Synopsis
#include <stdio.h> FILE *popen(const char *s, const char *mode); int pclose(FILE *f);
Description
Use popen
to create a stream to a child process executing a
command string *s
as processed by /bin/sh
on your system.
The argument mode must start with either ‘r
’, where the stream
reads from the child’s stdout
, or ‘w
’, where the stream writes
to the child’s stdin
. As an extension, mode may also contain
‘e
’ to set the close-on-exec bit of the parent’s file descriptor.
The stream created by popen
must be closed by pclose
to avoid
resource leaks.
Streams created by prior calls to popen
are not visible in
subsequent popen
children, regardless of the close-on-exec bit.
Use “system(NULL)
” to test whether your system has /bin/sh
available.
Returns
popen
returns a file stream opened with the specified mode,
or NULL
if a child process could not be created. pclose
returns -1 if the stream was not created by popen
or if the
application used wait
or similar to steal the status; otherwise
it returns the exit status of the child which can be interpreted
in the same manner as a status obtained by waitpid
.
Portability
POSIX.2 requires popen
and pclose
, but only specifies a mode
of just r
or w
. Where sh
is found is left unspecified.
Supporting OS subroutines required: _exit
, _execve
, _fork_r
,
_wait_r
, pipe
, fcntl
, sbrk
.