On Son, 11 Mai 2003 at 07:18 (+0200), Bernd Brodesser wrote:
* Erich Lindner schrieb am 10.Mai.2003:
ich hab ein C-Programm, das wiederum Perl-Code generiert. Nun moechte ich diesen Code an den Perl-Interpreter pipen.
"programm | /usr/bin/perl -"
allerdings sollte das auszufuehrende Perl-Programm die "STDIN" von dem C-Programm vererbt bekommen. Da die Pipe zwischen dem C-Programm und dem Perl-Interpreter und nicht zum eigentlichen Perl-Programm aufgebaut wird, kann dieses jedoch nicht auf die STDIN des C-Programms zugreifen.
Ich habe auch die Moglichkeit mittels "popen()" im C-Programm selbst eine Pipe zum Perl-Interpreter aufzubauen. Gibt es dann eine Moeglichkeit, zB: als Argument dem Perlprogramm die STDIN aus dem C-Programm heraus mitzuteilen, und wenn, kann dann das Perl-Programm darauf zugreifen, obwohl das C-Programm sich nach dem Abladen des Codes beendet ?
Du kannst eine Named Pipe erzeugen, oder Du kannst weitere Directiven erzeugen. Ob das alles so Sinnig ist, weiß ich allerdings nicht.
Erich, ehrlich gesagt weiss ich auch nicht, was Du da bauen willst. Die Kommunikation per Pipe, so wie Du sie beschreibst (programm | perl -) verknüpft ja auch nicht stdin des C-Progrmms mit stdin von Perl, sondern _stdout_! Korrigier mich, wenn ich falsch liege, aber für mich sieht es so aus, dass Du offenbar das C-Programm nur als Wrapper um einen dynamisch generierten Perl-Code herum haben willst. Dann wäre IMHO der einzige Weg, dass Du wie von Bernd vorgeschlagen eine Named Pipe nutzt und diese im Perl-Code anstelle von stdin nutzt. Das Ganze würde ich dann aber nicht per Pipe verknüpfen, sondern den Perl-Interpreter per fork () starten und per dup () mit der Ausgabe des C-Programms versorgen. Wenn Du mal genauer schilderst, was Du vorhast, lässt sich vielleicht ein einfacherer Weg finden. Jan