package UtilsC; #@ISA = qw(); #公開したいサブルーチン @EXPORT = qw(); #use Inline C => Config => CCFLAGS => '' => LIBS => '' => CC => 'cl'; #use Inline C => Config => CCFLAGS => '' => LIBS => '' => CC => 'gcc'; use Inline C; use strict; #use warnings; sub IsSameFile { my ($f1, $f2) = @_; if(-s $f1 != -s $f2) { my $s1 = -s $f1; my $s2 = -s $f2; my $s = ($s1 < $s2)? $s1 : $s2; $s = 1 if($s == 0); return $s; } return IsSameFile_C($f1, $f2); } 1; __DATA__ __C__ #include #include #include int IsSameFile_C(char* f1, char* f2) { FILE *in1, *in2; char c1, c2; printf("f1: %s\n", f1); printf("f2: %s\n", f2); in1 = fopen(f1, "rb"); if(!in1) return -1; in2 = fopen(f2, "rb"); if(!in2) return -1; int c = 1; int IsSame = 1; while(1) { c1 = fgetc(in1); c2 = fgetc(in2); if(feof(in1) && !feof(in2)) { IsSame = 0; break; } if(feof(in2)) { IsSame = 0; break; } if(c1 != c2) { IsSame = 0; break; } c++; } fclose(in2); fclose(in1); if(IsSame) return 0; return c; }