Museum

Home

Lab Overview

Retrotechnology Articles

Online Manuals

⇒ popen(3S) — Reliant UNIX 5.44c4

Media Vault

Software Library

Restoration Projects

Artifacts Sought

Related Articles

pipe(2)

wait(2)

fclose(3S)

fopen(3S)

stdio(3S)

system(3S)

popen(3S)                                                         popen(3S)

NAME
     popen, pclose - open/close a pipe to a command

SYNOPSIS
     #include <stdio.h>

     FILE *popen(const char *command, const char *mode);

     int pclose(FILE *stream);

DESCRIPTION
     popen() creates a pipe between the calling program and the command to
     be executed. The arguments to popen() are pointers to null-terminated
     strings. command consists of a shell command line. mode is an I/O
     mode, either r for reading or w for writing. The value returned is a
     stream pointer such that in the I/O mode w one can write to the stan-
     dard input of the command, by writing to the file stream; and one can
     read from the standard output of the command, if the I/O mode is r, by
     reading from the file stream.

     A pipe 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.

     The behavior of popen() is specified only for values of mode of r and
     w. Other values such as rb or wb might be supported by specific imple-
     mentations, but these would not be portable features. Note that his-
     torical implementations of popen() only check to see if the first
     character of mode is r. Thus a mode of "robert the robot" would be
     treated as read mode r, and a mode of "anything else" as write mode w.

EXAMPLE
     #include <stdio.h>
     #include <stdlib.h>

     main()
     {
         char *cmd = "/usr/bin/ls *.c";
         char buf[BUFSIZ];
         FILE *ptr;

         if ((ptr = popen(cmd, "r")) != NULL)
                 while (fgets(buf, BUFSIZ, ptr) != NULL)
                         (void) printf("%s", buf);
         return 0;
     }

     This program will print on the standard output [see stdio(3S)] all the
     filenames in the current directory that have a .c suffix.



Page 1                       Reliant UNIX 5.44                Printed 11/98

popen(3S)                                                         popen(3S)

RESULT
     popen() returns a null pointer if files or processes cannot be
     created.

     pclose() returns -1 if stream is not associated with a popen() com-
     mand.

NOTES
     If the original and popen() processes concurrently read or write a
     common file, neither should use buffered I/O. Problems with an output
     filter may be forestalled by careful buffer flushing, e.g., with
     fflush [see fclose(3S)].

     A security hole exists through the IFS and PATH environment variables.
     Full pathnames should be used, or PATH reset, and IFS should be set to
     space and tab, "\t".

SEE ALSO
     pipe(2), wait(2), fclose(3S), fopen(3S), stdio(3S), system(3S).



































Page 2                       Reliant UNIX 5.44                Printed 11/98

Typewritten Software • bear@typewritten.org • Edmonds, WA 98026