Czy ktoś może mi powiedzieć? Jaka jest różnica między exit(0)iw exit(1)języku C?
Odpowiedzi:
Jaka jest różnica między exit(0)iw exit(1)języku C?
exit(0)wskazuje pomyślne zakończenie programu i jest w pełni przenośny, podczas gdy
exit(1)(zwykle) wskazuje na nieudane zakończenie. Jednak jego użycie nie jest przenośne.
Zauważ, że standard C definiuje EXIT_SUCCESSi EXIT_FAILUREzwraca status zakończenia z programu C.
0i EXIT_SUCCESSsą wartościami określonymi przez standard w celu wskazania pomyślnego zakończenia, jednak tylko EXIT_FAILUREstandardowa wartość zwracająca nieudane zakończenie. 1jest używany do tego samego w wielu implementacjach.
Odniesienie:
C99 standardowe: 7.20.4.3 exitfunkcja
§ 5
Wreszcie kontrola jest zwracana do środowiska hosta. Jeśli wartość statusu jest równa zero lub
EXIT_SUCCESS, zwracana jest zdefiniowana w implementacji forma pomyślnego zakończenia statusu. Jeśli wartość statusu toEXIT_FAILURE, zwracana jest zdefiniowana w implementacji forma statusu niepomyślne zakończenie. W przeciwnym razie zwracany status jest zdefiniowany jako implementacja.
exitjest najmniejszym z Twoich zmartwień (do diabła, może nawet nie być tam dostępnej biblioteki C. NIC NIE JEST PRZENOŚNE !!! 111).
exitz dowolną nieparzystą wartością oznacza sukces. exit(0)jest traktowany jako szczególny przypadek ze względu na zgodność C. Tak, POSIX jest standardem, ale nie wszystkie systemy są z nim zgodne. Jeśli chcesz napisać kod, który zakłada POSIX, możesz to zrobić, ale ogranicza to przenośność kodu.
exit w języku C przyjmuje liczbę całkowitą reprezentującą status wyjścia.
Zazwyczaj kod zakończenia równy 0 jest uznawany za sukces lub celowe zakończenie spowodowane pomyślnym wykonaniem programu.
Status wyjścia równy 1 jest uważany za błąd i najczęściej oznacza, że program musiał z jakiegoś powodu zakończyć pracę i nie był w stanie pomyślnie ukończyć wszystkiego w normalnym przebiegu programu.
Oto zasób GNU mówiący o statusie wyjścia.
Jak stwierdził @Als, zamiast 0 i 1 należy użyć dwóch stałych.
EXIT_SUCCESS jest definiowany przez standard jako zero.
EXIT_FAILURE nie jest ograniczony przez standard do jednego, ale wiele systemów implementuje go jako jeden.
Różnica polega na tym, że wartość zwracana środowisku jest 0w pierwszym przypadku, aw 1drugim:
$ ./prog_with_exit_0
$ echo $?
0
$
i
$ ./prog_with_exit_1
$ echo $?
1
$
Należy również pamiętać, że wartość makra EXIT_SUCCESSi EXIT_FAILUREwykorzystywane jako argument do exitfunkcji są wdrożenie zdefiniowane, ale zwykle są ustawione odpowiednio 0a liczba różna od zera. (POSIX wymaga EXIT_SUCCESS0). Więc zwykle exit(0)oznacza sukces i exit(1)porażkę.
exitWywołanie funkcji z argumentem w mainfunkcji jest równoznaczne z oświadczeniem returnz tym samym argumentem.
exit to wywołanie systemowe używane do zakończenia uruchomionego procesu, z którego zostało wywołane. Parametr do wyjścia służy do informowania procesu nadrzędnego o statusie procesu potomnego. Tak więc exit (0) może być używane (i często używane) do wskazania pomyślnego wykonania procesu i exit (1) do oznaczenia błędu. link referencyjny
exit(0) oznacza, że Program (Proces) kończy się pomyślnie.
exit(1) oznacza, że program (proces) kończy się normalnie bez powodzenia.
Jeśli chcesz to zaobserwować, musisz znać obsługę sygnałów i zarządzanie procesami w Uniksie ...
wiedzieć sigaction, watipid()..for () ... takie .... API ...........
exit(0)zachowuj się jak return 0w main()funkcji, exit(1)zachowuj się jak return 1. Standardem jest to, że mainfunkcja return 0, która zakończyła się pomyślnie, podczas gdy wartość niezerowa oznacza, że program został zakończony z jakimś błędem.
exit (0) jest równoważne z exit (EXIT_SUCCESS).
exit (1) jest równoważne z exit (EXIT_FAILURE).
W przypadku niepowodzenia zwykle zwracana jest każda dodatnia wartość, aby wyjść z procesu, którą można znaleźć w powłoce za pomocą $ ?.
Wartość większa niż 128, która jest spowodowana przerwaniem sygnału. Więc jeśli jakiekolwiek polecenie powłoki zostało zakończone sygnałem, status powrotu musi wynosić (128 + numer sygnału).
Na przykład:
Jeśli jakieś polecenie powłoki zostanie zakończone przez SIGINT, to $? da 130 (128 + 2) (Tutaj 2 to numer sygnału dla SIGINT, sprawdź używając kill -l)
Funkcja exit () powinna być zawsze wywoływana z wartością całkowitą, a wartości niezerowe są używane jako kody błędów.
Zobacz też: Używanie funkcji exit ()
exit function. W języku programowania C funkcja exit wywołuje wszystkie funkcje zarejestrowane w momencie wyjścia i kończy działanie programu.
exit(1)oznacza, że program (proces) kończy się niepowodzeniem.
Bufory plików są opróżniane, strumienie są zamykane, a pliki tymczasowe są usuwane
exit(0) oznacza pomyślne zakończenie programu (procesu).
EXIT_FAILUREZatem pojedyncza stała ( ) jest niewystarczająca.