kzen.dev
  • Вопросы
  • Метки
  • Пользователи
Оповещения
Вознаграждения
Регистрация
После регистрации, сможете получать уведомления об ответах и комментариях на Ваши вопросы.
Вход
Если у Вас уже есть аккаунт, войдите чтобы проверить новые уведомления.
Тут будут вознаграждения за добавленные вопросы, ответы и комментарий.
Дополнительно
Источник
Редактировать
Nathan Fellman
Nathan Fellman
Вопрос

Есть ли разница между функциями on_exit() и atexit()?

Есть ли разница между

   int on_exit(void (*function)(int , void *), void *arg);

и

   int atexit(void (*function)(void));

кроме того, что функция, используемая on_exit, получает статус выхода?

То есть, если мне не важен статус выхода, есть ли причина использовать ту или иную функцию?

Редактирование: Многие ответы предостерегают от on_exit, потому что он нестандартный. Если я разрабатываю приложение для внутреннего корпоративного использования, которое гарантированно будет работать на определенных конфигурациях, стоит ли мне беспокоиться об этом?

19 2008-08-14T04:53:45+00:00 5
Josh Kelley
Josh Kelley
Редактировал вопрос 27-го сентября 2011 в 1:33
Программирование
linux
c
Derek Park
Derek Park
14-го августа 2008 в 4:59
2008-08-14T04:59:55+00:00
Дополнительно
Источник
Редактировать
#8414634

По возможности следует использовать atexit(). on_exit() является нестандартным и менее распространенным. Например, она недоступна в OS X.

Kernel.org - on_exit():

Эта функция пришла из SunOS 4, но также присутствует в libc4, libc5 и glibc. Она больше не встречается в Solaris (SunOS 5). Избегайте этой функции и используйте вместо нее стандартную atexit(3).

18
0
Решение / Ответ
Mike Stone
Mike Stone
14-го августа 2008 в 5:03
2008-08-14T05:03:17+00:00
Дополнительно
Источник
Редактировать
#8414635

Согласно этой ссылке, которую я нашел, кажется, есть несколько различий. on_exit позволит вам передать аргумент, который будет передан в функцию on_exit при ее вызове... что может позволить вам установить некоторые указатели для выполнения некоторой работы по очистке, когда придет время выйти.

Более того, похоже, что on_exit была специфической функцией SunOS, которая может быть несовместима со всеми платформами... так что, возможно, вы захотите использовать atexit, несмотря на его более жесткие ограничения.

14
0
 R..
R..
17-го июля 2010 в 8:20
2010-07-17T20:20:53+00:00
Дополнительно
Источник
Редактировать
#8414638

Различие - то, что 'atexit' - C, и 'on_exit' - некоторое странное расширение, доступное на ГНУ и кто знает что другие системы Unixy (но НЕ часть POSIX).

4
0
Derek Park
Derek Park
14-го августа 2008 в 8:09
2008-08-14T08:09:47+00:00
Дополнительно
Источник
Редактировать
#8414637

@Nathan, я can' t находят любую функцию, которая возвратит код завершения для текущего бегущего процесса. Я ожидаю что это isn' t набор все же в пункте, когда 'atexit ()' назван, так или иначе. Этим я подразумеваю, что время выполнения знает, каково это, но вероятно hasn' t сообщил о нем OS. Это - в значительной степени просто догадка, все же.

Похоже, что Вы должны будете или использовать 'on_exit ()' или структурировать свою программу так, чтобы код завершения doesn' t вопрос. Не было бы неблагоразумно иметь последнее заявление в Вашем главном щелчке функции глобальная 'exited_cleanly' переменная к истинному. В функции Вы регистрируетесь в 'atexit ()', Вы могли проверить эту переменную, чтобы определить, как программа вышла. Это только даст Вам два государства, но я ожидаю, что это было бы достаточно для большинства потребностей. Вы могли также расширить этот тип схемы поддержать больше выходных государств при необходимости.

1
0
Mike Stone
Mike Stone
14-го августа 2008 в 6:51
2008-08-14T06:51:23+00:00
Дополнительно
Источник
Редактировать
#8414636

@Nathan

Во-первых, посмотрите, есть ли другой вызов API для определения статуса выхода... беглый взгляд и я не вижу ни одного, но я не очень хорошо разбираюсь в стандартном API C.

Простая альтернатива - иметь глобальную переменную, которая хранит статус выхода... по умолчанию это неизвестная причина ошибки (если программа завершается ненормально). Затем, когда вы вызываете exit, вы можете хранить статус выхода в глобальной переменной и получать его из любых функций atexit. Это требует тщательного хранения статуса выхода перед каждым вызовом exit, и, конечно, не идеально, но если нет API и вы не хотите рисковать отсутствием on_exit в платформе... это может быть единственным вариантом.

0
0
Похожие сообщества 20
DevOps — русскоговорящее сообщество
DevOps — русскоговорящее сообщество
14 834 пользователей
Общаемся на темы DevOps, мониторинга, метрикам и облакам. Новости. См. также: @kubernetes_ru, @docker_ru, @ceph_ru, @openstack_ru FAQ и правила: https://git.io/JtnWb Вакансии и поиск работы: @devops_jobs
Открыть telegram
DevOps Jobs - работа и аналитика
DevOps Jobs - работа и аналитика
12 585 пользователей
Публикуем вакансии и запросы на поиск работы по направлению DevOps & SRE. Обмен инсайдами и аналитикой на рынке труда DevOps & SRE. Вакансии в @devops_jobs_feed FAQ и правила: https://git.io/JtnWb Старт бота "/man" См.также: @devops_ru, @kubernetes_ru
Открыть telegram
GNU/Linux Help
GNU/Linux Help
4 510 пользователей
Правила: https://t.me/grouplinux/1660070 #FAQ: https://t.me/grouplinux/1660058 Linux Flood: https://t.me/+mKsgPMYA_BIzODZi Linux: VFIO PCI Passthrough: @vfiolinux
Открыть telegram
Альт Линукс
Альт Линукс
4 123 пользователей
Открыть telegram
Системное администрирование
Системное администрирование
3 682 пользователей
Чат посвящён любым вопросам системного администрирования. Правила - https://t.me/srv_admins/1472142 Группа по Керио - https://t.me/Kerio_control Вопросы, обратная связь, реклама @SA_FRY_BOT
Открыть telegram
🐧 RU.UBUNTU — Официальное сообщество пользователей Ubuntu Linux
🐧 RU.UBUNTU — Официальное сообщество пользователей Ubuntu Linux
3 242 пользователей
Сообщество пользователей Ubuntu ⚠️ Правила: https://t.me/ru_ubuntu/494413 Список групп и каналов: https://github.com/goq/telegram-list
Открыть telegram
Добавить вопрос
Категории
Все
Технологий
Культура / Отдых
Жизнь / Искусство
Наука
Профессии
Бизнес
Пользователи
Все
Новые
Популярные
1
Ilya Smirnov
Зарегистрирован 5 дней назад
2
Денис Васьков
Зарегистрирован 1 неделю назад
3
Dima Patrushev
Зарегистрирован 1 неделю назад
4
sirojidddin otaboyev
Зарегистрирован 2 недели назад
5
Елена Гайдамамакинат
Зарегистрирован 2 недели назад
ID
KO
RU
© kzen.dev 2023
Источник
stackoverflow.com
под лицензией cc by-sa 3.0 с атрибуцией