Czy ktoś może mi powiedzieć? Jaka jest różnica między exit(0)
iw exit(1)
języku C?
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_SUCCESS
i EXIT_FAILURE
zwraca status zakończenia z programu C.
0
i EXIT_SUCCESS
są wartościami określonymi przez standard w celu wskazania pomyślnego zakończenia, jednak tylko EXIT_FAILURE
standardowa wartość zwracająca nieudane zakończenie. 1
jest używany do tego samego w wielu implementacjach.
Odniesienie:
C99 standardowe: 7.20.4.3 exit
funkcja
§ 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.
EXIT_FAILURE
Zatem pojedyncza stała ( ) jest niewystarczająca.exit
jest najmniejszym z Twoich zmartwień (do diabła, może nawet nie być tam dostępnej biblioteki C. NIC NIE JEST PRZENOŚNE !!! 111).exit
z 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.Zakończ sukces
Zazwyczaj kod zakończenia równy 0 jest uznawany za sukces lub celowe zakończenie spowodowane pomyślnym wykonaniem programu.
Błąd wyjścia
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ódło
exit(0)
wskazuje, że program zakończył działanie bez błędów.exit(1)
wskazuje, że wystąpił błąd.Możesz użyć innych wartości innych niż
1
do rozróżnienia różnych rodzajów błędów.źródło
Różnica polega na tym, że wartość zwracana środowisku jest
0
w pierwszym przypadku, aw1
drugim:$ ./prog_with_exit_0 $ echo $? 0 $
i
$ ./prog_with_exit_1 $ echo $? 1 $
Należy również pamiętać, że wartość makra
EXIT_SUCCESS
iEXIT_FAILURE
wykorzystywane jako argument doexit
funkcji są wdrożenie zdefiniowane, ale zwykle są ustawione odpowiednio0
a liczba różna od zera. (POSIX wymagaEXIT_SUCCESS
0). Więc zwykleexit(0)
oznacza sukces iexit(1)
porażkę.exit
Wywołanie funkcji z argumentem wmain
funkcji jest równoznaczne z oświadczeniemreturn
z tym samym argumentem.źródło
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
źródło
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 ...........źródło
exit(0)
zachowuj się jakreturn 0
wmain()
funkcji,exit(1)
zachowuj się jakreturn 1
. Standardem jest to, żemain
funkcjareturn 0
, która zakończyła się pomyślnie, podczas gdy wartość niezerowa oznacza, że program został zakończony z jakimś błędem.źródło
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)
źródło
Kiedy plik wykonywalny kończy się (kończy pracę), zwraca wartość do powłoki, która go uruchomiła.
exit(0)
zwykle wskazuje, że wszystko jest w porządku, a jednocześnieexit(1)
wskazuje, że coś poszło nie tak.źródło
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 ()
źródło
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ą usuwaneexit(0)
oznacza pomyślne zakończenie programu (procesu).źródło