Velocity Reviews - Computer Hardware Reviews

Velocity Reviews > Newsgroups > Programming > C Programming > checksum in the end of the file

Reply
Thread Tools

checksum in the end of the file

 
 
pradeep
Guest
Posts: n/a
 
      07-09-2003
I have 2 data files,
DATA1 and DATA2 , both same.
My task is to:
Open DATA1, compute the checksum and put it in the end of the
file(don't bother about boundary conditions).close DATA1

Open DATA2,compute the checksum and put it in the end(don't bother
about boundary conditions).close DATA2.

Now again open DATA1, compute the checksum of the file(leaving the
checksum value stored in the end) and then compare it with checksum
stored in the end.Return TRUE or FALSE as the case may be.

Same for DATA2 in case check for DATA1 fails.

Here is my program but I am not getting proper results..
Any help would be appreciated.
#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>
#include <string.h>
int main()
{
FILE *fp;

unsigned int p = 0;
unsigned int i = 0;
char ch;
unsigned int size;
fp=fopen("/users/pradeepb/c_progs/DATA1","r+");
if(fp == NULL) {
printf("file not exist\n");
exit(1);
}
while((ch=getc(fp)) != EOF) {
p+=ch;
}
fseek(fp,0L,SEEK_END);
fwrite(&p,sizeof(unsigned int),1,fp);
fclose(fp);
p=0;
fp=fopen("/users/pradeepb/c_progs/DATA2","r+");
if(fp == NULL) {
printf("file not exist\n");
exit(1);
}
while((ch=getc(fp)) != EOF) {
p+=ch;
}
fseek(fp,0L,SEEK_END);
fwrite(&p,sizeof(unsigned int),1,fp);
fclose(fp);

fp=fopen("/users/pradeepb/c_progs/DATA1","r");

p=0;
if(fp == NULL)
exit(1);


while((ch=getc(fp)) != EOF) {
p+=ch;
}

fseek(fp,0L,SEEK_END);
size = ftell(fp);
fseek(fp,size-sizeof(unsigned),SEEK_SET);

i=0;
while((ch=getc(fp)) != EOF) {
i+=ch;
}

printf(" %d %d",p,i);
if(p-i == i)
printf("correct checksum of original file yahoo!!\n");
fclose(fp);
fp=fopen("/users/pradeepb/c_progs/DATA2","r");
p=0;
i=0;
if(fp == NULL)
exit(1);
while((ch=getc(fp)) != EOF) {
p+=ch;
}
fseek(fp,0L,SEEK_END);
size = ftell(fp);
fseek(fp,size-sizeof(unsigned),SEEK_SET);
while((ch=getc(fp)) != EOF) {
i+=ch;
}
printf(" %d %d",p,i);

if(p-i == i)
printf("correct checksum of checksum file yahoo!!\n");




return 0;
}
 
Reply With Quote
 
 
 
 
Luiz Capitulino
Guest
Posts: n/a
 
      07-09-2003
http://www.velocityreviews.com/forums/(E-Mail Removed) (pradeep) wrote in message news:<(E-Mail Removed). com>...

> Now again open DATA1, compute the checksum of the file(leaving the
> checksum value stored in the end) and then compare it with checksum
> stored in the end.Return TRUE or FALSE as the case may be.


I think the problem is it. Try to store the original checksum in the
memory, remove it from the file, and so do the new checksum.

The first checksum was made with the original file, the second not.

-- Luiz Capitulino
 
Reply With Quote
 
 
 
 
Eric Bernard
Guest
Posts: n/a
 
      07-09-2003
(E-Mail Removed) (pradeep) wrote in message news:<(E-Mail Removed). com>...
> I have 2 data files,
> DATA1 and DATA2 , both same.
> My task is to:
> Open DATA1, compute the checksum and put it in the end of the
> file(don't bother about boundary conditions).close DATA1
>
> Open DATA2,compute the checksum and put it in the end(don't bother
> about boundary conditions).close DATA2.
>
> Now again open DATA1, compute the checksum of the file(leaving the
> checksum value stored in the end) and then compare it with checksum
> stored in the end.Return TRUE or FALSE as the case may be.
>
> Same for DATA2 in case check for DATA1 fails.
>
> Here is my program but I am not getting proper results..
> Any help would be appreciated.
> #include <stdio.h>
> #include <sys/types.h>
> #include <unistd.h>
> #include <string.h>
> int main()
> {
> FILE *fp;
>
> unsigned int p = 0;
> unsigned int i = 0;
> char ch;
> unsigned int size;
> fp=fopen("/users/pradeepb/c_progs/DATA1","r+");
> if(fp == NULL) {
> printf("file not exist\n");
> exit(1);
> }
> while((ch=getc(fp)) != EOF) {
> p+=ch;
> }
> fseek(fp,0L,SEEK_END);
> fwrite(&p,sizeof(unsigned int),1,fp);
> fclose(fp);
> p=0;
> fp=fopen("/users/pradeepb/c_progs/DATA2","r+");
> if(fp == NULL) {
> printf("file not exist\n");
> exit(1);
> }
> while((ch=getc(fp)) != EOF) {
> p+=ch;
> }
> fseek(fp,0L,SEEK_END);
> fwrite(&p,sizeof(unsigned int),1,fp);
> fclose(fp);
>
> fp=fopen("/users/pradeepb/c_progs/DATA1","r");
>
> p=0;
> if(fp == NULL)
> exit(1);
>
>
> while((ch=getc(fp)) != EOF) {
> p+=ch;
> }
>
> fseek(fp,0L,SEEK_END);
> size = ftell(fp);
> fseek(fp,size-sizeof(unsigned),SEEK_SET);
>
> i=0;
> while((ch=getc(fp)) != EOF) {
> i+=ch;
> }
>
> printf(" %d %d",p,i);
> if(p-i == i)
> printf("correct checksum of original file yahoo!!\n");
> fclose(fp);
> fp=fopen("/users/pradeepb/c_progs/DATA2","r");
> p=0;
> i=0;
> if(fp == NULL)
> exit(1);
> while((ch=getc(fp)) != EOF) {
> p+=ch;
> }
> fseek(fp,0L,SEEK_END);
> size = ftell(fp);
> fseek(fp,size-sizeof(unsigned),SEEK_SET);
> while((ch=getc(fp)) != EOF) {
> i+=ch;
> }
> printf(" %d %d",p,i);
>
> if(p-i == i)
> printf("correct checksum of checksum file yahoo!!\n");
>
>
>
>
> return 0;
> }



I see many problems in that piece of code.

Firstly, you are using a char type with getc, which returns int (yes,
it matters). Also, "char ch" is signed, which means that if the file
has a byte with a value of 128 to 255, ch will be negative thus p +=
ch; decrements p.

Secondly, the checksum you store in the end is based on 2 or four
bytes in integer representation. When you read it back, you still add
up its bytes but that's not the same thing as reading it as an actual
integer. For example, if the checksum was 256, or 0x00000100, your
computation would give 1 instead of 256 when you read it back.

That's all I bothered to read for now, but I'm sure it will help.

Kind regards

Eric Bernard.
 
Reply With Quote
 
 
 
Reply

Thread Tools

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are Off


Similar Threads
Thread Thread Starter Forum Replies Last Post
Is a blank at the end of a C file a better style than a newline atthe end of the file or is it better to place none? Jimmy C Programming 13 09-21-2011 12:17 AM
Is a blank at the end of a C file a better style than a newline atthe end of the file or is it better to place none? Jimmy C Programming 3 09-09-2011 10:36 PM
calculate MD5 checksum for a file Steve Java 3 05-06-2006 11:41 PM
Re: How to store a checksum value at end of file? Dave Thompson C Programming 0 07-04-2003 12:21 AM
Re: How to store a checksum value at end of file? Morris Dovey C Programming 2 06-24-2003 11:53 PM



Advertisments