Utilice la función exit en C
-
Utilice la función
exit
para finalizar el proceso en C -
Utilice la función
atexit
para registrar el controlador de salida en C
Este artículo demostrará varios métodos de cómo utilizar la función exit
en C.
Utilice la función exit
para finalizar el proceso en C
Cuando el programa dado se ejecuta en un sistema operativo basado en UNIX, se denomina proceso. El proceso puede ser un programa de estilo demonio de larga ejecución o una simple utilidad de línea de comandos, pero eventualmente, ambos llegan al punto de terminación en algún momento. La terminación puede ser anormal causada por alguna señal de falla / entregada, o el proceso en sí mismo puede terminar con gracia como el comportamiento normal al llamar a la función de biblioteca exit
. Toma un único argumento entero que especifica el valor de terminación que se devuelve al proceso principal. Tenga en cuenta que la función exit
no regresa en el proceso de llamada.
La función exit
es la función de biblioteca estándar que se construye sobre la llamada al sistema _exit
(que vamos a discutir en los siguientes párrafos). Aún así, realiza más operaciones que solo llevar a la persona que llama al punto de terminación. Es decir, exit
realiza alguna rutina de limpieza para el programa, como la función registrada cuando se invoca a los manejadores de salida, los búferes de flujos de E/S estándar se vacían y solo entonces se llama a _exit
. Tenga en cuenta que _exit
es una llamada al sistema específica de UNIX, mientras que exit
es parte de la biblioteca C estándar y se puede utilizar en diferentes plataformas.
El siguiente ejemplo demuestra la llamada a la función exit
con el parámetro de estado EXIT_SUCCESS
, una macro constante de valor 0
que denota convencionalmente un retorno exitoso.
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
int main(int argc, char *argv[]) {
// Execute program code here
printf("Executing the program...\n");
sleep(5);
// exit(0);
exit(EXIT_SUCCESS);
}
Producción :
Executing the program...
Utilice la función atexit
para registrar el controlador de salida en C
La función atexit
se utiliza para registrar controladores de salida, que son solo funciones implementadas por el usuario que deben llamarse cuando el proceso finaliza mediante la llamada exit
. atexit
toma un puntero de función de tipo void (*función)(void)
como único argumento.
Tenga en cuenta que se pueden registrar múltiples funciones mediante múltiples llamadas atexit
, lo que conduce a la ejecución de las funciones dadas en orden inverso al registro. atexit
devuelve un valor distinto de cero si la llamada falla. Tenga en cuenta que es posible que las funciones registradas no se llamen si el proceso se termina de forma anormal mediante una señal externa. El siguiente código de ejemplo implementa dos funciones estáticas
para ser registradas como manejadores de salida, y después de 5 segundos de suspensión, el proceso termina con una llamada da exit
.
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
static void atexitFunc(void) { printf("atexitFunc called\n"); }
static void atexitFunc2(void) { printf("atexitFunc2 called\n"); }
int main(int argc, char *argv[]) {
if (atexit(atexitFunc) != 0) {
perror("atexit");
exit(EXIT_FAILURE);
}
if (atexit(atexitFunc2) != 0) {
perror("atexit");
exit(EXIT_FAILURE);
}
printf("Executing the program...\n");
sleep(5);
exit(EXIT_SUCCESS);
}
Producción :
Executing the program...
atexitFunc2 called
atexitFunc called
Tenga en cuenta que primero se llama a atexitFunc2
y luego a atexitFunc
. Alternativamente, este programa puede terminarse directamente llamando a la llamada del sistema _exit
, que termina inmediatamente el proceso. Sin embargo, tenga en cuenta que no llamará a la función registrada con atexit
. Por el contrario, _exit
cierra los descriptores de archivos abiertos, lo que puede provocar un retraso desconocido antes de que finalice el proceso. Además, se puede utilizar la declaración return
con el valor de estado deseado para provocar un comportamiento de terminación similar al que proporciona la función exit
.
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
static void atexitFunc(void) { printf("atexitFunc called\n"); }
static void atexitFunc2(void) { printf("atexitFunc2 called\n"); }
int main(int argc, char *argv[]) {
if (atexit(atexitFunc) != 0) {
perror("atexit");
exit(EXIT_FAILURE);
}
if (atexit(atexitFunc2) != 0) {
perror("atexit");
exit(EXIT_FAILURE);
}
printf("Executing the program...\n");
sleep(5);
_exit(EXIT_SUCCESS);
Founder of DelftStack.com. Jinku has worked in the robotics and automotive industries for over 8 years. He sharpened his coding skills when he needed to do the automatic testing, data collection from remote servers and report creation from the endurance test. He is from an electrical/electronics engineering background but has expanded his interest to embedded electronics, embedded programming and front-/back-end programming.
LinkedIn Facebook