Logo
IT Dienstleistungen

Aquädukt Splitted (Sender)

Sender und Emppfänger in unterschiedlichen Programmen, müssen nacheinander auf zwei unterschiedlichen Konsolen gestartet werden (Araber, Römer).

/****************************************************************         
*     Aquaedukt - Roemische Zahlen durch Pipe uebersetzen       *         
*   (c) 2009 Manuel Krischer fuer das Betriebssystempraktikum   *         
*    Hier der Sender                                            *         
****************************************************************/         
 
#include <stdlib.h>                                                       
#include <stdio.h>                                                        
#include <string.h>                                                       
#include <ctype.h>                                                        
#include <unistd.h>                                                       
#include <fcntl.h>                                                        
#include <sys/types.h>                                                    
#include <sys/stat.h>                                                     
 
/* Pipe Name und Berechtigung festlegen */                                
#define PIPEFILE        "aquaedukt"                                       
#define PIPEPERM        0777                                              
 
/* Named Pipe loeschen und neu erstellen */                               
int make_pipe() {                                                         
          unlink(PIPEFILE);                                               
          if(0 != mkfifo(PIPEFILE, PIPEPERM)) {                           
            printf("Pipe anlegen fehlgeschlagen!");                       
          }                                                               
}                                                                         
 
/* Funktion fuer den Eingabe, wird im Sohnprozess 1 ausgefuehrt*/         
int araber() {                                                            
    int i=0, h=1;                                                         
    int wert;                                                             
        printf("Warte auf die Roemer...\n");                              
        /* Named Pipe zum schreiben oeffnen und Betraege einlesen*/       
        FILE *input = fopen(PIPEFILE, "w");                               
          printf("Eine 0 beendet die Eingabe\n");                         
            do {
              printf("Betrag %i: ",h++);
              scanf("%i",&wert);
              /*in pipe schreiben*/
 
              if ( wert > 0 && wert < 4000 ) {
                  fprintf(input, "%i\n", wert);
                  }
              else if ( wert < 0 || wert >= 4000) {
                  printf("Nur Werte zwischen 1-3999 erlaubt!\n");
                  h--;
                  i--;
                  }
              else {
                  printf("ok\n");
                  }
              i++;
            fflush(input);
              /*Wenn EINGABEN erreicht oder 0, dann eingabevorgang abbrechen*/
              } while (wert != 0 );
            fclose(input);
return;
}
 
/*Hauptprogramm*/
int main(int argc,char *argv[]) {
make_pipe();
araber();
return;
}

Seiten-Werkzeuge