in reply to Re: saving a file using a temporary file's handle
in thread saving a file using a temporary file's handle

ok i rewinded it to the start using syseek(FILEHANDLE,0,0) but still i cant save the file on the client side. i use this code on the client side
my $F=FSClient::getfile("$user","$passwd","$host","$port","$ARGV[1]"); binmode HANDLE; print HANDLE <$F>;
where getfile is the method returning the handle to the temporary file as explained in the earlier post. how do i save the file over here?

Replies are listed 'Best First'.
Re^3: saving a file using a temporary file's handle
by bahadur (Sexton) on Jun 03, 2005 at 06:10 UTC
    ok i know what the problem is. let me explain it to u. according to the definition of the module File::Temp the moment the program exits the file handle is closed. so even though i am returning the file handle the client cannot save it cause the handle is already closed by the module. i figured this out cause instead of closing the handle to the temporary file in the module i closed it in the client. so it gave me an error saying
    <code>Close on unopened file <handle> at ./fsclient1.pl line 247.</code how can the handle be not open. the routine from the module just returned it a few lines above. so the reason is that by the time the client tries to save the file the module has exited hence the handle to the temporary file is closed. so how do i solve this problem?
    also am i saving the file in a proper way on the client side?

      I think the answer to your quandry is given in the warnings section of File::Temp where it says:

      You will have to clear the close-on-exec bit on that file descriptor before passing it to another process. use Fcntl qw/F_SETFD F_GETFD/; fcntl($tmpfh, F_SETFD, 0) or die "Can't clear close-on-exec flag on temp fh: $!\n";

      Examine what is said, not who speaks -- Silence betokens consent -- Love the truth but pardon error.
      Lingua non convalesco, consenesco et abolesco. -- Rule 1 has a caveat! -- Who broke the cabal?
      "Science is about questioning the status quo. Questioning authority".
      The "good enough" maybe good enough for the now, and perfection maybe unobtainable, but that should not preclude us from striving for perfection, when time, circumstance or desire allow.