errno 是记录系统的最后一次错误代码。代码是一个int型的值,在errno.h中定义。查看错误代码errno是调试程序的一个重要方法。

    当Linux C api函数发生异常时,一般会将errno全局变量赋一个整数值,不同的值表示不同的含义,可以通过查看该值推测出错的原因。

    1. #include <stdio.h> //fopen
    2. #include <errno.h> //errno
    3. #include <string.h> //strerror(errno)
    4. int main()
    5. {
    6. FILE *fp = fopen("xxxx", "r");
    7. if (NULL == fp)
    8. {
    9. printf("%d\n", errno); //打印错误码
    10. printf("%s\n", strerror(errno)); //把errno的数字转换成相应的文字
    11. perror("fopen err"); //打印错误原因的字符串
    12. }
    13. return 0;
    14. }

    查看错误号:

    /usr/include/asm-generic/errno-base.h /usr/include/asm-generic/errno.h

    #ifndef _ASM_GENERIC_ERRNO_BASE_H
    #define _ASM_GENERIC_ERRNO_BASE_H
    
    #define    EPERM         1    /* Operation not permitted */
    #define    ENOENT         2    /* No such file or directory */
    #define    ESRCH         3    /* No such process */
    #define    EINTR         4    /* Interrupted system call */
    #define    EIO         5    /* I/O error */
    #define    ENXIO         6    /* No such device or address */
    #define    E2BIG         7    /* Argument list too long */
    #define    ENOEXEC         8    /* Exec format error */
    #define    EBADF         9    /* Bad file number */
    #define    ECHILD        10    /* No child processes */
    #define    EAGAIN        11    /* Try again */
    #define    ENOMEM        12    /* Out of memory */
    #define    EACCES        13    /* Permission denied */
    #define    EFAULT        14    /* Bad address */
    #define    ENOTBLK        15    /* Block device required */
    #define    EBUSY        16    /* Device or resource busy */
    #define    EEXIST        17    /* File exists */
    #define    EXDEV        18    /* 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    /* File table overflow */
    #define    EMFILE        24    /* Too many open files */
    #define    ENOTTY        25    /* Not a typewriter */
    #define    ETXTBSY        26    /* Text file busy */
    #define    EFBIG        27    /* File too large */
    #define    ENOSPC        28    /* No space left on device */
    #define    ESPIPE        29    /* Illegal seek */
    #define    EROFS        30    /* Read-only file system */
    #define    EMLINK        31    /* Too many links */
    #define    EPIPE        32    /* Broken pipe */
    #define    EDOM        33    /* Math argument out of domain of func */
    #define    ERANGE        34    /* Math result not representable */
    
    #endif