Secondary Navigation

How to pass a file hanlde to Child process

i want to pass a file handle to child process.like this: system( perl child.pl $filehandle ); but it doesn t work.the value passed to child is only a string.i

Message 1 of 3
, Apr 10, 2009

i want to pass a file handle to child process.like this:
system("perl child.pl $filehandle");
but it doesn't work.the value passed to child is only a string.i can't use it to read file.

if i pass it like this:
$LB::var;
i can't use it in child process either.

like this:
%ENV{$var}=$filehanlde;
it doesn't work.it is also a string value can't be used as a file handle.

or like this:
open (TEXT,"file");
system("perl child.pl",*TEXT);
in child i use the parameter like this:
local *TEXT=shift;
while(<TEXT>){
print;
}
it doesn't work either.

maybe i can't pass a variable in command line like
system("perl child.pl" ,parameter);
maybe i can't create a child process like this.

how could i pass a file handle to child process when using system to create child process.
should i create child process in other way. then i can pass the file handle.

Jeff Soules

Hi there, This does not answer the original question and may be naive, but why not just have the child process [re]open the file? Is there a reason you need

Message 2 of 3
, Apr 11, 2009

Hi there,

This does not answer the original question and may be naive, but why
not just have the child process [re]open the file? Is there a reason
you need to use the existing file handle, instead of creating a new
one within the child?

On Fri, Apr 10, 2009 at 9:23 PM, q11112345 <q11112345@...> wrote:
>
>
> i want to pass a file handle to child process.like this:
> system("perl child.pl $filehandle");
> but it doesn't work.the value passed to child is only a string.i can't use
> it to read file.
>
> if i pass it like this:
> $LB::var;
> i can't use it in child process either.
>
> like this:
> %ENV{$var}=$filehanlde;
> it doesn't work.it is also a string value can't be used as a file handle.
>
> or like this:
> open (TEXT,"file");
> system("perl child.pl",*TEXT);
> in child i use the parameter like this:
> local *TEXT=shift;
> while(<TEXT>){
> print;
> }
> it doesn't work either.
>
> maybe i can't pass a variable in command line like
> system("perl child.pl" ,parameter);
> maybe i can't create a child process like this.
>
> how could i pass a file handle to child process when using system to create
> child process.
> should i create child process in other way. then i can pass the file handle.
>
>

Chaofei Yang

hi. actually i ve found how to do that. open(INPUT,

Message 3 of 3
, Apr 11, 2009

hi.
actually i've found how to do that.

open(INPUT, "< /etc/motd") or die "/etc/motd: $!";
if ($pid = fork) { wait }
else {
defined($pid) or die "fork:$!";
open(STDIN, "<&INPUT") or die "dup: $!";
exec("cat", "-n") or die "exec cat: $!";#or system(...);
}but now.i just want to pass a file handle into a parallel process.and how to pass a socket to a new process.
<unix networking programing v1> 2edition there is some detials about what i want in 14.7 in that book.
another way to do that is like this.
but i can't create a file handle with a file descriptor.it doesn't work in the new process in windows.
if (defined($ENV{input_fdno}) && $ENV{input_fdno}) =~ /^\d$/) {
open(INPUT, "<&=$ENV{input_fdno}")
or die "can't fdopen $ENV{input_fdno} for input: $!";
}

This does not answer the original question and may be naive, but why
not just have the child process [re]open the file? Is there a reason
you need to use the existing file handle, instead of creating a new
one within the child?

On Fri, Apr 10, 2009 at 9:23 PM, q11112345 <q11112345@yahoo. com> wrote:
>
>
> i want to pass a file handle to child process.like this:
> system("perl child.pl $filehandle" );
> but it doesn't work.the value passed to child is only a string.i can't use
> it to read file.
>
> if i pass it like this:
> $LB::var;
> i can't use it in child process either.
>
> like this:
> %ENV{$var}=$ filehanlde;
> it doesn't work.it is also a string value can't be used as a file handle.
>
> or like this:
> open (TEXT,"file" );
> system("perl child.pl",*TEXT) ;
> in child i use the parameter like this:
> local *TEXT=shift;
> while(<TEXT> ){
> print;
> }
> it doesn't work either.
>
> maybe i can't pass a variable in command line like
> system("perl child.pl" ,parameter);
> maybe i can't create a child process like this..
>
> how could i pass a file handle to child process when using system to create
> child process.
> should i create child process in other way. then i can pass the file handle.
>
>

[Non-text portions of this message have been removed]

Your message has been successfully submitted and would be delivered to recipients shortly.