1#!/usr/local/bin/perl 2 3($#ARGV == 1) || die "usage: cmp.pl <file1> <file2>\n"; 4 5open(IN0,"<$ARGV[0]") || die "unable to open $ARGV[0]\n"; 6open(IN1,"<$ARGV[1]") || die "unable to open $ARGV[1]\n"; 7binmode IN0; 8binmode IN1; 9 10$tot=0; 11$ret=1; 12for (;;) 13 { 14 $n1=sysread(IN0,$b1,4096); 15 $n2=sysread(IN1,$b2,4096); 16 17 last if ($n1 != $n2); 18 last if ($b1 ne $b2); 19 last if ($n1 < 0); 20 if ($n1 == 0) 21 { 22 $ret=0; 23 last; 24 } 25 $tot+=$n1; 26 } 27 28close(IN0); 29close(IN1); 30if ($ret) 31 { 32 printf STDERR "$ARGV[0] and $ARGV[1] are different\n"; 33 @a1=unpack("C*",$b1); 34 @a2=unpack("C*",$b2); 35 for ($i=0; $i<=$#a1; $i++) 36 { 37 if ($a1[$i] ne $a2[$i]) 38 { 39 printf "%02X %02X <<\n",$a1[$i],$a2[$i]; 40 last; 41 } 42 } 43 $nm=$tot+$n1; 44 $tot+=$i+1; 45 printf STDERR "diff at char $tot of $nm\n"; 46 } 47exit($ret); 48