1. Dashboard
  2. Forum
    1. Unerledigte Themen
  3. Mitglieder
    1. Letzte Aktivitäten
    2. Benutzer online
    3. Team-Mitglieder
    4. Trophäen
    5. Mitgliedersuche
  4. Tutorial Bereich
  • Anmelden
  • Registrieren
  • Suche
Dieses Thema
  • Alles
  • Dieses Thema
  • Dieses Forum
  • Seiten
  • Forum
  • Lexikon
  • Erweiterte Suche
  1. Informatik Forum
  2. Webmaster & Internet
  3. Entwicklung

pipe; fork

  • Bambi
  • 12. Mai 2006 um 16:15
  • Unerledigt
  • Bambi
    3
    Bambi
    Mitglied
    Punkte
    70
    Beiträge
    11
    • 12. Mai 2006 um 16:15
    • #1

    Hallo!

    Ich soll ein "verteilten Taschenrechner" erstellen welcher so funktionieren sollte:

    - pipes aufbauen und prozess forken
    - einlesen der zahlen und der rechenoperation im Partenprozess
    - übergabe der eingelesenen werte an den Childprozess
    - Child berechnet das ergebnis und gibt es an den Parentprozess zurück
    - Paren gibt das Ergebnis aus.

    mein problem ist, dass ich im Parent das ergebnis nicht ausgeben kann (im Child funktioniert die ausgabe ...).
    was mich wundert: n (anzahl der Buchstaben die übergeben werden) im Child prozess hat den wert z.b.: 11 und im Parent beträgt n dann nur noch 1.
    leider bin ich noch nicht auf den fehler draufgekommen...
    Quellcode:

    C
    #include <sys/types.h>
    #include <unistd.h>
    #include <stdio.h>
    #include <string.h>
    
    
    int main (void)  
    {
      int fd1[2] ; // Pipe1   fd[0] = read,   fd[1]=write
      int fd2[2] ; // Pipe2   fd[0] = read,   fd[1]=write
    
      char buf[100], buf_zahl1[50], buf_zahl2[50], rz[2];
      int n=0;
    
    
      int ergebnis=0, zahl1=0, zahl2=0;                    // Variable
    
    
      pid_t ForkPID ;
    
    
      if (pipe(fd1) < 0) 
        {
          printf("Pipe1 creation failed ...\n") ;
          exit(1) ;
         }
    
      if (pipe(fd2) < 0) 
        {
          printf("Pipe1 creation failed ...\n") ;
          exit(1) ;
         }
    
    
      if ((ForkPID=fork()) < 0) 
        {
          printf("Fork failed ...\n") ;
          exit(1) ;
         }
    
    
      if (ForkPID == 0)                             // THE CHILD
        {
          close(fd1[1]) ; // close write port --> read
          close(fd2[0]) ; // close read port  --> write
    
             n = read(fd1[0],buf_zahl1,sizeof(buf_zahl1));  // einlesen des gesendeten vom Parent
     buf_zahl1[n]=(char)NULL;                       // Nullterminierung
    
     n = read(fd1[0],rz,sizeof(rz));
     rz[n]=(char)NULL;
    
    
     n = read(fd1[0],buf_zahl2,sizeof(buf_zahl2));
     buf_zahl2[n]=(char)NULL;
    
    
     
     zahl1= atoi(buf_zahl1);
    zahl2= atoi(buf_zahl2);
    
    
     if (rz[0] == '+')
               {
        ergebnis= zahl1 + zahl2;
       }
             if (rz[0]== '-')
       {
        ergebnis= zahl1 - zahl2;   
       }
     
     if (rz[0]== '*')
       {
        ergebnis= zahl1 * zahl2;   
       }
    
    
     if (rz[0]== '/')
       {
        ergebnis= zahl1 / zahl2;   
       }
    
    
     sprintf (buf, "Ergebnis= %d\n",ergebnis);
    // write (STDOUT_FILENO, buf , strlen(buf));
     n = write (fd2[1],buf,strlen(buf));
             printf ("n= %d\n",n);
         } 
    
    
      else                                          // THE PARENT
        { 
          close(fd1[0]) ; // close read port  --> write
          close(fd2[1]) ; // close write port --> read
    
           char *Buffer= "Zahl 1 = "; 
           char *Buffer1= "Rechenzeichen= ";
           char *Buffer2= "Zahl 2 = ";
    
             write (STDOUT_FILENO, Buffer, strlen(Buffer));
             n = read (STDIN_FILENO,buf_zahl1,sizeof(buf_zahl1));
     buf_zahl1[n]=(char)NULL;
     write (fd1[1],buf_zahl1,strlen(buf_zahl1));
     
     write (STDOUT_FILENO, Buffer1, strlen(Buffer1));
     n = read (STDIN_FILENO,rz,sizeof(rz));
     rz[n]=(char)NULL;
     write (fd1[1],rz,strlen(rz));
     
             write (STDOUT_FILENO, Buffer2, strlen(Buffer2));
     n = read (STDIN_FILENO,buf_zahl2,sizeof(buf_zahl2));
     buf_zahl2[n]=(char)NULL;
     write (fd1[1],buf_zahl2,strlen(buf_zahl2));
    
     n = read(fd2[0],buf,sizeof(buf));
     printf ("n1= %d\n",n);
     buf[n]='\0';
     write(STDOUT_FILENO,buf,strlen(buf));
    
     
         }
    
    
      return(0);
    
    }
    Alles anzeigen

    vielleicht findet ja wer den fehler ...

    danke schon mal im vorraus. lg Bambi

  • Maximilian Rupp 27. Dezember 2024 um 12:06

    Hat das Thema aus dem Forum Programmieren nach Entwicklung verschoben.

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!

Benutzerkonto erstellen Anmelden

Benutzer online in diesem Thema

  • 1 Besucher

Rechtliches

Impressum

Datenschutzerklärung