zoukankan      html  css  js  c++  java
  • Linux 环境编程:errno的基本用法

    背景

    error是一个包含在<errno.h>中的预定义的外部int变量,用于表示最近一个函数调用是否产生了错误。若为0,则无错误,其它值均表示一类错误。
    errno只在函数返回错误时才有意义,当函数执行正常返回时并不会重置errno,因此此时的errno是不能作为错误处理的。所以在有些时候需要清理error。

    perror()strerrot()函数可以把errno的值转化为有意义的字符输出。

    #include <stdio.h>
    #include <stdlib.h>
    #include <dirent.h>
    #include <errno.h>
    #include <string.h>
     
    int main(void){
    
        opendir("/tmp/no_exist");
        //用法1:直接读取errno的值
        printf("errno = %d
    ", errno);
     
        //用法2:使用perror函数,把error的值转化为有意义的字符提示。
        if(errno != 0){
            perror("opendir: ");
            // exit(EXIT_FAILURE);
        }
        // 补充一个可以 格式化打印的 
        fprintf(stderr, "[%s] %s
    ", "opendir", strerror(errno)); 
    
        //用法3:类似用法2,但使用strerror函数。
        if(errno != 0){
            printf("%s
    ", strerror(errno));
            exit(0);
        }
     
     
        exit(0);
    }
    

    输出结果为:

    errno = 2
     opendir: : No such file or directory
     No such file or directory
    

    以下程序用于显示所有的错误代码含义

    #include <stdio.h>
    #include <errno.h>
    #include <stdlib.h>
    #include <string.h>
     
    int main(void){
     
        for(int i = 0; i < 140; i++){
            printf("%4d:%s
    ", i, strerror(i));
        }
     
        return 0;
    }
    

    输出结果如下:

       0:Success
       1:Operation not permitted
       2:No such file or directory
       3:No such process
       4:Interrupted system call
       5:Input/output error
       6:No such device or address
       7:Argument list too long
       8:Exec format error
       9:Bad file descriptor
      10:No child processes
      11:Resource temporarily unavailable
      12:Cannot allocate memory
      13:Permission denied
      14:Bad address
      15:Block device required
      16:Device or resource busy
      17:File exists
      18:Invalid cross-device link
      19:No such device
      20:Not a directory
      21:Is a directory
      22:Invalid argument
      23:Too many open files in system
      24:Too many open files
      25:Inappropriate ioctl for device
      26:Text file busy
      27:File too large
      28:No space left on device
      29:Illegal seek
      30:Read-only file system
      31:Too many links
      32:Broken pipe
      33:Numerical argument out of domain
      34:Numerical result out of range
      35:Resource deadlock avoided
      36:File name too long
      37:No locks available
      38:Function not implemented
      39:Directory not empty
      40:Too many levels of symbolic links
      41:Unknown error 41
      42:No message of desired type
      43:Identifier removed
      44:Channel number out of range
      45:Level 2 not synchronized
      46:Level 3 halted
      47:Level 3 reset
      48:Link number out of range
      49:Protocol driver not attached
      50:No CSI structure available
      51:Level 2 halted
      52:Invalid exchange
      53:Invalid request descriptor
      54:Exchange full
      55:No anode
      56:Invalid request code
      57:Invalid slot
      58:Unknown error 58
      59:Bad font file format
      60:Device not a stream
      61:No data available
      62:Timer expired
      63:Out of streams resources
      64:Machine is not on the network
      65:Package not installed
      66:Object is remote
      67:Link has been severed
      68:Advertise error
      69:Srmount error
      70:Communication error on send
      71:Protocol error
      72:Multihop attempted
      73:RFS specific error
      74:Bad message
      75:Value too large for defined data type
      76:Name not unique on network
      77:File descriptor in bad state
      78:Remote address changed
      79:Can not access a needed shared library
      80:Accessing a corrupted shared library
      81:.lib section in a.out corrupted
      82:Attempting to link in too many shared libraries
      83:Cannot exec a shared library directly
      84:Invalid or incomplete multibyte or wide character
      85:Interrupted system call should be restarted
      86:Streams pipe error
      87:Too many users
      88:Socket operation on non-socket
      89:Destination address required
      90:Message too long
      91:Protocol wrong type for socket
      92:Protocol not available
      93:Protocol not supported
      94:Socket type not supported
      95:Operation not supported
      96:Protocol family not supported
      97:Address family not supported by protocol
      98:Address already in use
      99:Cannot assign requested address
     100:Network is down
     101:Network is unreachable
     102:Network dropped connection on reset
     103:Software caused connection abort
     104:Connection reset by peer
     105:No buffer space available
     106:Transport endpoint is already connected
     107:Transport endpoint is not connected
     108:Cannot send after transport endpoint shutdown
     109:Too many references: cannot splice
     110:Connection timed out
     111:Connection refused
     112:Host is down
     113:No route to host
     114:Operation already in progress
     115:Operation now in progress
     116:Stale file handle
     117:Structure needs cleaning
     118:Not a XENIX named type file
     119:No XENIX semaphores available
     120:Is a named type file
     121:Remote I/O error
     122:Disk quota exceeded
     123:No medium found
     124:Wrong medium type
     125:Operation canceled
     126:Required key not available
     127:Key has expired
     128:Key has been revoked
     129:Key was rejected by service
     130:Owner died
     131:State not recoverable
     132:Operation not possible due to RF-kill
     133:Memory page has hardware error
     134:Unknown error 134
     135:Unknown error 135
     136:Unknown error 136
     137:Unknown error 137
     138:Unknown error 138
     139:Unknown error 139
    
  • 相关阅读:
    用Python写一个简单的包
    一个可以查询汽车销量、阅读产业报告和资讯的网站
    Java报错原因汇总
    jvisualvm远程监控Tomcat
    Tomcat内存优化
    每天一个linux命令(41):ps命令
    linux grep命令
    show processlist结果筛选(转)
    微服务、SOA 和 API对比与分析
    Java远程通讯技术及原理分析
  • 原文地址:https://www.cnblogs.com/schips/p/12505021.html
Copyright © 2011-2022 走看看