GNU/Linux >> Tutoriales Linux >  >> Linux

Valores de rango de errno definidos por el usuario (POSIX o específicos de Linux)

El errno real los valores no están definidos por los estándares C y C++. Por lo tanto, no hay forma de devolver un número entero (positivo) en particular y garantizar que no entre en conflicto con el que usa una implementación. El estándar C requiere solo tres marcos:

Borrador C11, 7.5 Errores

Las macros son

Edom
EILSEQ
RANGO

que se expanden a expresiones constantes enteras con tipo int, distintos valores positivos, y que son adecuadas para usar en directivas de preprocesamiento #if;

Así que no sabes qué otros errno los valores se definen en su implementación.

El errno los valores son enteros positivos en C estándar y POSIX. Entonces podría usar su propia enumeración con valores negativos para definir sus propios números de error. Pero entonces no puede usar las interfaces strerror/perror. Por lo tanto, es posible que necesite un envoltorio adicional para strerror/perror para interpretar sus propios números de error.

Algo como:

enum myErrors{
ERR1 = -1,
ERR2 = -2,
...
ERR64 = -64
};

char *my_strerror(int e)
{
   if (e>=ERR1 && e<=ERR2)
      return decode_myerror(e); // decode_myerror can have a map for  
                                //your error numbers and return string representing 'e'.
   else
      return strerror(e);
}

y uno similar para perror .

Tenga en cuenta que también debe configurar errno a 0 antes de llamar a su "recurso abierto" para asegurarse de que errno de hecho fue establecido por su función.

Evitaría el errno estándar por completo en situaciones como esta y definiría mi propia enumeración de errores. Podría hacerlo si su "recurso abierto" no es demasiado complicado y devuelve códigos de error demasiado posibles.


Linux
  1. ¿Qué es exactamente Posix?

  2. Linux:¿Linux se considera compatible con Xsi o en gran medida?

  3. ¿Restringir el comportamiento de Gnu‑make a Posix Make?

  4. ¿Transferir una lista de valores a un script Bash?

  5. ¿Manual del programador de Posix Vs Manual del programador de Linux?

Expresión de secuencia Bash (rango)

¿Comprobar si $reply está en un rango de números?

¿Ejecutar comando en un rango definido de directorios?

¿Eliminar valores duplicados dentro de un campo?

Subprocesos POSIX separados vs. conectables

¿Imprimir errno como mnemotécnico?