All pastes #2069926 Raw Edit

Stuff

public text v1 · immutable
#2069926 ·published 2011-05-27 05:19 UTC
rendered paste body
//David Reing
//CSE 660
//gcc -o PipeRW PipeRW.c
#include <string.h>
#include <stdio.h>
#include <stdlib.h>
#include <signal.h>
#include <unistd.h>
#include <sys/types.h>
main()
{
  int pfd[2];
  int i;
  int error = 5;
  pipe(pfd);

    //create ProcessB
  int ProcessB;
  ProcessB=fork();
  
if (ProcessB < 0)  { /* error*/ printf ("ProcessB failed"); exit(-1);}
  if (ProcessB == 0)  { //only processB should do this code
  
	  close(pfd[0]);
      char written [6] = {'0','0','0','a','a','a'};
	  
      for ( i = 1; i < 301; i++) {  //loop through 300 times
	  
	  if (i < 10) { //there are two leading zeroes that need to be handled
	      
		 
	      written[2] = (char)(48+i);
		}

	  else if (i < 100)  { 	  //there is one leading zero to add in
	  
	      //get the ones digit
	      int ones = i % 10;
	      written[2] = (char)(48+ones);
	      //get the tens digit
	      int tens = i/10;
	      written[1] = (char)(48+tens);
	    }
	  else  {   //we have no leading zeroes to worry about
	      
	      //get the ones digit
	      int ones = i % 10;
	      written[2] = (char)(48+ones);

	      //shorten the value by 1 digit
	      int temp = i/10;  

	      //get the ones digit again
	      ones = temp % 10;

	      //get the tens digit
	      int tens = temp/10;
	      written[1] = (char)(48+ones);
	      written[0] = (char)(48+tens);
	    }
	 /*int j;
	  for (j = 0; j < 6; j++) { //print the 100 characters
			printf("%c",written[j]);
		}
		*/
	      error = write(pfd[1],written, 6);
		  
		  if (error < 0 ) { //error
				printf("Error Writing Pipe");
				exit(1);
			}
		
	  if ( (i%50) == 0) { //sleep every 50 iterations
	      sleep(1);
	    }
	}
      //exit so that future code is not executed
	  close(pfd[1]);
      exit(0);
    }
 //create ProcessC
  int ProcessC;
  ProcessC=fork();
  if (ProcessC < 0)  { /* error*/ printf ("ProcessB failed"); exit(-1);}
  if (ProcessC == 0) { //only processC should do this code
  
	  close(pfd[0]);
      char alphabet [26] = {'A', 'B', 'C', 'D', 'E', 'F', 'G',
			    'H', 'I', 'J', 'K', 'L', 'M', 'N',
			    'O', 'P', 'Q', 'R', 'S', 'T', 'U',
			    'V', 'W', 'X', 'Y', 'Z'};
      int alphaSpot = 0, timesThrough = 0;
	  char written [3] = {'A', 'x', '0'};
	  
      for ( i = 0; i < 260; i++) { //loop through 300 iterations 
	  
	  //write alphabet[alphaSpot] + x + timesThrough into the pipe
	  written[0] = alphabet[alphaSpot];
	  written[2] = (char)(48+timesThrough);
	    
	      
	  //get ready to get the next character
	  alphaSpot++;
	  
	  if (alphaSpot == 26) { //if needed move back to the start of the alphabet
	      alphaSpot = 0;
	      timesThrough ++;
	    }
	  
	  /*int j;
	  for (j = 0; j < 3; j++) { //print the 100 characters
			printf("%c",written[j]);
		}
		*/
	  error = write(pfd[1],written, 3);
		  if (error < 0 ) { //error
				printf("Error Writing Pipe");
				exit(1);
			}
		
	  if ( (i%60) == 0) { //sleep every 60 iterations
	      sleep(2);
	    }
	}
      
	  //exit so that future code is not executed
	  close(pfd[1]);
      exit(0);
    }
	
	close(pfd[1]);
  for ( i = 0; i > -1; i++) { //loop until the pipe is empty
  
      char next100 [100];
      int empty = read(pfd[0],next100,sizeof(next100));
	  
		  if (empty < 0 ) { //error
				printf("Error Reading Pipe");
				exit(1);
			}
	  
	  int j;
	  for (j = 0; j < empty; j++) { //print the 100 characters
			printf("%c",next100[j]);
		}
		
	  
	  if ( (i%30) == 0) { //sleep every 60 iterations
	      sleep(1);
	    }
	  
	  if (empty <= 0) { //check if the pipe is empty
			i = -5;
			close(pfd[0]);
			exit(0);
		}
    }
	  
}