14.1 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.