08 March, 2014

Humming Code

Humming Code Receiver


#include<stdio.h>
#include<fcntl.h>
main()
{
    int fd,i,ind;
    char data[11],ch;

    if((fd=open("testfile",O_RDONLY))<=0)
        perror("File open failed");
   
    while(1)
    {
        if((i=read(fd,data,11))<=0)
            break;

        for(i=10;i>=0;i--)
        {
            printf("%c",data[i]);
        }
        hammingCode(data);
        ind=8;

        for(i=0;i<11;i++)
        {
           
            if(i!=0 && i!=1 && i!=3 && i!=7)
            {
                if(data[i]=='1')
                {
                    ch=setBit(ch,ind--);
                }
                else
                {
                    ch=unSetBit(ch,ind--);
                }
            }
        }
        ch=unSetBit(ch,1);
        printf("%c",ch);
        printf("\n");
    }
}
void displayBit(char ch)
{
    int no=128;
    int i;

    for(i=0;i<8;i++)
    {
        if((no&ch)>0)
            printf("1");
        else
            printf("0");
       
        no=no>>1;
    }
}
char setBit(char ch,int pos)
{
    int no=128;
   
    no=no>>(pos-1);
   
    return ch|no;

}
char unSetBit(char ch,int pos)
{
    int no=128;
   
    no=no>>(pos-1);

    no=~no;

    return ch&no;
}
void hammingCode(char data[])
{
   
    int one=0,two=0,three=0,four=0,i;   

    for(i=1;i<=11;i++)
    {
        if((i==1 || i==3 || i==5 || i==7 || i==9 || i==11) && (data[i-1]=='1'))
        {
            one++;
        }
        if((i==2 || i==3 || i==6 || i==7 || i==10 || i==11) &&(data[i-1]=='1'))
        {
            two++;
        }
        if((i==4 || i==5 || i==6 || i==7) && (data[i-1]=='1'))
        {
            three++;
        }
        if((i==8 || i==9 || i==10 || i==11) && (data[i-1]=='1'))
        {
            four++;
        }
    }
   
    if(one%2==0 && two%2==0 && three%2==0 && four%2==0)
        printf("\tValid Data - \t");
    else
    {
        int pos=0;

        if(one%2!=0)
        {
            pos++;
        }
        if(two%2!=0)
        {
            pos+=2;
        }
        if(three%2!=0)
        {
            pos+=4;
        }   
        if(four%2!=0)
        {
            pos+=8;
        }
       
        printf("Error detected at bit %d",pos);

        if(data[pos]==0)
            data[pos]='1';
        else
            data[pos]='0';
        printf("\nCorrected Data is: ");
    }
   
}



Humming Code Sender


#include<stdio.h>
#include<fcntl.h>

void displayBit(char ch);
char* hammingCode(char ch);
char getBit(char ch,int pos);

main()
{
    int fd,fd1,i,j;
    char ch,*data;

    if((fd=open("testfile",O_WRONLY))<=0)
        perror("File open failed");
   
    if((fd1=open("input.txt",O_RDONLY))<=0)
        perror("File open failed");

    while(1)
    {
        if((i=read(fd1,&ch,1))<=0)
            break;
        if(ch==10)
            break;

        printf("\nchar is: %c -",ch);
        displayBit(ch);

        data=hammingCode(ch);
        printf("\n\nSender\n:");

        for(i=10;i>=0;i--)
        {
            printf("%c",data[i]);
        }   
       
        if((i=write(fd,data,11))<=0)
            break;

        free(data);
       
    }
   
}
void displayBit(char ch)
{
    int no=128;
    int i;

    for(i=0;i<8;i++)
    {
        if((no&ch)>0)
            printf("1");
        else
            printf("0");
       
        no=no>>1;
    }
}
char getBit(char ch,int pos)
{
    int no=128;

    no=no>>(pos-1);

    if((no&ch)>0)
        return '1';
    else
        return '0';
}
char* hammingCode(char ch)
{
    char *data=(char *)malloc(sizeof(char)*11);
   
    int one=0,two=0,three=0,four=0,i;   

    data[0]='0';    //1st
    data[1]='0';    //2nd

    data[2]=getBit(ch,8);

    data[3]='0';    //4th

    data[4]=getBit(ch,7);
    data[5]=getBit(ch,6);
    data[6]=getBit(ch,5);

    data[7]='0';    //8th

    data[8]=getBit(ch,4);
    data[9]=getBit(ch,3);
    data[10]=getBit(ch,2);


    for(i=1;i<=11;i++)
    {
        if((i==1 || i==3 || i==5 || i==7 || i==9 || i==11) && (data[i-1]=='1'))
        {
            one++;
        }
        if((i==2 || i==3 || i==6 || i==7 || i==10 || i==11) &&(data[i-1]=='1'))
        {
            two++;
        }
        if((i==4 || i==5 || i==6 || i==7) && (data[i-1]=='1'))
        {
            three++;
        }
        if((i==8 || i==9 || i==10 || i==11) && (data[i-1]=='1'))
        {
            four++;
        }
    }
   
    if(one%2!=0)
        data[0]='1';

    if(two%2!=0)
        data[1]='1';

    if(three%2!=0)
        data[3]='1';

    if(four%2!=0)
        data[7]='1';

    return data;
}

CRC

CRC Receiver

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


struct frame
{
    char info[1];
    char rem[1];
}r;

void dispBits(char c);
int getBit(char c,int pos);
char setBit(char c,int pos);
char unsetBit(char c,int pos);

main()
{
    int tmp;
    int fd,file1;

    int d=13;   // div by 1101 (13)

    if((fd=open("testfile",O_RDONLY))<0)
        perror("fifo open failed");

    if((file1=open("output.txt",O_WRONLY))<0)
        perror("file open failed");

    while(1)
    {
        if((tmp=read(fd,r.info,1))>0)
        {
            int i,j,tmp;
            char ans=0,trem;
           
            if((tmp=read(fd,r.rem,1))<=0)
                break;
           
            //printf("\n receive data : ");
            //dispBits(r.info[0]);
           
            //printf("\t remainder : ");
            //dispBits(r.rem[0]);
           
            trem=0;
           
            for(i=1;i<=8+3;i++)  //8 data bit and 3 for 000
            {
                trem=trem<<1;  //for reminder
                ans=ans<<1;
                if(i<=8)  //data part
                {
                    if(getBit(r.info[0],i)==1)
                        trem=setBit(trem,8);
                    else
                        trem=unsetBit(trem,8);   
                }
                else    // last 3 bit of received remainder
                {
                    if(getBit(r.rem[0],i-3)==1)
                        trem=setBit(trem,8);
                    else
                        trem=unsetBit(trem,8);    
                }
               
                if(getBit(trem,5)==1)  //if divide then
                {
                    trem=trem^d;
                    ans=setBit(ans,8);
                }   
            }
           
            printf("\n [receiver] division ans : ");
            dispBits(ans);
           
            printf("\t remainder : ");
            dispBits(trem);
           
            if(trem==0)
            {
                if((tmp=write(file1,r.info,1))<=0)      //send char
                    perror("message write failed");
            }
            else
            {
                printf("\nERROR :: Error in Received data");
            }
        }
    }
    printf("\n");
}


void dispBits(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;
}



CRC Sender


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

struct frame
{
    char info[1];
    char rem[1];
}s;

void dispBits(char c);
int getBit(char c,int pos);
char setBit(char c,int pos);
char unsetBit(char c,int pos);

main()
{
    int fd,file1;
   
    int d=13;   // div by 1101 (13)

    if((fd=open("testfile",O_WRONLY))<0)
        perror("fifo open failed");

    if((file1=open("input.txt",O_RDONLY))<0)
        perror("file open failed");

   
    while(1)
    {
        int i,j,tmp;
        char ans=0;

        if((tmp=read(file1,s.info,1))<=0)
            break;

        if(s.info[0]==10)
            break;
       
        printf("\n\n Input : ");
        dispBits(s.info[0]);
       
        s.rem[0]=0;
       
        for(i=1;i<=8+3;i++)  //8 data bit and 3 for 000
        {
            s.rem[0]=s.rem[0]<<1;  //for reminder
            ans=ans<<1;   
           
            if(i<=8)  //data part
            {
                if(getBit(s.info[0],i)==1)
                    s.rem[0]=setBit(s.rem[0],8);
                else
                    s.rem[0]=unsetBit(s.rem[0],8);   
            }
            else    // last 000
            {
                s.rem[0]=unsetBit(s.rem[0],8); 
            }
           
            if(getBit(s.rem[0],5)==1)  //if divide then
            {
                ans=setBit(ans,8);
                s.rem[0]=s.rem[0]^d;
            }   
        }
       
        printf("\n [sender] division ans : ");
        dispBits(ans);
       
        printf("\t remainder : ");
        dispBits(s.rem[0]);
       
        if((tmp=write(fd,s.info,1))<=0)      //send char
                    perror("message write failed");
        if((tmp=write(fd,s.rem,1))<=0)         //send remainder
                    perror("message write failed");
       
    }
    printf("\n");
}

void dispBits(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

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;
}

Bitstuffing

Bitstuffing  Receiver


#include<stdio.h>
#include<fcntl.h>

struct frame
{
    char info;
    char 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,fd1,i=0,index=1,k;
    char ch;

    if((fd1=open("output.txt",O_WRONLY))<0)
        perror("File open failed");
   
    if((fd=open("testfile",O_RDONLY))<0)
        perror("File open failed");

    while(1)
    {
        if((k=read(fd,&ch,1))<=0)
            break;

        for(i=1;i<=8;i++)
        {
            if(getBit(ch,i)==1)
            {
                r.info=setBit(r.info,index++);
                r.count++;
            }
            else
            {
                r.info=unSetBit(r.info,index++);
                r.count=0;
            }   
            if(r.count==5)
            {
                i=(i%8)+1;
                r.count=0;
            }
            if(index>8)
            {
                printf("%c",r.info);
               
                if((k=write(fd1,&r.info,1))<=0)
                    break;
                index=1;
            }
        }
   
    }   
   
}
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((no&c)>0)
        return 1;
    else
        return 0;
}
char setBit(char c,int pos)
{
    int no=128;

    no=no>>(pos-1);

    return (no|c);

}
char unSetBit(char c,int pos)
{
    int no=128;

    no=no>>(pos-1);

    no=~no;

    return (no&c);
}



Bitstuffing Sender



#include<stdio.h>
#include<fcntl.h>

struct frame
{
    char info;
    char count;
}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,fd1,i=0,index=1,k;
    char ch;

    if((fd1=open("input.txt",O_RDONLY))<0)
        perror("File open failed");
  
    if((fd=open("testfile",O_WRONLY))<0)
        perror("File open failed");
  
    s.count=0;
  
    while(1)
    {
        if((k=read(fd1,&ch,1))<=0)
            break;
      
        if(ch==10)        //Ascii value of Enter
            break;

        printf("\n");
        printf("Input: %c - ",ch);
        displayBits(ch);

        for(i=1;i<=8;i++)
        {
            if(getBit(ch,i)==1)
            {
                s.info=setBit(s.info,index++);
                s.count++;
            }
            else
            {
                s.info=unSetBit(s.info,index++);
                s.count=0;
            }
            if(s.count==5)
            {
                s.info=unSetBit(s.info,index++);
                s.count=0;
            }

            if(index>8)
            {
                printf("\tSend: ");
                displayBits(s.info);
              
                if((k=write(fd,&s.info,1))<=0)
                    perror("Msg write failed");
              
                index=1;
              
            }
        }  
    }
    if(index!=1)
    {
        for(i=index;i<=8;i++)
        {
            s.info=unSetBit(s.info,i);
        }
        printf("\tSend2: ");
        displayBits(s.info);
      
        if((k=write(fd,&s.info,1))<=0)
            perror("Msg write failed");
    }
  
  
}
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((no&c)>0)
        return 1;
    else
        return 0;
}
char setBit(char c,int pos)
{
    int no=128;

    no=no>>(pos-1);

    return (no|c);

}
char unSetBit(char c,int pos)
{
    int no=128;

    no=no>>(pos-1);

    no=~no;

    return (no&c);
}

Bytestuff

Bytestuff Receiver

#include<stdio.h>
#include<fcntl.h>

struct frame
{
    char cbit;
    char *info;
}f;

main()
{
    int fd,i,file1,no,k,flag,j;
    char ch,tmp[10];

    if((fd=open("testfile",O_RDONLY))<0)
        perror("File open failed");

    if((file1=open("outputfile",O_WRONLY))<0)
        perror("Output file open failed");

    for(;;)
    {
        flag=0,k=0;

        read(fd,&f.cbit,1);
        printf("\ncbit:%c",f.cbit);

        for(;;)
        {
           
            if((i=read(fd,&ch,1))>0)
            {
                if(ch=='@')
                {
                    read(fd,&ch,1);
                    tmp[k]=ch;
                    k++;
                   
                }
                else if(ch=='#')
                {
                    break;
                }
                else
                {
                    tmp[k]=ch;
                    k++;
                }
               
            }
            else
            {
                flag=1;
                break;
            }
        }
        tmp[k]=NULL;
        //printf("\nMsg is : %s",tmp);
       
        f.info=(char *)malloc(sizeof(char)*k);

        for(i=0;i<k;i++)
        {
            f.info[i]=tmp[i];
        }

        printf("\nMsg is: %s",f.info);
        if(flag==1)
            break;
    }
}


Bytestuff Sender

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

struct frame
{
    char cbit;
   
}f;

main()
{
    int fd,i,file1,j;
    int no=0,flag=0;
    char ch,tmp='@';

    if((fd=open("testfile",O_WRONLY))<0)
    {
        perror("File cannot opend");
    }

    if((file1=open("inputfile",O_RDONLY))<0)
    {
        perror("Input file open failed");
    }

    for(;;)
    {
        flag=0;
        no=rand()%10;       

        f.cbit='#';

        printf("\nRno: %d\n",no);
       
        write(fd,&f.cbit,1);

            for(j=0;j<no;j++)
            {
                if(read(file1,&ch,1)<=0)
                {
                    flag=1;
                    break;
                }       
                if(ch=='#' || ch=='@')
                {
                    write(fd,&tmp,1);
                   
                }
                if((i=write(fd,&ch,1))<=0)
                    perror("Message write failed");

                printf("%c",ch);
            }
        write(fd,&f.cbit,1);

            if(flag==1)
                break;       
    }

}

CharCount

CharCount Receiver

#include<stdio.h>
#include<fcntl.h>
#include<malloc.h>

struct frame
{
        char c;
        char *info;
}f;

main()
{
        int fd,i,j,file1,no;
    char ch;

        if((fd=open("testfile",O_RDONLY))<0)
        {
                perror("File open failed");
        }

        if((file1=open("output.txt",O_WRONLY))<0)
        {
                perror("Output file open failed");
        }
        for(;;)
        {

                if((i=read(fd,&f.c,1))>0)
                {
                        printf("\nCounter: %d",f.c);
                }

        no=f.c;

        f.info=(char *)malloc(sizeof(char) * no);

        for(j=0;j<no;j++)
        {
                    if((i=read(fd,&ch,1))<=0)
                        break;
           
            f.info[j]=ch;
        }
          printf("\nReceiver msg : %s",f.info);
   
              printf("\n");
          
         if((i=write(file1,f.info,f.c))<=0)
                      break;
                 
               printf("\n");
            free(f.info);
         }
}


CharCount Sender

#include<stdio.h>
#include<fcntl.h>
#include<malloc.h>

struct frame
{
        char c;
        char *info;
}f;

main()
{
        int fd,i,j,file1;
        int no;
        char ch;

        if((fd=open("testfile",O_WRONLY))<0)
        {
                perror("File open failed");

        }

        if((file1=open("input.txt",O_RDONLY))<0)
        {
                perror("Input file open failed");
        }

        for(;;)
        {
            
                no=rand() % 10;

                f.info=(char *)malloc(sizeof(char)*no);

                f.c=no;

                   if(read(file1,f.info,no)<=0)
                   break;
       

                 if((i=write(fd,&f.c,1))<=0)
                {
                       perror("Message write failed");
                }
       

        for(j=0;j<no;j++)
        {
            ch=f.info[j];
                    if((i=write(fd,&ch,1))<=0)
                    {
                              perror("Message write failed");

                    }
           
        }
                

            //      printf("%s",f.info);

        }

}

LRC

LRC Receiver

#include<stdio.h>
#include<fcntl.h>

struct frame
{
    char *info;
}f;

int getBit(char c,int pos);

main()
{
    int fd,i,j,file1,k;
    int n=3,count=0;

    if( ((fd=open("testfile",O_RDONLY))<0) || ((file1=open("output.txt",O_WRONLY))<0) )
    {
        perror("file open failed");
    }       
    for(;;)
    {
       
        char ch;
       
        f.info=(char *)malloc(sizeof(char)*(4));
   
   
        if((k=read(fd,f.info,4))<=0)
            break;
           

        for(i=8;i>=1;i--)
        {
            count=0;
   
            for(j=0;j<4;j++)
            {
                if(getBit(f.info[j],i)==0)
                {
                    count++;
                }
            }
           
            if(count%2!=0)
            {
                perror("Error detected");
            }

        }
       
        printf("\nMsg is: %s ",f.info);
       


        if(k=write(file1,f.info,3)<=0)
        {
            printf("Msg write failed");
        }
       
           
        free(f.info);   
       
    }
}

int getBit(char c,int pos)
{
    int no=128;

    no=no>>(pos-1);

    if((c&no)>1)
        return 1;
    else
        return 0;
}

LRC Sender 

#include<stdio.h>
#include<fcntl.h>

struct frame
{
    char *info;
}f;

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,i,j,k,count=0;

    if( ((fd=open("testfile",O_WRONLY))<0) || ((file1=open("input.txt",O_RDONLY))<0))
    {
        perror("File open failed");
    }

    for(;;)
    {
        f.info=(char *)malloc(sizeof(char)*4);
       
        if((k=read(file1,f.info,3))<=0)
        {
            break;
        }
       
        for(i=8;i>=1;i--)
        {
            count=0;

            for(j=0;j<3;j++)
            {
                if(getBit(f.info[j],i)==1)
                    count++;
            }

            if(count%2!=0)
            {
                f.info[3]=setBit(f.info[3],i);
            }
            else
            {
                f.info[3]=unsetBit(f.info[3],i);
            }
        }
   
        printf("\n");
        for(i=0;i<4;i++)
        {
            printf("\n");

            if(i==3)
                printf("--------------\n");

            displayBits(f.info[i]);
        }
        if((k=write(fd,f.info,4))<=0)
        {
            perror("File write failed");
        }
        free(f.info);
    }
}
void displayBits(char c)
{
    int no=128,i;

    for(i=0;i<8;i++)
    {
        if((c&no)>0)
        {
            printf("1");
        }
        else
        {
            printf("0");
        }
        no=no>>1;
    }
}
int getBit(char c,int pos)
{
    int no=128;

    no=no>>(pos-1);

    if((no&c)>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;
}

VRC

VRC Receiver

#include<fcntl.h>
#include<stdio.h>

void displayBit(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 getBits(char c,int pos)
{
    int no=128;
   
    no=no>>(pos-1);

    if((no&c)>0)
        return 1;
    else
        return 0;
}
char unsetBits(char c,int pos)
{
    int no=128;

    no=no>>(pos-1);

    no=~no;

    return (no&c);
}
main()
{
        int fd,fd1,i,count=0,bit;
        char ch;

        if((fd=open("testfile",O_RDONLY)) < 0 && (fd1=open("output.txt",O_WRONLY)<0))
        {
                perror("Pipe open failed");
        }
        printf("Received message : ");

        for(;;)
        {
               count=0;

               if((i=read(fd,&ch,1)) > 0)
                {
                        //printf("%c\t",ch);

                        //displayBit(ch);

                        for(i=1;i<=8;i++)
                        {

                                bit=getBits(ch,i);

                                if(bit==1)
                                {
                                        count++;
                                }
                        }
                        if(count%2==0)
                        {
                                bit=getBits(ch,1);

                                if(bit==1)
                                {
                                        ch=unsetBits(ch,1);
                                }
                        }
                        else
                        {
                                printf("Error detected at char %c",ch);
                                break;
                        }

                        printf("%c",ch);

                        //displayBit(ch);

                        write(fd1,&ch,1);

                }

        }
}