Not exactly sure what you mean by 'communicate'; if you
just want to read from or write to,
open(READ_CP," myprog |") or die "can't open myprog: $!";
open(WRITE_CP,"| myprog") or die "can't open myprog: $!";
should work. 'course you can't do both at the same time, nor
can you do both to the same invocation of the 'myprog.'
If you mean runtime read and write, that's' a
lot harder but ... the perl cookbook has code for that. All
source for it is available from the O'Reilly site (takes a
little digging), if you don't own it (its a wonderful
resource) you can always drop by the book store, suss out
the right chapter and then dig out the code.
Depending upon what you want, you may need to rethink the
communication aspect, can you jam it all into a one-way
conversation (e.g. have perl generate the response and
then read the output back from a file).
I'm pretty sure that win32 versions of open2/3 are
troubled by win32-isms. 5.6 might be better (I hear
forking is implemented) but you might find help in
the win32FAQ for open.
a
| [reply] |
It only needs to be unidirectional, sending data to the C program. I tried open(PROC, "| myprog") first, and I got a bad file descriptor error. I'll go a-hunting at O'Reilly, though.
| [reply] |
maybe it does not work with win32 version of perl,
but I can read and write from/to stdout/in of another
program:
#!/usr/bin/perl
open(BOTH, "|./echo|") or die "error in open: $!";
while(<>){
print ".";
print BOTH $_;
print <BOTH>;
}
close(BOTH) or die "error in close: $!";
with caller being a oneliner :
print while(<>);
hope that helps, although it is probably not supported on
win32.
| [reply] [d/l] [select] |