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