UNIX下怎么得到一个文件的CheckSum

UNIX下如何得到一个文件的CheckSum
有现成的函数吗?
谢谢

------解决方案--------------------
google.com/codesearch
md5.c
------解决方案--------------------
学习
------解决方案--------------------
所謂checksum就是對一段數據按字節求和,不管是否溢出. 下面的例子checksum結果是一個雙字節數.

.. 簡易的程序,僅供參考.


#include <stdio.h>
#include <stdlib.h>


unsigned short checksum( unsigned char * bufp, unsigned long buf_len )
{
unsigned short sum = 0;

while( buf_len -- )
{
sum += *(bufp++);
}

return sum;

}


#define BUFFER_SIZE 4096

int main( int ac, char *av[] )
{

unsigned short chksum;
FILE *fp;
unsigned char buf[ BUFFER_SIZE ];
int n_chars;



if( ac != 2 )
{
fprintf( stderr, "Usage : %s target file.\n " );
exit(1);
}

if( ( fp = fopen( av[1], "rb " ) ) == NULL )
{
fprintf( stderr, "Open file fail! " );
perror( av[1] );
exit(1);
}

chksum = 0;

while( (n_chars = fread( buf , 1, BUFFER_SIZE, fp) ) > 0 )
{
chksum += checksum( buf, n_chars );
}

if( n_chars == -1 )
{
fprintf( stderr, "Read file fail! " );
perror( av[1] );
exit(1);
}

printf( " Checksum of file \ " %s \ " is 0x%04x \n " , av[1], chksum );

return 0;

}