cc [flag . . . ] file . . . -lgen [library] . . .#include <libgen.h>
int p2open (const char cmd, FILE fp[2]);
int p2close (FILE fp[2]);
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.
#include <stdio.h> #include <libgen.h>main(argc,argv) int argc; char argv; { FILE fp[2]; pid_t 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); }
Many commands use buffered output when connected to a pipe. That, too, can make it appear as if things are not working.
Usage is not the same as for popen, although it is closely related.