C++ errno

    科技2022-07-14  150

    文章目录

    一、 errno 介绍二、错误信息输出三、错误码表查询

    一、 errno 介绍

    errno 是一个全局的宏;程序执行的时候会把 errno 置上对应的错误码,同时也有一些相关的宏,如下: #define errno (*_errno()) #define _doserrno (*__doserrno()) #define _sys_errlist (__sys_errlist()) #define _sys_nerr (*__sys_nerr()) 程序开始执行的时候,errno 和 _doserrno 会被置 0,当一个系统调用出错时,errno 会被置上一个非 0 的值;因为 errno 存储了上一次调用的值,所以它可能会被成功的调用改变,所以一旦出错,需要里面把这个值输出来;I/O 操作发生错误时,_doserrno 会被置上;

    二、错误信息输出

    errno 是一个数字,具体含义对应在 _sys_errlist 中,比如发生错误时,可以输出 _sys_errlist [ errno ] 来看具体含义,_sys_nerr 则代表了 _sys_errlist 这个数组的长度;为了安全性考虑,一般可以采用 perror、strerror 或 strerror_s 来进行错误码的输出; FILE* pf = fopen("test.txt", "r"); if (!pf) { perror("perror"); printf("strerror: %s\n", strerror(errno)); printf( _strerror("_strerror") ); } perror: No such file or directory strerror: No such file or directory _strerror: No such file or directory

    三、错误码表查询

    错误码值含义NULL0No errorEPERM1Operation not permittedENOENT2No such file or directoryESRCH3No such processEINTR4Interrupted function callEIO5Input/output errorENXIO6No such device or addressE2BIG7Arg list too longENOEXEC8Exec format errorEBADF9Bad file descriptorECHILD10No child processesEAGAIN11Resource temporarily unavailableENOMEM12Not enough spaceEACCES13Permission deniedEFAULT14Bad address/15Unknown errorEBUSY16Resource deviceEEXIST17File existsEXDEV18Improper linkENODEV19No such deviceENOTDIR20Not a directoryEISDIR21Is a directoryEINVAL22Invalid argumentENFILE23Too many open files in systemEMFILE24Too many open filesENOTTY25Inappropriate I/O control operation/26Unknown errorEFBIG27File too largeENOSPC28No space left on deviceESPIPE29Invalid seekEROFS30Read-only file systemMLINK31Too many linksEPIPE32Broken pipeEDOM33Domain errorERANGE34Result too large/35Unknown errorEDEADLK36Resource deadlock avoided/37Unknown errorENAMETOOLONG38Filename too longENOLCK39No locks availableENOSYS40Function not implementedENOTEMPTY41Directory not emptyEILSEQ42Illegal byte sequence
    Processed: 0.012, SQL: 8