execute a command, creating a pipe to it
#include <stdio.h> FILE *popen( const char *command, const char *mode );
The popen() function executes the command specified by command and creates a pipe between the calling process and the executed command.
Depending on the mode argument, the stream pointer returned may be used to read from or write to the pipe.
The executed command has the same environment as its parents. The command is started as follows:
spawnlp (P_NOWAIT, shell_command, shell_command, "-c", command, (char *)NULL );
where shell_command is the command specified by the SHELL environment variable (if it exists), or the sh utility.
The mode argument to popen() is a string that specifies an I/O mode for the pipe.
A stream opened by popen() should be closed by the pclose() function.
A non-NULL stream pointer on successful completion. If popen() is unable to create either the pipe or the subprocess, a NULL stream pointer is returned, and errno is set appropriately.
popen() may also set errno values as described by the pipe() and spawnl() functions.
/* * upper: executes a given program, converting all input * to upper case. */ #include <stdio.h> #include <stdlib.h> #include <string.h> #include <ctype.h> #include <unistd.h> #include <limits.h> char buffer[_POSIX_ARG_MAX]; void main( int argc, char **argv ) { int i; int c; FILE *f; for( i = 1; i < argc; i++ ) { strcat( buffer, argv[i] ); strcat( buffer, " " ); } if( ( f = popen( buffer, "w" ) ) == NULL ) { perror( "popen" ); exit( 1 ); } while( ( c = getchar() ) != EOF ) { if( islower( c ) ) c = toupper( c ); putc( c, f ); } pclose( f ); }
UNIX
Safety: | |
---|---|
Interrupt handler | No |
Signal handler | No |
Thread | No |
errno, pclose(), pipe(), spawn... functions