有哪位高人写过这样的文件目录比较算法!该如何处理

有哪位高人写过这样的文件目录比较算法!!!急!!
该算法的功能要求如下:
a为一目录,b为a的备份目录
比较a和b目录下的文件数,文件的内容是否相同,不同的话返回-1,要求用c写,可否给我完整的代码啊,现在急要啊~~~

------解决方案--------------------
或者直接
diff a b

------解决方案--------------------
#!/bin/sh
if [ $# -ne 2 ] ; then
echo $0: TO diff two dirs using md5
echo USAGE: $0 dir1 dir2
exit 0
fi

function md5dir()
{
find $1 | while read f
do
if [ -f $f ] ; then
fmd5=`md5sum $f | awk '{print $1} '`
echo $f:$fmd5 > > $2
fi
done
}


function dfab()
{
cat $1| while read f
do
dira=`echo $1 | awk -F ". " '{print $1} '`
dirb=`echo $2 | awk -F ". " '{print $1} '`
nf=`echo $f | sed s/^$dira/$dirb/g `
fn=`echo $f| sed s/^$dira//g | awk -F ": " '{print $1} '`
grep $nf $2 > /dev/null 2> &1
if [ $? -eq 0 ] ;then
echo same:$fn> > $3
else
echo differ:$fn> > $3
fi

done
}
suf=$$
md5dir $1 $1.md5.$sfu
md5dir $2 $2.md5.$suf
dfab $1.md5.$suf $2.md5.$suf md5.dif.$suf
dfab $2.md5.$suf $1.md5.$suf md5.dif.$suf
rm -f $1.md5.$suf $2.md5.$suf
sort -u md5.dif.$suf
rm -f md5.dif.$suf


试了一下,这个好像可以跑,汗。。。

------解决方案--------------------
#!/bin/sh
if [ $# -ne 2 ] ; then
echo $0: TO diff two dirs using md5
echo USAGE: $0 dir1 dir2
exit 0
fi

function md5dir()
{
find $1 | while read f
do
if [ -f $f ] ; then
fmd5=`md5sum $f | awk '{print $1} '`
bf=`echo $f|sed s:$1::g `
echo $bf:$fmd5 > > $2
fi
done
}


function dfab()
{
cat $1| while read f
do
fn=`echo $f| awk -F ": " '{print $1} '`
grep $f $2 > /dev/null 2> &1
if [ $? -eq 0 ] ;then
echo same:$fn> > $3
else
echo differ:$fn> > $3
fi

done
}

md5dir $1 $1.md5.$$
md5dir $2 $2.md5.$$
dfab $1.md5.$$ $2.md5.$$ md5.dif.$$
dfab $2.md5.$$ $1.md5.$$ md5.dif.$$
rm -f $1.md5.$$ $2.md5.$$
sort -u md5.dif.$$
rm -f $md5.dif.$$

这个可以了,

------解决方案--------------------
比较两个文件内容相同不相同,用memcpy就可以了,大概如下:
FILE *fp1 = fopen(szFileName1, "rb ");// 注意要用二进制读取
FILE *fp2 = fopen(szFileName2, "rb ");
// 判断一下是否打开成功,我就免了
// 可以先判断一下大小是否相等,如果不相等,则肯定不同
char szBuff1[1024];
char szBuff2[1024];
while (fgets(szBuff1, 1024, fp1) != NULL)
{
fgets(szBuff2, 1024, fp2);
// 判断一下是否为空,如果为空,显然不同,自己判断吧
//然后调用memcpy比较szBuff1与szBuff2
}
//如果上面循环没有发现不同,在这里也要调用fgets(szBuff2, 1024, fp2)判断是否为空
//如果非空,那么两个文件也不同。
//最后关闭文件