p2open(3G) p2open(3G)
NAME
p2open, p2close - Pipe zu Kommando öffnen/schließen
SYNTAX
cc [option ...] datei ... -lgen [bibliothek ...]
#include <libgen.h>
int p2open(const char *cmd, FILE *fp[2]);
int p2close(FILE *fp[2]);
BESCHREIBUNG
p2open() erzeugt und startet eine Shell-Prozedur, um die Kommandozeile
auszuführen, auf die cmd zeigt. Bei der Rückkehr zeigt fp[0] auf einen
FILE-Zeiger, um auf die Standardeingabe des Kommandos zu schreiben,
und fp[1] zeigt auf einen FILE-Zeiger, um von der Standardausgabe des
Kommandos zu lesen. Damit hat das Programm die Kontrolle über die Ein-
und die Ausgabe des Kommandos.
Wenn die Funktion erfolgreich ist, gibt sie 0 zurück; sonst wird -1
zurückgegeben.
p2close() wird verwendet, um die Dateizeiger zu schließen, die
p2open() geöffnet hat. p2close() wartet darauf, daß der Prozeß endet
und gibt dann den Prozeßstatus zurück. Bei Erfolg wird 0 zurückgege-
ben, sonst -1.
BEISPIELE
#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 ist gescheitert\n");
exit(1);
}
write(fileno(fp[0]),"Dies ist ein Test\n", 16);
if(read(fileno(fp[1]), buf, 16) <=0)
fprintf(stderr, "p2open ist gescheitert\n");
else
write(1, buf, 16);
(void)p2close(fp);
}
Seite 1 Reliant UNIX 5.44 Gedruckt 11/98
p2open(3G) p2open(3G)
ERGEBNIS
Häufig sind zu wenig Dateideskriptoren vorhanden. p2close() gibt -1
zurück, wenn die beiden Dateizeiger nicht vom selben p2open() stammen.
HINWEISE
Bei gepuffertem Schreiben nach fp[0] kann es sein, daß das Kommando
scheinbar nicht ausgeführt wird. Ebenso kann es problematisch sein,
wenn mit einer Pipe verbundene Kommandos eine ungepufferte Ausgabe
verwenden. Verwenden Sie fflush()-Aufrufe oder nicht gepuffertes fp[0]
[siehe auch fclose(3S)].
SIEHE AUCH
fclose(3S), popen(3S), setbuf(3S).
Seite 2 Reliant UNIX 5.44 Gedruckt 11/98