mirror of
				https://sourceware.org/git/glibc.git
				synced 2025-10-30 10:45:40 +03:00 
			
		
		
		
	
		
			
				
	
	
		
			1663 lines
		
	
	
		
			54 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			1663 lines
		
	
	
		
			54 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
| @node Error Reporting, Memory, Introduction, Top
 | |
| @chapter Error Reporting
 | |
| @c %MENU% How library functions report errors
 | |
| @cindex error reporting
 | |
| @cindex reporting errors
 | |
| @cindex error codes
 | |
| @cindex status codes
 | |
| 
 | |
| Many functions in @theglibc{} detect and report error conditions,
 | |
| and sometimes your programs need to check for these error conditions.
 | |
| For example, when you open an input file, you should verify that the
 | |
| file was actually opened correctly, and print an error message or take
 | |
| other appropriate action if the call to the library function failed.
 | |
| 
 | |
| This chapter describes how the error reporting facility works.  Your
 | |
| program should include the header file @file{errno.h} to use this
 | |
| facility.
 | |
| @pindex errno.h
 | |
| 
 | |
| @menu
 | |
| * Checking for Errors::         How errors are reported by library functions.
 | |
| * Error Codes::                 Error code macros; all of these expand
 | |
|                                  into integer constant values.
 | |
| * Error Messages::              Mapping error codes onto error messages.
 | |
| @end menu
 | |
| 
 | |
| @node Checking for Errors, Error Codes,  , Error Reporting
 | |
| @section Checking for Errors
 | |
| 
 | |
| Most library functions return a special value to indicate that they have
 | |
| failed.  The special value is typically @code{-1}, a null pointer, or a
 | |
| constant such as @code{EOF} that is defined for that purpose.  But this
 | |
| return value tells you only that an error has occurred.  To find out
 | |
| what kind of error it was, you need to look at the error code stored in the
 | |
| variable @code{errno}.  This variable is declared in the header file
 | |
| @file{errno.h}.
 | |
| @pindex errno.h
 | |
| 
 | |
| @comment errno.h
 | |
| @comment ISO
 | |
| @deftypevr {Variable} {volatile int} errno
 | |
| The variable @code{errno} contains the system error number.  You can
 | |
| change the value of @code{errno}.
 | |
| 
 | |
| Since @code{errno} is declared @code{volatile}, it might be changed
 | |
| asynchronously by a signal handler; see @ref{Defining Handlers}.
 | |
| However, a properly written signal handler saves and restores the value
 | |
| of @code{errno}, so you generally do not need to worry about this
 | |
| possibility except when writing signal handlers.
 | |
| 
 | |
| The initial value of @code{errno} at program startup is zero.  Many
 | |
| library functions are guaranteed to set it to certain nonzero values
 | |
| when they encounter certain kinds of errors.  These error conditions are
 | |
| listed for each function.  These functions do not change @code{errno}
 | |
| when they succeed; thus, the value of @code{errno} after a successful
 | |
| call is not necessarily zero, and you should not use @code{errno} to
 | |
| determine @emph{whether} a call failed.  The proper way to do that is
 | |
| documented for each function.  @emph{If} the call failed, you can
 | |
| examine @code{errno}.
 | |
| 
 | |
| Many library functions can set @code{errno} to a nonzero value as a
 | |
| result of calling other library functions which might fail.  You should
 | |
| assume that any library function might alter @code{errno} when the
 | |
| function returns an error.
 | |
| 
 | |
| @strong{Portability Note:} @w{ISO C} specifies @code{errno} as a
 | |
| ``modifiable lvalue'' rather than as a variable, permitting it to be
 | |
| implemented as a macro.  For example, its expansion might involve a
 | |
| function call, like @w{@code{*__errno_location ()}}.  In fact, that is
 | |
| what it is
 | |
| on @gnulinuxhurdsystems{}.  @Theglibc{}, on each system, does
 | |
| whatever is right for the particular system.
 | |
| 
 | |
| There are a few library functions, like @code{sqrt} and @code{atan},
 | |
| that return a perfectly legitimate value in case of an error, but also
 | |
| set @code{errno}.  For these functions, if you want to check to see
 | |
| whether an error occurred, the recommended method is to set @code{errno}
 | |
| to zero before calling the function, and then check its value afterward.
 | |
| @end deftypevr
 | |
| 
 | |
| @pindex errno.h
 | |
| All the error codes have symbolic names; they are macros defined in
 | |
| @file{errno.h}.  The names start with @samp{E} and an upper-case
 | |
| letter or digit; you should consider names of this form to be
 | |
| reserved names.  @xref{Reserved Names}.
 | |
| 
 | |
| The error code values are all positive integers and are all distinct,
 | |
| with one exception: @code{EWOULDBLOCK} and @code{EAGAIN} are the same.
 | |
| Since the values are distinct, you can use them as labels in a
 | |
| @code{switch} statement; just don't use both @code{EWOULDBLOCK} and
 | |
| @code{EAGAIN}.  Your program should not make any other assumptions about
 | |
| the specific values of these symbolic constants.
 | |
| 
 | |
| The value of @code{errno} doesn't necessarily have to correspond to any
 | |
| of these macros, since some library functions might return other error
 | |
| codes of their own for other situations.  The only values that are
 | |
| guaranteed to be meaningful for a particular library function are the
 | |
| ones that this manual lists for that function.
 | |
| 
 | |
| Except on @gnuhurdsystems{}, almost any system call can return @code{EFAULT} if
 | |
| it is given an invalid pointer as an argument.  Since this could only
 | |
| happen as a result of a bug in your program, and since it will not
 | |
| happen on @gnuhurdsystems{}, we have saved space by not mentioning
 | |
| @code{EFAULT} in the descriptions of individual functions.
 | |
| 
 | |
| In some Unix systems, many system calls can also return @code{EFAULT} if
 | |
| given as an argument a pointer into the stack, and the kernel for some
 | |
| obscure reason fails in its attempt to extend the stack.  If this ever
 | |
| happens, you should probably try using statically or dynamically
 | |
| allocated memory instead of stack memory on that system.
 | |
| 
 | |
| @node Error Codes, Error Messages, Checking for Errors, Error Reporting
 | |
| @section Error Codes
 | |
| 
 | |
| @pindex errno.h
 | |
| The error code macros are defined in the header file @file{errno.h}.
 | |
| All of them expand into integer constant values.  Some of these error
 | |
| codes can't occur on @gnusystems{}, but they can occur using @theglibc{}
 | |
| on other systems.
 | |
| 
 | |
| @comment errno.h
 | |
| @comment POSIX.1: Operation not permitted
 | |
| @deftypevr Macro int EPERM
 | |
| @comment errno 1 @c DO NOT REMOVE
 | |
| Operation not permitted; only the owner of the file (or other resource)
 | |
| or processes with special privileges can perform the operation.
 | |
| @end deftypevr
 | |
| 
 | |
| @comment errno.h
 | |
| @comment POSIX.1: No such file or directory
 | |
| @deftypevr Macro int ENOENT
 | |
| @comment errno 2 @c DO NOT REMOVE
 | |
| No such file or directory.  This is a ``file doesn't exist'' error
 | |
| for ordinary files that are referenced in contexts where they are
 | |
| expected to already exist.
 | |
| @end deftypevr
 | |
| 
 | |
| @comment errno.h
 | |
| @comment POSIX.1: No such process
 | |
| @deftypevr Macro int ESRCH
 | |
| @comment errno 3 @c DO NOT REMOVE
 | |
| No process matches the specified process ID.
 | |
| @end deftypevr
 | |
| 
 | |
| @comment errno.h
 | |
| @comment POSIX.1: Interrupted system call
 | |
| @deftypevr Macro int EINTR
 | |
| @comment errno 4 @c DO NOT REMOVE
 | |
| Interrupted function call; an asynchronous signal occurred and prevented
 | |
| completion of the call.  When this happens, you should try the call
 | |
| again.
 | |
| 
 | |
| You can choose to have functions resume after a signal that is handled,
 | |
| rather than failing with @code{EINTR}; see @ref{Interrupted
 | |
| Primitives}.
 | |
| @end deftypevr
 | |
| 
 | |
| @comment errno.h
 | |
| @comment POSIX.1: Input/output error
 | |
| @deftypevr Macro int EIO
 | |
| @comment errno 5 @c DO NOT REMOVE
 | |
| Input/output error; usually used for physical read or write errors.
 | |
| @end deftypevr
 | |
| 
 | |
| @comment errno.h
 | |
| @comment POSIX.1: No such device or address
 | |
| @deftypevr Macro int ENXIO
 | |
| @comment errno 6 @c DO NOT REMOVE
 | |
| No such device or address.  The system tried to use the device
 | |
| represented by a file you specified, and it couldn't find the device.
 | |
| This can mean that the device file was installed incorrectly, or that
 | |
| the physical device is missing or not correctly attached to the
 | |
| computer.
 | |
| @end deftypevr
 | |
| 
 | |
| @comment errno.h
 | |
| @comment POSIX.1: Argument list too long
 | |
| @deftypevr Macro int E2BIG
 | |
| @comment errno 7 @c DO NOT REMOVE
 | |
| Argument list too long; used when the arguments passed to a new program
 | |
| being executed with one of the @code{exec} functions (@pxref{Executing a
 | |
| File}) occupy too much memory space.  This condition never arises on
 | |
| @gnuhurdsystems{}.
 | |
| @end deftypevr
 | |
| 
 | |
| @comment errno.h
 | |
| @comment POSIX.1: Exec format error
 | |
| @deftypevr Macro int ENOEXEC
 | |
| @comment errno 8 @c DO NOT REMOVE
 | |
| Invalid executable file format.  This condition is detected by the
 | |
| @code{exec} functions; see @ref{Executing a File}.
 | |
| @end deftypevr
 | |
| 
 | |
| @comment errno.h
 | |
| @comment POSIX.1: Bad file descriptor
 | |
| @deftypevr Macro int EBADF
 | |
| @comment errno 9 @c DO NOT REMOVE
 | |
| Bad file descriptor; for example, I/O on a descriptor that has been
 | |
| closed or reading from a descriptor open only for writing (or vice
 | |
| versa).
 | |
| @end deftypevr
 | |
| 
 | |
| @comment errno.h
 | |
| @comment POSIX.1: No child processes
 | |
| @deftypevr Macro int ECHILD
 | |
| @comment errno 10 @c DO NOT REMOVE
 | |
| There are no child processes.  This error happens on operations that are
 | |
| supposed to manipulate child processes, when there aren't any processes
 | |
| to manipulate.
 | |
| @end deftypevr
 | |
| 
 | |
| @comment errno.h
 | |
| @comment POSIX.1: Resource deadlock avoided
 | |
| @deftypevr Macro int EDEADLK
 | |
| @comment errno 11 @c DO NOT REMOVE
 | |
| Deadlock avoided; allocating a system resource would have resulted in a
 | |
| deadlock situation.  The system does not guarantee that it will notice
 | |
| all such situations.  This error means you got lucky and the system
 | |
| noticed; it might just hang.  @xref{File Locks}, for an example.
 | |
| @end deftypevr
 | |
| 
 | |
| @comment errno.h
 | |
| @comment POSIX.1: Cannot allocate memory
 | |
| @deftypevr Macro int ENOMEM
 | |
| @comment errno 12 @c DO NOT REMOVE
 | |
| No memory available.  The system cannot allocate more virtual memory
 | |
| because its capacity is full.
 | |
| @end deftypevr
 | |
| 
 | |
| @comment errno.h
 | |
| @comment POSIX.1: Permission denied
 | |
| @deftypevr Macro int EACCES
 | |
| @comment errno 13 @c DO NOT REMOVE
 | |
| Permission denied; the file permissions do not allow the attempted operation.
 | |
| @end deftypevr
 | |
| 
 | |
| @comment errno.h
 | |
| @comment POSIX.1: Bad address
 | |
| @deftypevr Macro int EFAULT
 | |
| @comment errno 14 @c DO NOT REMOVE
 | |
| Bad address; an invalid pointer was detected.
 | |
| On @gnuhurdsystems{}, this error never happens; you get a signal instead.
 | |
| @end deftypevr
 | |
| 
 | |
| @comment errno.h
 | |
| @comment BSD: Block device required
 | |
| @deftypevr Macro int ENOTBLK
 | |
| @comment errno 15 @c DO NOT REMOVE
 | |
| A file that isn't a block special file was given in a situation that
 | |
| requires one.  For example, trying to mount an ordinary file as a file
 | |
| system in Unix gives this error.
 | |
| @end deftypevr
 | |
| 
 | |
| @comment errno.h
 | |
| @comment POSIX.1: Device or resource busy
 | |
| @deftypevr Macro int EBUSY
 | |
| @comment errno 16 @c DO NOT REMOVE
 | |
| Resource busy; a system resource that can't be shared is already in use.
 | |
| For example, if you try to delete a file that is the root of a currently
 | |
| mounted filesystem, you get this error.
 | |
| @end deftypevr
 | |
| 
 | |
| @comment errno.h
 | |
| @comment POSIX.1: File exists
 | |
| @deftypevr Macro int EEXIST
 | |
| @comment errno 17 @c DO NOT REMOVE
 | |
| File exists; an existing file was specified in a context where it only
 | |
| makes sense to specify a new file.
 | |
| @end deftypevr
 | |
| 
 | |
| @comment errno.h
 | |
| @comment POSIX.1: Invalid cross-device link
 | |
| @deftypevr Macro int EXDEV
 | |
| @comment errno 18 @c DO NOT REMOVE
 | |
| An attempt to make an improper link across file systems was detected.
 | |
| This happens not only when you use @code{link} (@pxref{Hard Links}) but
 | |
| also when you rename a file with @code{rename} (@pxref{Renaming Files}).
 | |
| @end deftypevr
 | |
| 
 | |
| @comment errno.h
 | |
| @comment POSIX.1: No such device
 | |
| @deftypevr Macro int ENODEV
 | |
| @comment errno 19 @c DO NOT REMOVE
 | |
| The wrong type of device was given to a function that expects a
 | |
| particular sort of device.
 | |
| @end deftypevr
 | |
| 
 | |
| @comment errno.h
 | |
| @comment POSIX.1: Not a directory
 | |
| @deftypevr Macro int ENOTDIR
 | |
| @comment errno 20 @c DO NOT REMOVE
 | |
| A file that isn't a directory was specified when a directory is required.
 | |
| @end deftypevr
 | |
| 
 | |
| @comment errno.h
 | |
| @comment POSIX.1: Is a directory
 | |
| @deftypevr Macro int EISDIR
 | |
| @comment errno 21 @c DO NOT REMOVE
 | |
| File is a directory; you cannot open a directory for writing,
 | |
| or create or remove hard links to it.
 | |
| @end deftypevr
 | |
| 
 | |
| @comment errno.h
 | |
| @comment POSIX.1: Invalid argument
 | |
| @deftypevr Macro int EINVAL
 | |
| @comment errno 22 @c DO NOT REMOVE
 | |
| Invalid argument.  This is used to indicate various kinds of problems
 | |
| with passing the wrong argument to a library function.
 | |
| @end deftypevr
 | |
| 
 | |
| @comment errno.h
 | |
| @comment POSIX.1: Too many open files
 | |
| @deftypevr Macro int EMFILE
 | |
| @comment errno 24 @c DO NOT REMOVE
 | |
| The current process has too many files open and can't open any more.
 | |
| Duplicate descriptors do count toward this limit.
 | |
| 
 | |
| In BSD and GNU, the number of open files is controlled by a resource
 | |
| limit that can usually be increased.  If you get this error, you might
 | |
| want to increase the @code{RLIMIT_NOFILE} limit or make it unlimited;
 | |
| @pxref{Limits on Resources}.
 | |
| @end deftypevr
 | |
| 
 | |
| @comment errno.h
 | |
| @comment POSIX.1: Too many open files in system
 | |
| @deftypevr Macro int ENFILE
 | |
| @comment errno 23 @c DO NOT REMOVE
 | |
| There are too many distinct file openings in the entire system.  Note
 | |
| that any number of linked channels count as just one file opening; see
 | |
| @ref{Linked Channels}.  This error never occurs on @gnuhurdsystems{}.
 | |
| @end deftypevr
 | |
| 
 | |
| @comment errno.h
 | |
| @comment POSIX.1: Inappropriate ioctl for device
 | |
| @deftypevr Macro int ENOTTY
 | |
| @comment errno 25 @c DO NOT REMOVE
 | |
| Inappropriate I/O control operation, such as trying to set terminal
 | |
| modes on an ordinary file.
 | |
| @end deftypevr
 | |
| 
 | |
| @comment errno.h
 | |
| @comment BSD: Text file busy
 | |
| @deftypevr Macro int ETXTBSY
 | |
| @comment errno 26 @c DO NOT REMOVE
 | |
| An attempt to execute a file that is currently open for writing, or
 | |
| write to a file that is currently being executed.  Often using a
 | |
| debugger to run a program is considered having it open for writing and
 | |
| will cause this error.  (The name stands for ``text file busy''.)  This
 | |
| is not an error on @gnuhurdsystems{}; the text is copied as necessary.
 | |
| @end deftypevr
 | |
| 
 | |
| @comment errno.h
 | |
| @comment POSIX.1: File too large
 | |
| @deftypevr Macro int EFBIG
 | |
| @comment errno 27 @c DO NOT REMOVE
 | |
| File too big; the size of a file would be larger than allowed by the system.
 | |
| @end deftypevr
 | |
| 
 | |
| @comment errno.h
 | |
| @comment POSIX.1: No space left on device
 | |
| @deftypevr Macro int ENOSPC
 | |
| @comment errno 28 @c DO NOT REMOVE
 | |
| No space left on device; write operation on a file failed because the
 | |
| disk is full.
 | |
| @end deftypevr
 | |
| 
 | |
| @comment errno.h
 | |
| @comment POSIX.1: Illegal seek
 | |
| @deftypevr Macro int ESPIPE
 | |
| @comment errno 29 @c DO NOT REMOVE
 | |
| Invalid seek operation (such as on a pipe).
 | |
| @end deftypevr
 | |
| 
 | |
| @comment errno.h
 | |
| @comment POSIX.1: Read-only file system
 | |
| @deftypevr Macro int EROFS
 | |
| @comment errno 30 @c DO NOT REMOVE
 | |
| An attempt was made to modify something on a read-only file system.
 | |
| @end deftypevr
 | |
| 
 | |
| @comment errno.h
 | |
| @comment POSIX.1: Too many links
 | |
| @deftypevr Macro int EMLINK
 | |
| @comment errno 31 @c DO NOT REMOVE
 | |
| Too many links; the link count of a single file would become too large.
 | |
| @code{rename} can cause this error if the file being renamed already has
 | |
| as many links as it can take (@pxref{Renaming Files}).
 | |
| @end deftypevr
 | |
| 
 | |
| @comment errno.h
 | |
| @comment POSIX.1: Broken pipe
 | |
| @deftypevr Macro int EPIPE
 | |
| @comment errno 32 @c DO NOT REMOVE
 | |
| Broken pipe; there is no process reading from the other end of a pipe.
 | |
| Every library function that returns this error code also generates a
 | |
| @code{SIGPIPE} signal; this signal terminates the program if not handled
 | |
| or blocked.  Thus, your program will never actually see @code{EPIPE}
 | |
| unless it has handled or blocked @code{SIGPIPE}.
 | |
| @end deftypevr
 | |
| 
 | |
| @comment errno.h
 | |
| @comment ISO: Numerical argument out of domain
 | |
| @deftypevr Macro int EDOM
 | |
| @comment errno 33 @c DO NOT REMOVE
 | |
| Domain error; used by mathematical functions when an argument value does
 | |
| not fall into the domain over which the function is defined.
 | |
| @end deftypevr
 | |
| 
 | |
| @comment errno.h
 | |
| @comment ISO: Numerical result out of range
 | |
| @deftypevr Macro int ERANGE
 | |
| @comment errno 34 @c DO NOT REMOVE
 | |
| Range error; used by mathematical functions when the result value is
 | |
| not representable because of overflow or underflow.
 | |
| @end deftypevr
 | |
| 
 | |
| @comment errno.h
 | |
| @comment POSIX.1: Resource temporarily unavailable
 | |
| @deftypevr Macro int EAGAIN
 | |
| @comment errno 35 @c DO NOT REMOVE
 | |
| Resource temporarily unavailable; the call might work if you try again
 | |
| later.  The macro @code{EWOULDBLOCK} is another name for @code{EAGAIN};
 | |
| they are always the same in @theglibc{}.
 | |
| 
 | |
| This error can happen in a few different situations:
 | |
| 
 | |
| @itemize @bullet
 | |
| @item
 | |
| An operation that would block was attempted on an object that has
 | |
| non-blocking mode selected.  Trying the same operation again will block
 | |
| until some external condition makes it possible to read, write, or
 | |
| connect (whatever the operation).  You can use @code{select} to find out
 | |
| when the operation will be possible; @pxref{Waiting for I/O}.
 | |
| 
 | |
| @strong{Portability Note:} In many older Unix systems, this condition
 | |
| was indicated by @code{EWOULDBLOCK}, which was a distinct error code
 | |
| different from @code{EAGAIN}.  To make your program portable, you should
 | |
| check for both codes and treat them the same.
 | |
| 
 | |
| @item
 | |
| A temporary resource shortage made an operation impossible.  @code{fork}
 | |
| can return this error.  It indicates that the shortage is expected to
 | |
| pass, so your program can try the call again later and it may succeed.
 | |
| It is probably a good idea to delay for a few seconds before trying it
 | |
| again, to allow time for other processes to release scarce resources.
 | |
| Such shortages are usually fairly serious and affect the whole system,
 | |
| so usually an interactive program should report the error to the user
 | |
| and return to its command loop.
 | |
| @end itemize
 | |
| @end deftypevr
 | |
| 
 | |
| @comment errno.h
 | |
| @comment BSD: Operation would block
 | |
| @deftypevr Macro int EWOULDBLOCK
 | |
| @comment errno EAGAIN @c DO NOT REMOVE
 | |
| In @theglibc{}, this is another name for @code{EAGAIN} (above).
 | |
| The values are always the same, on every operating system.
 | |
| 
 | |
| C libraries in many older Unix systems have @code{EWOULDBLOCK} as a
 | |
| separate error code.
 | |
| @end deftypevr
 | |
| 
 | |
| @comment errno.h
 | |
| @comment BSD: Operation now in progress
 | |
| @deftypevr Macro int EINPROGRESS
 | |
| @comment errno 36 @c DO NOT REMOVE
 | |
| An operation that cannot complete immediately was initiated on an object
 | |
| that has non-blocking mode selected.  Some functions that must always
 | |
| block (such as @code{connect}; @pxref{Connecting}) never return
 | |
| @code{EAGAIN}.  Instead, they return @code{EINPROGRESS} to indicate that
 | |
| the operation has begun and will take some time.  Attempts to manipulate
 | |
| the object before the call completes return @code{EALREADY}.  You can
 | |
| use the @code{select} function to find out when the pending operation
 | |
| has completed; @pxref{Waiting for I/O}.
 | |
| @end deftypevr
 | |
| 
 | |
| @comment errno.h
 | |
| @comment BSD: Operation already in progress
 | |
| @deftypevr Macro int EALREADY
 | |
| @comment errno 37 @c DO NOT REMOVE
 | |
| An operation is already in progress on an object that has non-blocking
 | |
| mode selected.
 | |
| @end deftypevr
 | |
| 
 | |
| @comment errno.h
 | |
| @comment BSD: Socket operation on non-socket
 | |
| @deftypevr Macro int ENOTSOCK
 | |
| @comment errno 38 @c DO NOT REMOVE
 | |
| A file that isn't a socket was specified when a socket is required.
 | |
| @end deftypevr
 | |
| 
 | |
| @comment errno.h
 | |
| @comment BSD: Message too long
 | |
| @deftypevr Macro int EMSGSIZE
 | |
| @comment errno 40 @c DO NOT REMOVE
 | |
| The size of a message sent on a socket was larger than the supported
 | |
| maximum size.
 | |
| @end deftypevr
 | |
| 
 | |
| @comment errno.h
 | |
| @comment BSD: Protocol wrong type for socket
 | |
| @deftypevr Macro int EPROTOTYPE
 | |
| @comment errno 41 @c DO NOT REMOVE
 | |
| The socket type does not support the requested communications protocol.
 | |
| @end deftypevr
 | |
| 
 | |
| @comment errno.h
 | |
| @comment BSD: Protocol not available
 | |
| @deftypevr Macro int ENOPROTOOPT
 | |
| @comment errno 42 @c DO NOT REMOVE
 | |
| You specified a socket option that doesn't make sense for the
 | |
| particular protocol being used by the socket.  @xref{Socket Options}.
 | |
| @end deftypevr
 | |
| 
 | |
| @comment errno.h
 | |
| @comment BSD: Protocol not supported
 | |
| @deftypevr Macro int EPROTONOSUPPORT
 | |
| @comment errno 43 @c DO NOT REMOVE
 | |
| The socket domain does not support the requested communications protocol
 | |
| (perhaps because the requested protocol is completely invalid).
 | |
| @xref{Creating a Socket}.
 | |
| @end deftypevr
 | |
| 
 | |
| @comment errno.h
 | |
| @comment BSD: Socket type not supported
 | |
| @deftypevr Macro int ESOCKTNOSUPPORT
 | |
| @comment errno 44 @c DO NOT REMOVE
 | |
| The socket type is not supported.
 | |
| @end deftypevr
 | |
| 
 | |
| @comment errno.h
 | |
| @comment BSD: Operation not supported
 | |
| @deftypevr Macro int EOPNOTSUPP
 | |
| @comment errno 45 @c DO NOT REMOVE
 | |
| The operation you requested is not supported.  Some socket functions
 | |
| don't make sense for all types of sockets, and others may not be
 | |
| implemented for all communications protocols.  On @gnuhurdsystems{}, this
 | |
| error can happen for many calls when the object does not support the
 | |
| particular operation; it is a generic indication that the server knows
 | |
| nothing to do for that call.
 | |
| @end deftypevr
 | |
| 
 | |
| @comment errno.h
 | |
| @comment BSD: Protocol family not supported
 | |
| @deftypevr Macro int EPFNOSUPPORT
 | |
| @comment errno 46 @c DO NOT REMOVE
 | |
| The socket communications protocol family you requested is not supported.
 | |
| @end deftypevr
 | |
| 
 | |
| @comment errno.h
 | |
| @comment BSD: Address family not supported by protocol
 | |
| @deftypevr Macro int EAFNOSUPPORT
 | |
| @comment errno 47 @c DO NOT REMOVE
 | |
| The address family specified for a socket is not supported; it is
 | |
| inconsistent with the protocol being used on the socket.  @xref{Sockets}.
 | |
| @end deftypevr
 | |
| 
 | |
| @comment errno.h
 | |
| @comment BSD: Address already in use
 | |
| @deftypevr Macro int EADDRINUSE
 | |
| @comment errno 48 @c DO NOT REMOVE
 | |
| The requested socket address is already in use.  @xref{Socket Addresses}.
 | |
| @end deftypevr
 | |
| 
 | |
| @comment errno.h
 | |
| @comment BSD: Cannot assign requested address
 | |
| @deftypevr Macro int EADDRNOTAVAIL
 | |
| @comment errno 49 @c DO NOT REMOVE
 | |
| The requested socket address is not available; for example, you tried
 | |
| to give a socket a name that doesn't match the local host name.
 | |
| @xref{Socket Addresses}.
 | |
| @end deftypevr
 | |
| 
 | |
| @comment errno.h
 | |
| @comment BSD: Network is down
 | |
| @deftypevr Macro int ENETDOWN
 | |
| @comment errno 50 @c DO NOT REMOVE
 | |
| A socket operation failed because the network was down.
 | |
| @end deftypevr
 | |
| 
 | |
| @comment errno.h
 | |
| @comment BSD: Network is unreachable
 | |
| @deftypevr Macro int ENETUNREACH
 | |
| @comment errno 51 @c DO NOT REMOVE
 | |
| A socket operation failed because the subnet containing the remote host
 | |
| was unreachable.
 | |
| @end deftypevr
 | |
| 
 | |
| @comment errno.h
 | |
| @comment BSD: Network dropped connection on reset
 | |
| @deftypevr Macro int ENETRESET
 | |
| @comment errno 52 @c DO NOT REMOVE
 | |
| A network connection was reset because the remote host crashed.
 | |
| @end deftypevr
 | |
| 
 | |
| @comment errno.h
 | |
| @comment BSD: Software caused connection abort
 | |
| @deftypevr Macro int ECONNABORTED
 | |
| @comment errno 53 @c DO NOT REMOVE
 | |
| A network connection was aborted locally.
 | |
| @end deftypevr
 | |
| 
 | |
| @comment errno.h
 | |
| @comment BSD: Connection reset by peer
 | |
| @deftypevr Macro int ECONNRESET
 | |
| @comment errno 54 @c DO NOT REMOVE
 | |
| A network connection was closed for reasons outside the control of the
 | |
| local host, such as by the remote machine rebooting or an unrecoverable
 | |
| protocol violation.
 | |
| @end deftypevr
 | |
| 
 | |
| @comment errno.h
 | |
| @comment BSD: No buffer space available
 | |
| @deftypevr Macro int ENOBUFS
 | |
| @comment errno 55 @c DO NOT REMOVE
 | |
| The kernel's buffers for I/O operations are all in use.  In GNU, this
 | |
| error is always synonymous with @code{ENOMEM}; you may get one or the
 | |
| other from network operations.
 | |
| @end deftypevr
 | |
| 
 | |
| @comment errno.h
 | |
| @comment BSD: Transport endpoint is already connected
 | |
| @deftypevr Macro int EISCONN
 | |
| @comment errno 56 @c DO NOT REMOVE
 | |
| You tried to connect a socket that is already connected.
 | |
| @xref{Connecting}.
 | |
| @end deftypevr
 | |
| 
 | |
| @comment errno.h
 | |
| @comment BSD: Transport endpoint is not connected
 | |
| @deftypevr Macro int ENOTCONN
 | |
| @comment errno 57 @c DO NOT REMOVE
 | |
| The socket is not connected to anything.  You get this error when you
 | |
| try to transmit data over a socket, without first specifying a
 | |
| destination for the data.  For a connectionless socket (for datagram
 | |
| protocols, such as UDP), you get @code{EDESTADDRREQ} instead.
 | |
| @end deftypevr
 | |
| 
 | |
| @comment errno.h
 | |
| @comment BSD: Destination address required
 | |
| @deftypevr Macro int EDESTADDRREQ
 | |
| @comment errno 39 @c DO NOT REMOVE
 | |
| No default destination address was set for the socket.  You get this
 | |
| error when you try to transmit data over a connectionless socket,
 | |
| without first specifying a destination for the data with @code{connect}.
 | |
| @end deftypevr
 | |
| 
 | |
| @comment errno.h
 | |
| @comment BSD: Cannot send after transport endpoint shutdown
 | |
| @deftypevr Macro int ESHUTDOWN
 | |
| @comment errno 58 @c DO NOT REMOVE
 | |
| The socket has already been shut down.
 | |
| @end deftypevr
 | |
| 
 | |
| @comment errno.h
 | |
| @comment BSD: Too many references: cannot splice
 | |
| @deftypevr Macro int ETOOMANYREFS
 | |
| @comment errno 59 @c DO NOT REMOVE
 | |
| ???
 | |
| @end deftypevr
 | |
| 
 | |
| @comment errno.h
 | |
| @comment BSD: Connection timed out
 | |
| @deftypevr Macro int ETIMEDOUT
 | |
| @comment errno 60 @c DO NOT REMOVE
 | |
| A socket operation with a specified timeout received no response during
 | |
| the timeout period.
 | |
| @end deftypevr
 | |
| 
 | |
| @comment errno.h
 | |
| @comment BSD: Connection refused
 | |
| @deftypevr Macro int ECONNREFUSED
 | |
| @comment errno 61 @c DO NOT REMOVE
 | |
| A remote host refused to allow the network connection (typically because
 | |
| it is not running the requested service).
 | |
| @end deftypevr
 | |
| 
 | |
| @comment errno.h
 | |
| @comment BSD: Too many levels of symbolic links
 | |
| @deftypevr Macro int ELOOP
 | |
| @comment errno 62 @c DO NOT REMOVE
 | |
| Too many levels of symbolic links were encountered in looking up a file name.
 | |
| This often indicates a cycle of symbolic links.
 | |
| @end deftypevr
 | |
| 
 | |
| @comment errno.h
 | |
| @comment POSIX.1: File name too long
 | |
| @deftypevr Macro int ENAMETOOLONG
 | |
| @comment errno 63 @c DO NOT REMOVE
 | |
| Filename too long (longer than @code{PATH_MAX}; @pxref{Limits for
 | |
| Files}) or host name too long (in @code{gethostname} or
 | |
| @code{sethostname}; @pxref{Host Identification}).
 | |
| @end deftypevr
 | |
| 
 | |
| @comment errno.h
 | |
| @comment BSD: Host is down
 | |
| @deftypevr Macro int EHOSTDOWN
 | |
| @comment errno 64 @c DO NOT REMOVE
 | |
| The remote host for a requested network connection is down.
 | |
| @end deftypevr
 | |
| 
 | |
| @comment errno.h
 | |
| @comment BSD: No route to host
 | |
| @deftypevr Macro int EHOSTUNREACH
 | |
| @comment errno 65 @c DO NOT REMOVE
 | |
| The remote host for a requested network connection is not reachable.
 | |
| @end deftypevr
 | |
| 
 | |
| @comment errno.h
 | |
| @comment POSIX.1: Directory not empty
 | |
| @deftypevr Macro int ENOTEMPTY
 | |
| @comment errno 66 @c DO NOT REMOVE
 | |
| Directory not empty, where an empty directory was expected.  Typically,
 | |
| this error occurs when you are trying to delete a directory.
 | |
| @end deftypevr
 | |
| 
 | |
| @comment errno.h
 | |
| @comment BSD: Too many processes
 | |
| @deftypevr Macro int EPROCLIM
 | |
| @comment errno 67 @c DO NOT REMOVE
 | |
| This means that the per-user limit on new process would be exceeded by
 | |
| an attempted @code{fork}.  @xref{Limits on Resources}, for details on
 | |
| the @code{RLIMIT_NPROC} limit.
 | |
| @end deftypevr
 | |
| 
 | |
| @comment errno.h
 | |
| @comment BSD: Too many users
 | |
| @deftypevr Macro int EUSERS
 | |
| @comment errno 68 @c DO NOT REMOVE
 | |
| The file quota system is confused because there are too many users.
 | |
| @c This can probably happen in a GNU system when using NFS.
 | |
| @end deftypevr
 | |
| 
 | |
| @comment errno.h
 | |
| @comment BSD: Disk quota exceeded
 | |
| @deftypevr Macro int EDQUOT
 | |
| @comment errno 69 @c DO NOT REMOVE
 | |
| The user's disk quota was exceeded.
 | |
| @end deftypevr
 | |
| 
 | |
| @comment errno.h
 | |
| @comment BSD: Stale NFS file handle
 | |
| @deftypevr Macro int ESTALE
 | |
| @comment errno 70 @c DO NOT REMOVE
 | |
| Stale NFS file handle.  This indicates an internal confusion in the NFS
 | |
| system which is due to file system rearrangements on the server host.
 | |
| Repairing this condition usually requires unmounting and remounting
 | |
| the NFS file system on the local host.
 | |
| @end deftypevr
 | |
| 
 | |
| @comment errno.h
 | |
| @comment BSD: Object is remote
 | |
| @deftypevr Macro int EREMOTE
 | |
| @comment errno 71 @c DO NOT REMOVE
 | |
| An attempt was made to NFS-mount a remote file system with a file name that
 | |
| already specifies an NFS-mounted file.
 | |
| (This is an error on some operating systems, but we expect it to work
 | |
| properly on @gnuhurdsystems{}, making this error code impossible.)
 | |
| @end deftypevr
 | |
| 
 | |
| @comment errno.h
 | |
| @comment BSD: RPC struct is bad
 | |
| @deftypevr Macro int EBADRPC
 | |
| @comment errno 72 @c DO NOT REMOVE
 | |
| ???
 | |
| @end deftypevr
 | |
| 
 | |
| @comment errno.h
 | |
| @comment BSD: RPC version wrong
 | |
| @deftypevr Macro int ERPCMISMATCH
 | |
| @comment errno 73 @c DO NOT REMOVE
 | |
| ???
 | |
| @end deftypevr
 | |
| 
 | |
| @comment errno.h
 | |
| @comment BSD: RPC program not available
 | |
| @deftypevr Macro int EPROGUNAVAIL
 | |
| @comment errno 74 @c DO NOT REMOVE
 | |
| ???
 | |
| @end deftypevr
 | |
| 
 | |
| @comment errno.h
 | |
| @comment BSD: RPC program version wrong
 | |
| @deftypevr Macro int EPROGMISMATCH
 | |
| @comment errno 75 @c DO NOT REMOVE
 | |
| ???
 | |
| @end deftypevr
 | |
| 
 | |
| @comment errno.h
 | |
| @comment BSD: RPC bad procedure for program
 | |
| @deftypevr Macro int EPROCUNAVAIL
 | |
| @comment errno 76 @c DO NOT REMOVE
 | |
| ???
 | |
| @end deftypevr
 | |
| 
 | |
| @comment errno.h
 | |
| @comment POSIX.1: No locks available
 | |
| @deftypevr Macro int ENOLCK
 | |
| @comment errno 77 @c DO NOT REMOVE
 | |
| No locks available.  This is used by the file locking facilities; see
 | |
| @ref{File Locks}.  This error is never generated by @gnuhurdsystems{}, but
 | |
| it can result from an operation to an NFS server running another
 | |
| operating system.
 | |
| @end deftypevr
 | |
| 
 | |
| @comment errno.h
 | |
| @comment BSD: Inappropriate file type or format
 | |
| @deftypevr Macro int EFTYPE
 | |
| @comment errno 79 @c DO NOT REMOVE
 | |
| Inappropriate file type or format.  The file was the wrong type for the
 | |
| operation, or a data file had the wrong format.
 | |
| 
 | |
| On some systems @code{chmod} returns this error if you try to set the
 | |
| sticky bit on a non-directory file; @pxref{Setting Permissions}.
 | |
| @end deftypevr
 | |
| 
 | |
| @comment errno.h
 | |
| @comment BSD: Authentication error
 | |
| @deftypevr Macro int EAUTH
 | |
| @comment errno 80 @c DO NOT REMOVE
 | |
| ???
 | |
| @end deftypevr
 | |
| 
 | |
| @comment errno.h
 | |
| @comment BSD: Need authenticator
 | |
| @deftypevr Macro int ENEEDAUTH
 | |
| @comment errno 81 @c DO NOT REMOVE
 | |
| ???
 | |
| @end deftypevr
 | |
| 
 | |
| @comment errno.h
 | |
| @comment POSIX.1: Function not implemented
 | |
| @deftypevr Macro int ENOSYS
 | |
| @comment errno 78 @c DO NOT REMOVE
 | |
| Function not implemented.  This indicates that the function called is
 | |
| not implemented at all, either in the C library itself or in the
 | |
| operating system.  When you get this error, you can be sure that this
 | |
| particular function will always fail with @code{ENOSYS} unless you
 | |
| install a new version of the C library or the operating system.
 | |
| @end deftypevr
 | |
| 
 | |
| @comment errno.h
 | |
| @comment POSIX.1: Not supported
 | |
| @deftypevr Macro int ENOTSUP
 | |
| @comment errno 118 @c DO NOT REMOVE
 | |
| Not supported.  A function returns this error when certain parameter
 | |
| values are valid, but the functionality they request is not available.
 | |
| This can mean that the function does not implement a particular command
 | |
| or option value or flag bit at all.  For functions that operate on some
 | |
| object given in a parameter, such as a file descriptor or a port, it
 | |
| might instead mean that only @emph{that specific object} (file
 | |
| descriptor, port, etc.) is unable to support the other parameters given;
 | |
| different file descriptors might support different ranges of parameter
 | |
| values.
 | |
| 
 | |
| If the entire function is not available at all in the implementation,
 | |
| it returns @code{ENOSYS} instead.
 | |
| @end deftypevr
 | |
| 
 | |
| @comment errno.h
 | |
| @comment ISO: Invalid or incomplete multibyte or wide character
 | |
| @deftypevr Macro int EILSEQ
 | |
| @comment errno 106 @c DO NOT REMOVE
 | |
| While decoding a multibyte character the function came along an invalid
 | |
| or an incomplete sequence of bytes or the given wide character is invalid.
 | |
| @end deftypevr
 | |
| 
 | |
| @comment errno.h
 | |
| @comment GNU: Inappropriate operation for background process
 | |
| @deftypevr Macro int EBACKGROUND
 | |
| @comment errno 100 @c DO NOT REMOVE
 | |
| On @gnuhurdsystems{}, servers supporting the @code{term} protocol return
 | |
| this error for certain operations when the caller is not in the
 | |
| foreground process group of the terminal.  Users do not usually see this
 | |
| error because functions such as @code{read} and @code{write} translate
 | |
| it into a @code{SIGTTIN} or @code{SIGTTOU} signal.  @xref{Job Control},
 | |
| for information on process groups and these signals.
 | |
| @end deftypevr
 | |
| 
 | |
| @comment errno.h
 | |
| @comment GNU: Translator died
 | |
| @deftypevr Macro int EDIED
 | |
| @comment errno 101 @c DO NOT REMOVE
 | |
| On @gnuhurdsystems{}, opening a file returns this error when the file is
 | |
| translated by a program and the translator program dies while starting
 | |
| up, before it has connected to the file.
 | |
| @end deftypevr
 | |
| 
 | |
| @comment errno.h
 | |
| @comment GNU: ?
 | |
| @deftypevr Macro int ED
 | |
| @comment errno 102 @c DO NOT REMOVE
 | |
| The experienced user will know what is wrong.
 | |
| @c This error code is a joke.  Its perror text is part of the joke.
 | |
| @c Don't change it.
 | |
| @end deftypevr
 | |
| 
 | |
| @comment errno.h
 | |
| @comment GNU: You really blew it this time
 | |
| @deftypevr Macro int EGREGIOUS
 | |
| @comment errno 103 @c DO NOT REMOVE
 | |
| You did @strong{what}?
 | |
| @end deftypevr
 | |
| 
 | |
| @comment errno.h
 | |
| @comment GNU: Computer bought the farm
 | |
| @deftypevr Macro int EIEIO
 | |
| @comment errno 104 @c DO NOT REMOVE
 | |
| Go home and have a glass of warm, dairy-fresh milk.
 | |
| @end deftypevr
 | |
| 
 | |
| @comment errno.h
 | |
| @comment GNU: Gratuitous error
 | |
| @deftypevr Macro int EGRATUITOUS
 | |
| @comment errno 105 @c DO NOT REMOVE
 | |
| This error code has no purpose.
 | |
| @end deftypevr
 | |
| 
 | |
| @comment errno.h
 | |
| @comment XOPEN: Bad message
 | |
| @deftypevr Macro int EBADMSG
 | |
| @comment errno 107
 | |
| @end deftypevr
 | |
| 
 | |
| @comment errno.h
 | |
| @comment XOPEN: Identifier removed
 | |
| @deftypevr Macro int EIDRM
 | |
| @comment errno 108
 | |
| @end deftypevr
 | |
| 
 | |
| @comment errno.h
 | |
| @comment XOPEN: Multihop attempted
 | |
| @deftypevr Macro int EMULTIHOP
 | |
| @comment errno 109
 | |
| @end deftypevr
 | |
| 
 | |
| @comment errno.h
 | |
| @comment XOPEN: No data available
 | |
| @deftypevr Macro int ENODATA
 | |
| @comment errno 110
 | |
| @end deftypevr
 | |
| 
 | |
| @comment errno.h
 | |
| @comment XOPEN: Link has been severed
 | |
| @deftypevr Macro int ENOLINK
 | |
| @comment errno 111
 | |
| @end deftypevr
 | |
| 
 | |
| @comment errno.h
 | |
| @comment XOPEN: No message of desired type
 | |
| @deftypevr Macro int ENOMSG
 | |
| @comment errno 112
 | |
| @end deftypevr
 | |
| 
 | |
| @comment errno.h
 | |
| @comment XOPEN: Out of streams resources
 | |
| @deftypevr Macro int ENOSR
 | |
| @comment errno 113
 | |
| @end deftypevr
 | |
| 
 | |
| @comment errno.h
 | |
| @comment XOPEN: Device not a stream
 | |
| @deftypevr Macro int ENOSTR
 | |
| @comment errno 114
 | |
| @end deftypevr
 | |
| 
 | |
| @comment errno.h
 | |
| @comment XOPEN: Value too large for defined data type
 | |
| @deftypevr Macro int EOVERFLOW
 | |
| @comment errno 115
 | |
| @end deftypevr
 | |
| 
 | |
| @comment errno.h
 | |
| @comment XOPEN: Protocol error
 | |
| @deftypevr Macro int EPROTO
 | |
| @comment errno 116
 | |
| @end deftypevr
 | |
| 
 | |
| @comment errno.h
 | |
| @comment XOPEN: Timer expired
 | |
| @deftypevr Macro int ETIME
 | |
| @comment errno 117
 | |
| @end deftypevr
 | |
| 
 | |
| @comment errno.h
 | |
| @comment POSIX.1: Operation canceled
 | |
| @deftypevr Macro int ECANCELED
 | |
| @comment errno 119
 | |
| Operation canceled; an asynchronous operation was canceled before it
 | |
| completed.  @xref{Asynchronous I/O}.  When you call @code{aio_cancel},
 | |
| the normal result is for the operations affected to complete with this
 | |
| error; @pxref{Cancel AIO Operations}.
 | |
| @end deftypevr
 | |
| 
 | |
| 
 | |
| @emph{The following error codes are defined by the Linux/i386 kernel.
 | |
| They are not yet documented.}
 | |
| 
 | |
| @comment errno.h
 | |
| @comment Linux???: Interrupted system call should be restarted
 | |
| @deftypevr Macro int ERESTART
 | |
| @comment errno ???/85
 | |
| @end deftypevr
 | |
| 
 | |
| @comment errno.h
 | |
| @comment Linux???: Channel number out of range
 | |
| @deftypevr Macro int ECHRNG
 | |
| @comment errno ???/44
 | |
| @end deftypevr
 | |
| 
 | |
| @comment errno.h
 | |
| @comment Obsolete: Level 2 not synchronized
 | |
| @deftypevr Macro int EL2NSYNC
 | |
| @comment errno ???/45
 | |
| @end deftypevr
 | |
| 
 | |
| @comment errno.h
 | |
| @comment Obsolete: Level 3 halted
 | |
| @deftypevr Macro int EL3HLT
 | |
| @comment errno ???/46
 | |
| @end deftypevr
 | |
| 
 | |
| @comment errno.h
 | |
| @comment Obsolete: Level 3 reset
 | |
| @deftypevr Macro int EL3RST
 | |
| @comment errno ???/47
 | |
| @end deftypevr
 | |
| 
 | |
| @comment errno.h
 | |
| @comment Linux???: Link number out of range
 | |
| @deftypevr Macro int ELNRNG
 | |
| @comment errno ???/48
 | |
| @end deftypevr
 | |
| 
 | |
| @comment errno.h
 | |
| @comment Linux???: Protocol driver not attached
 | |
| @deftypevr Macro int EUNATCH
 | |
| @comment errno ???/49
 | |
| @end deftypevr
 | |
| 
 | |
| @comment errno.h
 | |
| @comment Linux???: No CSI structure available
 | |
| @deftypevr Macro int ENOCSI
 | |
| @comment errno ???/50
 | |
| @end deftypevr
 | |
| 
 | |
| @comment errno.h
 | |
| @comment Obsolete: Level 2 halted
 | |
| @deftypevr Macro int EL2HLT
 | |
| @comment errno ???/51
 | |
| @end deftypevr
 | |
| 
 | |
| @comment errno.h
 | |
| @comment Linux???: Invalid exchange
 | |
| @deftypevr Macro int EBADE
 | |
| @comment errno ???/52
 | |
| @end deftypevr
 | |
| 
 | |
| @comment errno.h
 | |
| @comment Linux???: Invalid request descriptor
 | |
| @deftypevr Macro int EBADR
 | |
| @comment errno ???/53
 | |
| @end deftypevr
 | |
| 
 | |
| @comment errno.h
 | |
| @comment Linux???: Exchange full
 | |
| @deftypevr Macro int EXFULL
 | |
| @comment errno ???/54
 | |
| @end deftypevr
 | |
| 
 | |
| @comment errno.h
 | |
| @comment Linux???: No anode
 | |
| @deftypevr Macro int ENOANO
 | |
| @comment errno ???/55
 | |
| @end deftypevr
 | |
| 
 | |
| @comment errno.h
 | |
| @comment Linux???: Invalid request code
 | |
| @deftypevr Macro int EBADRQC
 | |
| @comment errno ???/56
 | |
| @end deftypevr
 | |
| 
 | |
| @comment errno.h
 | |
| @comment Linux???: Invalid slot
 | |
| @deftypevr Macro int EBADSLT
 | |
| @comment errno ???/57
 | |
| @end deftypevr
 | |
| 
 | |
| @comment errno.h
 | |
| @comment Linux???: File locking deadlock error
 | |
| @deftypevr Macro int EDEADLOCK
 | |
| @comment errno ???/58
 | |
| @end deftypevr
 | |
| 
 | |
| @comment errno.h
 | |
| @comment Linux???: Bad font file format
 | |
| @deftypevr Macro int EBFONT
 | |
| @comment errno ???/59
 | |
| @end deftypevr
 | |
| 
 | |
| @comment errno.h
 | |
| @comment Linux???: Machine is not on the network
 | |
| @deftypevr Macro int ENONET
 | |
| @comment errno ???/64
 | |
| @end deftypevr
 | |
| 
 | |
| @comment errno.h
 | |
| @comment Linux???: Package not installed
 | |
| @deftypevr Macro int ENOPKG
 | |
| @comment errno ???/65
 | |
| @end deftypevr
 | |
| 
 | |
| @comment errno.h
 | |
| @comment Linux???: Advertise error
 | |
| @deftypevr Macro int EADV
 | |
| @comment errno ???/68
 | |
| @end deftypevr
 | |
| 
 | |
| @comment errno.h
 | |
| @comment Linux???: Srmount error
 | |
| @deftypevr Macro int ESRMNT
 | |
| @comment errno ???/69
 | |
| @end deftypevr
 | |
| 
 | |
| @comment errno.h
 | |
| @comment Linux???: Communication error on send
 | |
| @deftypevr Macro int ECOMM
 | |
| @comment errno ???/70
 | |
| @end deftypevr
 | |
| 
 | |
| @comment errno.h
 | |
| @comment Linux???: RFS specific error
 | |
| @deftypevr Macro int EDOTDOT
 | |
| @comment errno ???/73
 | |
| @end deftypevr
 | |
| 
 | |
| @comment errno.h
 | |
| @comment Linux???: Name not unique on network
 | |
| @deftypevr Macro int ENOTUNIQ
 | |
| @comment errno ???/76
 | |
| @end deftypevr
 | |
| 
 | |
| @comment errno.h
 | |
| @comment Linux???: File descriptor in bad state
 | |
| @deftypevr Macro int EBADFD
 | |
| @comment errno ???/77
 | |
| @end deftypevr
 | |
| 
 | |
| @comment errno.h
 | |
| @comment Linux???: Remote address changed
 | |
| @deftypevr Macro int EREMCHG
 | |
| @comment errno ???/78
 | |
| @end deftypevr
 | |
| 
 | |
| @comment errno.h
 | |
| @comment Linux???: Can not access a needed shared library
 | |
| @deftypevr Macro int ELIBACC
 | |
| @comment errno ???/79
 | |
| @end deftypevr
 | |
| 
 | |
| @comment errno.h
 | |
| @comment Linux???: Accessing a corrupted shared library
 | |
| @deftypevr Macro int ELIBBAD
 | |
| @comment errno ???/80
 | |
| @end deftypevr
 | |
| 
 | |
| @comment errno.h
 | |
| @comment Linux???: .lib section in a.out corrupted
 | |
| @deftypevr Macro int ELIBSCN
 | |
| @comment errno ???/81
 | |
| @end deftypevr
 | |
| 
 | |
| @comment errno.h
 | |
| @comment Linux???: Attempting to link in too many shared libraries
 | |
| @deftypevr Macro int ELIBMAX
 | |
| @comment errno ???/82
 | |
| @end deftypevr
 | |
| 
 | |
| @comment errno.h
 | |
| @comment Linux???: Cannot exec a shared library directly
 | |
| @deftypevr Macro int ELIBEXEC
 | |
| @comment errno ???/83
 | |
| @end deftypevr
 | |
| 
 | |
| @comment errno.h
 | |
| @comment Linux???: Streams pipe error
 | |
| @deftypevr Macro int ESTRPIPE
 | |
| @comment errno ???/86
 | |
| @end deftypevr
 | |
| 
 | |
| @comment errno.h
 | |
| @comment Linux???: Structure needs cleaning
 | |
| @deftypevr Macro int EUCLEAN
 | |
| @comment errno ???/117
 | |
| @end deftypevr
 | |
| 
 | |
| @comment errno.h
 | |
| @comment Linux???: Not a XENIX named type file
 | |
| @deftypevr Macro int ENOTNAM
 | |
| @comment errno ???/118
 | |
| @end deftypevr
 | |
| 
 | |
| @comment errno.h
 | |
| @comment Linux???: No XENIX semaphores available
 | |
| @deftypevr Macro int ENAVAIL
 | |
| @comment errno ???/119
 | |
| @end deftypevr
 | |
| 
 | |
| @comment errno.h
 | |
| @comment Linux???: Is a named type file
 | |
| @deftypevr Macro int EISNAM
 | |
| @comment errno ???/120
 | |
| @end deftypevr
 | |
| 
 | |
| @comment errno.h
 | |
| @comment Linux???: Remote I/O error
 | |
| @deftypevr Macro int EREMOTEIO
 | |
| @comment errno ???/121
 | |
| @end deftypevr
 | |
| 
 | |
| @comment errno.h
 | |
| @comment Linux???: No medium found
 | |
| @deftypevr Macro int ENOMEDIUM
 | |
| @comment errno ???/???
 | |
| @end deftypevr
 | |
| 
 | |
| @comment errno.h
 | |
| @comment Linux???: Wrong medium type
 | |
| @deftypevr Macro int EMEDIUMTYPE
 | |
| @comment errno ???/???
 | |
| @end deftypevr
 | |
| 
 | |
| @comment errno.h
 | |
| @comment Linux: Required key not available
 | |
| @deftypevr Macro int ENOKEY
 | |
| @comment errno ???/???
 | |
| @end deftypevr
 | |
| 
 | |
| @comment errno.h
 | |
| @comment Linux: Key has expired
 | |
| @deftypevr Macro int EKEYEXPIRED
 | |
| @comment errno ???/???
 | |
| @end deftypevr
 | |
| 
 | |
| @comment errno.h
 | |
| @comment Linux: Key has been revoked
 | |
| @deftypevr Macro int EKEYREVOKED
 | |
| @comment errno ???/???
 | |
| @end deftypevr
 | |
| 
 | |
| @comment errno.h
 | |
| @comment Linux: Key was rejected by service
 | |
| @deftypevr Macro int EKEYREJECTED
 | |
| @comment errno ???/???
 | |
| @end deftypevr
 | |
| 
 | |
| @comment errno.h
 | |
| @comment Linux: Owner died
 | |
| @deftypevr Macro int EOWNERDEAD
 | |
| @comment errno ???/???
 | |
| @end deftypevr
 | |
| 
 | |
| @comment errno.h
 | |
| @comment Linux: State not recoverable
 | |
| @deftypevr Macro int ENOTRECOVERABLE
 | |
| @comment errno ???/???
 | |
| @end deftypevr
 | |
| 
 | |
| @comment errno.h
 | |
| @comment Linux: Operation not possible due to RF-kill
 | |
| @deftypevr Macro int ERFKILL
 | |
| @comment errno ???/???
 | |
| @end deftypevr
 | |
| 
 | |
| @comment errno.h
 | |
| @comment Linux: Memory page has hardware error
 | |
| @deftypevr Macro int EHWPOISON
 | |
| @comment errno ???/???
 | |
| @end deftypevr
 | |
| 
 | |
| @node Error Messages,  , Error Codes, Error Reporting
 | |
| @section Error Messages
 | |
| 
 | |
| The library has functions and variables designed to make it easy for
 | |
| your program to report informative error messages in the customary
 | |
| format about the failure of a library call.  The functions
 | |
| @code{strerror} and @code{perror} give you the standard error message
 | |
| for a given error code; the variable
 | |
| @w{@code{program_invocation_short_name}} gives you convenient access to the
 | |
| name of the program that encountered the error.
 | |
| 
 | |
| @comment string.h
 | |
| @comment ISO
 | |
| @deftypefun {char *} strerror (int @var{errnum})
 | |
| The @code{strerror} function maps the error code (@pxref{Checking for
 | |
| Errors}) specified by the @var{errnum} argument to a descriptive error
 | |
| message string.  The return value is a pointer to this string.
 | |
| 
 | |
| The value @var{errnum} normally comes from the variable @code{errno}.
 | |
| 
 | |
| You should not modify the string returned by @code{strerror}.  Also, if
 | |
| you make subsequent calls to @code{strerror}, the string might be
 | |
| overwritten.  (But it's guaranteed that no library function ever calls
 | |
| @code{strerror} behind your back.)
 | |
| 
 | |
| The function @code{strerror} is declared in @file{string.h}.
 | |
| @end deftypefun
 | |
| 
 | |
| @comment string.h
 | |
| @comment GNU
 | |
| @deftypefun {char *} strerror_r (int @var{errnum}, char *@var{buf}, size_t @var{n})
 | |
| The @code{strerror_r} function works like @code{strerror} but instead of
 | |
| returning the error message in a statically allocated buffer shared by
 | |
| all threads in the process, it returns a private copy for the
 | |
| thread. This might be either some permanent global data or a message
 | |
| string in the user supplied buffer starting at @var{buf} with the
 | |
| length of @var{n} bytes.
 | |
| 
 | |
| At most @var{n} characters are written (including the NUL byte) so it is
 | |
| up to the user to select the buffer large enough.
 | |
| 
 | |
| This function should always be used in multi-threaded programs since
 | |
| there is no way to guarantee the string returned by @code{strerror}
 | |
| really belongs to the last call of the current thread.
 | |
| 
 | |
| This function @code{strerror_r} is a GNU extension and it is declared in
 | |
| @file{string.h}.
 | |
| @end deftypefun
 | |
| 
 | |
| @comment stdio.h
 | |
| @comment ISO
 | |
| @deftypefun void perror (const char *@var{message})
 | |
| This function prints an error message to the stream @code{stderr};
 | |
| see @ref{Standard Streams}.  The orientation of @code{stderr} is not
 | |
| changed.
 | |
| 
 | |
| If you call @code{perror} with a @var{message} that is either a null
 | |
| pointer or an empty string, @code{perror} just prints the error message
 | |
| corresponding to @code{errno}, adding a trailing newline.
 | |
| 
 | |
| If you supply a non-null @var{message} argument, then @code{perror}
 | |
| prefixes its output with this string.  It adds a colon and a space
 | |
| character to separate the @var{message} from the error string corresponding
 | |
| to @code{errno}.
 | |
| 
 | |
| The function @code{perror} is declared in @file{stdio.h}.
 | |
| @end deftypefun
 | |
| 
 | |
| @code{strerror} and @code{perror} produce the exact same message for any
 | |
| given error code; the precise text varies from system to system.  With
 | |
| @theglibc{}, the messages are fairly short; there are no multi-line
 | |
| messages or embedded newlines.  Each error message begins with a capital
 | |
| letter and does not include any terminating punctuation.
 | |
| 
 | |
| @strong{Compatibility Note:} The @code{strerror} function was introduced
 | |
| in @w{ISO C89}.  Many older C systems do not support this function yet.
 | |
| 
 | |
| @cindex program name
 | |
| @cindex name of running program
 | |
| Many programs that don't read input from the terminal are designed to
 | |
| exit if any system call fails.  By convention, the error message from
 | |
| such a program should start with the program's name, sans directories.
 | |
| You can find that name in the variable
 | |
| @code{program_invocation_short_name}; the full file name is stored the
 | |
| variable @code{program_invocation_name}.
 | |
| 
 | |
| @comment errno.h
 | |
| @comment GNU
 | |
| @deftypevar {char *} program_invocation_name
 | |
| This variable's value is the name that was used to invoke the program
 | |
| running in the current process.  It is the same as @code{argv[0]}.  Note
 | |
| that this is not necessarily a useful file name; often it contains no
 | |
| directory names.  @xref{Program Arguments}.
 | |
| @end deftypevar
 | |
| 
 | |
| @comment errno.h
 | |
| @comment GNU
 | |
| @deftypevar {char *} program_invocation_short_name
 | |
| This variable's value is the name that was used to invoke the program
 | |
| running in the current process, with directory names removed.  (That is
 | |
| to say, it is the same as @code{program_invocation_name} minus
 | |
| everything up to the last slash, if any.)
 | |
| @end deftypevar
 | |
| 
 | |
| The library initialization code sets up both of these variables before
 | |
| calling @code{main}.
 | |
| 
 | |
| @strong{Portability Note:} These two variables are GNU extensions.  If
 | |
| you want your program to work with non-GNU libraries, you must save the
 | |
| value of @code{argv[0]} in @code{main}, and then strip off the directory
 | |
| names yourself.  We added these extensions to make it possible to write
 | |
| self-contained error-reporting subroutines that require no explicit
 | |
| cooperation from @code{main}.
 | |
| 
 | |
| Here is an example showing how to handle failure to open a file
 | |
| correctly.  The function @code{open_sesame} tries to open the named file
 | |
| for reading and returns a stream if successful.  The @code{fopen}
 | |
| library function returns a null pointer if it couldn't open the file for
 | |
| some reason.  In that situation, @code{open_sesame} constructs an
 | |
| appropriate error message using the @code{strerror} function, and
 | |
| terminates the program.  If we were going to make some other library
 | |
| calls before passing the error code to @code{strerror}, we'd have to
 | |
| save it in a local variable instead, because those other library
 | |
| functions might overwrite @code{errno} in the meantime.
 | |
| 
 | |
| @smallexample
 | |
| #include <errno.h>
 | |
| #include <stdio.h>
 | |
| #include <stdlib.h>
 | |
| #include <string.h>
 | |
| 
 | |
| FILE *
 | |
| open_sesame (char *name)
 | |
| @{
 | |
|   FILE *stream;
 | |
| 
 | |
|   errno = 0;
 | |
|   stream = fopen (name, "r");
 | |
|   if (stream == NULL)
 | |
|     @{
 | |
|       fprintf (stderr, "%s: Couldn't open file %s; %s\n",
 | |
|                program_invocation_short_name, name, strerror (errno));
 | |
|       exit (EXIT_FAILURE);
 | |
|     @}
 | |
|   else
 | |
|     return stream;
 | |
| @}
 | |
| @end smallexample
 | |
| 
 | |
| Using @code{perror} has the advantage that the function is portable and
 | |
| available on all systems implementing @w{ISO C}.  But often the text
 | |
| @code{perror} generates is not what is wanted and there is no way to
 | |
| extend or change what @code{perror} does.  The GNU coding standard, for
 | |
| instance, requires error messages to be preceded by the program name and
 | |
| programs which read some input files should provide information
 | |
| about the input file name and the line number in case an error is
 | |
| encountered while reading the file.  For these occasions there are two
 | |
| functions available which are widely used throughout the GNU project.
 | |
| These functions are declared in @file{error.h}.
 | |
| 
 | |
| @comment error.h
 | |
| @comment GNU
 | |
| @deftypefun void error (int @var{status}, int @var{errnum}, const char *@var{format}, @dots{})
 | |
| The @code{error} function can be used to report general problems during
 | |
| program execution.  The @var{format} argument is a format string just
 | |
| like those given to the @code{printf} family of functions.  The
 | |
| arguments required for the format can follow the @var{format} parameter.
 | |
| Just like @code{perror}, @code{error} also can report an error code in
 | |
| textual form.  But unlike @code{perror} the error value is explicitly
 | |
| passed to the function in the @var{errnum} parameter.  This eliminates
 | |
| the problem mentioned above that the error reporting function must be
 | |
| called immediately after the function causing the error since otherwise
 | |
| @code{errno} might have a different value.
 | |
| 
 | |
| The @code{error} prints first the program name.  If the application
 | |
| defined a global variable @code{error_print_progname} and points it to a
 | |
| function this function will be called to print the program name.
 | |
| Otherwise the string from the global variable @code{program_name} is
 | |
| used.  The program name is followed by a colon and a space which in turn
 | |
| is followed by the output produced by the format string.  If the
 | |
| @var{errnum} parameter is non-zero the format string output is followed
 | |
| by a colon and a space, followed by the error message for the error code
 | |
| @var{errnum}.  In any case is the output terminated with a newline.
 | |
| 
 | |
| The output is directed to the @code{stderr} stream.  If the
 | |
| @code{stderr} wasn't oriented before the call it will be narrow-oriented
 | |
| afterwards.
 | |
| 
 | |
| The function will return unless the @var{status} parameter has a
 | |
| non-zero value.  In this case the function will call @code{exit} with
 | |
| the @var{status} value for its parameter and therefore never return.  If
 | |
| @code{error} returns the global variable @code{error_message_count} is
 | |
| incremented by one to keep track of the number of errors reported.
 | |
| @end deftypefun
 | |
| 
 | |
| @comment error.h
 | |
| @comment GNU
 | |
| @deftypefun void error_at_line (int @var{status}, int @var{errnum}, const char *@var{fname}, unsigned int @var{lineno}, const char *@var{format}, @dots{})
 | |
| 
 | |
| The @code{error_at_line} function is very similar to the @code{error}
 | |
| function.  The only difference are the additional parameters @var{fname}
 | |
| and @var{lineno}.  The handling of the other parameters is identical to
 | |
| that of @code{error} except that between the program name and the string
 | |
| generated by the format string additional text is inserted.
 | |
| 
 | |
| Directly following the program name a colon, followed by the file name
 | |
| pointer to by @var{fname}, another colon, and a value of @var{lineno} is
 | |
| printed.
 | |
| 
 | |
| This additional output of course is meant to be used to locate an error
 | |
| in an input file (like a programming language source code file etc).
 | |
| 
 | |
| If the global variable @code{error_one_per_line} is set to a non-zero
 | |
| value @code{error_at_line} will avoid printing consecutive messages for
 | |
| the same file and line.  Repetition which are not directly following
 | |
| each other are not caught.
 | |
| 
 | |
| Just like @code{error} this function only returned if @var{status} is
 | |
| zero.  Otherwise @code{exit} is called with the non-zero value.  If
 | |
| @code{error} returns the global variable @code{error_message_count} is
 | |
| incremented by one to keep track of the number of errors reported.
 | |
| @end deftypefun
 | |
| 
 | |
| As mentioned above the @code{error} and @code{error_at_line} functions
 | |
| can be customized by defining a variable named
 | |
| @code{error_print_progname}.
 | |
| 
 | |
| @comment error.h
 | |
| @comment GNU
 | |
| @deftypevar {void (*) error_print_progname } (void)
 | |
| If the @code{error_print_progname} variable is defined to a non-zero
 | |
| value the function pointed to is called by @code{error} or
 | |
| @code{error_at_line}.  It is expected to print the program name or do
 | |
| something similarly useful.
 | |
| 
 | |
| The function is expected to be print to the @code{stderr} stream and
 | |
| must be able to handle whatever orientation the stream has.
 | |
| 
 | |
| The variable is global and shared by all threads.
 | |
| @end deftypevar
 | |
| 
 | |
| @comment error.h
 | |
| @comment GNU
 | |
| @deftypevar {unsigned int} error_message_count
 | |
| The @code{error_message_count} variable is incremented whenever one of
 | |
| the functions @code{error} or @code{error_at_line} returns.  The
 | |
| variable is global and shared by all threads.
 | |
| @end deftypevar
 | |
| 
 | |
| @comment error.h
 | |
| @comment GNU
 | |
| @deftypevar int error_one_per_line
 | |
| The @code{error_one_per_line} variable influences only
 | |
| @code{error_at_line}.  Normally the @code{error_at_line} function
 | |
| creates output for every invocation.  If @code{error_one_per_line} is
 | |
| set to a non-zero value @code{error_at_line} keeps track of the last
 | |
| file name and line number for which an error was reported and avoid
 | |
| directly following messages for the same file and line.  This variable
 | |
| is global and shared by all threads.
 | |
| @end deftypevar
 | |
| 
 | |
| @noindent
 | |
| A program which read some input file and reports errors in it could look
 | |
| like this:
 | |
| 
 | |
| @smallexample
 | |
| @{
 | |
|   char *line = NULL;
 | |
|   size_t len = 0;
 | |
|   unsigned int lineno = 0;
 | |
| 
 | |
|   error_message_count = 0;
 | |
|   while (! feof_unlocked (fp))
 | |
|     @{
 | |
|       ssize_t n = getline (&line, &len, fp);
 | |
|       if (n <= 0)
 | |
|         /* @r{End of file or error.}  */
 | |
|         break;
 | |
|       ++lineno;
 | |
| 
 | |
|       /* @r{Process the line.}  */
 | |
|       @dots{}
 | |
| 
 | |
|       if (@r{Detect error in line})
 | |
|         error_at_line (0, errval, filename, lineno,
 | |
|                        "some error text %s", some_variable);
 | |
|     @}
 | |
| 
 | |
|   if (error_message_count != 0)
 | |
|     error (EXIT_FAILURE, 0, "%u errors found", error_message_count);
 | |
| @}
 | |
| @end smallexample
 | |
| 
 | |
| @code{error} and @code{error_at_line} are clearly the functions of
 | |
| choice and enable the programmer to write applications which follow the
 | |
| GNU coding standard.  @Theglibc{} additionally contains functions which
 | |
| are used in BSD for the same purpose.  These functions are declared in
 | |
| @file{err.h}.  It is generally advised to not use these functions.  They
 | |
| are included only for compatibility.
 | |
| 
 | |
| @comment err.h
 | |
| @comment BSD
 | |
| @deftypefun void warn (const char *@var{format}, @dots{})
 | |
| The @code{warn} function is roughly equivalent to a call like
 | |
| @smallexample
 | |
|   error (0, errno, format, @r{the parameters})
 | |
| @end smallexample
 | |
| @noindent
 | |
| except that the global variables @code{error} respects and modifies
 | |
| are not used.
 | |
| @end deftypefun
 | |
| 
 | |
| @comment err.h
 | |
| @comment BSD
 | |
| @deftypefun void vwarn (const char *@var{format}, va_list @var{ap})
 | |
| The @code{vwarn} function is just like @code{warn} except that the
 | |
| parameters for the handling of the format string @var{format} are passed
 | |
| in as an value of type @code{va_list}.
 | |
| @end deftypefun
 | |
| 
 | |
| @comment err.h
 | |
| @comment BSD
 | |
| @deftypefun void warnx (const char *@var{format}, @dots{})
 | |
| The @code{warnx} function is roughly equivalent to a call like
 | |
| @smallexample
 | |
|   error (0, 0, format, @r{the parameters})
 | |
| @end smallexample
 | |
| @noindent
 | |
| except that the global variables @code{error} respects and modifies
 | |
| are not used.  The difference to @code{warn} is that no error number
 | |
| string is printed.
 | |
| @end deftypefun
 | |
| 
 | |
| @comment err.h
 | |
| @comment BSD
 | |
| @deftypefun void vwarnx (const char *@var{format}, va_list @var{ap})
 | |
| The @code{vwarnx} function is just like @code{warnx} except that the
 | |
| parameters for the handling of the format string @var{format} are passed
 | |
| in as an value of type @code{va_list}.
 | |
| @end deftypefun
 | |
| 
 | |
| @comment err.h
 | |
| @comment BSD
 | |
| @deftypefun void err (int @var{status}, const char *@var{format}, @dots{})
 | |
| The @code{err} function is roughly equivalent to a call like
 | |
| @smallexample
 | |
|   error (status, errno, format, @r{the parameters})
 | |
| @end smallexample
 | |
| @noindent
 | |
| except that the global variables @code{error} respects and modifies
 | |
| are not used and that the program is exited even if @var{status} is zero.
 | |
| @end deftypefun
 | |
| 
 | |
| @comment err.h
 | |
| @comment BSD
 | |
| @deftypefun void verr (int @var{status}, const char *@var{format}, va_list @var{ap})
 | |
| The @code{verr} function is just like @code{err} except that the
 | |
| parameters for the handling of the format string @var{format} are passed
 | |
| in as an value of type @code{va_list}.
 | |
| @end deftypefun
 | |
| 
 | |
| @comment err.h
 | |
| @comment BSD
 | |
| @deftypefun void errx (int @var{status}, const char *@var{format}, @dots{})
 | |
| The @code{errx} function is roughly equivalent to a call like
 | |
| @smallexample
 | |
|   error (status, 0, format, @r{the parameters})
 | |
| @end smallexample
 | |
| @noindent
 | |
| except that the global variables @code{error} respects and modifies
 | |
| are not used and that the program is exited even if @var{status}
 | |
| is zero.  The difference to @code{err} is that no error number
 | |
| string is printed.
 | |
| @end deftypefun
 | |
| 
 | |
| @comment err.h
 | |
| @comment BSD
 | |
| @deftypefun void verrx (int @var{status}, const char *@var{format}, va_list @var{ap})
 | |
| The @code{verrx} function is just like @code{errx} except that the
 | |
| parameters for the handling of the format string @var{format} are passed
 | |
| in as an value of type @code{va_list}.
 | |
| @end deftypefun
 |