Problem mit Prozessen

Diskutiere Problem mit Prozessen im C/C++ Forum im Bereich Programmieren unter Linux/Unix; Hi, ich habe folgenden Code: #include <stdio.h> #include <stdlib.h> #include <sys/types.h> #include <sys/wait.h> #include <unistd.h>...

  1. #1 Cordell, 15.04.2007
    Cordell

    Cordell Mitglied

    Dabei seit:
    14.02.2006
    Beiträge:
    43
    Zustimmungen:
    0
    Ort:
    Fulda
    Hi,

    ich habe folgenden Code:

    Code:
    #include <stdio.h>
    #include <stdlib.h>
    #include <sys/types.h>
    #include <sys/wait.h>
    #include <unistd.h>
    #include <errno.h>
    
    #define CHILDREN 3                        /* max. Anzahl Soehne           */
    
    int eval_wait_stat (int stat):
        
    int main (void)
    {
        pid_t parent_pid, child_pid,        /* Prozessnummern               */
              fork_pid, wait_pid,
              parent_grp, child_grp;        /* Prozessgruppen               */
        int   child_stat,                   /* Zustand des Sohnes           */
              exit_val,                     /* "exit"-Wert des Sohnes       */
              i,j,                          /* Zählvariablen                */ 
              anz_children = 0;                 /* Anzahl Soehne                */
        
        exit_val = 10;                      /* zum Testen beliebiger Wert   */
        parent_pid = getpid ();
        parent_grp = getpgrp ();
                
        while (anz_children < CHILDREN)
        {  
            fork_pid = fork ();
            switch(fork_pid)
            {
                 case -1:                         /* Fehler: kein Prozess erzeugt */
                     perror ("fork failed");
                     errno = 0;
                     break;
           
                 case 0:                          /* Sohnprozesse                 */
                     child_pid = getpid ();
                     child_grp = getpgrp ();
                    
                     printf ("Sohnprozess. Prozess-Id: %ld     Gruppen-Id: %ld     "
                             "Vaterprozess-Id: %ld     ", (long) child_pid, 
                             (long) child_grp, (long) getppid ());
                     anz_children++;
                     exit (exit_val);
                     break;
           
                 default:
                      while (anz_children > 0)
                      {
                            wait_pid = wait (&child_stat);
                            if (wait_pid == -1)
                            {
                               perror ("wait");
                               errno = 0;
                            }
                            else
                            {
                                printf ("Vaterprozess. Sohnprozess %ld endet.\n",
                                       (long) wait_pid);
                                eval_wait_stat (child_stat);
                                anz_children--;
                            }
                      }
           }
        }
        return 0;
    
        int eval_wait_stat (int stat)
        {
            if (WIFEXITED (stat) != 0)
            {
               printf ("\t\tSohnprozess endet mit Status %d.\n",
            WEXITSTATUS (stat));
            return 0;
            }
            if (WIFSIGNALED (stat) != 0)
            {
               printf ("\t\tSohnprozess wurde durch Signal %d beendet.\n",
               WTERMSIG (stat));
               return 0;
            }
            if (WIFSTOPPED (stat) != 0)
            {
               printf ("\t\tSohnprozess wurde durch Signal %d gestoppt.\n",
               WSTOPSIG (stat));
            }
            #if (defined(SunOS) || defined(IRIX)) && !defined(_POSIX_C_SOURCE)
            if (WIFCONTINUED (stat) != 0)
            {
               printf ("\t\tSohnprozess wurde fortgesetzt\n.");
            }
            #endif
            return 1;
        }            
    }
    
    Nach dem Kompilieren bekomme ich folgende Meldung:
    ------------------
    in function main:
    fork.c: (.text+0x104): undefined reference to 'eval_wait_stat'
    collect2: ld returned 1 exit status
    ------------------

    Kann jemand helfen?

    Gruß,
    Cordell
     
  2. Anzeige

    Schau dir mal diese Kategorie an. Dort findest du bestimmt etwas.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  3. heady

    heady Routinier

    Dabei seit:
    13.12.2005
    Beiträge:
    424
    Zustimmungen:
    0
    Ort:
    im Herzen Europas
    bist du sicher dass du das kompilieren kannst???

    Code:
    int eval_wait_stat (int stat):
    
    Da is doch en Doppelpunkt statt einem Strichpunkt am Ende...
     
  4. #3 Cordell, 15.04.2007
    Cordell

    Cordell Mitglied

    Dabei seit:
    14.02.2006
    Beiträge:
    43
    Zustimmungen:
    0
    Ort:
    Fulda
    Das ist schon ausgemerzt! :)
    Hast du ne Ahnung zu meinem problem?
     
  5. #4 x0r, 16.04.2007
    Zuletzt bearbeitet: 16.04.2007
    x0r

    x0r Bitschubser

    Dabei seit:
    20.12.2005
    Beiträge:
    169
    Zustimmungen:
    0
    Ort:
    Berlin
    Mahltid,

    Du hast da eine 'nested-function' gebastelt, und bist damit am ANSI-C-Standard gescheitert, der ja die Deklaration von globalen Funktionen (das hast Du auch gemacht) und die Definition ebenso (das hast Du versäumt!), außerhalb des Aufrufkontexts erfordert ;)

    also statt:

    Ab da hats auch bei mir funktioniert :D

    EDIT: gcc unter macosx bietet auch die möglichkeit per schalter -fnested-functions hier auch explizit von ANSI-C abzuweichen

    MfG...
     
  6. #5 Cordell, 16.04.2007
    Cordell

    Cordell Mitglied

    Dabei seit:
    14.02.2006
    Beiträge:
    43
    Zustimmungen:
    0
    Ort:
    Fulda
    Ja hatte ich mitlerweile auch bemerkt! Jedoch hab ich den Code auch noch umgeschrieben! Jetzt ist alles schön!! :)

    Danke für die Antworten!

    Gruß,
    Cordell
     
Thema:

Problem mit Prozessen

Die Seite wird geladen...

Problem mit Prozessen - Ähnliche Themen

  1. Problem bei der installation einer Sun Netzwerkkarte

    Problem bei der installation einer Sun Netzwerkkarte: Guten Morgen zusammen, beim installieren einer zusätzlichen Netzwerkkarte habe ich ein Problem. Die Karte wird nicht automatisch installiert. Es...
  2. Problem bei der Vergabe von Sciherheitsinformationen auf eine Freiagbe

    Problem bei der Vergabe von Sciherheitsinformationen auf eine Freiagbe: Liebe Community, zurzeit arbeite ich an eine Active Directory Domäne die mittels Samba läuft. Dazu habe ich einen AD DC auf Debian 8.7 mit Samba...
  3. Netzwerkproblem ? , wo ud wie suchen

    Netzwerkproblem ? , wo ud wie suchen: Hallo Folgende Problem: Testserver ist i686 Debian-unstable , auf dem läuft primär der apt-proxy apt-cahcer ng. Zugriff im Moment nur per ssh....
  4. Verständnisproblem Samba / LDAP

    Verständnisproblem Samba / LDAP: Hallo zusammen! Ich habe unter Ubuntu 16.04 einen LDAP und Samba Server aufgesetzt. Diese scheinen auch ordnungsgemäß zu funktionieren, sodaß ich...
  5. nginx+php-fpm problem

    nginx+php-fpm problem: Moin, ich hab hier gerade ein Problem und keine Idee mehr woran es liegt. Ich muss wie schon in der Überschrift erwähnt nginx dazu bringen php...