• errno , perror,strerror


    1. 简介

    很多系统函数在错误返回时将错误原因记录在libc定义的全局变量errno中,每种错误原因对应一个错误码。

    errno在头文件errno.h中声明,是一个整型变量,所有错误码都是正整数

    然后我们可以用perrorstrerror函数将errno解释成字符串


    2. perror

    #include <stdio.h>
    void perror(const char *s);

    实例:

    	FILE *fp = fopen("text.txt","r+");
    
    	if ( !fp )
    	{
    		perror("Open text.txt");
    	}

    输出结果:

    Open text.txt: No such file or directory

    fopen返回-1并设置errnoENOENT,紧接着perror函数读取errno的值,将ENOENT解释成字符串No such file or directory并打印,最后打印的结果是Open text.txt: No such file or directory

    3. strerror

    #include <string.h>
    
    char *strerror(int errnum);
    //返回值:错误码errnum所对应的字符串


    实例:

    	FILE *fp = fopen("text.txt","r+");
    
    	if ( !fp )
    	{
    		perror("Open text.txt");
    	}
    
    	if (!fp )
    	{
    		printf( "errno = %d, message : %s
    ", errno, strerror(errno) );
    	}


    输出:

    Open text.txt: No such file or directory
    errno = 2, message : No such file or directory


    4. Linux 中的errno

    errno.00 is: Success
    errno.01 is: Operation not permitted
    errno.02 is: No such file or directory
    errno.03 is: No such process
    errno.04 is: Interrupted system call
    errno.05 is: Input/output error
    errno.06 is: No such device or address
    errno.07 is: Argument list too long
    errno.08 is: Exec format error
    errno.09 is: Bad file descriptor
    errno.10 is: No child processes
    errno.11 is: Resource temporarily unavailable[资源临时不可用](连续发送数据时候回出此错,加延时)
    errno.12 is: Cannot allocate memory
    errno.13 is: Permission denied
    errno.14 is: Bad address
    errno.15 is: Block device required
    errno.16 is: Device or resource busy
    errno.17 is: File exists
    errno.18 is: Invalid cross-device link
    errno.19 is: No such device
    errno.20 is: Not a directory
    errno.21 is: Is a directory
    errno.22 is: Invalid argument
    errno.23 is: Too many open files in system
    errno.24 is: Too many open files
    errno.25 is: Inappropriate ioctl for device
    errno.26 is: Text file busy
    errno.27 is: File too large
    errno.28 is: No space left on device
    errno.29 is: Illegal seek
    errno.30 is: Read-only file system
    errno.31 is: Too many links
    errno.32 is: Broken pipe[断开的管道](原因:the broken pipe error occurs if one end of the
    TCP socket closes connection(using disconnect) or gets killed and the other
    end tries to still write to it. An indication of a closed/terminated
    connection is a return value of 0 when you try to read from that socket
    using recv. After receiving such an error, if you try to still write to the
    socket, your process gets sent the SIGPIPE signal which kills it.
    )
    errno.33 is: Numerical argument out of domain
    errno.34 is: Numerical result out of range
    errno.35 is: Resource deadlock avoided
    errno.36 is: File name too long
    errno.37 is: No locks available
    errno.38 is: Function not implemented
    errno.39 is: Directory not empty
    errno.40 is: Too many levels of symbolic links
    errno.41 is: Unknown error 41
    errno.42 is: No message of desired type
    errno.43 is: Identifier removed
    errno.44 is: Channel number out of range
    errno.45 is: Level 2 not synchronized
    errno.46 is: Level 3 halted
    errno.47 is: Level 3 reset
    errno.48 is: Link number out of range
    errno.49 is: Protocol driver not attached
    errno.50 is: No CSI structure available
    errno.51 is: Level 2 halted
    errno.52 is: Invalid exchange
    errno.53 is: Invalid request descriptor
    errno.54 is: Exchange full
    errno.55 is: No anode
    errno.56 is: Invalid request code
    errno.57 is: Invalid slot
    errno.58 is: Unknown error 58
    errno.59 is: Bad font file format
    errno.60 is: Device not a stream
    errno.61 is: No data available
    errno.62 is: Timer expired
    errno.63 is: Out of streams resources
    errno.64 is: Machine is not on the network
    errno.65 is: Package not installed
    errno.66 is: Object is remote
    errno.67 is: Link has been severed
    errno.68 is: Advertise error
    errno.69 is: Srmount error
    errno.70 is: Communication error on send
    errno.71 is: Protocol error
    errno.72 is: Multihop attempted
    errno.73 is: RFS specific error
    errno.74 is: Bad message
    errno.75 is: Value too large for defined data type
    errno.76 is: Name not unique on network
    errno.77 is: File descriptor in bad state
    errno.78 is: Remote address changed
    errno.79 is: Can not access a needed shared library
    errno.80 is: Accessing a corrupted shared library
    errno.81 is: .lib section in a.out corrupted
    errno.82 is: Attempting to link in too many shared libraries
    errno.83 is: Cannot exec a shared library directly
    errno.84 is: Invalid or incomplete multibyte or wide character
    errno.85 is: Interrupted system call should be restarted
    errno.86 is: Streams pipe error
    errno.87 is: Too many users
    errno.88 is: Socket operation on non-socket
    errno.89 is: Destination address required
    errno.90 is: Message too long
    errno.91 is: Protocol wrong type for socket
    errno.92 is: Protocol not available
    errno.93 is: Protocol not supported
    errno.94 is: Socket type not supported
    errno.95 is: Operation not supported
    errno.96 is: Protocol family not supported
    errno.97 is: Address family not supported by protocol
    errno.98 is: Address already in use
    errno.99 is: Cannot assign requested address
    errno.100 is: Network is down
    errno.101 is: Network is unreachable
    errno.102 is: Network dropped connection on reset
    errno.103 is: Software caused connection abort
    errno.104 is: Connection reset by peer[l连接被对端重置]
    errno.105 is: No buffer space available
    errno.106 is: Transport endpoint is already connected
    errno.107 is: Transport endpoint is not connected
    errno.108 is: Cannot send after transport endpoint shutdown
    errno.109 is: Too many references: cannot splice
    errno.110 is: Connection timed out
    errno.111 is: Connection refused
    errno.112 is: Host is down
    errno.113 is: No route to host
    errno.114 is: Operation already in progress
    errno.115 is: Operation now in progress
    errno.116 is: Stale NFS file handle
    errno.117 is: Structure needs cleaning
    errno.118 is: Not a XENIX named type file
    errno.119 is: No XENIX semaphores available
    errno.120 is: Is a named type file
    errno.121 is: Remote I/O error
    errno.122 is: Disk quota exceeded
    errno.123 is: No medium found
    errno.124 is: Wrong medium type
    errno.125 is: Operation canceled
    errno.126 is: Required key not available
    errno.127 is: Key has expired
    errno.128 is: Key has been revoked
    errno.129 is: Key was rejected by service
    errno.130 is: Owner died
    errno.131 is: State not recoverable
    errno.132 is: Unknown error 132
    132-255 全是Unknown error


    5. windows errno

    ConstantSystem error messageValue

    EPERM

    Operation not permitted

    1

    ENOENT

    No such file or directory

    2

    ESRCH

    No such process

    3

    EINTR

    Interrupted function

    4

    EIO

    I/O error

    5

    ENXIO

    No such device or address

    6

    E2BIG

    Argument list too long

    7

    ENOEXEC

    Exec format error

    8

    EBADF

    Bad file number

    9

    ECHILD

    No spawned processes

    10

    EAGAIN

    No more processes or not enough memory or maximum nesting level reached

    11

    ENOMEM

    Not enough memory

    12

    EACCES

    Permission denied

    13

    EFAULT

    Bad address

    14

    EBUSY

    Device or resource busy

    16

    EEXIST

    File exists

    17

    EXDEV

    Cross-device link

    18

    ENODEV

    No such device

    19

    ENOTDIR

    Not a directory

    20

    EISDIR

    Is a directory

    21

    EINVAL

    Invalid argument

    22

    ENFILE

    Too many files open in system

    23

    EMFILE

    Too many open files

    24

    ENOTTY

    Inappropriate I/O control operation

    25

    EFBIG

    File too large

    27

    ENOSPC

    No space left on device

    28

    ESPIPE

    Invalid seek

    29

    EROFS

    Read-only file system

    30

    EMLINK

    Too many links

    31

    EPIPE

    Broken pipe

    32

    EDOM

    Math argument

    33

    ERANGE

    Result too large

    34

    EDEADLK

    Resource deadlock would occur

    36

    EDEADLOCK

    Same as EDEADLK for compatibility with older Microsoft C versions

    36

    ENAMETOOLONG

    Filename too long

    38

    ENOLCK

    No locks available

    39

    ENOSYS

    Function not supported

    40

    ENOTEMPTY

    Directory not empty

    41

    EILSEQ

    Illegal byte sequence

    42

    STRUNCATE

    String was truncated

    80

    6. 参考文献

    [1] Linux C编程一站式学习

    [2] Linux errno Man Page

    [3] MSDN errno http://msdn.microsoft.com/zh-cn/library/vstudio/t3ayayh1%28v=vs.80%29.aspx

  • 相关阅读:
    Discuz中解决jquery 冲突的方法 绝对简单
    关于MySql has gone away问题的解决
    关于水晶报表的一些错误
    biweb后台添加上传下载功能
    ajax 异步插入图片到数据库(多图上传)
    ajax 异步插入图片到数据库(单图上传)
    使用ajax异步提交表单数据(史上最完整的版本)
    系统管理-软件管理
    系统管理-计划任务-系统日志
    Django-ondelete
  • 原文地址:https://www.cnblogs.com/keanuyaoo/p/3397988.html
Copyright © 2020-2023  润新知