Яка різниця між виходом (0) та виходом (1) у С?


96

Хтось може мені сказати? У чому різниця між exit(0)і exit(1)в C мовою?

Відповіді:


117

У чому різниця між exit(0)і exit(1)в C мовою?

exit(0)вказує на успішне завершення програми і воно є повністю портативним, тоді як
exit(1)(зазвичай) вказує на невдале завершення. Однак його використання не є портативним.

Зверніть увагу, що стандарт C визначає EXIT_SUCCESSі EXIT_FAILUREповертає статус завершення з програми C.

0і EXIT_SUCCESSє значеннями, визначеними стандартом для вказівки на успішне припинення, однак, EXIT_FAILUREє лише стандартним значенням для повернення невдалого припинення. 1використовується для того ж у багатьох реалізаціях.


Довідка:

Стандарт C99: 7.20.4.3 exitФункція
Пара 5

Нарешті, контроль повертається до середовища хоста. Якщо значення статусу дорівнює нулю, або EXIT_SUCCESSповертається визначена реалізацією форма успішного припинення статусу. Якщо значення статусу EXIT_FAILURE, повертається визначена реалізацією форма невдалого припинення статусу. В іншому випадку статус, що повертається, визначається реалізацією.


1
Чи можете ви пояснити непереносимість? Зокрема, ненульові коди виходу вказують на різні режими відмов. Зазвичай програма використовує це для надання додаткової інформації. Таким чином, однієї константи ( EXIT_FAILURE) недостатньо.
Конрад Рудольф

@KonradRudolph: Я додав відповідне посилання. Сподіваюся, що це допомагає.
Alok Save

1
@Als: POSIX - це стандарт. Стандарт C може сказати , « від реалізації» , але це не рівнозначно тому, "не стерпні», коли реалізація насправді зробити згодні на конвенції.
Cat Plus Plus

1
@PeterM: Знайди мені платформу, яка не використовує цю конвенцію. Ймовірно, це буде якесь спеціалізоване / вбудоване / автономне / будь-яке середовище, де портативність exitнайменше з ваших проблем (пекло, там навіть може бути недоступна бібліотека C. НІЩО НЕ ПОРТАТИВНО !!! 111).
Cat Plus Plus

3
@CatPlusPlus: У OpenVMS дзвінок exitз будь-яким непарним значенням означає успіх. exit(0)розглядається як особливий випадок задля відповідності C. Так, POSIX є стандартом, але не всі системи відповідають йому. Якщо ви хочете написати код, який передбачає POSIX, ви можете це зробити, але це обмежує портативність вашого коду.
Кіт Томпсон,

12

exit у мові C приймає ціле число, що представляє статус виходу.

Вийти з успіху

Зазвичай статус виходу 0 вважається успішним або навмисним виходом, спричиненим успішним виконанням програми.

Помилка виходу

Статус виходу 1 вважається помилкою, і найчастіше це означає, що програмі з якихось причин довелося вийти, і вона не змогла успішно завершити все в звичайному потоці програми.

Ось ресурс GNU, який розповідає про статус виходу.


Як заявив @Als, замість 0 та 1 слід використовувати дві константи.

EXIT_SUCCESS визначається стандартом рівним нулю.

EXIT_FAILURE не обмежується стандартом як одне ціле, але багато систем дійсно реалізують це як одне ціле.


9

exit(0)вказує на те, що програма завершена без помилок. exit(1)вказує на те, що сталася помилка.

Ви можете використовувати різні значення, крім 1розрізнення помилок різного типу.


3

Різниця полягає у значенні, яке повертається в середовище, і 0в першому випадку, і 1в другому випадку:

$ ./prog_with_exit_0
$ echo $?
0
$

і

$ ./prog_with_exit_1
$ echo $?
1
$

Також зауважте, що значення макросів EXIT_SUCCESSі EXIT_FAILUREвикористовується як аргумент exitфункції визначено реалізацією, але, як правило, встановлюється відповідно 0і ненульовим числом. (POSIX вимагає EXIT_SUCCESS0). Тому зазвичай це exit(0)означає успіх і exit(1)невдачу.

exitВиклик функції з аргументом в mainфункції еквівалентно затвердження returnз тим же аргументом.


2

exit - це системний виклик, який використовується для завершення запущеного процесу, з якого він викликається. Параметр для виходу використовується для інформування батьківського процесу про стан дочірнього процесу. Отже, вихід (0) може використовуватися (і часто використовується) для позначення успішного виконання процесу, а вихід (1) для позначення помилки. посилальне посилання


1

exit(0)поводитись як return 0у main()функції, exit(1)поводитися як return 1. Стандартним є така mainфункція return 0, якщо програма закінчилася успішно, тоді як ненульове значення означає, що програма була припинена з якоюсь помилкою.


1

вихід (0) еквівалентний виходу (EXIT_SUCCESS).

вихід (1) еквівалентний виходу (EXIT_FAILURE).

При відмові зазвичай повертається будь-яке позитивне значення для виходу з процесу, яке можна знайти в оболонці за допомогою $ ?.

Значення більше 128, яке спричинене припиненням сигналом. Отже, якщо будь-яка команда оболонки, завершена сигналом, статус повернення повинен бути (128 + номер сигналу).

Наприклад:

Якщо будь-яка команда оболонки завершується SIGINT, тоді $? дасть 130 (128 + 2) (Тут 2 - номер сигналу для SIGINT, перевірка за допомогою kill -l)


0

Коли виконуваний файл закінчується (виходить), він повертає значення оболонці, яка його запустила. exit(0)зазвичай вказує на те, що все добре, тоді як exit(1)вказує на те, що щось пішло не так.



0

exit(0) означає, що Програма (Процес) нормально завершується ..

exit(1) означає, що програма (процес) зазвичай завершується невдало.

Якщо ви хочете спостерігати за цим, ви повинні знати обробку сигналів та управління процесами в Unix ...

знати про sigaction, watipid()..for () ... такі .... API ...........


0

exit function. У мові програмування C функція виходу викликає всі функції, зареєстровані на виході, і завершує програму.

exit(1)означає, що програма (процес) завершується невдало. Буфери файлів очищаються, потоки закриваються, а тимчасові файли видаляються

exit(0) означає, що Програма (Процес) успішно завершується.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.