Museum

Home

Lab Overview

Retrotechnology Articles

Online Manuals

⇒ pclose(3S) — UnixWare 2.01

Media Vault

Software Library

Restoration Projects

Artifacts Sought

Related Articles

fclose(3S)

fopen(3S)

pipe(2)

stdio(3S)

system(3S)

wait(2)






       popen(3S)                                                  popen(3S)


       NAME
             popen, pclose - initiate pipe to/from a process

       SYNOPSIS
             #include <stdio.h>
             FILE *popen(const char *command, const char *type);
             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.  type is an I/O mode, either r for reading or w
             for writing.  The value returned is a stream pointer such that
             one can write to the standard input of the command, if the I/O
             mode is w, by writing to the file stream [see intro(3)]; 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 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.

          Errors
             popen returns a null pointer if files or processes cannot be
             created.

             pclose returns -1 if stream is not associated with a popened
             command.

       USAGE
             Here is an example of a typical call:

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

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

                         if ((ptr = popen(cmd, "r")) != NULL)


                           Copyright 1994 Novell, Inc.               Page 1













      popen(3S)                                                  popen(3S)


                              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 file names in the current directory that have a .c
            suffix.

      REFERENCES
            fclose(3S), fopen(3S), pipe(2), stdio(3S), system(3S), wait(2)

      NOTICES
            If the original and popened 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, for example, 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").


























                          Copyright 1994 Novell, Inc.               Page 2








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