| .\" Copyright 1991 The Regents of the University of California. |
| .\" All rights reserved. |
| .\" |
| .\" %%%LICENSE_START(BSD_4_CLAUSE_UCB) |
| .\" Redistribution and use in source and binary forms, with or without |
| .\" modification, are permitted provided that the following conditions |
| .\" are met: |
| .\" 1. Redistributions of source code must retain the above copyright |
| .\" notice, this list of conditions and the following disclaimer. |
| .\" 2. Redistributions in binary form must reproduce the above copyright |
| .\" notice, this list of conditions and the following disclaimer in the |
| .\" documentation and/or other materials provided with the distribution. |
| .\" 3. All advertising materials mentioning features or use of this software |
| .\" must display the following acknowledgement: |
| .\" This product includes software developed by the University of |
| .\" California, Berkeley and its contributors. |
| .\" 4. Neither the name of the University nor the names of its contributors |
| .\" may be used to endorse or promote products derived from this software |
| .\" without specific prior written permission. |
| .\" |
| .\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND |
| .\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE |
| .\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE |
| .\" ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE |
| .\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL |
| .\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS |
| .\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) |
| .\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT |
| .\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY |
| .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF |
| .\" SUCH DAMAGE. |
| .\" %%%LICENSE_END |
| .\" |
| .\" @(#)popen.3 6.4 (Berkeley) 4/30/91 |
| .\" |
| .\" Converted for Linux, Mon Nov 29 14:45:38 1993, faith@cs.unc.edu |
| .\" Modified Sat May 18 20:37:44 1996 by Martin Schulze (joey@linux.de) |
| .\" Modified 7 May 1998 by Joseph S. Myers (jsm28@cam.ac.uk) |
| .\" |
| .TH POPEN 3 2021-03-22 "GNU" "Linux Programmer's Manual" |
| .SH NAME |
| popen, pclose \- pipe stream to or from a process |
| .SH SYNOPSIS |
| .nf |
| .B #include <stdio.h> |
| .PP |
| .BI "FILE *popen(const char *" command ", const char *" type ); |
| .BI "int pclose(FILE *" stream ); |
| .fi |
| .PP |
| .RS -4 |
| Feature Test Macro Requirements for glibc (see |
| .BR feature_test_macros (7)): |
| .RE |
| .PP |
| .BR popen (), |
| .BR pclose (): |
| .nf |
| _POSIX_C_SOURCE >= 2 |
| || /* Glibc <= 2.19: */ _BSD_SOURCE || _SVID_SOURCE |
| .fi |
| .SH DESCRIPTION |
| The |
| .BR popen () |
| function opens a process by creating a pipe, forking, and invoking the |
| shell. |
| Since a pipe is by definition unidirectional, the |
| .I type |
| argument may specify only reading or writing, not both; the resulting |
| stream is correspondingly read-only or write-only. |
| .PP |
| The |
| .I command |
| argument is a pointer to a null-terminated string containing a shell |
| command line. |
| This command is passed to |
| .I /bin/sh |
| using the |
| .B \-c |
| flag; interpretation, if any, is performed by the shell. |
| .PP |
| The |
| .I type |
| argument is a pointer to a null-terminated string which must contain |
| either the letter \(aqr\(aq for reading or the letter \(aqw\(aq for writing. |
| Since glibc 2.9, |
| this argument can additionally include the letter \(aqe\(aq, |
| which causes the close-on-exec flag |
| .RB ( FD_CLOEXEC ) |
| to be set on the underlying file descriptor; |
| see the description of the |
| .B O_CLOEXEC |
| flag in |
| .BR open (2) |
| for reasons why this may be useful. |
| .PP |
| The return value from |
| .BR popen () |
| is a normal standard I/O stream in all respects save that it must be closed |
| with |
| .BR pclose () |
| rather than |
| .BR fclose (3). |
| 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 |
| .BR popen (), |
| unless this is altered by the command itself. |
| Conversely, reading from |
| the stream reads the command's standard output, and the command's |
| standard input is the same as that of the process that called |
| .BR popen (). |
| .PP |
| Note that output |
| .BR popen () |
| streams are block buffered by default. |
| .PP |
| The |
| .BR pclose () |
| function waits for the associated process to terminate and returns the exit |
| status of the command as returned by |
| .BR wait4 (2). |
| .SH RETURN VALUE |
| .BR popen (): |
| on success, returns a pointer to an open stream that |
| can be used to read or write to the pipe; |
| if the |
| .BR fork (2) |
| or |
| .BR pipe (2) |
| calls fail, or if the function cannot allocate memory, |
| NULL is returned. |
| .PP |
| .BR pclose (): |
| on success, returns the exit status of the command; if |
| .\" These conditions actually give undefined results, so I commented |
| .\" them out. |
| .\" .I stream |
| .\" is not associated with a "popen()ed" command, if |
| .\".I stream |
| .\" already "pclose()d", or if |
| .BR wait4 (2) |
| returns an error, or some other error is detected, |
| \-1 is returned. |
| .PP |
| On failure, both functions set |
| .I errno |
| to indicate the error. |
| .SH ERRORS |
| The |
| .BR popen () |
| function does not set |
| .I errno |
| if memory allocation fails. |
| If the underlying |
| .BR fork (2) |
| or |
| .BR pipe (2) |
| fails, |
| .I errno |
| is set to indicate the error. |
| If the |
| .I type |
| argument is invalid, and this condition is detected, |
| .I errno |
| is set to |
| .BR EINVAL . |
| .PP |
| If |
| .BR pclose () |
| cannot obtain the child status, |
| .I errno |
| is set to |
| .BR ECHILD . |
| .SH ATTRIBUTES |
| For an explanation of the terms used in this section, see |
| .BR attributes (7). |
| .ad l |
| .nh |
| .TS |
| allbox; |
| lbx lb lb |
| l l l. |
| Interface Attribute Value |
| T{ |
| .BR popen (), |
| .BR pclose () |
| T} Thread safety MT-Safe |
| .TE |
| .hy |
| .ad |
| .sp 1 |
| .SH CONFORMING TO |
| POSIX.1-2001, POSIX.1-2008. |
| .PP |
| The \(aqe\(aq value for |
| .I type |
| is a Linux extension. |
| .SH NOTES |
| .BR Note : |
| carefully read Caveats in |
| .BR system (3). |
| .SH BUGS |
| Since the standard input of a command opened for reading shares its seek |
| offset with the process that called |
| .BR 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 |
| .BR fflush (3) |
| before |
| .BR popen (). |
| .PP |
| 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. |
| .\" .SH HISTORY |
| .\" A |
| .\" .BR popen () |
| .\" and a |
| .\" .BR pclose () |
| .\" function appeared in Version 7 AT&T UNIX. |
| .SH SEE ALSO |
| .BR sh (1), |
| .BR fork (2), |
| .BR pipe (2), |
| .BR wait4 (2), |
| .BR fclose (3), |
| .BR fflush (3), |
| .BR fopen (3), |
| .BR stdio (3), |
| .BR system (3) |