http://qs1969.pair.com?node_id=1174644


in reply to Re: MD5 checksums for Windows
in thread MD5 checksums for Windows

I've modified generate_md5sum to look like this ...
sub generate_md5sum { my ($fname) = @_; my $sum = "file-not-readable "; my $o_md5 = Digest::MD5->new; my $fh = IO::File->new; if ( open( $fh, "+<", $fname ) ) { if ( flock( $fh, LOCK_EX | LOCK_NB ) ) { binmode($fh); $sum = $o_md5->addfile($fh)->hexdigest(); flock( $fh, LOCK_UN ); close $fh; if ($b_dups) { $h_sums ||= {}; my $a_files = $h_sums->{$sum} ||= []; push @$a_files, $fname; } } } return $sum; }
Which allows the script to continue over locked or unreadable files. Is this a good solution to this problem ?

Replies are listed 'Best First'.
Re^3: MD5 checksums for Windows
by golux (Chaplain) on Oct 26, 2016 at 01:34 UTC
    Hi aussiecoder,

    Just now saw your two responses.

    I'm guessing that because you're on Windows, you have some other process vying for the file. Windows is much more restrictive than Linux when it comes to separate processes trying to access the same file.

    If that's the case, then yes it is probably a fine solution, especially since you're using the LOCK_NB (non-blocking) flag, as long as you're okay with that file's checksum being skipped if the other process accesses it first. The only thing I would worry about is that possibly the other process might fail for the same reason, unless it, too, incorporates file-locking.

    Cheers, golux

    say  substr+lc crypt(qw $i3 SI$),4,5