2009-10-08 9 views

Respuesta

2

No existe un conjunto estándar de códigos de salida que las aplicaciones deban cumplir.

Sin embargo, hay algunos más comunes como 0 para el éxito como usted mencionó. Dependiendo del sistema operativo y las herramientas que utilice, es posible que pueda ver los códigos de salida de aplicaciones similares e imitarlas.

+0

Tu enlace está roto y no está en la memoria caché de Google. (Además, una publicación en el foro de HP no parece ser una referencia particularmente autorizada en primer lugar). –

14

Creo que el único estándar es 0 para el éxito y no cero para el fracaso. Y eso es más una convención que un estándar.

4

Los códigos de salida están lejos de ser estándar, y se usan más para que el desarrollador conozca el error apropiado que ha ocurrido al devolver la aplicación. El estándar de 0 para el éxito, distinto de cero para el fracaso es una tendencia general, y se utiliza ya que le permite utilizar el rango completo distinto de cero para todos los posibles errores.

Si su aplicación registra los errores apropiadamente, es probable que el código de salida sea completamente innecesario para realizar un seguimiento.

5

El código de estado estándar es EXIT_SUCCESS y EXIT_FAILURE, definido en stdlib.h. Casi todos usan solo 0 y 1 respectivamente, sin embargo. Algún software usará un código distinto de cero para diferentes tipos de errores.

-2

Implemente lo que usará. Cualquier otra cosa es superfluo.

7

Tal vez pueda adoptar algunas de las convenciones de Unix.

En another answer, el usuario David sugirió

sysexits.h tiene una lista de códigos de salida estándar. Parece que data de al menos 1993 y algunos grandes proyectos como Postfix lo usan, así que me imagino que es el camino a seguir.

Desde la página del manual de OpenBSD:

De acuerdo con el estilo (9), no es una buena práctica para llamar a exit (3) con valores arbitrarios para indicar una condición de error cuando se termina un programa. En su lugar, se deben usar los códigos de salida predefinidos de los sysexits, por lo que el que llama del proceso puede obtener una estimación aproximada de la clase de falla sin buscar el código fuente.

Esta es la lista tal como aparece en un sistema Debian:

#define EX_USAGE  64  /* command line usage error */ 
#define EX_DATAERR  65  /* data format error */ 
#define EX_NOINPUT  66  /* cannot open input */  
#define EX_NOUSER  67  /* addressee unknown */  
#define EX_NOHOST  68  /* host name unknown */ 
#define EX_UNAVAILABLE 69  /* service unavailable */ 
#define EX_SOFTWARE  70  /* internal software error */ 
#define EX_OSERR  71  /* system error (e.g., can't fork) */ 
#define EX_OSFILE  72  /* critical OS file missing */ 
#define EX_CANTCREAT 73  /* can't create (user) output file */ 
#define EX_IOERR  74  /* input/output error */ 
#define EX_TEMPFAIL  75  /* temp failure; user is invited to retry */ 
#define EX_PROTOCOL  76  /* remote error in protocol */ 
#define EX_NOPERM  77  /* permission denied */ 
#define EX_CONFIG  78  /* configuration error */ 

Dentro del archivo /usr/include/sysexits.h se pueden encontrar descripciones más detalladas de estos códigos de error.

+0

Esto es lo que uso. – RedShift

0

Definitivamente hay códigos de error estándar definidos para Windows.

Hace mucho tiempo, utilizamos errores negativos para errores específicos 'personalizados', pero dudo que sea una buena práctica.

System Error Codes (Windows)

+0

No necesita utilizar los * Códigos de error del sistema * como códigos de salida del programa. Como se señala en otras respuestas aquí, es habitual que los programas de Windows utilicen * 1 * como un código de error catch-all; si todos usaran los * Códigos de error del sistema *, eso siempre significaría "Función incorrecta" (y no habría manera de indicar un error genérico no especificado). –

+0

Es cierto, no es necesario que cumpla con los estándares. La pregunta era sobre estándares, y eso es lo que proporcioné. El caso base es cero indica éxito, no cero indica falla. Si la persona que llama no puede manejar fallas específicas, no le importará cuál fue el error de todos modos, pero si espera que las personas que llaman actúen el error, es una buena práctica dar errores significativos. Los estándares ayudan a dar estructura en tal caso. – Pyro

+0

* "no es necesario que cumpla con los estándares" * - esto no es sequitur; El uso de códigos de error del sistema como códigos de salida de la aplicación no hace nada para "cumplir con los estándares" porque no existe un estándar, en cualquier lugar, que sugiera hacerlo. * "si espera que las personas que llaman actúen el error, es una buena práctica dar errores significativos" * - Estoy de acuerdo, pero esto se logra de manera deficiente usando códigos de error del sistema, ya que hay miles (por lo que el que llama no puede considerarlos) todos) y es probable que sean demasiado genéricos para describir un error específico de la aplicación de una manera significativa. –

0

La única convención real es que 0 significa que los valores de éxito y no cero (típicamente 1) significan el fracaso. Para una referencia oficial al respecto, véase, por ejemplo, documentos, C++ de Microsoft en exit:

Por lo general, la persona que llama establece el valor status a 0 para indicar una salida normal, o por cualquier otro valor para indicar un error.

O los documentos en C# Envrionment.Exit y Environment.ExitCode cuales diversamente Estado:

Uso 0 (cero) para indicar que el proceso ha completado satisfactoriamente.

y

El valor predeterminado es 0 (cero), lo que indica que el proceso ha completado satisfactoriamente.

y

Utilice un número distinto de cero para indicar un error. En su aplicación, puede definir sus propios códigos de error en una enumeración y devolver el código de error apropiado según el escenario. Por ejemplo, devuelva un valor de 1 para indicar que el archivo requerido no está presente y un valor de 2 para indicar que el archivo está en el formato incorrecto. Para obtener una lista de los códigos de salida utilizados por el sistema operativo Windows, consulte System Error Codes en la documentación de Windows.

A diferencia some other answerers, que aconsejan el uso de los códigos de error del sistema como los códigos de salida de la aplicación. Algunas notas acerca de los códigos de error sistema:

  • Microsoft no aconsejan el uso de ellos como los códigos de salida aplicación cualquier lugar, y de hecho sugieren explícitamente que "definir sus propios códigos de error" en la documentación Cito arriba.
  • Microsoft no los usa consistentemente como códigos de salida en sus propias aplicaciones o comandos. Si bien hay algunos ejemplos de aplicaciones que hacen usan estos códigos, como MsiExec.exe, hay muchas más que no, como dir, dotnet o TAEF.
  • Usarlos me parece una idea manifiestamente mala. Hay miles de Códigos de salida del sistema, la mayoría de los cuales son irrelevantes para lo que sea que su aplicación particular sea.Si intenta usarlos, perderá años eligiendo la lista para encontrar códigos que se apliquen a su escenario, y el resultado final será menos útil para un desarrollador que llama a su aplicación que si acabara de definir un número pequeño de los códigos de salida que son significativos para su aplicación en particular, haga eso en su lugar.
Cuestiones relacionadas