CHECKSUM Receiver
#include<fcntl.h>
#include<stdio.h>
#include<stdlib.h>
struct frame
{
char *info;
int count;
}r;
void displayBits(char c);
int getBit(char c,int pos);
char setBit(char c,int pos);
char unsetBit(char c,int pos);
main()
{
int fd,file,nread,nwrite,i,j;
int n=4; //Number of frames
if((fd=open("testfile",O_RDONLY))<0)
perror("Pipe open failed");
if((file=open("output.txt",O_WRONLY))<0)
perror("Output file open failed");
printf("\nOutput..........");
for(;;)
{
char ch;
if((nread=read(fd,&ch,1))>0)
{
int sum,carry;
r.info=(char *)malloc(sizeof(char)*(n+1));
r.info[0]=ch;
for(i=1;i<n;i++)
{
if(nread=read(fd,&r.info[i],1)<=0)
break;
}
printf("\nReceived %s",r.info);
carry=0;
for(i=8;i>=1;i--)
{
sum=carry;
for(j=0;j<n;j++)
{
if(getBit(r.info[j],i)==1)
{
sum++;
}
}
if((sum%2)==1)
{
r.info[n]=setBit(r.info[n],i);
}
else
{
r.info[n]=unsetBit(r.info[n],i);
}
switch(sum)
{
case 5:
carry=sum-3;
break;
case 4:
case 3:
carry=sum-2;
break;
case 2:
case 1:
carry=sum-1;
break;
}
}
printf("\nAt receiver: \n");
for(i=0;i<=n;i++)
{
if(i==n)
printf("\n-------Sum----\n");
displayBits(r.info[i]);
printf("\n");
}
if(carry==1)
{
printf(" %d\n",carry);
r.info[n]=r.info[n]+1;
displayBits(r.info[n]);
printf("\n");
}
printf("-----1's Complement----\n");
r.info[n]=~r.info[n];
displayBits(r.info[n]);
printf("\n");
if(r.info[n]==0)
{
for(i=0;i<=n-2;i++)
{
if((nwrite=write(file,&r.info[i],1))<=0)
perror("message write failed");
}
}
else
{
printf("\nError detected");
}
free(r.info);
}
}
}
void displayBits(char c)
{
int no=128,i;
for(i=0;i<8;i++)
{
if((no&c)>0)
printf("1");
else
printf("0");
no=no>>1;
}
}
int getBit(char c,int pos)
{
int no=128;
no=no>>(pos-1);
if((c&no)>0)
return 1;
else
return 0;
}
char setBit(char c,int pos)
{
int no=128;
no=no>>(pos-1);
c=c|no;
return c;
}
char unsetBit(char c,int pos)
{
int no=128;
no=no>>(pos-1);
no=~no;
return c&no;
}
CHECKSUM Sender
#include<fcntl.h>
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
struct frame
{
char *info;
}s;
void displayBits(char c);
int getBit(char c,int pos);
char setBit(char c,int pos);
char unsetBit(char c,int pos);
main()
{
int fd,file1,j,nread,nwrite;
int n=3; //frame size
if((file1=open("input.txt",O_RDONLY))<0)
perror("Input file open failed");
if((fd=open("testfile",O_WRONLY))<0)
perror("Pipe open failed");
while(1)
{
int i;
int sum,carry;
s.info=(char *)malloc(sizeof(char)*(n+1));
if((nread=read(file1,s.info,n))<=0)
break;
carry=0;
for(i=8;i>=1;i--)
{
sum=carry;
for(j=0;j<n;j++)
{
if(getBit(s.info[j],i)==1)
{
sum++;
}
}
if((sum%2)==1)
{
s.info[n]=setBit(s.info[n],i);
}
else
{
s.info[n]=unsetBit(s.info[n],i);
}
switch(sum)
{
case 4:
case 3:
carry=sum-2;
break;
case 2:
case 1:
carry=sum-1;
break;
}
}
printf("\nInput \n");
for(i=0;i<=n;i++)
{
if(i==n)
printf("--------Sum-------\n");
displayBits(s.info[i]);
printf("\n");
}
if(carry==1)
{
printf(" %d\n",carry);
s.info[n]=s.info[n]+1;
displayBits(s.info[n]);
printf("\n");
}
printf("--1's Complement--\n");
s.info[n]=~s.info[n];
displayBits(s.info[n]);
printf("\n");
for(i=0;i<=n;i++)
{
if((nwrite=write(fd,&s.info[i],1))<=0)
perror("Message write failed");
}
free(s.info);
}
}
void displayBits(char c)
{
int no=128,i;
for(i=0;i<8;i++)
{
if((no&c)>0)
printf("1");
else
printf("0");
no=no>>1;
}
}
int getBit(char c,int pos)
{
int no=128;
no=no>>(pos-1);
if((c&no)>0)
return 1;
else
return 0;
}
char setBit(char c,int pos)
{
int no=128;
no=no>>(pos-1);
c=c|no;
return c;
}
char unsetBit(char c,int pos)
{
int no=128;
no=no>>(pos-1);
no=~no;
return c&no;
}