<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Vimal Ghorecha&#039;s Personal Utopia</title>
	<atom:link href="http://www.vhghorecha.in/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.vhghorecha.in</link>
	<description>A place where you become OmniLearner</description>
	<lastBuildDate>Wed, 05 Oct 2016 12:12:06 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>https://wordpress.org/?v=4.6.29</generator>
	<item>
		<title>TCP/IP Another POST</title>
		<link>http://www.vhghorecha.in/tcpip-another-post/</link>
		<comments>http://www.vhghorecha.in/tcpip-another-post/#respond</comments>
		<pubDate>Tue, 23 Aug 2016 05:06:28 +0000</pubDate>
		<dc:creator><![CDATA[Vimal Ghorecha]]></dc:creator>
				<category><![CDATA[General]]></category>

		<guid isPermaLink="false">http://www.vhghorecha.in/?p=412</guid>
		<description><![CDATA[<p>Understanding TCP/IP and OSI Models &#160;</p>
<p>The post <a rel="nofollow" href="http://www.vhghorecha.in/tcpip-another-post/">TCP/IP Another POST</a> appeared first on <a rel="nofollow" href="http://www.vhghorecha.in">Vimal Ghorecha&#039;s Personal Utopia</a>.</p>
]]></description>
				<content:encoded><![CDATA[<p>Understanding TCP/IP and OSI Models</p>
<p>&nbsp;</p>
<p>The post <a rel="nofollow" href="http://www.vhghorecha.in/tcpip-another-post/">TCP/IP Another POST</a> appeared first on <a rel="nofollow" href="http://www.vhghorecha.in">Vimal Ghorecha&#039;s Personal Utopia</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.vhghorecha.in/tcpip-another-post/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Understanding TCP/IP and OSI Models</title>
		<link>http://www.vhghorecha.in/understanding-tcpip-osi-models/</link>
		<comments>http://www.vhghorecha.in/understanding-tcpip-osi-models/#respond</comments>
		<pubDate>Tue, 23 Aug 2016 05:05:09 +0000</pubDate>
		<dc:creator><![CDATA[Vimal Ghorecha]]></dc:creator>
				<category><![CDATA[Technical]]></category>

		<guid isPermaLink="false">http://www.vhghorecha.in/?p=410</guid>
		<description><![CDATA[<p>Understanding TCP/IP and OSI Models TCP/IP and OSI Models, OSI Model, TCP/IP Model, TCP/IP Stack</p>
<p>The post <a rel="nofollow" href="http://www.vhghorecha.in/understanding-tcpip-osi-models/">Understanding TCP/IP and OSI Models</a> appeared first on <a rel="nofollow" href="http://www.vhghorecha.in">Vimal Ghorecha&#039;s Personal Utopia</a>.</p>
]]></description>
				<content:encoded><![CDATA[<p>Understanding TCP/IP and OSI Models</p>
<p>TCP/IP and OSI Models, OSI Model, TCP/IP Model, TCP/IP Stack</p>
<p>The post <a rel="nofollow" href="http://www.vhghorecha.in/understanding-tcpip-osi-models/">Understanding TCP/IP and OSI Models</a> appeared first on <a rel="nofollow" href="http://www.vhghorecha.in">Vimal Ghorecha&#039;s Personal Utopia</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.vhghorecha.in/understanding-tcpip-osi-models/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>jTable jQuery Plugin File Upload Control</title>
		<link>http://www.vhghorecha.in/jtable-jquery-plugin-file-upload-control/</link>
		<comments>http://www.vhghorecha.in/jtable-jquery-plugin-file-upload-control/#respond</comments>
		<pubDate>Wed, 25 Feb 2015 15:00:51 +0000</pubDate>
		<dc:creator><![CDATA[Vimal Ghorecha]]></dc:creator>
				<category><![CDATA[JavaScript / jQuery]]></category>

		<guid isPermaLink="false">http://www.vhghorecha.in/?p=341</guid>
		<description><![CDATA[<p>By default jTable jQuery Plugin does not allow to upload file and use File Upload HTML Control. Here I implemented jTableSample demo with File Upload Control. Step1: Create new field that will put &#60;div&#62; tag for our AJAX File Upload. [crayon-69d74ac6ef586663876728/] Step2: We will load AJAX File Upload on div which inserted in first step.(...)</p>
<p>The post <a rel="nofollow" href="http://www.vhghorecha.in/jtable-jquery-plugin-file-upload-control/">jTable jQuery Plugin File Upload Control</a> appeared first on <a rel="nofollow" href="http://www.vhghorecha.in">Vimal Ghorecha&#039;s Personal Utopia</a>.</p>
]]></description>
				<content:encoded><![CDATA[<p>By default jTable jQuery Plugin does not allow to upload file and use File Upload HTML Control.<br />
Here I implemented jTableSample demo with File Upload Control.<br />
Step1: Create new field that will put &lt;div&gt; tag for our AJAX File Upload.</p><pre class="crayon-plain-tag">FileUpload: {
	title: 'Customers File',
	list: false,
	create: true,
	edit: true,
	input: function (data) {
		return '&lt;div id="FileUpload" name="FileUpload"&gt;&lt;/div&gt;';
	}
}</pre><p>
Step2: We will load AJAX File Upload on div which inserted in first step. When file upload through AJAX, it will return file name, after that we will store that file in one JavaScript variable called UploadedFile.</p><pre class="crayon-plain-tag">formCreated: function (event, data){
	data.form.attr('enctype','multipart/form-data');
	$("#FileUpload").uploadFile({
		url:"upload.php",
		fileName:"file",
		onSuccess:function(files,data,xhr){
			UploadedFile = data;
		}
	});
}</pre><p>
Step3: Furthermore, when we submit form for insert record we will set UploadedFile variable in on textbox which will send file name for inserting in database.</p><pre class="crayon-plain-tag">formSubmitting: function (event, data) {
	$("#FileUpload").html('&lt;input type="text" id="thumb_img" name="thumb_img" value="' + UploadedFile + '"&gt;');
}</pre><p>
All other settings are same. Kindly feel free to talk to me.</p>
<p><strong>Like to Download Source Code of Complete Example.</strong></p>

<p>The post <a rel="nofollow" href="http://www.vhghorecha.in/jtable-jquery-plugin-file-upload-control/">jTable jQuery Plugin File Upload Control</a> appeared first on <a rel="nofollow" href="http://www.vhghorecha.in">Vimal Ghorecha&#039;s Personal Utopia</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.vhghorecha.in/jtable-jquery-plugin-file-upload-control/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Hamming Code Implementation in C</title>
		<link>http://www.vhghorecha.in/hamming-code-implementation-in-c/</link>
		<comments>http://www.vhghorecha.in/hamming-code-implementation-in-c/#respond</comments>
		<pubDate>Thu, 01 May 2014 07:19:50 +0000</pubDate>
		<dc:creator><![CDATA[Vimal Ghorecha]]></dc:creator>
				<category><![CDATA[Education]]></category>
		<category><![CDATA[Unix C Programming (FON - 2640011)]]></category>
		<category><![CDATA[2640011]]></category>
		<category><![CDATA[c program]]></category>
		<category><![CDATA[fon]]></category>
		<category><![CDATA[hamming code]]></category>

		<guid isPermaLink="false">http://www.vhghorecha.in/?p=289</guid>
		<description><![CDATA[<p>Hamming Code Implementation in C Programming. Simple example of implementing Hamming Code in Unix C Programming with Named Pipe</p>
<p>The post <a rel="nofollow" href="http://www.vhghorecha.in/hamming-code-implementation-in-c/">Hamming Code Implementation in C</a> appeared first on <a rel="nofollow" href="http://www.vhghorecha.in">Vimal Ghorecha&#039;s Personal Utopia</a>.</p>
]]></description>
				<content:encoded><![CDATA[<p><img src='http://www.vhghorecha.in/wp-content/uploads/hamming_code.png'></p><p><strong>Hamming code</strong> is a set of <b>error-correction</b> code s that can be used to detect and correct bit errors that can occur when computer data is moved or stored.</p>
<div id="attachment_292" style="width: 293px" class="wp-caption aligncenter"><a href="http://www.vhghorecha.in/wp-content/uploads/hamming_algo.jpg"><img class="size-medium wp-image-292" alt="Hamming Code Calculation" src="http://www.vhghorecha.in/wp-content/uploads/hamming_algo-283x300.jpg" width="283" height="300" srcset="http://www.vhghorecha.in/wp-content/uploads/hamming_algo-283x300.jpg 283w, http://www.vhghorecha.in/wp-content/uploads/hamming_algo.jpg 500w" sizes="(max-width: 283px) 100vw, 283px" /></a><p class="wp-caption-text">Hamming Code Calculation</p></div>
<h3>Hamming Code Implementation in C</h3>
<p><strong>Hamming Code Common Functions</strong></p><pre class="crayon-plain-tag">#include&lt;stdio.h&gt;
int power(int n,int m)
{
        int i=0;
        int sum=1;
        for(i=1;i&lt;=m;i++)
                sum *= n;
        return sum;
}
void dec2bin(char bits[], int l, int a)
{
        int i;
        for(i=l-1;i&gt;=0;i--)
        {
                bits[i] = (a &amp; 1) + '0';
                a &gt;&gt;= 1;
        }
}
unsigned char chrpos(int ch,int pos)
{
        return (ch &amp; power(2,pos-1))&gt;&gt;(pos-1);
}
int calcBit(unsigned long c)
{
        int l=0;
        while(c&gt;0)
        {
                l++;
                c&gt;&gt;=1;
        }
        return l;

}
struct checkbit
{
        unsigned int b:1;
};</pre><p>
<strong>Hamming Code Sender</strong></p><pre class="crayon-plain-tag">//Hamming Code Sender Example
#include&lt;stdio.h&gt; //Standard Input Functions
#include&lt;sys/types.h&gt; //Named Pipes (FIFO) Types
#include&lt;sys/stat.h&gt; // Named Pipes (FIFO) Functions
#include&lt;fcntl.h&gt; //File Control Unix Functions
#include&lt;unistd.h&gt; //Unix Standard Functions
#include"hamcom.c"
int main()
{
        char *myfifo = "myfifo"; //FIFO File Path
        int fp; //Open Pipe Return Value
        unsigned char ch;//Original Character
        char str[]="0000000000000000";//This is not part of Hamming Algorithm just for debug
        unsigned short cw=0,cand; //Codeword and temp code operation variable
        int i,ldata,j=0,lcode,rbit=1; //i,j-&gt; Loop variable, ldata-&gt; size of databits
        // lcode-&gt; size of codeword bits, rbit-&gt;size of check bits

        printf("Creating Pipe...Waiting for receiver for Process...\n");
        //Creating Named Pipe
        //mkfifo(&lt;filepath&gt;,&lt;permission&gt;)
        if(mkfifo(myfifo,0666) &lt; 0)
        {
                perror("FIFO (Named Pipe) could not be created.\n");
                exit(-1);
        }
        else
                printf("FIFO (Named Pipe) Created...\n");

        //Opening Named Pipe
        //open(&lt;filepath&gt;,&lt;openingmode&gt;);
        fp = open(myfifo,O_WRONLY);
        if(fp &lt; 0)
        {
                perror("FIFO (Named Pipe) could not be opened.\n");
                exit(-2);
        }
        else
                printf("FIFO (Named Pipe) Opened...\n");

        //HAMMING CODE LOGIC STARTS
        printf("Enter Character : ");
        scanf("%c",&amp;ch);

        ldata = calcBit(ch);//Number of bits in original data

        //Logic of finding number of check bits
        while(power(2,rbit)&lt;(ldata+rbit+1))
        {
                rbit++;
        }

        //Length of codeword = length of data + length of check bits
        lcode = ldata + rbit;

        //defining all checkbits
        struct checkbit  r[rbit];
        for(i=0;i&lt;rbit;i++)
        {
                r[i].b = 0;
        }

        //STEP-1 Filling all data bits in codeword
        for(i=3;i&lt;=lcode;i++)
        {
                if(i&amp;(i-1)){ //Condition of Power of 2
                        cand = ch &amp; power(2,j++);
                        cw = cw | (cand&lt;&lt;(i-j));
                }
        }

        //codeword after filling data bits
        dec2bin(str,16,cw);
        printf("%d %s\n",cw,str);

        //STEP-2 calculating all checkbits (parity bits)
        for(i=3;i&lt;=lcode;i++)
        {
                if(i &amp; (i-1)){ //condition for Power of 2
                        for(j=0;j&lt;rbit;j++){
                                if(i &amp; power(2,j)){ //condition for including data bit in parity or not (1,3,5,7,9... include in 1 because all has 1 in last bit)
                                        r[j].b = r[j].b ^ chrpos(cw,i);
                                }
                        }
                }
        }

        //STEP-3 Fill check bits in code word
        for(i=1,j=0;i&lt;=lcode;i++)
        {
                if(!(i&amp;(i-1)))//Conditio nfor only power of 2
                {
                        cw = cw | (r[j++].b &lt;&lt; (power(2,j)-1));
                }
        }

        //Final Code word
        dec2bin(str,16,cw);
        printf("\n%d %s\n",cw,str);

        //HAMMING CODE LOGIC ENDS

        //Writing to Named Pipe
        //write(&lt;open_pipe_return_value&gt;,&lt;message&gt;,&lt;msgsize&gt;);
        if(write(fp,&amp;cw,sizeof(cw)) &lt; 0)
        {
                perror("Error writing to FIFO (Named Pipe)\n");
                exit(-3);
        }
        else printf("Message has been sent to FIFO (Named Pipe)\n");

        //Closing Named Pipe
        //close(&lt;open_pipe_return_value&gt;);
        if(close(fp) &lt; 0)
        {
                perror("Error closing FIFO (Named Pipe)\n");
                exit(-4);
        }
        return 0;
}</pre><p>
<strong>Hamming Code Receiver</strong></p><pre class="crayon-plain-tag">//Hamming Code Receiver Example
#include&lt;stdio.h&gt; //Standard Input Functions
#include&lt;sys/types.h&gt; //Named Pipes (FIFO) Types
#include&lt;sys/stat.h&gt; // Named Pipes (FIFO) Functions
#include&lt;fcntl.h&gt; //File Control Unix Functions
#include&lt;unistd.h&gt; //Unix Standard Functions
#include"hamcom.c" //Common function file for hamming code
int main()
{
        char *myfifo = "myfifo"; //FIFO File Path
        int fp; //Open Pipe Return Value
        unsigned char ch;//Original Character
        char str[]="0000000000000000";//This is not part of Hamming Algorithm just for debug
        unsigned short cw=0,cand=0; //Codeword and temp code operation variable
        int i,ldata,j=0,lcode,rbit=0;

        //Opening Named Pipe
        //open(&lt;filepath&gt;,&lt;openingmode&gt;);
        fp = open(myfifo,O_RDONLY);
        if(fp &lt; 0)
        {
                perror("FIFO (Named Pipe) could not be opened for reading.\n");
                exit(-1);
        }
        else
                printf("FIFO (Named Pipe) Opened... Trying to read from\n");

        //Reading From Named Pipe
        //read(&lt;open_pipe_return_value&gt;,&lt;message&gt;,&lt;msgsize&gt;);
        if(read(fp,&amp;cw,sizeof(cw)) &lt; 0)
        {
                perror("Error reading from FIFO (Named Pipe)\n");
                exit(-2);
        }
        else printf("Message Received from FIFO (Named Pipe)\n");

        cw = cw | power(2,9);
        dec2bin(str,16,cw);
        printf("%d %s\n",cw,str);
        //HAMMING CODE LOGIC STARTS

        lcode = calcBit(cw);

        printf("%d\n",lcode);

        for(i=1;i&lt;=lcode;i++)
        {
                if(i &amp; (i-1))
                        continue;
                rbit++;
        }
        struct checkbit r[rbit];

        for(i=0;i&lt;rbit;i++)
        {
                r[i].b = 0;
        }
        for(i=1;i&lt;=lcode;i++)
        {
                for(j=0;j&lt;rbit;j++){
                        if(i &amp; power(2,j)){
                                r[j].b = r[j].b ^ chrpos(cw,i);
                        }
                }
        }

        for(i=0;i&lt;rbit;i++)
        {
                printf(" %d",r[i].b);
                cand = cand | (r[i].b&lt;&lt;i);
        }

        if(cand){
                printf("\nError on %d position",cand);
                printf("\nCorrecting...");
                if(chrpos(cw,cand))
                        cw -= power(2,cand-1);
                else
                        cw += power(2,cand-1);
        }

        printf("\nCORRECT DATA : \n");
        dec2bin(str,16,cw);
        printf("%d %s\n",cw,str);
        cand = 0;
        for(i=1,j=0;i&lt;=lcode;i++){
                if(i &amp; (i-1)){
                        cand = cand | (chrpos(cw,i)&lt;&lt;j++);
                }
        }
        printf("%c\n",cand);

        //HAMMING CODE LOGIC ENDS
        if(close(fp) &lt; 0)
        {
                perror("Error closing FIFO (Named Pipe)\b");
                exit(-3);
        }

        if(unlink(myfifo) &lt; 0)
        {
                perror("Error deleting FIFO (Named Pipe)\b");
                exit(-4);
        }
        return 0;
}</pre><p>
&nbsp;</p>
<p>The post <a rel="nofollow" href="http://www.vhghorecha.in/hamming-code-implementation-in-c/">Hamming Code Implementation in C</a> appeared first on <a rel="nofollow" href="http://www.vhghorecha.in">Vimal Ghorecha&#039;s Personal Utopia</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.vhghorecha.in/hamming-code-implementation-in-c/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>CRC Implementation in C</title>
		<link>http://www.vhghorecha.in/crc-implementation-in-c/</link>
		<comments>http://www.vhghorecha.in/crc-implementation-in-c/#respond</comments>
		<pubDate>Fri, 18 Apr 2014 03:52:37 +0000</pubDate>
		<dc:creator><![CDATA[Vimal Ghorecha]]></dc:creator>
				<category><![CDATA[Education]]></category>
		<category><![CDATA[Unix C Programming (FON - 2640011)]]></category>
		<category><![CDATA[2640011]]></category>
		<category><![CDATA[crc]]></category>
		<category><![CDATA[crc c program]]></category>
		<category><![CDATA[crc code]]></category>
		<category><![CDATA[fon]]></category>

		<guid isPermaLink="false">http://www.vhghorecha.in/?p=277</guid>
		<description><![CDATA[<p>CRC Implementation in C with efficient algorithm. CRC Implementation with bitwise operators and example.</p>
<p>The post <a rel="nofollow" href="http://www.vhghorecha.in/crc-implementation-in-c/">CRC Implementation in C</a> appeared first on <a rel="nofollow" href="http://www.vhghorecha.in">Vimal Ghorecha&#039;s Personal Utopia</a>.</p>
]]></description>
				<content:encoded><![CDATA[<p><img src='http://www.vhghorecha.in/wp-content/uploads/crc-thumb.gif'></p><p>CRC Implementation in C with efficient algorithm. CRC Implementation with bitwise operators and example.</p>
<p>Best error detection algorithm which used for data transmission.</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<h2>Modulo-2 binary division</h2>
<div id="attachment_278" style="width: 310px" class="wp-caption aligncenter"><a href="http://www.vhghorecha.in/wp-content/uploads/CRC_Modulo2Division.gif"><img class="size-medium wp-image-278" alt="CRC Modulo 2 Division" src="http://www.vhghorecha.in/wp-content/uploads/CRC_Modulo2Division-300x256.gif" width="300" height="256" /></a><p class="wp-caption-text">CRC Modulo 2 Division</p></div>
<p>&nbsp;</p>
<p>The modulo-2 division process is defined as follows:</p>
<p>Call the uppermost c+1 bits of the message the remainder</p>
<ul>
<li>Beginning with the most significant bit in the original message and for each bit position that follows, look at the c+1 bit remainder:
<ul>
<li>If the most significant bit of the remainder is a one, the divisor is said to divide into it. If that happens (just as in any other long division) it is necessary to indicate a successful division in the appropriate bit position in the quotient and to compute the new remainder. In the case of modulo-2 binary division, we simply:
<ul>
<li>Set the appropriate bit in the quotient to a one, and</li>
<li>XOR the remainder with the divisor and store the result back into the remainder</li>
</ul>
</li>
<li>Otherwise (if the first bit is not a one):
<ul>
<li>Set the appropriate bit in the quotient to a zero, and</li>
<li>XOR the remainder with zero (no effect)</li>
</ul>
</li>
<li>Left-shift the remainder, shifting in the next bit of the message. The bit that&#8217;s shifted out will always be a zero, so no information is lost.</li>
</ul>
</li>
</ul>
<p>The final value of the remainder is the <strong>CRC</strong> of the given message.</p>
<h2>CRC Implementation in C</h2>
<h3>Common file for Both and Reciever</h3>
<pre class="crayon-plain-tag">//CRC Common File for Both Sender and Receiver
#include&lt;stdio.h&gt; //Standard Input Functions
#include&lt;sys/types.h&gt; //Named Pipes (FIFO) Types
#include&lt;sys/stat.h&gt; // Named Pipes (FIFO) Functions
#include&lt;fcntl.h&gt; //File Control Unix Functions
#include&lt;unistd.h&gt; //Unix Standard Functions
#define MAX 100 //Buffer Size for Writing Message

unsigned short POLYNOMIAL;//Divisor
int spoly=0,sdata=0; //Size of bits in divisor and actual data

struct codeword
{
        unsigned short data;
        unsigned short rem;
};

//Power function for generating power
unsigned long power(unsigned long no,unsigned long len)
{
        unsigned long pow=1,i;
        for(i=1;i&lt;=len;i++)
                pow *= no;
        return pow;
}

//Actual CRC logic which will return remainder
unsigned short crcCalc(unsigned short const message)
{
    unsigned short  remainder,fdigit,bit;

        /* Initially, the dividend is the remainder.  */
        remainder = message;

        //Generating number which will return first bit from left side
        fdigit = power(2,sdata-1);

        //For each bit position in the message....
        for (bit = 0; bit &lt; sdata; bit++)
        {
                //If the uppermost bit is a 1...
                if (remainder &amp; fdigit )
                {
                        //XOR the previous remainder with the divisor.
                        remainder ^= POLYNOMIAL;
                }

                //Shift the next bit of the message into the remainder.
                remainder = (remainder &lt;&lt; 1);
        }

        //Return only the relevant bits of the remainder as CRC.
        return (remainder &gt;&gt; (sdata-spoly+1));
}</pre>
<h3> CRC Sender Code</h3>
<pre class="crayon-plain-tag">//CRC Sender Example
#include "crccom.c" //Common Function of CRC
int main()
{
        char *myfifo = "myfifo"; //FIFO File Path
        int fp; //Open Pipe Return Value
        char msg[MAX]; //Original Message to be sent
        unsigned short tpoly; //temp poly for checking no of bits in poly
        struct codeword ch;

        POLYNOMIAL=19;

        printf("Polynomial (Divisor) : %d",POLYNOMIAL);

        printf("\nEnter Data Character : ");
        scanf("%d",&amp;tpoly);

        ch.data = tpoly;
        printf("Creating Pipe...Waiting for receiver for Process...\n");
        //Creating Named Pipe
        //mkfifo(&lt;filepath&gt;,&lt;permission&gt;)
        if(mkfifo(myfifo,0666) &lt; 0)
        {
                perror("FIFO (Named Pipe) could not be created.\n");
                exit(-1);
        }
        else
                printf("FIFO (Named Pipe) Created...\n");

        //Opening Named Pipe
        //open(&lt;filepath&gt;,&lt;openingmode&gt;);
        fp = open(myfifo,O_WRONLY);
        if(fp &lt; 0)
        {
                perror("FIFO (Named Pipe) could not be opened.\n");
                exit(-2);
        }
        else
                printf("FIFO (Named Pipe) Opened...\n");

        //Calculate number of bits in divisor.
        tpoly = POLYNOMIAL;
        while(tpoly &gt; 0)
        {
                tpoly /= 2;
                spoly++;
        }

        //Total bits for storing data
        sdata = sizeof(ch.data)*8;

        //Move all bits in divisor to the start position
        POLYNOMIAL &lt;&lt;= (sdata-spoly);

        //Calculate acutal CRC
        ch.rem = crcCalc(ch.data);
        printf("Data=&gt; %d, Remainder =&gt; %d\n",ch.data,ch.rem);
        //Writing to Named Pipe
        //write(&lt;open_pipe_return_value&gt;,&lt;message&gt;,&lt;msgsize&gt;);
        if(write(fp,&amp;ch,sizeof(struct codeword)) &lt; 0)
        {
                perror("Error writing to FIFO (Named Pipe)\n");
                exit(-3);
        }
        else printf("Message has been sent to FIFO (Named Pipe)\n");

        //Closing Named Pipe
        //close(&lt;open_pipe_return_value&gt;);
        if(close(fp) &lt; 0)
        {
                perror("Error closing FIFO (Named Pipe)\n");
                exit(-4);
        }
        return 0;
}</pre>
<h3>CRC Receiver Code</h3>
<pre class="crayon-plain-tag">//CRC Receiver Example
#include "crccom.c" //CRC Common Functions

int main()
{
        char *myfifo = "myfifo"; //FIFO File Path
        int fp; //Open Pipe Return Value
        struct codeword ch;
        unsigned short rem,tpoly;

        //Opening Named Pipe
        //open(&lt;filepath&gt;,&lt;openingmode&gt;);
        fp = open(myfifo,O_RDONLY);
        if(fp &lt; 0)
        {
                perror("FIFO (Named Pipe) could not be opened for reading.\n");
                exit(-1);
        }
        else
                printf("FIFO (Named Pipe) Opened... Trying to read from\n");

        //Reading From Named Pipe
        //read(&lt;open_pipe_return_value&gt;,&lt;message&gt;,&lt;msgsize&gt;);
        if(read(fp,&amp;ch,sizeof(struct codeword)) &lt; 0)
        {
                perror("Error reading from FIFO (Named Pipe)\n");
                exit(-2);
        }
        else printf("Message Received from FIFO (Named Pipe)\n");

        //CRC Logic Starts

        POLYNOMIAL = 19;
        printf("\nPolynomial (Divisor) : %d\n",POLYNOMIAL);

        tpoly = POLYNOMIAL;
        while(tpoly &gt; 0)
        {
                tpoly /= 2;
                spoly++;
        }
        //Total bits for storing data
        sdata = sizeof(ch.data)*8;

        //Move all bits in divisor to the start position
        POLYNOMIAL &lt;&lt;= (sdata-spoly);
        rem = crcCalc(ch.data);

        if(rem != ch.rem){
                printf("Error in Transmission");
                exit(-5);
        }

        printf("\nSuccessfull Trasmission Original Message : %d",ch.data);

        //CRC Logic Ends

        //Closing Named Pipe
        //close(&lt;open_pipe_return_value&gt;);
        if(close(fp) &lt; 0)
        {
                perror("Error closing FIFO (Named Pipe)\b");
                exit(-3);
        }

        if(unlink(myfifo) &lt; 0)
        {
                perror("Error deleting FIFO (Named Pipe)\b");
                exit(-4);
        }
        return 0;
}</pre>
&nbsp;</p>
<p>The post <a rel="nofollow" href="http://www.vhghorecha.in/crc-implementation-in-c/">CRC Implementation in C</a> appeared first on <a rel="nofollow" href="http://www.vhghorecha.in">Vimal Ghorecha&#039;s Personal Utopia</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.vhghorecha.in/crc-implementation-in-c/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Block Parity Checker LRC</title>
		<link>http://www.vhghorecha.in/block-parity-checker-lrc/</link>
		<comments>http://www.vhghorecha.in/block-parity-checker-lrc/#respond</comments>
		<pubDate>Thu, 27 Mar 2014 02:45:50 +0000</pubDate>
		<dc:creator><![CDATA[Vimal Ghorecha]]></dc:creator>
				<category><![CDATA[Education]]></category>
		<category><![CDATA[Unix C Programming (FON - 2640011)]]></category>

		<guid isPermaLink="false">http://www.vhghorecha.in/?p=209</guid>
		<description><![CDATA[<p>In this error detection method, a block of bits is organized in a table with rows and columns.  Then the parity bit for each column is calculated and a new row of eight bits, which are the parity bits for the whole block, is created.  After that  the new calculated parity bits are attached to(...)</p>
<p>The post <a rel="nofollow" href="http://www.vhghorecha.in/block-parity-checker-lrc/">Block Parity Checker LRC</a> appeared first on <a rel="nofollow" href="http://www.vhghorecha.in">Vimal Ghorecha&#039;s Personal Utopia</a>.</p>
]]></description>
				<content:encoded><![CDATA[<p><img src='http://www.vhghorecha.in/wp-content/uploads/parity-checker.jpg'></p><p>In this error detection method, a block of bits is organized in a table with rows and columns.  Then the parity bit for each column is calculated and a new row of eight bits, which are the parity bits for the whole block, is created.  After that  the new calculated <strong>parity</strong> bits are attached to the original data and sends to the receiver.</p>
<p><strong>LRC</strong> increases the likelihood of detecting burst error.  An <strong>LRC</strong> of <i>n</i> bits can easily detects a burst error of <i>n</i> bits.</p>
<p>However, if two bits in one data unit are damaged and two bits in exactly the same positions in another data unit are also damaged, the <strong>LRC</strong> checker will not detect an error.</p>
<p>Notice that although the 5<sup>th</sup> bit and the 7<sup>th</sup> bit for 1<sup>st</sup> and 2 <sup>nd</sup> data unit have been changed but the LRC calculated by receiver is still the same as the LRC received. Thus the receiver checker cannot detect this burst error.</p>
<h2>Block Parity Checker LRC Implementation in Unix C</h2>
<p><strong>lrcsen.c (Block Parity LRC Sender)</strong></p><pre class="crayon-plain-tag">//Block Parity LRC Sender Example
#include&lt;stdio.h&gt; //Standard Input Functions
#include&lt;sys/types.h&gt; //Named Pipes (FIFO) Types
#include&lt;sys/stat.h&gt; // Named Pipes (FIFO) Functions
#include&lt;fcntl.h&gt; //File Control Unix Functions
#include&lt;unistd.h&gt; //Unix Standard Functions
int main()
{
        char *myfifo = "myfifo"; //FIFO File Path
        int fp; //Open Pipe Return Value
        unsigned char ch[100],parity=0; //Unsigned character string and parity bit
        int i; // loop variable

        printf("Creating Pipe...Waiting for receiver for Process...\n");
        //Creating Named Pipe
        //mkfifo(&lt;filepath&gt;,&lt;permission&gt;)
        if(mkfifo(myfifo,0666) &lt; 0)
        {
                perror("FIFO (Named Pipe) could not be created.\n");
                exit(-1);
        }
        else
                printf("FIFO (Named Pipe) Created...\n");

        //Opening Named Pipe
        //open(&lt;filepath&gt;,&lt;openingmode&gt;);
        fp = open(myfifo,O_WRONLY);
        if(fp &lt; 0)
        {
                perror("FIFO (Named Pipe) could not be opened.\n");
                exit(-2);
        }
        else
                printf("FIFO (Named Pipe) Opened...\n");

        /* LRC LOGIC STARTS */
        printf("Enter Any String : ");
        gets(ch);

        for(i=0;ch[i]!='\0';i++)
        {

                parity ^= ch[i];
        }
        printf("\nOriginal Message =&gt; %s",ch);
        printf("\nParity Character =&gt; %c %d",parity,parity);

        //Adding Parity Bit (Character) at Last
        ch[i++] = parity;
        ch[i] = '\0';

        printf("\nMessage After LRC =&gt; %s\n",ch);

        /* LRC Logic Ends */

        //Writing to Named Pipe
        //write(&lt;open_pipe_return_value&gt;,&lt;message&gt;,&lt;msgsize&gt;);
        if(write(fp,ch,sizeof(ch)) &lt; 0)
        {
                perror("Error writing to FIFO (Named Pipe)\n");
                exit(-3);
        }
        else printf("Message has been sent to FIFO (Named Pipe)\n");

        //Closing Named Pipe
        //close(&lt;open_pipe_return_value&gt;);
        if(close(fp) &lt; 0)
        {
                perror("Error closing FIFO (Named Pipe)\n");
                exit(-4);
        }
        return 0;
}</pre><p>
<strong>lrcrec.c (Block Parity LRC Receiver)</strong></p><pre class="crayon-plain-tag">//Block Parity LRC Receiver Example
#include&lt;stdio.h&gt; //Standard Input Functions
#include&lt;sys/types.h&gt; //Named Pipes (FIFO) Types
#include&lt;sys/stat.h&gt; // Named Pipes (FIFO) Functions
#include&lt;fcntl.h&gt; //File Control Unix Functions
#include&lt;unistd.h&gt; //Unix Standard Functions
int main()
{
        char *myfifo = "myfifo"; //FIFO File Path
        int fp; //Open Pipe Return Value
        unsigned char ch[100],parity=0,nparity=0; //Here we will take two parity character one which received from sender and one which we will calculate
        int i; //loop variable
        int len; // message length

        //Opening Named Pipe
        //open(&lt;filepath&gt;,&lt;openingmode&gt;);
        fp = open(myfifo,O_RDONLY);
        if(fp &lt; 0)
        {
                perror("FIFO (Named Pipe) could not be opened for reading.\n");
                exit(-1);
        }
        else
                printf("FIFO (Named Pipe) Opened... Trying to read from\n");

        //Reading From Named Pipe
        //read(&lt;open_pipe_return_value&gt;,&lt;message&gt;,&lt;msgsize&gt;);
        if(read(fp,ch,sizeof(ch)) &lt; 0)
        {
                perror("Error reading from FIFO (Named Pipe)\n");
                exit(-2);
        }
        else printf("Message Received from FIFO (Named Pipe)\n");
        len = strlen(ch)-1;

        /* LRC Logic Stars */
        printf("\nRecieved Message =&gt; %s",ch);

        //Received Parity Character
        parity = ch[len]; // last character of string added by sender

        //Now we calculate parity

        for(i=0;i&lt;len;i++)
        {
                nparity ^= ch[i];
        }

        if(parity != nparity){
                printf("\nMessage Currupted...");
                exit(-5);
        }

        ch[len] = '\0'; // replace parity character with null character

        printf("\nOriginal Message =&gt; %s\n",ch);

        //Closing Named Pipe
        //close(&lt;open_pipe_return_value&gt;);
        if(close(fp) &lt; 0)
        {
                perror("Error closing FIFO (Named Pipe)\b");
                exit(-3);
        }

        if(unlink(myfifo) &lt; 0)
        {
                perror("Error deleting FIFO (Named Pipe)\b");
                exit(-4);
        }
        return 0;
}</pre><p>
&nbsp;</p>
<p>The post <a rel="nofollow" href="http://www.vhghorecha.in/block-parity-checker-lrc/">Block Parity Checker LRC</a> appeared first on <a rel="nofollow" href="http://www.vhghorecha.in">Vimal Ghorecha&#039;s Personal Utopia</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.vhghorecha.in/block-parity-checker-lrc/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Single Parity Bit Checker VRC</title>
		<link>http://www.vhghorecha.in/single-parity-bit-checker-vrc/</link>
		<comments>http://www.vhghorecha.in/single-parity-bit-checker-vrc/#respond</comments>
		<pubDate>Wed, 19 Mar 2014 05:46:08 +0000</pubDate>
		<dc:creator><![CDATA[Vimal Ghorecha]]></dc:creator>
				<category><![CDATA[Education]]></category>
		<category><![CDATA[Unix C Programming (FON - 2640011)]]></category>

		<guid isPermaLink="false">http://www.vhghorecha.in/?p=201</guid>
		<description><![CDATA[<p>The simplest and oldest error detection method. A binary digit called parity is used to indicate whether the number of bits with “1” in a given set of bits is even or odd. The parity bit is then appended to original data. Usually used to detect transmission error . Sender adds the parity bit to(...)</p>
<p>The post <a rel="nofollow" href="http://www.vhghorecha.in/single-parity-bit-checker-vrc/">Single Parity Bit Checker VRC</a> appeared first on <a rel="nofollow" href="http://www.vhghorecha.in">Vimal Ghorecha&#039;s Personal Utopia</a>.</p>
]]></description>
				<content:encoded><![CDATA[<p><img src='http://www.vhghorecha.in/wp-content/uploads/parity-checker.jpg'></p><p>The simplest and oldest error detection method. A binary digit called parity is used to indicate whether the number of bits with “1” in a given set of bits is even or odd. The parity bit is then appended to original data.<br />
Usually used to detect transmission error . Sender adds the parity bit to existing data bits before transmission.<br />
Receiver checks for the expected parity, If wrong parity found, the received data is discarded and retransmission is requested.</p>
<p><strong>vrcsen.c</strong></p><pre class="crayon-plain-tag">//VRC Sender Example
#include&lt;stdio.h&gt; //Standard Input Functions
#include&lt;sys/types.h&gt; //Named Pipes (FIFO) Types
#include&lt;sys/stat.h&gt; // Named Pipes (FIFO) Functions
#include&lt;fcntl.h&gt; //File Control Unix Functions
#include&lt;unistd.h&gt; //Unix Standard Functions
int main()
{
        char *myfifo = "myfifo"; //FIFO File Path
        int fp; //Open Pipe Return Value
        unsigned char ch,tch,parity=0; //Unsigned character because we will use first bit as parity bit

        printf("Creating Pipe...Waiting for receiver for Process...\n");
        //Creating Named Pipe
        //mkfifo(&lt;filepath&gt;,&lt;permission&gt;)
        if(mkfifo(myfifo,0666) &lt; 0)
        {
                perror("FIFO (Named Pipe) could not be created.\n");
                exit(-1);
        }
        else
                printf("FIFO (Named Pipe) Created...\n");

        //Opening Named Pipe
        //open(&lt;filepath&gt;,&lt;openingmode&gt;);
        fp = open(myfifo,O_WRONLY);
        if(fp &lt; 0)
        {
                perror("FIFO (Named Pipe) could not be opened.\n");
                exit(-2);
        }
        else
                printf("FIFO (Named Pipe) Opened...\n");

        /* VRC LOGIC STARTS */
        printf("Enter Any Valid Character : ");
        scanf("%c",&amp;ch);
        tch=ch;

        while(tch &gt; 0)
        {

                parity ^= tch &amp; 1; //Extract one by one bit and XOR it with parity
                tch &gt;&gt;= 1;
        }
        printf("\nOriginal Character =&gt; %c",ch);

        if(parity) //If Parity is 1 means total number of 1's is ODD and we need to set parity 1
                ch += 128; //10000000 will set parity 1

        printf("\nStuffed Character =&gt; %c\n",ch);
        //Writing to Named Pipe
        //write(&lt;open_pipe_return_value&gt;,&lt;message&gt;,&lt;msgsize&gt;);
        if(write(fp,&amp;ch,sizeof(ch)) &lt; 0)
        {
                perror("Error writing to FIFO (Named Pipe)\n");
                exit(-3);
        }
        else printf("Message has been sent to FIFO (Named Pipe)\n");

        //Closing Named Pipe
        //close(&lt;open_pipe_return_value&gt;);
        if(close(fp) &lt; 0)
        {
                perror("Error closing FIFO (Named Pipe)\n");
                exit(-4);
        }
        return 0;
}</pre><p>
<strong> vrcrec.c</strong></p><pre class="crayon-plain-tag">//VRC Receiver Example
#include&lt;stdio.h&gt; //Standard Input Functions
#include&lt;sys/types.h&gt; //Named Pipes (FIFO) Types
#include&lt;sys/stat.h&gt; // Named Pipes (FIFO) Functions
#include&lt;fcntl.h&gt; //File Control Unix Functions
#include&lt;unistd.h&gt; //Unix Standard Functions
int main()
{
        char *myfifo = "myfifo"; //FIFO File Path
        int fp; //Open Pipe Return Value
        unsigned char ch,tch,parity=0;

        //Opening Named Pipe
        //open(&lt;filepath&gt;,&lt;openingmode&gt;);
        fp = open(myfifo,O_RDONLY);
        if(fp &lt; 0)
        {
                perror("FIFO (Named Pipe) could not be opened for reading.\n");
                exit(-1);
        }
        else
                printf("FIFO (Named Pipe) Opened... Trying to read from\n");

        //Reading From Named Pipe
        //read(&lt;open_pipe_return_value&gt;,&lt;message&gt;,&lt;msgsize&gt;);
        if(read(fp,&amp;ch,sizeof(ch)) &lt; 0)
        {
                perror("Error reading from FIFO (Named Pipe)\n");
                exit(-2);
        }
        else printf("Message Received from FIFO (Named Pipe)\n");
        printf("\nRecieved Character =&gt; %c",ch);
        tch = ch;

        while(tch &gt; 0)
        {
                parity ^= tch &amp; 1; //Extract last bit and XOR it with Parity
                tch &gt;&gt;= 1; //Remove last bit using right shift
        }

        if(parity){ //If parity is 1 means total no of 1's is ODD
                printf("\nMessage Currupted...");
                exit(-5);
        }

        if(ch &gt; 128) //If ASCII is &gt; 128 then it means we added 128 to make character parity even
                ch-= 128;

        printf("\nOriginal Character =&gt; %c\n",ch);

        //Closing Named Pipe
        //close(&lt;open_pipe_return_value&gt;);
        if(close(fp) &lt; 0)
        {
                perror("Error closing FIFO (Named Pipe)\b");
                exit(-3);
        }

        if(unlink(myfifo) &lt; 0)
        {
                perror("Error deleting FIFO (Named Pipe)\b");
                exit(-4);
        }
        return 0;
}</pre><p>
&nbsp;</p>
<p>The post <a rel="nofollow" href="http://www.vhghorecha.in/single-parity-bit-checker-vrc/">Single Parity Bit Checker VRC</a> appeared first on <a rel="nofollow" href="http://www.vhghorecha.in">Vimal Ghorecha&#039;s Personal Utopia</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.vhghorecha.in/single-parity-bit-checker-vrc/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Byte Stuffing Sender Receiver</title>
		<link>http://www.vhghorecha.in/byte-stuffing-sender-receiver/</link>
		<comments>http://www.vhghorecha.in/byte-stuffing-sender-receiver/#respond</comments>
		<pubDate>Wed, 12 Feb 2014 05:40:40 +0000</pubDate>
		<dc:creator><![CDATA[Vimal Ghorecha]]></dc:creator>
				<category><![CDATA[Education]]></category>
		<category><![CDATA[General]]></category>
		<category><![CDATA[Unix C Programming (FON - 2640011)]]></category>
		<category><![CDATA[2640011]]></category>
		<category><![CDATA[byte stuffing]]></category>
		<category><![CDATA[fon]]></category>
		<category><![CDATA[named pipe]]></category>
		<category><![CDATA[unix c]]></category>

		<guid isPermaLink="false">http://www.vhghorecha.in/?p=194</guid>
		<description><![CDATA[<p>This is simple example of byte stuffing sender receiver using Named Pipe in Unix C Programming.</p>
<p>The post <a rel="nofollow" href="http://www.vhghorecha.in/byte-stuffing-sender-receiver/">Byte Stuffing Sender Receiver</a> appeared first on <a rel="nofollow" href="http://www.vhghorecha.in">Vimal Ghorecha&#039;s Personal Utopia</a>.</p>
]]></description>
				<content:encoded><![CDATA[<p><img src='http://www.vhghorecha.in/wp-content/uploads/Named-Pipe-Sender-Receiver.jpg'></p><p><strong>Byte stuffing</strong> is framing technique in which we add special characters (called <strong>flag</strong>) to distinguish beginning and end of a frame. This technique only works with text data.</p>
<p>In above technique there is problem when flag encounter as data. To overcome this problem we again introduce new special character (called <strong>Escape</strong>).  The escape characters have a predefined pattern. The receiver removes the escape character and keeps the data part. It cause to another problem, if the text contains escape characters as part of data. To deal with this, an escape character is prefixed with another escape character.</p>
<p><img alt="" src="data:image/png;base64,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" /></p>
<h3>Byte Stuffing Sender Receiver Example</h3>
<p><strong>bytestuffsen.c</strong></p><pre class="crayon-plain-tag">//Named Piped Byte Stuff Sender Example
#include&lt;stdio.h&gt; //Standard Input Functions
#include&lt;sys/types.h&gt; //Named Pipes (FIFO) Types
#include&lt;sys/stat.h&gt; // Named Pipes (FIFO) Functions
#include&lt;fcntl.h&gt; //File Control Unix Functions
#include&lt;unistd.h&gt; //Unix Standard Functions
#define MAX 100 //Buffer Size for Writing Message
#define FLAG '$' //Flag character for starting and ending of frame
#define ESC '#' //Escape character for escaping flag
int main()
{
        char *myfifo = "myfifo"; //FIFO File Path
        int fp; //Open Pipe Return Value
        char msg[MAX]; //Original Message to be sent
        char smsg[MAX]; //Stuffed Message to be stored in this variable
        int i=0,j=0;

        printf("Creating Pipe...Waiting for receiver for Process...\n");
        //Creating Named Pipe
        //mkfifo(&lt;filepath&gt;,&lt;permission&gt;)
        if(mkfifo(myfifo,0666) &lt; 0)
        {
                perror("FIFO (Named Pipe) could not be created.\n");
                exit(-1);
        }
        else
                printf("FIFO (Named Pipe) Created...\n");

        //Opening Named Pipe
        //open(&lt;filepath&gt;,&lt;openingmode&gt;);
        fp = open(myfifo,O_WRONLY);
        if(fp &lt; 0)
        {
                perror("FIFO (Named Pipe) could not be opened.\n");
                exit(-2);
        }
        else
                printf("FIFO (Named Pipe) Opened...\n");
        printf("Enter Message : ");
        gets(msg);

        //Byte Stuff Start
        smsg[j++] = FLAG; //Put FLAG in starting of stuff message
        for(i=0;msg[i]!='\0';i++)
        {
                if(msg[i] == FLAG || msg[i] == ESC) //If message character is FLAG or ESC
                {
                        smsg[j++] = ESC;//Escape it
                }
                smsg[j++] = msg[i];
        }
        smsg[j++] = FLAG;//Put Flag in ending of stuff message
        smsg[j] = '\0'; //End ths Stuffed message

        //Byte Stuff End

        //Writing to Named Pipe
        //write(&lt;open_pipe_return_value&gt;,&lt;message&gt;,&lt;msgsize&gt;);
        if(write(fp,smsg,sizeof(smsg)) &lt; 0)
        {
                perror("Error writing to FIFO (Named Pipe)\n");
                exit(-3);
        }
        else printf("Message has been sent to FIFO (Named Pipe)\n");

        //Closing Named Pipe
        //close(&lt;open_pipe_return_value&gt;);
        if(close(fp) &lt; 0)
        {
                perror("Error closing FIFO (Named Pipe)\n");
                exit(-4);
        }
        return 0;
}</pre><p>
<strong>bytestufrec.c</strong></p><pre class="crayon-plain-tag">//Named Piped Byte Stuff Receiver Example
#include&lt;stdio.h&gt; //Standard Input Functions
#include&lt;sys/types.h&gt; //Named Pipes (FIFO) Types
#include&lt;sys/stat.h&gt; // Named Pipes (FIFO) Functions
#include&lt;fcntl.h&gt; //File Control Unix Functions
#include&lt;unistd.h&gt; //Unix Standard Functions
#define MAX 100 //Buffer Size for Writing Message
#define FLAG '$'
#define ESC '#'
int main()
{
        char *myfifo = "myfifo"; //FIFO File Path
        int fp; //Open Pipe Return Value
        char msg[MAX]; //Stuffed Message received from Sender
        char dmsg[MAX]; //Original Message after De-Stuff
        int i=0,j=0;

        //Opening Named Pipe
        //open(&lt;filepath&gt;,&lt;openingmode&gt;);
        fp = open(myfifo,O_RDONLY);
        if(fp &lt; 0)
        {
                perror("FIFO (Named Pipe) could not be opened for reading.\n");
                exit(-1);
        }
        else
                printf("FIFO (Named Pipe) Opened... Trying to read from\n");

        //Reading From Named Pipe
        //read(&lt;open_pipe_return_value&gt;,&lt;message&gt;,&lt;msgsize&gt;);
        if(read(fp,msg,sizeof(msg)) &lt; 0)
        {
                perror("Error reading from FIFO (Named Pipe)\n");
                exit(-2);
        }
        else printf("Message Received from FIFO (Named Pipe)\n");
        printf("\nStuffed Message : %s",msg);

        //Byte De-Stuff Start
        for(i=1;strlen(msg)-1;i++)//We start loop with 1 because want to ignore first FLAG
        {
                if(msg[i] == FLAG || msg[i] == ESC)
                {
                        i++;
                }
                dmsg[j++] = msg[i];
        }
        dmsg[j] = '\0';
        //Byte De-Stuff End
        printf("\nDestuffed Message : %s",dmsg);

        //Closing Named Pipe
        //close(&lt;open_pipe_return_value&gt;);
        if(close(fp) &lt; 0)
        {
                perror("Error closing FIFO (Named Pipe)\b");
                exit(-3);
        }

        if(unlink(myfifo) &lt; 0)
        {
                perror("Error deleting FIFO (Named Pipe)\b");
                exit(-4);
        }
        return 0;
}</pre><p>
&nbsp;</p>
<p>The post <a rel="nofollow" href="http://www.vhghorecha.in/byte-stuffing-sender-receiver/">Byte Stuffing Sender Receiver</a> appeared first on <a rel="nofollow" href="http://www.vhghorecha.in">Vimal Ghorecha&#039;s Personal Utopia</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.vhghorecha.in/byte-stuffing-sender-receiver/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Bit Stuffing Sender Receiver</title>
		<link>http://www.vhghorecha.in/bit-stuffing-sender-receiver/</link>
		<comments>http://www.vhghorecha.in/bit-stuffing-sender-receiver/#respond</comments>
		<pubDate>Sat, 25 Jan 2014 03:36:46 +0000</pubDate>
		<dc:creator><![CDATA[Vimal Ghorecha]]></dc:creator>
				<category><![CDATA[Education]]></category>
		<category><![CDATA[Unix C Programming (FON - 2640011)]]></category>
		<category><![CDATA[2640011]]></category>
		<category><![CDATA[bit stuff]]></category>
		<category><![CDATA[c]]></category>
		<category><![CDATA[fifo]]></category>
		<category><![CDATA[fon]]></category>
		<category><![CDATA[named pipe]]></category>
		<category><![CDATA[unix]]></category>

		<guid isPermaLink="false">http://www.vhghorecha.in/?p=188</guid>
		<description><![CDATA[<p>In a bit-oriented protocol, the data to send is a series of bits. In order to distinguish frames, most protocols use a bit pattern of 8-bit length (01111110) as flag at the beginning and end of each frame. Here also cause the problem of appearance of flag in the data part to deal with this(...)</p>
<p>The post <a rel="nofollow" href="http://www.vhghorecha.in/bit-stuffing-sender-receiver/">Bit Stuffing Sender Receiver</a> appeared first on <a rel="nofollow" href="http://www.vhghorecha.in">Vimal Ghorecha&#039;s Personal Utopia</a>.</p>
]]></description>
				<content:encoded><![CDATA[<p>In a bit-oriented protocol, the data to send is a series of bits. In order to distinguish frames, most protocols use a bit pattern of 8-bit length (01111110) as flag at the beginning and end of each frame. Here also cause the problem of appearance of flag in the data part to deal with this an extra bit added. This method is called bit stuffing. In bit stuffing, if a 0 and five successive 1 bits are encountered, an extra 0 is added. The receiver node removes the extra-added zero.<br />
Simply, Bit stuffing is the process of adding one extra 0 whenever five consecutive 1s follow a 0 in the data. Byte stuffing is the method of adding 1 extra byte if there is a flag or escape character in the text.</p>
<div id="attachment_189" style="width: 460px" class="wp-caption aligncenter"><a href="http://www.vhghorecha.in/wp-content/uploads/bit-stuffing-sender-receiver.png"><img class=" wp-image-189" title="Bit Stuffing Sender Receiver" alt="bit-stuffing-sender-receiver" src="http://www.vhghorecha.in/wp-content/uploads/bit-stuffing-sender-receiver-300x260.png" width="450" height="390" srcset="http://www.vhghorecha.in/wp-content/uploads/bit-stuffing-sender-receiver-300x260.png 300w, http://www.vhghorecha.in/wp-content/uploads/bit-stuffing-sender-receiver.png 485w" sizes="(max-width: 450px) 100vw, 450px" /></a><p class="wp-caption-text">Framing Technique Bit Stuffing Demonstration</p></div>
<h3 style="text-align: left;">Bit Stuffing Sender Receiver Example</h3>
<p><strong>bitstuffsen.c</strong></p><pre class="crayon-plain-tag">//Named Piped BitStuffing Sender Example
#include&lt;stdio.h&gt; //Standard Input Functions
#include&lt;sys/types.h&gt; //Named Pipes (FIFO) Types
#include&lt;sys/stat.h&gt; // Named Pipes (FIFO) Functions
#include&lt;fcntl.h&gt; //File Control Unix Functions
#include&lt;unistd.h&gt; //Unix Standard Functions
#define MAX 100 //Buffer Size for Writing Message
int main()
{
        char *myfifo = "/tmp/myfifo"; //FIFO File Path
        int fp; //Open Pipe Return Value
        char msg[MAX]; //Original Message to be sent
        char smsg[MAX]; //Stuffed Message to be sent to Pipe
        int i=0,j=0; //Loop variable for traversal of text
        int cnt=0; //Five Consicutive 1 counter

        printf("Creating Pipe...Waiting for receiver for Process...\n");
        //Creating Named Pipe
        //mkfifo(&lt;filepath&gt;,&lt;permission&gt;)
        if(mkfifo(myfifo,0666) &lt; 0)
        {
                perror("FIFO (Named Pipe) could not be created.\n");
                exit(-1);
        }
        else
                printf("FIFO (Named Pipe) Created...\n");

        //Opening Named Pipe
        //open(&lt;filepath&gt;,&lt;openingmode&gt;);
        fp = open(myfifo,O_WRONLY);
        if(fp &lt; 0)
        {
                perror("FIFO (Named Pipe) could not be opened.\n");
                exit(-2);
        }
        else
                printf("FIFO (Named Pipe) Opened...\n");
        printf("Enter Message : ");
        gets(msg);

        /*
        BITSTUFF LOGIC START
        */
        for(i=0;msg[i] != '\0';i++)
        {
                smsg[j++] = msg[i]; //Store every character into Stuffed Message
                if(msg[i] == '1')
                {
                        cnt++;
                }
                else
                        cnt = 0; //If 0 encounter then reset 1's counter
                if(cnt == 5) //If Five consicutive 1's encounter Stuf Extra Bit(0)
                {
                        smsg[j++] = '0';
                        cnt = 0; //Again Set Counter to 0
                }
        }
        smsg[j] = '\0';
        /*
        BITSTUFF LOGIC END
        */

        //Writing to Named Pipe
        //write(&lt;open_pipe_return_value&gt;,&lt;message&gt;,&lt;msgsize&gt;);
        if(write(fp,smsg,sizeof(smsg)) &lt; 0)
        {
                perror("Error writing to FIFO (Named Pipe)\n");
                exit(-3);
        }
        else printf("Message has been sent to FIFO (Named Pipe)\n");

        //Closing Named Pipe
        //close(&lt;open_pipe_return_value&gt;);
        if(close(fp) &lt; 0)
        {
                perror("Error closing FIFO (Named Pipe)\n");
                exit(-4);
        }
        return 0;
}</pre><p>
<strong>bitstuffrec.c</strong></p><pre class="crayon-plain-tag">//Named Piped BitStuffing Receiver Example
#include&lt;stdio.h&gt; //Standard Input Functions
#include&lt;sys/types.h&gt; //Named Pipes (FIFO) Types
#include&lt;sys/stat.h&gt; // Named Pipes (FIFO) Functions
#include&lt;fcntl.h&gt; //File Control Unix Functions
#include&lt;unistd.h&gt; //Unix Standard Functions
#define MAX 100 //Buffer Size for Writing Message
int main()
{
        char *myfifo = "/tmp/myfifo"; //FIFO File Path
        int fp; //Open Pipe Return Value
        char msg[MAX]; //Stuffed Message Received From Sender
        char dmsg[MAX]; //Orignal Message After De-Stuff
        int i=0,j=0; //Loop Variable for trafersal of text
        int cnt=0; //Counter variable for Five Consicutive 1

        //Opening Named Pipe
        //open(&lt;filepath&gt;,&lt;openingmode&gt;);
        fp = open(myfifo,O_RDONLY);
        if(fp &lt; 0)
        {
                perror("FIFO (Named Pipe) could not be opened for reading.\n");
                exit(-1);
        }
        else
                printf("FIFO (Named Pipe) Opened... Trying to read from\n");

        //Reading From Named Pipe
        //read(&lt;open_pipe_return_value&gt;,&lt;message&gt;,&lt;msgsize&gt;);
        if(read(fp,msg,sizeof(msg)) &lt; 0)
        {
                perror("Error reading from FIFO (Named Pipe)\n");
                exit(-2);
        }
        else printf("Message Received from FIFO (Named Pipe)\n");
        printf("\nStuffed Message : ");
        puts(msg);

        /*
        * BIT DE-STUF LOGIC START
        */
        for(i=0;i&lt;strlen(msg);i++)
        {
                if(cnt == 5) //If Five consicutive 1's encounter Remove Bit(0)
                {
                        cnt = 0; //Reset 1's counter
                        continue;
                }
                if(msg[i] == '1')
                        cnt++;
                else
                        cnt=0;//If 0 encounter then reset 1's counter
                dmsg[j++] = msg[i];//Store character into De-Stuffed Message
        }
        dmsg[j] = '\0';
        printf("\nOriginal Message : ");
        puts(dmsg);
        /*
        * BIT DE-STUF LOGIC END
        */

        //Closing Named Pipe
        //close(&lt;open_pipe_return_value&gt;);
        if(close(fp) &lt; 0)
        {
                perror("Error closing FIFO (Named Pipe)\b");
                exit(-3);
        }

        if(unlink(myfifo) &lt; 0)
        {
                perror("Error deleting FIFO (Named Pipe)\b");
                exit(-4);
        }
        return 0;
}</pre><p>
&nbsp;</p>
<p>The post <a rel="nofollow" href="http://www.vhghorecha.in/bit-stuffing-sender-receiver/">Bit Stuffing Sender Receiver</a> appeared first on <a rel="nofollow" href="http://www.vhghorecha.in">Vimal Ghorecha&#039;s Personal Utopia</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.vhghorecha.in/bit-stuffing-sender-receiver/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Named Pipe FIFO Sender Receiver</title>
		<link>http://www.vhghorecha.in/named-pipe-fifo-sender-receiver/</link>
		<comments>http://www.vhghorecha.in/named-pipe-fifo-sender-receiver/#respond</comments>
		<pubDate>Tue, 21 Jan 2014 04:04:16 +0000</pubDate>
		<dc:creator><![CDATA[Vimal Ghorecha]]></dc:creator>
				<category><![CDATA[Education]]></category>
		<category><![CDATA[Unix C Programming (FON - 2640011)]]></category>
		<category><![CDATA[fifo]]></category>
		<category><![CDATA[named pipe]]></category>

		<guid isPermaLink="false">http://www.vhghorecha.in/?p=182</guid>
		<description><![CDATA[<p>A named pipe is really just a special kind of file (a FIFO file) on the local hard drive. Unlike a regular file, a FIFO file does not contain any user information. Instead, it allows two or more processes to communicate with each other by reading/writing to/from this file. Creating FIFO File You can create(...)</p>
<p>The post <a rel="nofollow" href="http://www.vhghorecha.in/named-pipe-fifo-sender-receiver/">Named Pipe FIFO Sender Receiver</a> appeared first on <a rel="nofollow" href="http://www.vhghorecha.in">Vimal Ghorecha&#039;s Personal Utopia</a>.</p>
]]></description>
				<content:encoded><![CDATA[<p><img src='http://www.vhghorecha.in/wp-content/uploads/Named-Pipe-Sender-Receiver.jpg'></p><p>A named pipe is really just a special kind of file (a FIFO file) on the local hard drive. Unlike a regular file, a FIFO file does not contain any user information. Instead, it allows two or more processes to communicate with each other by reading/writing to/from this file.</p>
<p><strong><em>Creating FIFO File</em></strong><br />
You can create a FIFO with the mkfifo(1) command or the mkfifo(3) function call. From the command line, issue<br />
<pre class="crayon-plain-tag">mkfifo [-m mode] fifoname</pre>
The mode flags can be specified just as in chmod(1), or they will be set as 0666 (octal) or<b> a=rw </b>less your<b> umask </b>value. The mkfifo(3) function call is similar to chmod(2), and uses the include files<b> &lt;sys/stat.h&gt; </b>and<b> &lt;sys/types.h&gt;</b>:<br />
<pre class="crayon-plain-tag">int mkfifo(const char *name, mode_t mode)</pre>
It returns<b> 0 </b>unless there is an error, in which case it returns<b> –1 </b>and sets<b> errno</b>.</p>
<p><strong><i>Using a FIFO File</i></strong><br />
Since this named pipe looks like a file, you can use all the system calls associated with files to interact with it. In particular, you can use the <i>open, read, write</i>, and <i>close</i> system calls. The following are prototypes for each of these calls as you will need to use them.</p>
<ul>
<li><i>int open(const char *pathname, int flags);</i></li>
<li><i>int read(int fd, void *buf, size_t count);</i></li>
<li><i>int write(int fd, const void *buf, size_t count);</i></li>
<li><i>int close(fd);</i></li>
</ul>
<h3>Named Pipe FIFO Sender Receiver Example</h3>
<p><strong>sender.c</strong></p><pre class="crayon-plain-tag">//Named Piped Sender Example
#include&lt;stdio.h&gt; //Standard Input Functions
#include&lt;sys/types.h&gt; //Named Pipes (FIFO) Types
#include&lt;sys/stat.h&gt; // Named Pipes (FIFO) Functions
#include&lt;fcntl.h&gt; //File Control Unix Functions
#include&lt;unistd.h&gt; //Unix Standard Functions
#define MAX 100 //Buffer Size for Writing Message
int main()
{
        char *myfifo = "/tmp/myfifo"; //FIFO File Path
        int fp; //Open Pipe Return Value
        char msg[MAX]; //Original Message to be sent

        printf("Creating Pipe...Waiting for receiver for Process...\n");
        //Creating Named Pipe
        //mkfifo(&lt;filepath&gt;,&lt;permission&gt;)
        if(mkfifo(myfifo,0666) &lt; 0)
        {
                perror("FIFO (Named Pipe) could not be created.\n");
                exit(-1);
        }
        else
                printf("FIFO (Named Pipe) Created...\n");

        //Opening Named Pipe
        //open(&lt;filepath&gt;,&lt;openingmode&gt;);
        fp = open(myfifo,O_WRONLY);
        if(fp &lt; 0)
        {
                perror("FIFO (Named Pipe) could not be opened.\n");
                exit(-2);
        }
        else
                printf("FIFO (Named Pipe) Opened...\n");
        printf("Enter Message : ");
        gets(msg);

        //Writing to Named Pipe
        //write(&lt;open_pipe_return_value&gt;,&lt;message&gt;,&lt;msgsize&gt;);
        if(write(fp,msg,sizeof(msg)) &lt; 0)
        {
                perror("Error writing to FIFO (Named Pipe)\n");
                exit(-3);
        }
        else printf("Message has been sent to FIFO (Named Pipe)\n");

        //Closing Named Pipe
        //close(&lt;open_pipe_return_value&gt;);
        if(close(fp) &lt; 0)
        {
                perror("Error closing FIFO (Named Pipe)\n");
                exit(-4);
        }
        return 0;
}</pre><p>
<strong>receiver.c</strong></p><pre class="crayon-plain-tag">//Named Piped Receiver Example
#include&lt;stdio.h&gt; //Standard Input Functions
#include&lt;sys/types.h&gt; //Named Pipes (FIFO) Types
#include&lt;sys/stat.h&gt; // Named Pipes (FIFO) Functions
#include&lt;fcntl.h&gt; //File Control Unix Functions
#include&lt;unistd.h&gt; //Unix Standard Functions
#define MAX 100 //Buffer Size for Writing Message
int main()
{
        char *myfifo = "/tmp/myfifo"; //FIFO File Path
        int fp; //Open Pipe Return Value
        char msg[MAX]; //Original Message to be sent

        //Opening Named Pipe
        //open(&lt;filepath&gt;,&lt;openingmode&gt;);
        fp = open(myfifo,O_RDONLY);
        if(fp &lt; 0)
        {
                perror("FIFO (Named Pipe) could not be opened for reading.\n");
                exit(-1);
        }
        else
                printf("FIFO (Named Pipe) Opened... Trying to read from\n");

        //Reading From Named Pipe
        //read(&lt;open_pipe_return_value&gt;,&lt;message&gt;,&lt;msgsize&gt;);
        if(read(fp,msg,sizeof(msg)) &lt; 0)
        {
                perror("Error reading from FIFO (Named Pipe)\n");
                exit(-2);
        }
        else printf("Message Received from FIFO (Named Pipe)\n");
        printf("\nMessage : ");
        puts(msg);

        //Closing Named Pipe
        //close(&lt;open_pipe_return_value&gt;);
        if(close(fp) &lt; 0)
        {
                perror("Error closing FIFO (Named Pipe)\b");
                exit(-3);
        }

        if(unlink(myfifo) &lt; 0)
        {
                perror("Error deleting FIFO (Named Pipe)\b");
                exit(-4);
        }
        return 0;
}</pre><p>
&nbsp;</p>
<p>The post <a rel="nofollow" href="http://www.vhghorecha.in/named-pipe-fifo-sender-receiver/">Named Pipe FIFO Sender Receiver</a> appeared first on <a rel="nofollow" href="http://www.vhghorecha.in">Vimal Ghorecha&#039;s Personal Utopia</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.vhghorecha.in/named-pipe-fifo-sender-receiver/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
