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. RETURN VALUE popen returns a NULL pointer if files or processes cannot be created. pclose returns -1 if stream is not associated with a command opened by popen. SEE ALSO pipe(2), wait(2), fclose(3S), fopen(3S), system(3S). BUGS If the original processes and processes opened by popen con- currently 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, 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 April, 1990 1
popen(3S) popen(3S)was illegal. This will result in a NULL pointer being re- turned and a broken pipe (with the command executing in the background). 2 April, 1990