Advertisement
Jerkiller

Calcolatrice pipe esercizio

Dec 11th, 2014
191
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.05 KB | None | 0 0
  1. #include <stdlib.h>
  2. #include <sys/types.h>
  3. #include <sys/stat.h>
  4. #include <fcntl.h>
  5. #include <stdbool.h>
  6. #include <stdio.h>
  7. #include <string.h>
  8. #include <stdarg.h>
  9. #include <errno.h>
  10.  
  11. #define PIPE_IN "calcPipeIn"
  12. #define PIPE_OUT "calcPipeOut"
  13.  
  14.  
  15. int main(){
  16.     int fdin, fdout, bytesread, contatore;
  17.     char leggi;
  18.     char numero[5];
  19.     char temp[3];
  20.  
  21.     /* APRO LE PIPE */
  22.    
  23.     printf("creo pipe se non esistono\n");
  24.     mkfifo(PIPE_IN,0666);   // crea la pipe con nome
  25.     mkfifo(PIPE_OUT,0666);  // crea la pipe con nome
  26.      
  27.      printf("apro pipe in lettura\n");
  28.     if ( (fdin = open (PIPE_IN,O_RDONLY)) < 0 ) { // apre la pipe in lettura
  29.         perror("errore apertura pipe");
  30.         exit(1);
  31.     }
  32.        
  33.         printf("apro pipe in scrittura\n");
  34.     if ( (fdout = open (PIPE_OUT,O_WRONLY)) < 0 ) { // apre la pipe in lettura
  35.         perror("errore apertura pipe");
  36.         exit(1);
  37.     }
  38.    
  39.    
  40.     printf("inizio a leggere!\n\n");
  41.     contatore=0;
  42.     strcpy(numero,"");//creiamo stringa vuota dove scriviamo il numero da sommare;
  43.    
  44.    
  45.    
  46.         //leggere dalla pipe 4+4+5#
  47.         while (read(fdin,&leggi,1)) {   // legge un carattere alla volta fino a EOF
  48.        
  49.         if(leggi=='+'){
  50.             //converto la stringa in numero e la sommo
  51.             contatore+=atoi(numero);
  52.             strcpy(numero,"");
  53.         }
  54.         else if(leggi=='#'){
  55.             contatore+=atoi(numero);
  56.             strcpy(numero,"");
  57.             //stampo contatore
  58.             printf("Somma uguale a %d.\n",contatore);
  59.            
  60.             //creo stringa di risultato da scrivere su pipe
  61.             sprintf(temp,"%d#",contatore);
  62.             //scrivo su pipe
  63.             if(!write (fdout,temp,strlen(temp)))perror("Errore in scrittura su pipe!");
  64.            
  65.            
  66.             printf("--->##@@@ ho scritto sulla pipe %s\n",temp);
  67.            
  68.            
  69.             //azzero il contatore per la prossima somma.
  70.             contatore=0;
  71.         }
  72.         else{
  73.        
  74.             //convertiamo leggi (char) in char[].
  75.             sprintf(temp,"%c",leggi);
  76.         strcat(numero,temp); }
  77.         //printf("%c",leggi);
  78.        
  79.         //flush del buffer in lettura.
  80.         fflush(stdout);
  81.         }
  82.    
  83.     ///codice morto!
  84.    
  85.     /* CHIUDO LE PIPE */
  86.    
  87.     unlink(PIPE_IN);        // rimuove la pipe
  88.     unlink(PIPE_OUT);        // rimuove la pipe
  89.     exit(1);
  90.     return 0;
  91. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement