Compartir entrada

jueves, 23 de enero de 2014

La librería errno.h

El archivo de cabecera de la biblioteca estándar de C errno.h, el cual mediante macros presenta un informe de errores mediante la definición de códigos de error.

Foto tomada de freedigitalphotos.net

Los códigos de error vienen definidos como constantes y son dependientes del compilador que se use. Según wikipedia en MinGW son los siguientes:

#define EPERM                    1          /* Operation not permitted */
#define           ENOFILE                  2          /* No such file or directory */
#define           ENOENT                   2
#define           ESRCH                      3          /* No such proces*s */
#define EINTR*                    4          /* Interrupted function call* */
#define           EIO                 5          /* Input/output error */
#define           ENXIO                      6          /* No such device or address */
#define           E2BIG                        7          /* Arg list too long */
#define           ENOEXEC                8          /* Exec format error */
#define           EBADF                      9          /* Bad file descriptor */
#define           ECHILD                    10        /* No child processes */
#define           EAGAIN                   11        /* Resource temporarily unavailable */
#define           ENOMEM                 12        /* Not enough space */
#define           EACCES                    13        /* Permission denied */
#define           EFAULT                    14        /* Bad address */
/*  15 - Unknown Error */
#define           EBUSY                      16        /* strerror reports "Resource device" */
#define           EEXIST                     17        /* File exists */
#define           EXDEV                     18        /* Improper link (cross-device link?) */
#define           ENODEV                  19        /* No such device */
#define           ENOTDIR                 20        /* Not a directory */
#define           EISDIR                      21        /* Is a directory */
#define           EINVAL                    22        /* Invalid argument */
#define           ENFILE                     23        /* Too many open files in system */
#define           EMFILE                     24        /* Too many open files */
#define           ENOTTY                   25        /* Inappropriate I/O control operation */

/* 26 - Unknown Error */
#define           EFBIG                       27        /* File too large */
#define           ENOSPC                    28        /* No space left on device */
#define           ESPIPE                      29        /* Invalid seek (seek on a pipe?) */
#define           EROFS                       30        /* Read-only file system */
#define           EMLINK                   31        /* Too many links */
#define           EPIPE             32        /* Broken pipe */
#define           EDOM                       33        /* Domain error (math functions) */
#define           ERANGE                   34        /* Result too large (possibly too small) */
/* 35 - Unknown Error */
#define           EDEADLOCK          36        /* Resource deadlock avoided (non-Cyg) */
#define           EDEADLK                36
/* 37 - Unknown Error */
#define           ENAMETOOLONG 38        /* Filename too long (91 in Cyg?) */
#define           ENOLCK                   39        /* No locks available (46 in Cyg?) */
#define           ENOSYS                   40        /* Function not implemented (88 in Cyg?) */
#define           ENOTEMPTY           41        /* Directory not empty (90 in Cyg?) */
#define           EILSEQ                     42        /* Illegal byte sequence */

En Borland C++ las constantes serían los siguientes:

#define EZERO    0      /* Error 0                  */
#define EINVFNC  1      /* Invalid function number  */
#define ENOFILE  2      /* File not found           */
#define ENOPATH  3      /* Path not found           */
#define ECONTR   7      /* Memory blocks destroyed  */
#define EINVMEM  9      /* Invalid memory block address */
#define EINVENV 10      /* Invalid environment      */
#define EINVFMT 11      /* Invalid format           */
#define EINVACC 12      /* Invalid access code      */
#define EINVDAT 13      /* Invalid data             */
#define EINVDRV 15      /* Invalid drive specified  */
#define ECURDIR 16      /* Attempt to remove CurDir */
#define ENOTSAM 17      /* Not same device          */
#define ENMFILE 18      /* No more files            */

#define ENOENT   2      /* No such file or directory*/
#define EMFILE   4      /* Too many open files      */
#define EACCES   5      /* Permission denied        */
#define EBADF    6      /* Bad file number          */
#define ENOMEM   8      /* Not enough core          */
#define EFAULT  14      /* Unknown error            */
#define ENODEV  15      /* No such device           */
#define EINVAL  19      /* Invalid argument         */
#define E2BIG   20      /* Arg list too long        */
#define ENOEXEC 21      /* Exec format error        */
#define EXDEV   22      /* Cross-device link        */
#define ENFILE  23      /* Too many open files      */
#define ECHILD  24      /* No child process         */
#define ENOTTY  25      /* UNIX - not MSDOS         */
#define ETXTBSY 26      /* UNIX - not MSDOS         */
#define EFBIG   27      /* UNIX - not MSDOS         */
#define ENOSPC  28      /* No space left on device  */
#define ESPIPE  29      /* Illegal seek             */
#define EROFS   30      /* Read-only file system    */
#define EMLINK  31      /* UNIX - not MSDOS         */
#define EPIPE   32      /* Broken pipe              */
#define EDOM    33      /* Math argument            */
#define ERANGE  34      /* Result too large         */
#define EEXIST  35      /* File already exists      */
#define EDEADLOCK 36    /* Locking violation        */
#define EPERM   37      /* Operation not permitted  */
#define ESRCH   38      /* UNIX - not MSDOS         */
#define EINTR   39      /* Interrupted function call */
#define EIO     40      /* Input/output error       */
#define ENXIO   41      /* No such device or address */
#define EAGAIN  42      /* Resource temporarily unavailable */
#define ENOTBLK 43      /* UNIX - not MSDOS         */
#define EBUSY   44      /* Resource busy            */
#define ENOTDIR 45      /* UNIX - not MSDOS         */
#define EISDIR  46      /* UNIX - not MSDOS         */
#define EUCLEAN 47      /* UNIX - not MSDOS         */

En Microsoft Windows los errores y su clasificación pueden encontrarse en su página de documentación para desarrolladores.

En la web de The Single UNIX® Specification podemos ver la última actualización en la página de The Open Group.

En la web barricane se hace una recopilación de los errores códigos de error en Linux/C desde los archivos contenidos en /usr/include/asm-generic/errno-base.h y /usr/include/asm-generic/errno.h.


¿Qué utilidades ves al uso de errno.h?

 
Google+