Advertisement
Jerkiller

Esercitazione Pipe Sistemi Operativi

Dec 3rd, 2014
191
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.66 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <sys/types.h>
  3. #include <fcntl.h>
  4. #include <unistd.h>
  5. #include <sys/stat.h>
  6. #include <string.h>
  7. #include <stdlib.h>
  8.  
  9.  //PIN e POUT sono altri nomi delle pipe
  10. #define POUT "shotPipeOut"
  11. #define PIN "shotPipeIn"
  12.  
  13. int main() {
  14.     int fdin, fdout, i;
  15.     char leggi;
  16.     char message[100];
  17.     //reset memoria
  18.    memset(message,0,100);
  19.    int bytesread;
  20.    //actualx e actualy รจ la posizione salvata del nemico
  21.    //pointx e pointy รจ la posizione del mio mirino (all'inizio in 0,0)
  22.    int actualx,actualy,pointx,pointy;
  23.  
  24.     //apro le pipe!
  25.     mkfifo(PIN,0666);
  26.     mkfifo(POUT,0666);
  27.    
  28.     if ( (fdout = open (POUT,O_RDONLY)) < 0 ) { // apre la pipe in lettura
  29.         perror("errore apertura pipe in lettura");
  30.         exit(1);
  31.     }
  32.     if ( (fdin = open(PIN,O_WRONLY)) < 0 ) {    // apre la pipe in scrittura
  33.         perror("errore apertura pipe in scrittura");
  34.         exit(1);
  35.     }
  36.  
  37.  
  38.  
  39.  
  40.    
  41.  pointx=0; pointy=0;
  42.  
  43.  
  44.  
  45.     for (i=1; i<=15; i++){
  46.         //leggo dalla pipe
  47.      bytesread = read(fdout,message,100);
  48.     printf("ho letto dalla pipe %d bytes: '%s' \n",bytesread,message);
  49.     //parsing dei dati
  50.      sscanf( message, "%d,%d#", &actualy, &actualx);
  51.      printf("nemico in %d\t%d.\n",actualx,actualy);
  52.      //calcolo lo shift del mirino
  53.      sprintf(message,"%d,%d#",(actualy-pointy),(actualx-pointx));
  54.      //scrivo sulla pipe
  55.      write (fdin,message,strlen(message));
  56.      //aggiorno la posizione del mirino
  57.      pointx=actualx; pointy=actualy;
  58.      printf("ho scritto nella pipe %d bytes: '%s' \n",(int)strlen(message)+1,message);
  59.      //aspetto un secondo, non ho fretta...
  60.      sleep(1);
  61.        
  62.     }
  63.    
  64.             //chiudo!
  65.     close(fdin); close(fdout);
  66.     unlink(PIN); unlink(POUT);
  67.     return 0;
  68. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement