.\" -*- coding: UTF-8 -*- '\" t .\" Copyright 1993 David Metcalfe (david@prism.demon.co.uk) .\" .\" SPDX-License-Identifier: Linux-man-pages-copyleft .\" .\" References consulted: .\" Linux libc source code .\" Lewine's _POSIX Programmer's Guide_ (O'Reilly & Associates, 1991) .\" 386BSD man pages .\" Modified 1993-03-29, David Metcalfe .\" Modified 1993-07-24, Rik Faith (faith@cs.unc.edu) .\" Modified 2003-10-25, Walter Harms .\" .\"******************************************************************* .\" .\" This file was generated with po4a. Translate the source file. .\" .\"******************************************************************* .TH atexit 3 "15 июня 2024 г." "Справочные страницы Linux 6.9.1" .SH ИМЯ atexit \- регистрирует функцию, вызываемую при обычном завершении программы .SH БИБЛИОТЕКА Стандартная библиотека языка C (\fIlibc\fP, \fI\-lc\fP) .SH СИНТАКСИС .nf \fB#include \fP .P \fBint atexit(void (*\fP\fIfunction\fP\fB)(void));\fP .fi .SH ОПИСАНИЕ Функция \fBatexit\fP() регистрирует передаваемую функцию \fIfunction\fP в качестве функции, вызываемой при нормальном завершении работы программы, например, с помощью \fBexit\fP(3), или при завершении работы функции \fImain\fP. Зарегистрированные функции вызываются в порядке, обратном регистрации; никаких аргументов им не передаётся. .P Одна функция может быть зарегистрирована несколько раз: она вызывается один раз для каждой регистрации. .P .\" POSIX.1-2001, POSIX.1-2008 В POSIX.1 требуется, чтобы реализация позволяла регистрировать не менее \fBATEXIT_MAX\fP (32) таких функций. Установленный лимит, поддерживаемый реализацией, можно определить с помощью \fBsysconf\fP(3). .P Когда дочерний процесс создаётся через \fBfork\fP(2), он наследует копии регистраций родителя. При успешном выполнении одной из функций \fBexec\fP(3) все регистрации снимаются. .SH "ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ" Функция \fBatexit\fP() при успешном выполнении возвращает 0, в противном случае — ненулевое значение. .SH АТРИБУТЫ Описание терминов данного раздела смотрите в \fBattributes\fP(7). .TS allbox; lbx lb lb l l l. Интерфейс Атрибут Значение T{ .na .nh \fBatexit\fP() T} Безвредность в нитях MT\-Safe .TE .SH ВЕРСИИ .\" POSIX.1-2001, POSIX.1-2008 .\" This can happen on OpenBSD 4.2 for example, and is documented .\" as occurring on FreeBSD as well. .\" glibc does "the Right Thing" -- invocation of the remaining .\" exit handlers carries on as normal. В POSIX.1 указано, что при многократном вызове \fBexit\fP(3) (т. е., вызов \fBexit\fP(3) из функций, зарегистрированных \fBatexit\fP()) состояние программы не определено. В некоторых системах (не в Linux), это приводит к бесконечной рекурсии; переносимые программы не должны вызывать \fBexit\fP(3) из функций, зарегистрированных через \fBatexit\fP(). .SH СТАНДАРТЫ C11, POSIX.1\-2008. .SH ИСТОРИЯ POSIX.1\-2001, C89, C99, SVr4, 4.3BSD. .SH ПРИМЕЧАНИЯ Функции, зарегистрированные с помощью \fBatexit\fP() (и \fBon_exit\fP(3)) не вызываются, если процесс завершился некорректно, например из\-за полученного сигнала. .P Если одна из зарегистрированных функций вызывает \fB_exit\fP(2), то оставшиеся функции не вызываются, и другие шаги по завершению процесса, производимые \fBexit\fP(3), не выполняются. .P Функции \fBatexit\fP() и \fBon_exit\fP(3) регистрируют функции в едином списке: при нормальном завершении процесса зарегистрированные функции вызываются в порядке обратном регистрации с помощью данных функций. .P .\" In glibc, things seem to be handled okay Согласно POSIX.1 результат является не определённым, если при завершении выполнения одной из функций, зарегистрированной с помощью \fBatexit\fP(), используется \fBlongjmp\fP(3). .SS "Замечания, касающиеся Linux" Начиная с glibc 2.2.3, функция \fBatexit\fP() (и \fBon_exit\fP(3)) может быть использована в общей библиотеке для указания функций, который вызываются при выгрузке общей библиотеки. .SH ПРИМЕРЫ .\" SRC BEGIN (atexit.c) .EX #include #include #include \& void bye(void) { printf("That was all, folks\[rs]n"); } \& int main(void) { long a; int i; \& a = sysconf(_SC_ATEXIT_MAX); printf("ATEXIT_MAX = %ld\[rs]n", a); \& i = atexit(bye); if (i != 0) { fprintf(stderr, "cannot set exit function\[rs]n"); exit(EXIT_FAILURE); } \& exit(EXIT_SUCCESS); } .EE .\" SRC END .SH "СМОТРИТЕ ТАКЖЕ" \fB_exit\fP(2), \fBdlopen\fP(3), \fBexit\fP(3), \fBon_exit\fP(3) .PP .SH ПЕРЕВОД Русский перевод этой страницы руководства разработал(и) Dmitry Bolkhovskikh и Yuri Kozlov . .PP Этот перевод является свободной программной документацией; он распространяется на условиях общедоступной лицензии GNU (GNU General Public License - GPL, .UR https://www.gnu.org/licenses/gpl-3.0.html .UE версии 3 или более поздней) в отношении авторского права, но БЕЗ КАКИХ-ЛИБО ГАРАНТИЙ. .PP Если вы обнаружите какие-либо ошибки в переводе этой страницы руководства, пожалуйста, сообщите об этом разработчику(ам) по его(их) адресу(ам) электронной почты или по адресу .MT списка рассылки русских переводчиков .ME .