exit , _exit und return 0 !



  • hallo Liber C/C++ user,

    hier mal wieder ein Problem und zwar weiss ich was der unterschied zw. ein exit() _exit() und return 0 ist leider aber nicht wofür man den Integer parameter für exit() im bereich 0 bis 255 eingeben kann?

    was ist der unterschied zw. exit(20); und exit(30); ich hab es ausprobiert und muss ehrlich sagen, dass sich nichts ändert. Naja aber warum wohl dann ? 😕
    Ach der int main () mache ich immer mit exit(0) zu am Ende geht es auch mit anderen Parameter 😕 ?

    Hoffe auf einen Antwort von den experten

    LG

    speeder



  • mit dem integer-wert kannst du zB fehlermeldungen ausgeben, außerdem ist es ein signed-int, also von -127 bis 128. das erkennst auch an deiner main-funktion

    int main(void)
    {
      ...
    }
    

    mfg blan



  • blan schrieb:

    (...) außerdem ist es ein signed-int, also von -127 bis 128.

    signed int hat also 8 Bit? 😃

    Mit dem Wert kann man nicht Fehlermeldungen ausgeben, sondern Fehlercodes zurückgeben, wobei 0 für 'kein Fehler' steht. Es geht im Übrigen auch z.B. 'return -1;'.



  • naja gut das weiss ich aber was ist der unterschied z.b. zwischen exit(20) und exit(30) oder was auch immer . Mit dem exit(); beeendet man ein laufenden Prozess nun wofür ein bereich zahl von 0--->255 das sind die Interger Parameter, die man in exite(); übergeben kann



  • Neku schrieb:

    blan schrieb:

    (...) außerdem ist es ein signed-int, also von -127 bis 128.

    signed int hat also 8 Bit? 😃

    Mit dem Wert kann man nicht Fehlermeldungen ausgeben, sondern Fehlercodes zurückgeben, wobei 0 für 'kein Fehler' steht. Es geht im Übrigen auch z.B. 'return -1;'.

    hrm .. jo grad verplant, trtzdem is es ein signed int

    mfg blan



  • speed2006 schrieb:

    Mit dem exit(); beeendet man ein laufenden Prozess nun wofür ein bereich zahl von 0--->255 das sind die Interger Parameter, die man in exite(); übergeben kann

    Das ist der sogenannte exit-Wert, den kann sich der Aufrufer deines Programms danach abholen. Auf der bash-shell bekommt man etwa den Rückgabewert des letzten Programmes per "echo $?". Das kann man dann auch in Skripten etc. nutzen, um z.B. wie oben gesagt 0 für "alles ok" und "-1" für Fehler zurückzugeben o.ä.



  • speed2006 schrieb:

    hallo Liber C/C++ user,

    hier mal wieder ein Problem und zwar weiss ich was der unterschied zw. ein exit() _exit() und return 0 ist leider aber nicht wofür man den Integer parameter für exit() im bereich 0 bis 255 eingeben kann?

    was ist der unterschied zw. exit(20); und exit(30); ich hab es ausprobiert und muss ehrlich sagen, dass sich nichts ändert. Naja aber warum wohl dann ? 😕
    Ach der int main () mache ich immer mit exit(0) zu am Ende geht es auch mit anderen Parameter 😕 ?

    Hoffe auf einen Antwort von den experten

    LG

    speeder

    Ein Programm hat beim Verlassen zwei Möglichkeiten: mit oder ohne Fehler (im Sinne vom Absturz oder Fehlverhalten). Damit man erkennen kann, ob ein Prozess fehlerhaft oder fehlerfrei beendet hat, liefern die Prozesse beim Beenden eine zahl zurück. 0 wenn fehlerfrei, eine Zahl != 0 sonst, dabei ist es im Prinzip egal, was man liefert, ob 1 oder 10 oder 100, das ist im Prinzip egal. Aber wenn man verschiedene Werte hat, so kann man sie dafür benutzen, die verschiedene Fehlermöglichkeiten abzufangen. Dabei hält man sich meistens an der man: errno Konvention.

    Was den Unterschieden zwischen return xxx, exit(xxx), _exit(xxx) angeht: ein return xxx; in int main(); ist äquivalent zu einem exit(xxx).

    exit und _exit unterscheiden sich darin, dass exit Aufräumarbeit betätigt während _exit keine Aufräumt Arbeit erledigt. Um zu verstehen, was das bedeutet, musst du ungefähr wissen, wie Linux (also der Kern) Prozesse startet.

    Wenn du ein Programm starten willst, gibst du in einem Terminal den Pfad und Namen der ausführbaren Datei an. Mittels man: exec(3) startet der Kern einen neuen Prozess, der durch eine startup Prozedur initialisiert und gestartet wird. Erst dann wird die Funktion main() ausgeführt und das Programm läuft. Ein Programm ohne einen Aufruf von man: exit(3) beendet, wenn die Funktion main komplett abgearbeitet ist und liefert einen Wert zurück. Die startup Prozedur ruft dann exit mit dem zurückgegebenen Wert auf und diese Funktion macht die Aufräumarbeit, Speicher freigeben, exit_handlers aufrufen, usw. Wenn exit fertig, dann wird man: _exit(2) aufgerufen und beenden den von exec gestarteten Prozess.

    Wenn exit währned des Ablaufs des Programms aufgerufen wird, so umgeht das Programm das "Zurückkeheren" an der Startprozedur sondern wird das Aufräumen erledigt, exit_hanlders ausgeführt, usw. Erst dann führt exit die _exit Funktion aus, um den Prozess zu beenden.

    Wenn _exit währned des Ablaufs des Programms aufgerufen wird, so wird der der Prozess sofort beendet, ohne aufzuräumen und ohne den exit_handlers ausgeführt zu haben. Mit _exit sollte man aber selber ein Programm nicht beenden.

    Wenn du mehr darüber lesen willst, dann du die man pages nach den exec Funktionen suchen (man 3 exec).


Anmelden zum Antworten