Linux C system,exit undeclared



  • Hallo!
    Bei folgendem sorce tritt ein Problem bei der compilierung auf

    #include <stdio.h> 
    #include <unistd.h> 
    #include <sys/types.h> 
    
    int main(int argc, char **argv) 
    { 
     pid_t kind1; 
    
     while(1) 
      { 
        switch(kind1=fork()) 
          { 
            case -1 : exit(0);  break; 
            case  0 : system("konsole -caption 'kind' -vt_sz 20x10"); 
        break; 
            default : printf("Elternprozess: Warte auf das Ende vom           Kindprozess!\n"); 
                      printf("Um den Prozess %s zu killen gib bitte ein :                 ",**argv); 
                      printf("kill -9 %d (%d=PID)\n",kind1,kind1); 
              exit(1); 
          } 
      } 
     return 0; 
    }
    

    Beim compilieren erhalte ich die Fehlermeldungs, dass system, sowie exit nicht bekannt wären.
    Achso, ich compilier mit dem Befehl:
    g++ fork.cpp -o fork .



  • Morgen,

    dafuer musst du die stdlib.h noch includieren.

    mfg
    v R



  • Stimmt, danke



  • @irgentwer, in solchen Fällem hilft oft ein Blick in die man-Pages. Siehe man system und man 3 exit.



  • Ich würde die includes so machen:

    #include <cstdio>
    #include <cstdlib>

    extern "C" {
    #include <unistd.h>
    #include <sys/types.h>
    }



  • Ponto schrieb:

    Ich würde die includes so machen:

    #include <cstdio>
    #include <cstdlib>

    extern "C" {
    #include <unistd.h>
    #include <sys/types.h>
    }

    das wäre C++ ... aber wieso das extern C? mache ich nie...



  • @DrGreenthumb
    wenn auf dem System die Libc nicht C++ kompatibel ist, ist das nötig.

    @irgentwer
    ich würde bei einem Fehler nicht 0 zurückgeben, da man ja dann erwartet, dass alles gut gegangen ist.



  • DrGreenthumb schrieb:

    Ponto schrieb:

    Ich würde die includes so machen:

    #include <cstdio>
    #include <cstdlib>

    extern "C" {
    #include <unistd.h>
    #include <sys/types.h>
    }

    das wäre C++ ... aber wieso das extern C? mache ich nie...

    Er benutzt g++, weshalb ich dachte er will C++. Die POSIX header sind C header mit C linkage. Da muss ein extern "C" drumherum. Die meisten Bibliotheken machen das automatisch, aber man weiss nie.



  • @Ponto: die header files machen das mit dem extern "C" schon von alleine, das braucht man nicht mehr selber zu machen. Am besten nimmt man auch cstdio statt stdio.h, usw.



  • supertux schrieb:

    @Ponto: die header files machen das mit dem extern "C" schon von alleine, das braucht man nicht mehr selber zu machen. Am besten nimmt man auch cstdio statt stdio.h, usw.

    Nicht auf allen Platformen. Unter AIX musste ich das extern schon selbst machen. Ich halte es ausserdem für einen Fehler, wenn die Header das selbst machen. POSIX Header sind C Header und keine C++ Header.

    Jedesmal wenn nicht alle Fehler angemeckert werden, kommt nur Müll raus. Unter einigen AIX Platformen darf man ungestraft Nullpointer dereferenzieren. Was dann rauskommt, wenn man auf Solaris portiert, kann sich jeder selbst ausdenken.

    Das schlimmste Beispiel ist HTML. Weil alle Engines Fehler verzeihen, gibt es eigenlich nur HTML Müll im Web.



  • Ponto schrieb:

    supertux schrieb:

    @Ponto: die header files machen das mit dem extern "C" schon von alleine, das braucht man nicht mehr selber zu machen. Am besten nimmt man auch cstdio statt stdio.h, usw.

    Nicht auf allen Platformen. Unter AIX musste ich das extern schon selbst machen. Ich halte es ausserdem für einen Fehler, wenn die Header das selbst machen. POSIX Header sind C Header und keine C++ Header.

    Jedesmal wenn nicht alle Fehler angemeckert werden, kommt nur Müll raus. Unter einigen AIX Platformen darf man ungestraft Nullpointer dereferenzieren. Was dann rauskommt, wenn man auf Solaris portiert, kann sich jeder selbst ausdenken.

    Das schlimmste Beispiel ist HTML. Weil alle Engines Fehler verzeihen, gibt es eigenlich nur HTML Müll im Web.

    Ich hab bisher nur GNU Systeme gehabt und da war es immer dabei.


Anmelden zum Antworten