Was ist der Unterschied zwischen Ausgang (0) und Ausgang (1) in C?

96

Kann mir jemand sagen? Was ist der Unterschied zwischen exit(0)und exit(1)in C-Sprache?

Yu Hao
quelle

Antworten:

117

Was ist der Unterschied zwischen exit(0)und exit(1)in C-Sprache?

exit(0)zeigt eine erfolgreiche Programmbeendigung an und ist vollständig portabel, während
exit(1)(normalerweise) eine nicht erfolgreiche Beendigung angezeigt wird. Die Verwendung ist jedoch nicht portabel.

Beachten Sie, dass der C-Standard den Beendigungsstatus eines C-Programms definiert EXIT_SUCCESSund EXIT_FAILUREzurückgibt.

0und EXIT_SUCCESSsind die vom Standard angegebenen Werte, um eine erfolgreiche Beendigung EXIT_FAILUREanzuzeigen. Dies ist jedoch nur der Standardwert für die Rückgabe einer nicht erfolgreichen Beendigung. 1wird jedoch in vielen Implementierungen für dasselbe verwendet.


Referenz:

C99 Standard: 7.20.4.3 Die exitFunktion
Abs. 5

Schließlich wird die Kontrolle an die Hostumgebung zurückgegeben. Wenn der Wert von status Null ist oder EXIT_SUCCESSeine implementierungsdefinierte Form der erfolgreichen Beendigung des Status zurückgegeben wird. Wenn der Wert von status ist EXIT_FAILURE, wird eine implementierungsdefinierte Form des Status erfolglose Beendigung zurückgegeben. Andernfalls ist der zurückgegebene Status implementierungsdefiniert.

Alok Speichern
quelle
1
Können Sie die Nichtportabilität erklären? Insbesondere zeigen Exit-Codes ungleich Null verschiedene Fehlermodi an. Es ist üblich, dass eine Anwendung dies verwendet, um weitere Informationen bereitzustellen. Eine einzelne Konstante ( EXIT_FAILURE) ist daher nicht ausreichend.
Konrad Rudolph
@KonradRudolph: Ich habe das entsprechende Zitat hinzugefügt. Hoffentlich hilft das.
Alok Save
1
@Als: POSIX ist ein Standard. C - Norm könnte sagen , „Implementierung definiert“ , aber das ist nicht äquivalent zu der Aussage „nicht tragbar“, wenn Implementierungen in der Tat tun sich einig über die Konvention.
Cat Plus Plus
1
@PeterM: Finde mir eine Plattform, die diese Konvention nicht verwendet. Es ist wahrscheinlich etwas spezialisiert / embedded / freistehend / was auch immer Umfeld, wo Portabilität von exitder geringste Problem ist (Hölle, könnte es nicht einmal sein eine C - Bibliothek zur Verfügung gibt. NICHTS ist tragbar !!! 111).
Cat Plus Plus
3
@CatPlusPlus: Unter OpenVMS bedeutet das Aufrufen exitmit einem ungeraden Wert Erfolg. exit(0)wird aus Gründen der C-Konformität als Sonderfall behandelt. Ja, POSIX ist ein Standard, aber nicht alle Systeme entsprechen diesem Standard. Wenn Sie Code schreiben möchten, der POSIX voraussetzt, können Sie dies tun, dies schränkt jedoch die Portabilität Ihres Codes ein.
Keith Thompson
12

exit In der Sprache C wird eine Ganzzahl verwendet, die einen Exit-Status darstellt.

Erfolg beenden

In der Regel wird ein Exit-Status von 0 als Erfolg oder als absichtlicher Exit angesehen, der durch die erfolgreiche Ausführung des Programms verursacht wird.

Beenden Sie den Fehler

Ein Exit-Status von 1 wird als Fehler angesehen und bedeutet meistens, dass das Programm aus irgendeinem Grund beendet werden musste und nicht in der Lage war, alles im normalen Programmablauf erfolgreich abzuschließen.

Hier ist eine GNU-Ressource , die sich mit dem Exit-Status befasst.


Wie @Als angegeben hat, sollten anstelle von 0 und 1 zwei Konstanten verwendet werden.

EXIT_SUCCESS wird durch den Standard als Null definiert.

EXIT_FAILURE wird durch den Standard nicht auf eins beschränkt, aber viele Systeme implementieren ihn als eins.

Sam DeHaan
quelle
9

exit(0)zeigt an, dass das Programm fehlerfrei beendet wurde. exit(1)zeigt an, dass ein Fehler aufgetreten ist.

Sie können andere Werte als verwenden 1, um zwischen verschiedenen Arten von Fehlern zu unterscheiden.

sch
quelle
3

Der Unterschied besteht darin, dass der an die Umgebung zurückgegebene Wert 0im ersteren Fall und 1im letzteren Fall ist:

$ ./prog_with_exit_0
$ echo $?
0
$

und

$ ./prog_with_exit_1
$ echo $?
1
$

Beachten Sie auch, dass der Makrowert EXIT_SUCCESSund EXIT_FAILUREder als exitFunktionsargument verwendete Wert für die Implementierung definiert sind, jedoch normalerweise auf 0eine Zahl ungleich Null festgelegt sind . (POSIX muss EXIT_SUCCESS0 sein). Bedeutet also normalerweise exit(0)Erfolg und exit(1)Misserfolg.

Ein exitFunktionsaufruf mit einem Argument in mainfunction entspricht der Anweisung returnmit demselben Argument.

ouah
quelle
2

exit ist ein Systemaufruf, mit dem ein laufender Prozess beendet wird, von dem aus er aufgerufen wird. Der zu beendende Parameter wird verwendet, um den übergeordneten Prozess über den Status des untergeordneten Prozesses zu informieren. So kann exit (0) verwendet (und häufig verwendet) werden, um die erfolgreiche Ausführung eines Prozesses anzuzeigen, und exit (1), um einen Fehler zu kennzeichnen. Referenzlink

Mahtab
quelle
1

exit(0)benimm dich wie return 0in der main()Funktion, exit(1)benimm dich wie in der Funktion return 1. Der Standard ist, dass diese mainFunktion return 0, wenn das Programm erfolgreich beendet wurde, während ein Wert ungleich Null bedeutet, dass das Programm mit einem Fehler beendet wurde.

Tomáš Šíma
quelle
1

exit (0) entspricht exit (EXIT_SUCCESS).

exit (1) entspricht exit (EXIT_FAILURE).

Bei einem Fehler wird normalerweise ein positiver Wert zurückgegeben, um den Prozess zu beenden, den Sie mit $? Auf der Shell finden können.

Wert mehr als 128, der die Beendigung durch Signal verursacht. Wenn also ein Shell-Befehl durch ein Signal beendet wird, muss der Rückgabestatus (128 + Signalnummer) sein.

Beispielsweise:

Wenn ein Shell-Befehl von SIGINT beendet wird, wird $? gibt 130 (128 + 2) (Hier ist 2 die Signalnummer für SIGINT, überprüfen Sie mit kill -l)

Sandeep_black
quelle
0

Wenn die ausführbare Datei endet (beendet wird), gibt sie einen Wert an die Shell zurück, die sie ausgeführt hat. exit(0)zeigt normalerweise an, dass alles exit(1)in Ordnung ist, während anzeigt, dass etwas nicht stimmt.

Ed Heal
quelle
0

exit () sollte immer mit einem ganzzahligen Wert aufgerufen werden und Werte ungleich Null werden als Fehlercodes verwendet.

Siehe auch: Verwendung der Funktion exit ()

Squig
quelle
0

exit(0) bedeutet, dass Programm (Prozess) normal erfolgreich beendet wird.

exit(1) bedeutet, dass Programm (Prozess) normalerweise erfolglos beendet wird.

Wenn Sie dies beobachten möchten, müssen Sie die Signalverarbeitung und das Prozessmanagement unter Unix kennen ...

wissen über sigaction, watipid()..for () ... wie .... API ...........

Nikunj Patel
quelle
0

exit function. In der Programmiersprache C ruft die Exit-Funktion alle beim Exit registrierten Funktionen auf und beendet das Programm.

exit(1)bedeutet, dass Programm (Prozess) nicht erfolgreich beendet wird. Dateipuffer werden geleert, Streams geschlossen und temporäre Dateien gelöscht

exit(0) bedeutet, dass Programm (Prozess) erfolgreich beendet wurde.

Rashid Thattayil
quelle