exit () против _exit (): обеспечивает ли вызов _exit () закрытие всех открытых файлов и сокетов? - PullRequest
2 голосов
/ 20 января 2012

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

Единственный вопрос: _exit() корректно обрабатывает закрытие всех дескрипторов открытых файлов и открытых сокетов?

Ответы [ 2 ]

6 голосов
/ 20 января 2012

Функция exit вызывает _exit. Из ТЛПИ:

Следующие действия выполняются методом exit ():

  • Обработчики выхода называются
  • Сброс потоковых буферов stdio
  • Системный вызов _exit () вызывается

Стандартная страница для _exit гласит:

Все дескрипторы файлов , потоки каталогов, преобразование дескрипторы и дескрипторы каталога сообщений открываются в вызывающем процесс должен быть закрыт.

3 голосов
/ 20 января 2012

Да, это так.На самом деле, на большинстве платформ операционная система закрывает файлы и сокеты для завершенного процесса, поэтому не имеет значения, завершился ли он с _exit(), exit(), assert(false) или kill -KILL.

Обратите внимание, что_exit() потоки stdio FILE * НЕ закрываются правильно, и любые неписанные (все еще буферизованные) данные будут потеряны.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...