2010-09-07 10 views
8

¿Cuál es la diferencia entre la salida (), _exit() y _exit() en C?funciones de salida en C

¿Cómo decido cuál usar?

En bash,

hombre 2 de salida

me dio la página _exit (2), mientras que

hombre 3 de salida

dio la página SALIR (3).

Respuesta

7

exit() terminando después de la limpieza.

_exit() terminando inmediatamente después de la llamada.

Si tiene alguna pila dañada mientras se llamaba a la función exit() el programa se puede cerrar con la falla de segmentación, si está utilizando _exit(), salga del programa en modo rápido.

De http://msdn.microsoft.com/en-us/library/6wdz5232.aspx que tienen

exit() - Lleva a cabo los procedimientos completos de terminación de la biblioteca C, termina el proceso, y termina con el código de estado que se suministra.

_exit() - Realiza procedimientos rápidos de finalización de la biblioteca C, finaliza el proceso y finaliza con el código de estado proporcionado.

_cexit() - Realiza los procedimientos completos de finalización de la biblioteca C y regresa a la persona que llama, pero no finaliza el proceso.

_c_exit() - Realiza procedimientos rápidos de finalización de la biblioteca C y regresa a la persona que llama, pero no finaliza el proceso.

+1

OK, pero ¿cuál es la diferencia entre la terminación completa y rápida⸮ – adf88

+1

por favor elabore lo que se debe utilizar cuando. –

+4

Llamar a 'exit()'. Los otros son detalles de implementación y, en general, no son tan útiles fuera de ciertas condiciones excepcionales cuando se crean marcos. – RBerteig

1

De hombre:

salida:
Todas las funciones registradas con atexit (3) y on_exit (3) están llamados, en el orden inverso al de su inscripción ... Todo stdio abierto (3) corrientes están enrojecidos y cerrados. Los archivos creados por tmpfile (3) se eliminan.

_exit:
La función _exit() es como la salida (3), pero no llama a ninguna función registrada con atexit (3) o on_exit (3). Si vacía los almacenamientos intermedios de E/S y elimina los archivos temporales creados con tmpfile (3) es según la implementación. Por otro lado, _exit() no cerrar abrir descriptores de archivos ...

0

1.Salir(): es la limpieza de la obra como el cierre de descriptor de archivo, secuencia de archivo y así sucesivamente, 2._exit(): no es limpieza el trabajo como cerrar el descriptor de archivo, secuencia de archivos y así sucesivamente

Estas son la principal diferencia entre exit() y _exit().

am i rectificado ur respuesta

+0

_exit cierra los descriptores de archivos. – adf88

+0

No, el núcleo sí. _exit solo termina el proceso. La característica principal de _exit es que no hace más que decirle al kernel que finalice el proceso. –

7

Normativa en C99 son exit y _Exit.

La diferencia entre los dos es que exit ejecuta también los controladores que pueden estar registradas con atexit y cierra arroyos, etc., mientras que _Exit no llama a las rutinas atexit y corrientes pueden o pueden no cerrarse bien.

_exit es de POSIX y tiene propiedades similares a _Exit con la diferencia de que se garantiza que cerrará las transmisiones correctamente.

En resumen, siempre que pueda debe usar exit, esta es la forma más limpia de terminar.