Beefy Boxes and Bandwidth Generously Provided by pair Networks
Perl: the Markov chain saw

Re^2: MD5 checksums for Windows

by aussiecoder (Acolyte)
on Oct 25, 2016 at 04:55 UTC ( #1174644=note: print w/replies, xml ) Need Help??

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

Log In?

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: note [id://1174644]
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others romping around the Monastery: (2)
As of 2022-05-18 03:38 GMT
Find Nodes?
    Voting Booth?
    Do you prefer to work remotely?

    Results (68 votes). Check out past polls.