in reply to copy - Inappropriate ioctl for device

use strict; use warnings; use File::Copy; my $source="im"; my $target_input_file="/home/lakshmanan/Perl/"; my($channel,$target); eval{ copy("$source" ,"$target_input_file"); }; if($!) { open(FAIL,">>failed_copy_$channel"); print FAIL"FAILED TO Copy \"$target\" WITH FROM \"$target_input_fi +le\" +....\n"; close(FAIL); }

The above code works fine for me

Check your program with strict and warnings

Replies are listed 'Best First'.
Re^2: copy - Inappropriate ioctl for device
by Anonymous Monk on Feb 10, 2009 at 22:41 UTC
    $! is only modified on failure. Most if not all functions leave it alone on success. This means if the copy succeeds, then $! is set to whatever it was before copy() was called -- which, given the nature of $!, is probably an error result, but might be success, as lakshmananindia noted.

    wol's solution is best, because it doesn't rely on $! to figure out whether the copy succeeded.

Re^2: copy - Inappropriate ioctl for device
by shekarkcb (Beadle) on Feb 11, 2009 at 05:51 UTC
    Hi,

    Thank you all for the reply, i have re wrote my code, this whole code is embed in some big function, source file size is too large , may be this is the issue, (For info, this code works for small files, or make explicitly run) even after using die, or the code with strict and warnings, i am unable to get out of " Inappropriate ioctl for device ", hence closing the thread. Finally i am using this code for copying files

    $ret_value=system("copy \"$source\" \"$target\""); if($ret_value ne 0) { open(FAIL,">>failed_copy_$channel"); print FAIL"FAILED TO Copy \"$target\" WITH FROM \"$target_input_fi +le\" +....\n"; close(FAIL); }

    This works fine if used explicitly or used inside any program, or used to copy large files (more than 1MB also)

    Thank you all for your support,
    ShekarKCB
      ...strict and warnings, i am unable to get out of " Inappropriate ioctl for device "...
      Your mistake was checking $! when you weren't supposed to.

      Do not use $! to determine if a failure occured.

      perlvar says the value of $! is meaningful only immediately after a failure:

      if (open(FH, $filename)) { # Here $! is meaningless. ... } else { # ONLY here is $! meaningful. ... # Already here $! might be meaningless. } # Since here we might have either success or failure, # here $! is meaningless.