2010-09-07 4 views
8

В чем разница между выходом(), _Exit() и _Exit() в C?Выход функции в C

Как я могу решить, какой использовать?

На ударе,

человек 2 выхода

дал мне страницу _exit (2), тогда как

человек 3 выхода

дал страницу ВЫХОД (3).

ответ

7

exit() завершение после очистки.

_exit() завершение сразу после звонка.

Если у вас есть поврежденный стек, а функция exit() называется программой, может закрыться с ошибкой сегментации, если вы используете _exit(), выйдите из программы в быстром режиме.

От http://msdn.microsoft.com/en-us/library/6wdz5232.aspx у вас есть

exit() - Выполняет комплексные процедуры терминации библиотеки C, завершает процесс, и выходит с прилагаемым кодом состояния.

_exit() - Выполняет быстрые процедуры завершения библиотеки C, завершает процесс и завершает работу с кодом состояния поставки.

_cexit() - Выполняет полные процедуры завершения библиотеки C и возвращает вызывающему абоненту, но не завершает процесс.

_c_exit() - Выполняет быстрые процедуры завершения библиотеки C и возвращает вызывающему абоненту, но не завершает процесс.

+1

ОК, но какая разница между полным и быстрым завершением? – adf88

+1

, пожалуйста, уточните, что следует использовать, когда. – 2010-09-07 12:12:57

+4

Вызов 'exit()'. Остальные являются деталями реализации и, как правило, не так полезны вне определенных редких условий при построении каркасов. – RBerteig

1

От человека:

выход:
Всех функций, зарегистрированных atexit (3) и on_exit (3) называется, в обратном порядке их регистрации ... Весь открытый STDIO (3) потоки промываются и закрываются. Файлы, созданные tmpfile (3), удаляются.

_exit:
Функция _exit() похожа на exit (3), но не вызывает никаких функций , зарегистрированных с помощью atexit (3) или on_exit (3). Является ли он сбросом стандартных буферов ввода-вывода и удаляет временные файлы, созданные с помощью tmpfile (3), - это , зависящий от реализации. С другой стороны, _exit() не закрывать открытые дескрипторы файлов ...

0

1.exit(): это очистка работа как закрытие дескриптора файла, файловый поток и так далее, 2._exit(): это не очистка работы, как закрытие дескриптора файла, поток файла и т. д.

Это основное отличие функций exit() и _exit().

утра я выпрямляется ур ответ

+0

_exit закрывает дескрипторы файлов. – adf88

+0

Нет, ядро. _exit просто завершает процесс. Основная особенность _exit заключается в том, что он ничего не говорит о том, чтобы ядро ​​завершило процесс. –

7

Нормативный в C99 являются exit и _Exit.

Различие между ними состоит в том, что exit также выполняет обработчики, которые могут быть зарегистрированы с atexit и закрывает потоки и т.д., тогда как _Exit не вызывать atexit процедуры и могут или не могут должным образом закрыть потоки.

_exit является POSIX и имеет схожие свойства как _Exit с той разницей, что гарантировано закрыть потоки должным образом.

Таким образом, всякий раз, когда вы можете использовать exit, это самый чистый путь к прекращению.