programm geht bei 2 identischen else if bedingungen in die 2.



  • hallo,
    ich steh grad nen bisschen aufm schlauch:
    normal wird immer die erste bedingung genommen, die passt.
    hier nimmt er aber die 2. 😕
    (linux in Vbox, gcc, intel duo)

    #include <stdio.h>
    #include <stdlib.h>
    
    int main()
    {
      int v1 = 0, v2 = 0, v3 = 0, pid1, pid2, pid3;
      pid1 = fork(); //bei dem prozess gehts unten in die 2. else if
      pid2 = getpid();
      v2++;
      pid3 = fork();
      if (pid1 == pid3) {
        printf("[if (pid1 == pid3)]pid1 %d, pid2 %d, pid3 %d\n",pid1, pid2, pid3);
        v1++; v2++;
      }
      else if (pid2 == getppid()) {
        printf("[1. else if (pid2 == getpid())]pid1 %d, pid2 %d, pid3 %d\n",pid1, pid2, pid3);
        v1++; v3++;
        sleep(1);
      }
      else if (pid2 == getpid()) {
        printf("[2. else if (pid2 == getpid())] pid1 %d, pid2 %d, pid3 %d\n",pid1, pid2, pid3);
        v2++;
        wait(NULL);
        if (pid1 > 0) {
          printf("[if(pid1>0)] pid1 %d, pid2 %d, pid3 %d\n",pid1, pid2, pid3);
          v3++;
          wait(NULL);
        }
      }
      printf("%d %d %d\n", v1, v2, v3);
    }
    

    gruß,
    rumble

    hat sich erledigt, 🙄 . da hat sich doch ein p versteckt ^^



  • getppid() != getpid()

    EDIT: Ach sorry, du hattest die Lösung ja schon... 🤡



  • _matze schrieb:

    getppid() != getpid()

    Und daß du eine Funktion aufrufst die gar nicht
    existiert, teilt dir der Compiler gar nicht mit?

    Mein Gott, bin ich froh, auf Java umgestiegen zu sein! 🕶



  • Ich glaube auch, dass du bei Java besser aufgehoben bist 😉

    man: getpid
    man: getppid


Anmelden zum Antworten