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

    Anzeige

    Wenn du mehr über Linux erfahren möchtest, dann solltest du dir mal folgende Shellkommandos anschauen.


    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. Linux 5.6 löst Jahr-2038-Problem für 32-Bit-Systeme

    Linux 5.6 löst Jahr-2038-Problem für 32-Bit-Systeme: Die kommende Version 5.6 wird der erste Linux-Kernel sein, der gegen das Jahr-2038-Problem auf 32-Bit-Systemen immun ist. Damit das greifen kann,...
  2. kleines curl Problem

    kleines curl Problem: Hallo, ich bin LINUX Frischling und hab mich ein wenig in eien Sackgasse verlaufen... Ich habe vor, die Verzeichnisgröße via curl Befehl in eine...
  3. Samba 4.0.0 - DNS-Problem

    Samba 4.0.0 - DNS-Problem: Hallo, ich betreibe seit 2013 einen Samba4 Server auf Basis der sernet-Pakete als DC für eine kleine Domäne. Nur mit dem DNS gibt es Probleme....
  4. Mageia 7.1 patcht Boot-Problem bei AMD Ryzen 3000 CPUs

    Mageia 7.1 patcht Boot-Problem bei AMD Ryzen 3000 CPUs: Mageia hat kurzfristig mit Version 7.1 ein Point-Release veröffentlicht, um einen Boot-Fehler mit AMDs Ryzen 3000 CPUs zu beheben, der einige...
  5. ip6tables Problem

    ip6tables Problem: Hallo zusammen, ich hab ein Problem kann aber keinen Fehler finden, äußert sich wie folgt, ich habe endlich für ein System in Netz eine IPv6...
  1. Diese Seite verwendet Cookies um Inhalte zu personalisieren. Außerdem werden auch Cookies von Diensten Dritter gesetzt. Mit dem weiteren Aufenthalt akzeptierst du diesen Einsatz von Cookies.
    Information ausblenden