Museum

Home

Lab Overview

Retrotechnology Articles

Online Manuals

⇒ p2open(3G) — Reliant UNIX 5.44c4

Media Vault

Software Library

Restoration Projects

Artifacts Sought

Related Articles

fclose(3S)

popen(3S)

setbuf(3S)

p2open(3G)                                                       p2open(3G)

NAME
     p2open, p2close - open/close pipe for a command

SYNOPSIS
     cc [flag ...] file ... -lgen [library ...]

     #include <libgen.h>

     int p2open(const char *cmd, FILE *fp[2]);

     int p2close(FILE *fp[2]);

DESCRIPTION
     p2open() creates and starts a shell procedure to execute the command
     line pointed to by cmd. On return, fp[0] points to a FILE pointer to
     write to the command's standard input and fp[1] points to a FILE
     pointer to read from the command's standard output. In this way the
     program has control over the input and output of the command.

     The function returns 0 if successful; otherwise it returns -1.

     p2close() is used to close the file pointers that p2open() opened. It
     waits for the process to terminate and returns the process status. It
     returns 0 if successful; otherwise it returns -1.

EXAMPLES
     #include <stdio.h>
     #include <libgen.h>

     main(argc,argv)
     int argc;
     char **argv;
     {
         FILE *fp[2];
         pidt pid;
         char buf[16];

         pid=p2open("/usr/bin/cat", fp);
         if ( pid == 0 ) {
                 fprintf(stderr, "p2open failed\n");
                 exit(1);
         }
         write(fileno(fp[0]),"This is a test\n", 16);
         if(read(fileno(fp[1]), buf, 16) <=0)
                 fprintf(stderr, "p2open failed\n");
         else
                 write(1, buf, 16);
         (void)p2close(fp);
     }






Page 1                       Reliant UNIX 5.44                Printed 11/98

p2open(3G)                                                       p2open(3G)

RESULT
     Often there are too few file descriptors. p2close() returns -1 if the
     two file pointers are not from the same p2open().

NOTES
     Buffered writes on fp[0] can make it appear that the command is not
     being executed. Problems can also occur when commands which are linked
     to a pipe use an unbuffered output. To avoid these problems, use
     fflush() calls or an unbuffered fp[0] [see also fclose(3S)].

SEE ALSO
     fclose(3S), popen(3S), setbuf(3S).










































Page 2                       Reliant UNIX 5.44                Printed 11/98

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