ich muss einem Programm, welches seine Eingabe per "descriptor 0 and 1"
erwartet, die benötigten daten
innerhalb meines C-Programmes zukommen lassen.
Mit popen() kann ich dem Programm zumindest auf STDIN (descriptor 0 ??) die
Daten schicken, wie aber
erreiche ich den descriptor 1?
Ich hab dazu leider noch nirgendwas was gefunden, ausser einem Perl-Script,
was wiederu etliche
CPAN-Module benötigt um das zu bewerkstelligen.
Hat jemand für mich eine Tipp? (manpage, link, c-programm usw.)
Danke,
Thomas
Lies die Unix-FAQ.
"Felix von Leitner" <usenet-...@fefe.de> schrieb im Newsbeitrag
news:3bd5...@fefe.de...
Hab ich bereits getan und bin nicht fündig geworden.
Thomas
"Thomas Förster" <pu...@madz.net> wrote:
> ich muss einem Programm, welches seine Eingabe per "descriptor 0 and 1"
> erwartet, die benötigten daten
> innerhalb meines C-Programmes zukommen lassen.
Was ist das für ein beklopptes Programm? Sicher, daß der auch
auf Deskriptor 1 *Eingaben* haben will?
> Mit popen() kann ich dem Programm zumindest auf STDIN (descriptor 0 ??) die
> Daten schicken, wie aber
> erreiche ich den descriptor 1?
Einfache Lösung: `popen("programm 1>&0", "w")'.
Gute Lösung: Standard-pipe/fork/dup/exec Sequenz. Sollte nicht
jeder Unix-Programmierer mal eine Mikro-Shell programmiert haben? ;-)
Zum Beispiel so. Untested:
int fd0[2], fd1[2];
pid_t p;
FILE *fp0, *fp1;
pipe(fd0);
pipe(fd1);
if ((p = fork()) < 0) {
/* Fehler */
} else if (p == 0) {
dup(fd0[0], 0); /* Eingaben auf Descriptor 0 */
dup(fd1[0], 1); /* Eingaben auf Descriptor 1 */
close(fd0[0]); close(fd1[0]);
close(fd0[1]); close(fd1[1]);
execlp("programm", "programm", "arg", (char*) 0);
exit(1);
} else {
close(fd0[0]); close(fd1[0]);
fp0 = fdopen(fd0[1], "w");
fp1 = fdopen(fd1[1], "w");
/* Programm per `fp0' / `fp1' mit Eingaben füttern */
}
Oder so. Wobei ich trotzdem bezweifle, daß jemand Eingaben
per fd 1 will.
Stefan
> Wobei ich trotzdem bezweifle, daß jemand Eingaben per fd 1 will.
»more« und »pg« wollen das traditionell.
Grüße,
Gunnar
Hast du ein Problem mit den Augen?
"4.5) How do I use popen() to open a process for reading AND writing?"