Advertisement
Lucassim

Ej 17

May 27th, 2015
520
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.64 KB | None | 0 0
  1. /*
  2.  * Un ejemplo práctico de lanzar procesos y escribir en una FIFO. Hacer un proceso padre que
  3.  * generara dos hijos, uno de ellos enviara las letras del abecedario una a una al padre y este las
  4.  * enviara al otro para mostrarlas.
  5.  */
  6.  
  7.  
  8.  //No sincronizo reads porque solo leen de a uno
  9. int main (int argc, char* argv){
  10.     //Crear fifo
  11.     char* fifoHijoPadre = "/tmp/caca"
  12.     char* fifoPadreHijo = "/tmp/caca2"
  13.     int bufferSize = 1;
  14.    
  15.     int created = mknod(fifoHijoPadre, S_IFIFO, NULL);
  16.     if (created!=0) exit();
  17.    
  18.     created = mknod(fifoPadreHijo, S_IFIFO, NULL);
  19.     if (created!=0) exit();
  20.    
  21.     if (!fork()){
  22.         //Padre
  23.         if (!fork()){
  24.             //Padre
  25.             int fdRead = open(fifoHijoPadre, O_RDONLY);
  26.             char buffer[1];
  27.             int fdWrite = open(fifoPadreHijo, O_WRONLY);
  28.  
  29.             while ( int readbytes = read(fdRead,buffer, bufferSize) == 1){
  30.                 int writtenBytes = write(fdWrite, buffer, bufferSize);
  31.                 if (writtenBytes < 1){
  32.                      //Error
  33.                 }
  34.             }
  35.             close(fdRead);
  36.             unlink(fdRead);
  37.             close(fdWrite);
  38.             unlink(fdWrite);
  39.        
  40.         }else{
  41.             //Segundo hijo
  42.             int fdRead = open(fifoPadreHijo, O_RDONLY);
  43.             char buffer[1];
  44.  
  45.             while ( int readbytes = read(fdRead, buffer, bufferSize) == 1){
  46.                 int writtenBytes = write(fdWrite, buffer, bufferSize);
  47.                 if (writtenBytes < 1){ 
  48.                      //Error
  49.                 }
  50.                 printf("%c\n",buffer[0]);
  51.             }
  52.             close(fdRead);
  53.             unlink(fdRead);
  54.        
  55.         }
  56.     }else{
  57.         //Primer hijo
  58.         int fdWrite = open(fifoHijoPadre, O_WRONLY);
  59.         char letter[1];
  60.         letter[0]='a';
  61.         for (int i = 0; i<27; i++);
  62.             int writtenBytes = write(fdWrite, letter, bufferSize);
  63.             letter[0]++;
  64.         }
  65.         close(fdWrite);
  66.         unlink(fdWrite);
  67.     }
  68. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement