From: Martin Haller (dielheim_at_martin-haller.de)
Date: 18. Jul 2000
Hi,
ist vielleicht etwas OT aber ich frag trotzdem mal:
Also ich wollte mal ausprobieren, wie man ein externes Programm (hier ein
Perl-Script) quasi als Filter von einem programm aus benutzen kann (stdin
und stdout von diesem perl-script vom haupt-ptog aus fuettern bzw. lesen).
In meiner Literatur steht als Beispiel nur die Version mit Lesen bzw.
Schreiben. Und da steht, dass beides gleichzeitig sehr kompliziert sei
(ich, wackerer Programmierer, liess mich dadurch nicht abschrecken). Nur
steck ich fest.
Perl-Script:
------8<-------------------------------
#!/usr/bin/perl -w
@in = <STDIN>;
foreach (@in)
{
print ("STDIN: $_");
}
------8<-------------------------------
und das C-Programm:
------8<-------------------------------
#include <iostream.h>
#include <stdio.h>
#include <unistd.h>
#include <string.h>
int main(int argc, char *argv[])
{
printf("Starting perl script and piping something...\n");
int file_pipe[2];
int fork_result;
char str[100];
char str2[100];
if (pipe(file_pipe) == 0)
{
fork_result = fork();
if (fork_result == 0)
{
// child...
close(0);
dup(file_pipe[0]);
close(file_pipe[0]);
close(1);
dup(file_pipe[1]);
close(file_pipe[1]);
execlp("./test.pl","test.pl",(char*)0);
exit (-1);
}
else
{
strcpy(str,"Hallo Perl!\n");
strcpy(str2,"");
write(file_pipe[1],str,strlen(str));
close(file_pipe[1]);
printf("Wrote something to perl script! Now lets look what it has read!\n");
read(file_pipe[0],str2,sizeof(str2));
printf("I got: \n%s\n from the script!\n",str2);
close(file_pipe[0]);
}
}
return 0;
}
------8<-------------------------------
Danke, dass ihr bis hierher gelesen habt ;-)
Ja, das ist kein sauberer Stil, ich weiss, aber es ist ja nur ein
Testprogramm.
Das Programm aus das bash 2.0 ausgefuehrt sieht so aus:
martin_at_lotte:~/proj/test/perlpipe/perlpipe > ./perlpipe
Starting perl script and piping something...
Wrote something to perl script! Now lets look what it has read!
I got:
Hallo Perl!
#Ø@ðt¼
from the script!
^[[?1;2cmartin_at_lotte:~/proj/test/perlpipe/perlpipe > 1;2c
Scheinbar funktioniert die Ausgabe vom perl-Script nicht so ganz ;-)
Hat einer von euch Unix-Cracks da ne Idee ?? Oder gibts irgendeine Doku,
wo solch ein Verfahren beschieben steht ?
Danke, Martin
Dieses Archiv wurde generiert von hypermail 2.1.2 : 11. Mar 2002 CET