p The .Fa command argument is a pointer to a null-terminated string containing a shell command line. This command is passed to
a /bin/sh using the .Fl c flag; interpretation, if any, is performed by the shell. The .Fa mode argument is a pointer to a null-terminated string which must be either .Ql r for reading or .Ql w for writing.
p The return value from .Fn popen is a normal standard .Tn I/O stream in all respects save that it must be closed with .Fn pclose rather than .Fn fclose . Writing to such a stream writes to the standard input of the command; the command's standard output is the same as that of the process that called .Fn popen , unless this is altered by the command itself. Conversely, reading from a .Dq popened stream reads the command's standard output, and the command's standard input is the same as that of the process that called .Fn popen .
p Note that output .Fn popen streams are fully buffered by default.
p The .Fn pclose function waits for the associated process to terminate and returns the exit status of the command as returned by .Fn wait4 . .Sh RETURN VALUE The .Fn popen function returns .Dv NULL if the .Xr fork 2 or .Xr pipe 2 calls fail, or if it cannot allocate memory.
p The .Fn pclose function returns -1 if .Fa stream is not associated with a .Dq popened command, if .Fa stream already .Dq pclosed , or if .Xr wait4 returns an error. .Sh ERRORS The .Fn popen function does not reliably set .Va errno . .Sh SEE ALSO .Xr fork 2 , .Xr sh 1 , .Xr pipe 2 , .Xr wait4 2 , .Xr fflush 3 , .Xr fclose 3 , .Xr fopen 3 , .Xr stdio 3 , .Xr system 3 .Sh BUGS Since the standard input of a command opened for reading shares its seek offset with the process that called .Fn popen , if the original process has done a buffered read, the command's input position may not be as expected. Similarly, the output from a command opened for writing may become intermingled with that of the original process. The latter can be avoided by calling .Xr fflush 3 before .Fn popen .
p Failure to execute the shell is indistinguishable from the shell's failure to execute command, or an immediate exit of the command. The only hint is an exit status of 127.
p The .Fn popen argument always calls .Xr sh , never calls .Xr csh . .Sh HISTORY A .Fn popen and a .Fn pclose function appeared in .At v7 .