[Previous] [Contents] [Next]

errno

Global error variable

Synopsis:

#include <errno.h>

extern int errno;

Library:

libc

Description:

The errno variable is set to certain error values by many functions whenever an error has occurred.

It may be implemented as a macro, but errno can always be examined or set as if it were a simple integer variable. Values for errno are defined in the file <errno.h>, and include at least the following values:

Value Meaning
E2BIG Argument list is too long
EACCES Permission denied
EADDRINUSE Address is already in use
EADDRNOTAVAIL Can't assign requested address
EADV Advertise error
EAFNOSUPPORT Address family isn't supported by protocol family
EAGAIN Resource is temporarily unavailable; try again
EALREADY Operation is already in progress
EBADE Invalid exchange
EBADF Bad file descriptor
EBADFD FD is invalid for this operation
EBADFSYS Corrupted filesystem detected
EBADMSG Bad message (1003.1b-1993)
EBADR Invalid request descriptor
EBADRPC RPC struct is bad
EBADRQC Invalid request code
EBADSLT Invalid slot
EBFONT Bad font-file format
EBUSY Device or resource is busy
ECANCELED Operation canceled (1003.1b-1993)
ECHILD No child processes
ECHRNG Channel number is out of range
ECOMM Communication error occurred on send
ECONNABORTED Software caused connection to abort
ECONNREFUSED Connection refused
ECONNRESET Connection reset by peer
ECTRLTERM Remap to the controlling terminal
EDEADLK Resource deadlock avoided
EDEADLOCK File locking deadlock
EDESTADDRREQ Destination address is required
EDOM Math argument is out of domain for the function
EDQUOT Disk quota exceeded
EEXIST File exists
EFAULT Bad address
EFBIG File is too large
EHOSTDOWN Host is down
EHOSTUNREACH Unable to communicate with remote node
EIDRM Identifier removed
EILSEQ Illegal byte sequence
EINPROGRESS Operation now in progress
EINTR Interrupted function call
EINVAL Invalid argument
EIO I/O error
EISCONN Socket is already connected
EISDIR Is a directory
EL2HLT Level 2 halted
EL2NSYNC Level 2 not synchronized
EL3HLT Level 3 halted
EL3RST Level 3 reset
ELIBACC Can't access shared library
ELIBBAD Accessing a corrupted shared library
ELIBEXEC Attempting to exec a shared library
ELIBMAX Attempting to link in too many libraries
ELIBSCN The .lib section in a.out is corrupted
ELNRNG Link number is out of range
ELOOP Too many levels of symbolic links or prefixes
EMFILE Too many open files
EMLINK Too many links
EMORE More to do, send message again
EMSGSIZE Inappropriate message buffer length
EMULTIHOP Multihop attempted
ENAMETOOLONG Filename is too long
ENETDOWN Network is down
ENETRESET Network dropped connection on reset
ENETUNREACH Network is unreachable
ENFILE Too many open files in the system
ENOANO No anode
ENOBUFS No buffer space available
ENOCSI No CSI structure available
ENODATA No data (for no-delay I/O)
ENODEV No such device
ENOENT No such file or directory
ENOEXEC Exec format error
ENOLCK No locks available
ENOLIC No license available
ENOLINK The link has been severed
ENOMEM Not enough memory
ENOMSG No message of desired type
ENONDP Need an NDP (8087...) to run
ENONET Machine isn't on the network
ENOPKG Package isn't installed
ENOPROTOOPT Protocol isn't available
ENOREMOTE Must be done on local machine
ENOSPC No space left on device
ENOSR Out of streams resources
ENOSTR Device isn't a stream
ENOSYS Function isn't implemented
ENOTBLK Block device is required
ENOTCONN Socket isn't connected
ENOTDIR Not a directory
ENOTEMPTY Directory isn't empty
ENOTSOCK Socket operation on nonsocket
ENOTSUP Not supported (1003.1b-1993)
ENOTTY Inappropriate I/O control operation
ENOTUNIQ Given name isn't unique
ENXIO No such device or address
EOK No error
EOPNOTSUPP Operation isn't supported
EOVERFLOW Value too large to be stored in data type
EPERM Operation isn't permitted
EPFNOSUPPORT Protocol family isn't supported
EPIPE Broken pipe
EPROCUNAVAIL Bad procedure for program
EPROGMISMATCH Program version wrong
EPROGUNAVAIL RPC program isn't available
EPROTO Protocol error
EPROTONOSUPPORT Protocol isn't supported
EPROTOTYPE Protocol is wrong type for socket
ERANGE Result is too large
EREMCHG Remote address changed
EREMOTE The object is remote
ERESTART Restartable system call
EROFS Read-only filesystem
ERPCMISMATCH RPC version is wrong
ESHUTDOWN Can't send after socket shutdown
ESOCKTNOSUPPORT Socket type isn't supported
ESPIPE Illegal seek
ESRCH No such process
ESRMNT Srmount error
ESRVRFAULT The receive side of a message transfer encountered a memory fault accessing the receive/reply buffer.
ESTALE Potentially recoverable I/O error
ESTRPIPE If pipe/FIFO, don't sleep in stream head
ETIME Timer expired
ETIMEDOUT Connection timed out
ETOOMANYREFS Too many references: can't splice
ETXTBSY Text file is busy
EUNATCH Protocol driver isn't attached
EUSERS Too many users (for UFS)
EWOULDBLOCK Operation would block
EXDEV Cross-device link
EXFULL Exchange full

Examples:

/*
 *  The following program makes an illegal call
 *  to the write() function, then prints the
 *  value held in errno.
 */
#include <stdio.h>
#include <unistd.h>
#include <errno.h>
#include <string.h>

int main( void )
{
    int errvalue;

    errno = EOK;
    write( -1, "hello, world\n",
           strlen( "hello, world\n" ) );
    errvalue = errno;
    printf( "The error generated was %d\n", errvalue );
    printf( "That means: %s\n", strerror( errvalue ) );
}

Classification:

POSIX 1003.1

See also:

herrno(), strerror()


[Previous] [Contents] [Next]