1. Weiterleitung zu NetzLiving.de
  2. Forum
    1. Unerledigte Themen
  3. zum neuen Forum
  • Anmelden
  • Suche
Dieses Thema
  • Alles
  • Dieses Thema
  • Dieses Forum
  • Seiten
  • Forum
  • Erweiterte Suche
  1. Informatik Forum
  2. Webmaster & Internet
  3. Entwicklung

pipe; fork

  • Bambi
  • 12. Mai 2006 um 16:15
  • Unerledigt
Hallo zusammen,

das Informatik-Forum geht in den Archivmodus, genaue Informationen kann man der entsprechenden Ankündigung entnehmen. Als Dankeschön für die Treue bekommt man von uns einen Gutscheincode (informatikforum30) womit man bei netzliving.de 30% auf das erste Jahr sparen kann. (Genaue Infos sind ebenfalls in der Ankündigung)

Vielen Dank für die Treue und das Verständnis!
  • Bambi
    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.

  1. Datenschutzerklärung
  2. Impressum