| lh | 9ed821d | 2023-04-07 01:36:19 -0700 | [diff] [blame] | 1 | @node Error Reporting, Memory, Introduction, Top | 
|  | 2 | @chapter Error Reporting | 
|  | 3 | @c %MENU% How library functions report errors | 
|  | 4 | @cindex error reporting | 
|  | 5 | @cindex reporting errors | 
|  | 6 | @cindex error codes | 
|  | 7 | @cindex status codes | 
|  | 8 |  | 
|  | 9 | Many functions in @theglibc{} detect and report error conditions, | 
|  | 10 | and sometimes your programs need to check for these error conditions. | 
|  | 11 | For example, when you open an input file, you should verify that the | 
|  | 12 | file was actually opened correctly, and print an error message or take | 
|  | 13 | other appropriate action if the call to the library function failed. | 
|  | 14 |  | 
|  | 15 | This chapter describes how the error reporting facility works.  Your | 
|  | 16 | program should include the header file @file{errno.h} to use this | 
|  | 17 | facility. | 
|  | 18 | @pindex errno.h | 
|  | 19 |  | 
|  | 20 | @menu | 
|  | 21 | * Checking for Errors::         How errors are reported by library functions. | 
|  | 22 | * Error Codes::                 Error code macros; all of these expand | 
|  | 23 | into integer constant values. | 
|  | 24 | * Error Messages::              Mapping error codes onto error messages. | 
|  | 25 | @end menu | 
|  | 26 |  | 
|  | 27 | @node Checking for Errors, Error Codes,  , Error Reporting | 
|  | 28 | @section Checking for Errors | 
|  | 29 |  | 
|  | 30 | Most library functions return a special value to indicate that they have | 
|  | 31 | failed.  The special value is typically @code{-1}, a null pointer, or a | 
|  | 32 | constant such as @code{EOF} that is defined for that purpose.  But this | 
|  | 33 | return value tells you only that an error has occurred.  To find out | 
|  | 34 | what kind of error it was, you need to look at the error code stored in the | 
|  | 35 | variable @code{errno}.  This variable is declared in the header file | 
|  | 36 | @file{errno.h}. | 
|  | 37 | @pindex errno.h | 
|  | 38 |  | 
|  | 39 | @comment errno.h | 
|  | 40 | @comment ISO | 
|  | 41 | @deftypevr {Variable} {volatile int} errno | 
|  | 42 | The variable @code{errno} contains the system error number.  You can | 
|  | 43 | change the value of @code{errno}. | 
|  | 44 |  | 
|  | 45 | Since @code{errno} is declared @code{volatile}, it might be changed | 
|  | 46 | asynchronously by a signal handler; see @ref{Defining Handlers}. | 
|  | 47 | However, a properly written signal handler saves and restores the value | 
|  | 48 | of @code{errno}, so you generally do not need to worry about this | 
|  | 49 | possibility except when writing signal handlers. | 
|  | 50 |  | 
|  | 51 | The initial value of @code{errno} at program startup is zero.  Many | 
|  | 52 | library functions are guaranteed to set it to certain nonzero values | 
|  | 53 | when they encounter certain kinds of errors.  These error conditions are | 
|  | 54 | listed for each function.  These functions do not change @code{errno} | 
|  | 55 | when they succeed; thus, the value of @code{errno} after a successful | 
|  | 56 | call is not necessarily zero, and you should not use @code{errno} to | 
|  | 57 | determine @emph{whether} a call failed.  The proper way to do that is | 
|  | 58 | documented for each function.  @emph{If} the call failed, you can | 
|  | 59 | examine @code{errno}. | 
|  | 60 |  | 
|  | 61 | Many library functions can set @code{errno} to a nonzero value as a | 
|  | 62 | result of calling other library functions which might fail.  You should | 
|  | 63 | assume that any library function might alter @code{errno} when the | 
|  | 64 | function returns an error. | 
|  | 65 |  | 
|  | 66 | @strong{Portability Note:} @w{ISO C} specifies @code{errno} as a | 
|  | 67 | ``modifiable lvalue'' rather than as a variable, permitting it to be | 
|  | 68 | implemented as a macro.  For example, its expansion might involve a | 
|  | 69 | function call, like @w{@code{*__errno_location ()}}.  In fact, that is | 
|  | 70 | what it is | 
|  | 71 | on @gnulinuxhurdsystems{}.  @Theglibc{}, on each system, does | 
|  | 72 | whatever is right for the particular system. | 
|  | 73 |  | 
|  | 74 | There are a few library functions, like @code{sqrt} and @code{atan}, | 
|  | 75 | that return a perfectly legitimate value in case of an error, but also | 
|  | 76 | set @code{errno}.  For these functions, if you want to check to see | 
|  | 77 | whether an error occurred, the recommended method is to set @code{errno} | 
|  | 78 | to zero before calling the function, and then check its value afterward. | 
|  | 79 | @end deftypevr | 
|  | 80 |  | 
|  | 81 | @pindex errno.h | 
|  | 82 | All the error codes have symbolic names; they are macros defined in | 
|  | 83 | @file{errno.h}.  The names start with @samp{E} and an upper-case | 
|  | 84 | letter or digit; you should consider names of this form to be | 
|  | 85 | reserved names.  @xref{Reserved Names}. | 
|  | 86 |  | 
|  | 87 | The error code values are all positive integers and are all distinct, | 
|  | 88 | with one exception: @code{EWOULDBLOCK} and @code{EAGAIN} are the same. | 
|  | 89 | Since the values are distinct, you can use them as labels in a | 
|  | 90 | @code{switch} statement; just don't use both @code{EWOULDBLOCK} and | 
|  | 91 | @code{EAGAIN}.  Your program should not make any other assumptions about | 
|  | 92 | the specific values of these symbolic constants. | 
|  | 93 |  | 
|  | 94 | The value of @code{errno} doesn't necessarily have to correspond to any | 
|  | 95 | of these macros, since some library functions might return other error | 
|  | 96 | codes of their own for other situations.  The only values that are | 
|  | 97 | guaranteed to be meaningful for a particular library function are the | 
|  | 98 | ones that this manual lists for that function. | 
|  | 99 |  | 
|  | 100 | Except on @gnuhurdsystems{}, almost any system call can return @code{EFAULT} if | 
|  | 101 | it is given an invalid pointer as an argument.  Since this could only | 
|  | 102 | happen as a result of a bug in your program, and since it will not | 
|  | 103 | happen on @gnuhurdsystems{}, we have saved space by not mentioning | 
|  | 104 | @code{EFAULT} in the descriptions of individual functions. | 
|  | 105 |  | 
|  | 106 | In some Unix systems, many system calls can also return @code{EFAULT} if | 
|  | 107 | given as an argument a pointer into the stack, and the kernel for some | 
|  | 108 | obscure reason fails in its attempt to extend the stack.  If this ever | 
|  | 109 | happens, you should probably try using statically or dynamically | 
|  | 110 | allocated memory instead of stack memory on that system. | 
|  | 111 |  | 
|  | 112 | @node Error Codes, Error Messages, Checking for Errors, Error Reporting | 
|  | 113 | @section Error Codes | 
|  | 114 |  | 
|  | 115 | @pindex errno.h | 
|  | 116 | The error code macros are defined in the header file @file{errno.h}. | 
|  | 117 | All of them expand into integer constant values.  Some of these error | 
|  | 118 | codes can't occur on @gnusystems{}, but they can occur using @theglibc{} | 
|  | 119 | on other systems. | 
|  | 120 |  | 
|  | 121 | @comment errno.h | 
|  | 122 | @comment POSIX.1: Operation not permitted | 
|  | 123 | @deftypevr Macro int EPERM | 
|  | 124 | @comment errno 1 @c DO NOT REMOVE | 
|  | 125 | Operation not permitted; only the owner of the file (or other resource) | 
|  | 126 | or processes with special privileges can perform the operation. | 
|  | 127 | @end deftypevr | 
|  | 128 |  | 
|  | 129 | @comment errno.h | 
|  | 130 | @comment POSIX.1: No such file or directory | 
|  | 131 | @deftypevr Macro int ENOENT | 
|  | 132 | @comment errno 2 @c DO NOT REMOVE | 
|  | 133 | No such file or directory.  This is a ``file doesn't exist'' error | 
|  | 134 | for ordinary files that are referenced in contexts where they are | 
|  | 135 | expected to already exist. | 
|  | 136 | @end deftypevr | 
|  | 137 |  | 
|  | 138 | @comment errno.h | 
|  | 139 | @comment POSIX.1: No such process | 
|  | 140 | @deftypevr Macro int ESRCH | 
|  | 141 | @comment errno 3 @c DO NOT REMOVE | 
|  | 142 | No process matches the specified process ID. | 
|  | 143 | @end deftypevr | 
|  | 144 |  | 
|  | 145 | @comment errno.h | 
|  | 146 | @comment POSIX.1: Interrupted system call | 
|  | 147 | @deftypevr Macro int EINTR | 
|  | 148 | @comment errno 4 @c DO NOT REMOVE | 
|  | 149 | Interrupted function call; an asynchronous signal occurred and prevented | 
|  | 150 | completion of the call.  When this happens, you should try the call | 
|  | 151 | again. | 
|  | 152 |  | 
|  | 153 | You can choose to have functions resume after a signal that is handled, | 
|  | 154 | rather than failing with @code{EINTR}; see @ref{Interrupted | 
|  | 155 | Primitives}. | 
|  | 156 | @end deftypevr | 
|  | 157 |  | 
|  | 158 | @comment errno.h | 
|  | 159 | @comment POSIX.1: Input/output error | 
|  | 160 | @deftypevr Macro int EIO | 
|  | 161 | @comment errno 5 @c DO NOT REMOVE | 
|  | 162 | Input/output error; usually used for physical read or write errors. | 
|  | 163 | @end deftypevr | 
|  | 164 |  | 
|  | 165 | @comment errno.h | 
|  | 166 | @comment POSIX.1: No such device or address | 
|  | 167 | @deftypevr Macro int ENXIO | 
|  | 168 | @comment errno 6 @c DO NOT REMOVE | 
|  | 169 | No such device or address.  The system tried to use the device | 
|  | 170 | represented by a file you specified, and it couldn't find the device. | 
|  | 171 | This can mean that the device file was installed incorrectly, or that | 
|  | 172 | the physical device is missing or not correctly attached to the | 
|  | 173 | computer. | 
|  | 174 | @end deftypevr | 
|  | 175 |  | 
|  | 176 | @comment errno.h | 
|  | 177 | @comment POSIX.1: Argument list too long | 
|  | 178 | @deftypevr Macro int E2BIG | 
|  | 179 | @comment errno 7 @c DO NOT REMOVE | 
|  | 180 | Argument list too long; used when the arguments passed to a new program | 
|  | 181 | being executed with one of the @code{exec} functions (@pxref{Executing a | 
|  | 182 | File}) occupy too much memory space.  This condition never arises on | 
|  | 183 | @gnuhurdsystems{}. | 
|  | 184 | @end deftypevr | 
|  | 185 |  | 
|  | 186 | @comment errno.h | 
|  | 187 | @comment POSIX.1: Exec format error | 
|  | 188 | @deftypevr Macro int ENOEXEC | 
|  | 189 | @comment errno 8 @c DO NOT REMOVE | 
|  | 190 | Invalid executable file format.  This condition is detected by the | 
|  | 191 | @code{exec} functions; see @ref{Executing a File}. | 
|  | 192 | @end deftypevr | 
|  | 193 |  | 
|  | 194 | @comment errno.h | 
|  | 195 | @comment POSIX.1: Bad file descriptor | 
|  | 196 | @deftypevr Macro int EBADF | 
|  | 197 | @comment errno 9 @c DO NOT REMOVE | 
|  | 198 | Bad file descriptor; for example, I/O on a descriptor that has been | 
|  | 199 | closed or reading from a descriptor open only for writing (or vice | 
|  | 200 | versa). | 
|  | 201 | @end deftypevr | 
|  | 202 |  | 
|  | 203 | @comment errno.h | 
|  | 204 | @comment POSIX.1: No child processes | 
|  | 205 | @deftypevr Macro int ECHILD | 
|  | 206 | @comment errno 10 @c DO NOT REMOVE | 
|  | 207 | There are no child processes.  This error happens on operations that are | 
|  | 208 | supposed to manipulate child processes, when there aren't any processes | 
|  | 209 | to manipulate. | 
|  | 210 | @end deftypevr | 
|  | 211 |  | 
|  | 212 | @comment errno.h | 
|  | 213 | @comment POSIX.1: Resource deadlock avoided | 
|  | 214 | @deftypevr Macro int EDEADLK | 
|  | 215 | @comment errno 11 @c DO NOT REMOVE | 
|  | 216 | Deadlock avoided; allocating a system resource would have resulted in a | 
|  | 217 | deadlock situation.  The system does not guarantee that it will notice | 
|  | 218 | all such situations.  This error means you got lucky and the system | 
|  | 219 | noticed; it might just hang.  @xref{File Locks}, for an example. | 
|  | 220 | @end deftypevr | 
|  | 221 |  | 
|  | 222 | @comment errno.h | 
|  | 223 | @comment POSIX.1: Cannot allocate memory | 
|  | 224 | @deftypevr Macro int ENOMEM | 
|  | 225 | @comment errno 12 @c DO NOT REMOVE | 
|  | 226 | No memory available.  The system cannot allocate more virtual memory | 
|  | 227 | because its capacity is full. | 
|  | 228 | @end deftypevr | 
|  | 229 |  | 
|  | 230 | @comment errno.h | 
|  | 231 | @comment POSIX.1: Permission denied | 
|  | 232 | @deftypevr Macro int EACCES | 
|  | 233 | @comment errno 13 @c DO NOT REMOVE | 
|  | 234 | Permission denied; the file permissions do not allow the attempted operation. | 
|  | 235 | @end deftypevr | 
|  | 236 |  | 
|  | 237 | @comment errno.h | 
|  | 238 | @comment POSIX.1: Bad address | 
|  | 239 | @deftypevr Macro int EFAULT | 
|  | 240 | @comment errno 14 @c DO NOT REMOVE | 
|  | 241 | Bad address; an invalid pointer was detected. | 
|  | 242 | On @gnuhurdsystems{}, this error never happens; you get a signal instead. | 
|  | 243 | @end deftypevr | 
|  | 244 |  | 
|  | 245 | @comment errno.h | 
|  | 246 | @comment BSD: Block device required | 
|  | 247 | @deftypevr Macro int ENOTBLK | 
|  | 248 | @comment errno 15 @c DO NOT REMOVE | 
|  | 249 | A file that isn't a block special file was given in a situation that | 
|  | 250 | requires one.  For example, trying to mount an ordinary file as a file | 
|  | 251 | system in Unix gives this error. | 
|  | 252 | @end deftypevr | 
|  | 253 |  | 
|  | 254 | @comment errno.h | 
|  | 255 | @comment POSIX.1: Device or resource busy | 
|  | 256 | @deftypevr Macro int EBUSY | 
|  | 257 | @comment errno 16 @c DO NOT REMOVE | 
|  | 258 | Resource busy; a system resource that can't be shared is already in use. | 
|  | 259 | For example, if you try to delete a file that is the root of a currently | 
|  | 260 | mounted filesystem, you get this error. | 
|  | 261 | @end deftypevr | 
|  | 262 |  | 
|  | 263 | @comment errno.h | 
|  | 264 | @comment POSIX.1: File exists | 
|  | 265 | @deftypevr Macro int EEXIST | 
|  | 266 | @comment errno 17 @c DO NOT REMOVE | 
|  | 267 | File exists; an existing file was specified in a context where it only | 
|  | 268 | makes sense to specify a new file. | 
|  | 269 | @end deftypevr | 
|  | 270 |  | 
|  | 271 | @comment errno.h | 
|  | 272 | @comment POSIX.1: Invalid cross-device link | 
|  | 273 | @deftypevr Macro int EXDEV | 
|  | 274 | @comment errno 18 @c DO NOT REMOVE | 
|  | 275 | An attempt to make an improper link across file systems was detected. | 
|  | 276 | This happens not only when you use @code{link} (@pxref{Hard Links}) but | 
|  | 277 | also when you rename a file with @code{rename} (@pxref{Renaming Files}). | 
|  | 278 | @end deftypevr | 
|  | 279 |  | 
|  | 280 | @comment errno.h | 
|  | 281 | @comment POSIX.1: No such device | 
|  | 282 | @deftypevr Macro int ENODEV | 
|  | 283 | @comment errno 19 @c DO NOT REMOVE | 
|  | 284 | The wrong type of device was given to a function that expects a | 
|  | 285 | particular sort of device. | 
|  | 286 | @end deftypevr | 
|  | 287 |  | 
|  | 288 | @comment errno.h | 
|  | 289 | @comment POSIX.1: Not a directory | 
|  | 290 | @deftypevr Macro int ENOTDIR | 
|  | 291 | @comment errno 20 @c DO NOT REMOVE | 
|  | 292 | A file that isn't a directory was specified when a directory is required. | 
|  | 293 | @end deftypevr | 
|  | 294 |  | 
|  | 295 | @comment errno.h | 
|  | 296 | @comment POSIX.1: Is a directory | 
|  | 297 | @deftypevr Macro int EISDIR | 
|  | 298 | @comment errno 21 @c DO NOT REMOVE | 
|  | 299 | File is a directory; you cannot open a directory for writing, | 
|  | 300 | or create or remove hard links to it. | 
|  | 301 | @end deftypevr | 
|  | 302 |  | 
|  | 303 | @comment errno.h | 
|  | 304 | @comment POSIX.1: Invalid argument | 
|  | 305 | @deftypevr Macro int EINVAL | 
|  | 306 | @comment errno 22 @c DO NOT REMOVE | 
|  | 307 | Invalid argument.  This is used to indicate various kinds of problems | 
|  | 308 | with passing the wrong argument to a library function. | 
|  | 309 | @end deftypevr | 
|  | 310 |  | 
|  | 311 | @comment errno.h | 
|  | 312 | @comment POSIX.1: Too many open files | 
|  | 313 | @deftypevr Macro int EMFILE | 
|  | 314 | @comment errno 24 @c DO NOT REMOVE | 
|  | 315 | The current process has too many files open and can't open any more. | 
|  | 316 | Duplicate descriptors do count toward this limit. | 
|  | 317 |  | 
|  | 318 | In BSD and GNU, the number of open files is controlled by a resource | 
|  | 319 | limit that can usually be increased.  If you get this error, you might | 
|  | 320 | want to increase the @code{RLIMIT_NOFILE} limit or make it unlimited; | 
|  | 321 | @pxref{Limits on Resources}. | 
|  | 322 | @end deftypevr | 
|  | 323 |  | 
|  | 324 | @comment errno.h | 
|  | 325 | @comment POSIX.1: Too many open files in system | 
|  | 326 | @deftypevr Macro int ENFILE | 
|  | 327 | @comment errno 23 @c DO NOT REMOVE | 
|  | 328 | There are too many distinct file openings in the entire system.  Note | 
|  | 329 | that any number of linked channels count as just one file opening; see | 
|  | 330 | @ref{Linked Channels}.  This error never occurs on @gnuhurdsystems{}. | 
|  | 331 | @end deftypevr | 
|  | 332 |  | 
|  | 333 | @comment errno.h | 
|  | 334 | @comment POSIX.1: Inappropriate ioctl for device | 
|  | 335 | @deftypevr Macro int ENOTTY | 
|  | 336 | @comment errno 25 @c DO NOT REMOVE | 
|  | 337 | Inappropriate I/O control operation, such as trying to set terminal | 
|  | 338 | modes on an ordinary file. | 
|  | 339 | @end deftypevr | 
|  | 340 |  | 
|  | 341 | @comment errno.h | 
|  | 342 | @comment BSD: Text file busy | 
|  | 343 | @deftypevr Macro int ETXTBSY | 
|  | 344 | @comment errno 26 @c DO NOT REMOVE | 
|  | 345 | An attempt to execute a file that is currently open for writing, or | 
|  | 346 | write to a file that is currently being executed.  Often using a | 
|  | 347 | debugger to run a program is considered having it open for writing and | 
|  | 348 | will cause this error.  (The name stands for ``text file busy''.)  This | 
|  | 349 | is not an error on @gnuhurdsystems{}; the text is copied as necessary. | 
|  | 350 | @end deftypevr | 
|  | 351 |  | 
|  | 352 | @comment errno.h | 
|  | 353 | @comment POSIX.1: File too large | 
|  | 354 | @deftypevr Macro int EFBIG | 
|  | 355 | @comment errno 27 @c DO NOT REMOVE | 
|  | 356 | File too big; the size of a file would be larger than allowed by the system. | 
|  | 357 | @end deftypevr | 
|  | 358 |  | 
|  | 359 | @comment errno.h | 
|  | 360 | @comment POSIX.1: No space left on device | 
|  | 361 | @deftypevr Macro int ENOSPC | 
|  | 362 | @comment errno 28 @c DO NOT REMOVE | 
|  | 363 | No space left on device; write operation on a file failed because the | 
|  | 364 | disk is full. | 
|  | 365 | @end deftypevr | 
|  | 366 |  | 
|  | 367 | @comment errno.h | 
|  | 368 | @comment POSIX.1: Illegal seek | 
|  | 369 | @deftypevr Macro int ESPIPE | 
|  | 370 | @comment errno 29 @c DO NOT REMOVE | 
|  | 371 | Invalid seek operation (such as on a pipe). | 
|  | 372 | @end deftypevr | 
|  | 373 |  | 
|  | 374 | @comment errno.h | 
|  | 375 | @comment POSIX.1: Read-only file system | 
|  | 376 | @deftypevr Macro int EROFS | 
|  | 377 | @comment errno 30 @c DO NOT REMOVE | 
|  | 378 | An attempt was made to modify something on a read-only file system. | 
|  | 379 | @end deftypevr | 
|  | 380 |  | 
|  | 381 | @comment errno.h | 
|  | 382 | @comment POSIX.1: Too many links | 
|  | 383 | @deftypevr Macro int EMLINK | 
|  | 384 | @comment errno 31 @c DO NOT REMOVE | 
|  | 385 | Too many links; the link count of a single file would become too large. | 
|  | 386 | @code{rename} can cause this error if the file being renamed already has | 
|  | 387 | as many links as it can take (@pxref{Renaming Files}). | 
|  | 388 | @end deftypevr | 
|  | 389 |  | 
|  | 390 | @comment errno.h | 
|  | 391 | @comment POSIX.1: Broken pipe | 
|  | 392 | @deftypevr Macro int EPIPE | 
|  | 393 | @comment errno 32 @c DO NOT REMOVE | 
|  | 394 | Broken pipe; there is no process reading from the other end of a pipe. | 
|  | 395 | Every library function that returns this error code also generates a | 
|  | 396 | @code{SIGPIPE} signal; this signal terminates the program if not handled | 
|  | 397 | or blocked.  Thus, your program will never actually see @code{EPIPE} | 
|  | 398 | unless it has handled or blocked @code{SIGPIPE}. | 
|  | 399 | @end deftypevr | 
|  | 400 |  | 
|  | 401 | @comment errno.h | 
|  | 402 | @comment ISO: Numerical argument out of domain | 
|  | 403 | @deftypevr Macro int EDOM | 
|  | 404 | @comment errno 33 @c DO NOT REMOVE | 
|  | 405 | Domain error; used by mathematical functions when an argument value does | 
|  | 406 | not fall into the domain over which the function is defined. | 
|  | 407 | @end deftypevr | 
|  | 408 |  | 
|  | 409 | @comment errno.h | 
|  | 410 | @comment ISO: Numerical result out of range | 
|  | 411 | @deftypevr Macro int ERANGE | 
|  | 412 | @comment errno 34 @c DO NOT REMOVE | 
|  | 413 | Range error; used by mathematical functions when the result value is | 
|  | 414 | not representable because of overflow or underflow. | 
|  | 415 | @end deftypevr | 
|  | 416 |  | 
|  | 417 | @comment errno.h | 
|  | 418 | @comment POSIX.1: Resource temporarily unavailable | 
|  | 419 | @deftypevr Macro int EAGAIN | 
|  | 420 | @comment errno 35 @c DO NOT REMOVE | 
|  | 421 | Resource temporarily unavailable; the call might work if you try again | 
|  | 422 | later.  The macro @code{EWOULDBLOCK} is another name for @code{EAGAIN}; | 
|  | 423 | they are always the same in @theglibc{}. | 
|  | 424 |  | 
|  | 425 | This error can happen in a few different situations: | 
|  | 426 |  | 
|  | 427 | @itemize @bullet | 
|  | 428 | @item | 
|  | 429 | An operation that would block was attempted on an object that has | 
|  | 430 | non-blocking mode selected.  Trying the same operation again will block | 
|  | 431 | until some external condition makes it possible to read, write, or | 
|  | 432 | connect (whatever the operation).  You can use @code{select} to find out | 
|  | 433 | when the operation will be possible; @pxref{Waiting for I/O}. | 
|  | 434 |  | 
|  | 435 | @strong{Portability Note:} In many older Unix systems, this condition | 
|  | 436 | was indicated by @code{EWOULDBLOCK}, which was a distinct error code | 
|  | 437 | different from @code{EAGAIN}.  To make your program portable, you should | 
|  | 438 | check for both codes and treat them the same. | 
|  | 439 |  | 
|  | 440 | @item | 
|  | 441 | A temporary resource shortage made an operation impossible.  @code{fork} | 
|  | 442 | can return this error.  It indicates that the shortage is expected to | 
|  | 443 | pass, so your program can try the call again later and it may succeed. | 
|  | 444 | It is probably a good idea to delay for a few seconds before trying it | 
|  | 445 | again, to allow time for other processes to release scarce resources. | 
|  | 446 | Such shortages are usually fairly serious and affect the whole system, | 
|  | 447 | so usually an interactive program should report the error to the user | 
|  | 448 | and return to its command loop. | 
|  | 449 | @end itemize | 
|  | 450 | @end deftypevr | 
|  | 451 |  | 
|  | 452 | @comment errno.h | 
|  | 453 | @comment BSD: Operation would block | 
|  | 454 | @deftypevr Macro int EWOULDBLOCK | 
|  | 455 | @comment errno EAGAIN @c DO NOT REMOVE | 
|  | 456 | In @theglibc{}, this is another name for @code{EAGAIN} (above). | 
|  | 457 | The values are always the same, on every operating system. | 
|  | 458 |  | 
|  | 459 | C libraries in many older Unix systems have @code{EWOULDBLOCK} as a | 
|  | 460 | separate error code. | 
|  | 461 | @end deftypevr | 
|  | 462 |  | 
|  | 463 | @comment errno.h | 
|  | 464 | @comment BSD: Operation now in progress | 
|  | 465 | @deftypevr Macro int EINPROGRESS | 
|  | 466 | @comment errno 36 @c DO NOT REMOVE | 
|  | 467 | An operation that cannot complete immediately was initiated on an object | 
|  | 468 | that has non-blocking mode selected.  Some functions that must always | 
|  | 469 | block (such as @code{connect}; @pxref{Connecting}) never return | 
|  | 470 | @code{EAGAIN}.  Instead, they return @code{EINPROGRESS} to indicate that | 
|  | 471 | the operation has begun and will take some time.  Attempts to manipulate | 
|  | 472 | the object before the call completes return @code{EALREADY}.  You can | 
|  | 473 | use the @code{select} function to find out when the pending operation | 
|  | 474 | has completed; @pxref{Waiting for I/O}. | 
|  | 475 | @end deftypevr | 
|  | 476 |  | 
|  | 477 | @comment errno.h | 
|  | 478 | @comment BSD: Operation already in progress | 
|  | 479 | @deftypevr Macro int EALREADY | 
|  | 480 | @comment errno 37 @c DO NOT REMOVE | 
|  | 481 | An operation is already in progress on an object that has non-blocking | 
|  | 482 | mode selected. | 
|  | 483 | @end deftypevr | 
|  | 484 |  | 
|  | 485 | @comment errno.h | 
|  | 486 | @comment BSD: Socket operation on non-socket | 
|  | 487 | @deftypevr Macro int ENOTSOCK | 
|  | 488 | @comment errno 38 @c DO NOT REMOVE | 
|  | 489 | A file that isn't a socket was specified when a socket is required. | 
|  | 490 | @end deftypevr | 
|  | 491 |  | 
|  | 492 | @comment errno.h | 
|  | 493 | @comment BSD: Message too long | 
|  | 494 | @deftypevr Macro int EMSGSIZE | 
|  | 495 | @comment errno 40 @c DO NOT REMOVE | 
|  | 496 | The size of a message sent on a socket was larger than the supported | 
|  | 497 | maximum size. | 
|  | 498 | @end deftypevr | 
|  | 499 |  | 
|  | 500 | @comment errno.h | 
|  | 501 | @comment BSD: Protocol wrong type for socket | 
|  | 502 | @deftypevr Macro int EPROTOTYPE | 
|  | 503 | @comment errno 41 @c DO NOT REMOVE | 
|  | 504 | The socket type does not support the requested communications protocol. | 
|  | 505 | @end deftypevr | 
|  | 506 |  | 
|  | 507 | @comment errno.h | 
|  | 508 | @comment BSD: Protocol not available | 
|  | 509 | @deftypevr Macro int ENOPROTOOPT | 
|  | 510 | @comment errno 42 @c DO NOT REMOVE | 
|  | 511 | You specified a socket option that doesn't make sense for the | 
|  | 512 | particular protocol being used by the socket.  @xref{Socket Options}. | 
|  | 513 | @end deftypevr | 
|  | 514 |  | 
|  | 515 | @comment errno.h | 
|  | 516 | @comment BSD: Protocol not supported | 
|  | 517 | @deftypevr Macro int EPROTONOSUPPORT | 
|  | 518 | @comment errno 43 @c DO NOT REMOVE | 
|  | 519 | The socket domain does not support the requested communications protocol | 
|  | 520 | (perhaps because the requested protocol is completely invalid). | 
|  | 521 | @xref{Creating a Socket}. | 
|  | 522 | @end deftypevr | 
|  | 523 |  | 
|  | 524 | @comment errno.h | 
|  | 525 | @comment BSD: Socket type not supported | 
|  | 526 | @deftypevr Macro int ESOCKTNOSUPPORT | 
|  | 527 | @comment errno 44 @c DO NOT REMOVE | 
|  | 528 | The socket type is not supported. | 
|  | 529 | @end deftypevr | 
|  | 530 |  | 
|  | 531 | @comment errno.h | 
|  | 532 | @comment BSD: Operation not supported | 
|  | 533 | @deftypevr Macro int EOPNOTSUPP | 
|  | 534 | @comment errno 45 @c DO NOT REMOVE | 
|  | 535 | The operation you requested is not supported.  Some socket functions | 
|  | 536 | don't make sense for all types of sockets, and others may not be | 
|  | 537 | implemented for all communications protocols.  On @gnuhurdsystems{}, this | 
|  | 538 | error can happen for many calls when the object does not support the | 
|  | 539 | particular operation; it is a generic indication that the server knows | 
|  | 540 | nothing to do for that call. | 
|  | 541 | @end deftypevr | 
|  | 542 |  | 
|  | 543 | @comment errno.h | 
|  | 544 | @comment BSD: Protocol family not supported | 
|  | 545 | @deftypevr Macro int EPFNOSUPPORT | 
|  | 546 | @comment errno 46 @c DO NOT REMOVE | 
|  | 547 | The socket communications protocol family you requested is not supported. | 
|  | 548 | @end deftypevr | 
|  | 549 |  | 
|  | 550 | @comment errno.h | 
|  | 551 | @comment BSD: Address family not supported by protocol | 
|  | 552 | @deftypevr Macro int EAFNOSUPPORT | 
|  | 553 | @comment errno 47 @c DO NOT REMOVE | 
|  | 554 | The address family specified for a socket is not supported; it is | 
|  | 555 | inconsistent with the protocol being used on the socket.  @xref{Sockets}. | 
|  | 556 | @end deftypevr | 
|  | 557 |  | 
|  | 558 | @comment errno.h | 
|  | 559 | @comment BSD: Address already in use | 
|  | 560 | @deftypevr Macro int EADDRINUSE | 
|  | 561 | @comment errno 48 @c DO NOT REMOVE | 
|  | 562 | The requested socket address is already in use.  @xref{Socket Addresses}. | 
|  | 563 | @end deftypevr | 
|  | 564 |  | 
|  | 565 | @comment errno.h | 
|  | 566 | @comment BSD: Cannot assign requested address | 
|  | 567 | @deftypevr Macro int EADDRNOTAVAIL | 
|  | 568 | @comment errno 49 @c DO NOT REMOVE | 
|  | 569 | The requested socket address is not available; for example, you tried | 
|  | 570 | to give a socket a name that doesn't match the local host name. | 
|  | 571 | @xref{Socket Addresses}. | 
|  | 572 | @end deftypevr | 
|  | 573 |  | 
|  | 574 | @comment errno.h | 
|  | 575 | @comment BSD: Network is down | 
|  | 576 | @deftypevr Macro int ENETDOWN | 
|  | 577 | @comment errno 50 @c DO NOT REMOVE | 
|  | 578 | A socket operation failed because the network was down. | 
|  | 579 | @end deftypevr | 
|  | 580 |  | 
|  | 581 | @comment errno.h | 
|  | 582 | @comment BSD: Network is unreachable | 
|  | 583 | @deftypevr Macro int ENETUNREACH | 
|  | 584 | @comment errno 51 @c DO NOT REMOVE | 
|  | 585 | A socket operation failed because the subnet containing the remote host | 
|  | 586 | was unreachable. | 
|  | 587 | @end deftypevr | 
|  | 588 |  | 
|  | 589 | @comment errno.h | 
|  | 590 | @comment BSD: Network dropped connection on reset | 
|  | 591 | @deftypevr Macro int ENETRESET | 
|  | 592 | @comment errno 52 @c DO NOT REMOVE | 
|  | 593 | A network connection was reset because the remote host crashed. | 
|  | 594 | @end deftypevr | 
|  | 595 |  | 
|  | 596 | @comment errno.h | 
|  | 597 | @comment BSD: Software caused connection abort | 
|  | 598 | @deftypevr Macro int ECONNABORTED | 
|  | 599 | @comment errno 53 @c DO NOT REMOVE | 
|  | 600 | A network connection was aborted locally. | 
|  | 601 | @end deftypevr | 
|  | 602 |  | 
|  | 603 | @comment errno.h | 
|  | 604 | @comment BSD: Connection reset by peer | 
|  | 605 | @deftypevr Macro int ECONNRESET | 
|  | 606 | @comment errno 54 @c DO NOT REMOVE | 
|  | 607 | A network connection was closed for reasons outside the control of the | 
|  | 608 | local host, such as by the remote machine rebooting or an unrecoverable | 
|  | 609 | protocol violation. | 
|  | 610 | @end deftypevr | 
|  | 611 |  | 
|  | 612 | @comment errno.h | 
|  | 613 | @comment BSD: No buffer space available | 
|  | 614 | @deftypevr Macro int ENOBUFS | 
|  | 615 | @comment errno 55 @c DO NOT REMOVE | 
|  | 616 | The kernel's buffers for I/O operations are all in use.  In GNU, this | 
|  | 617 | error is always synonymous with @code{ENOMEM}; you may get one or the | 
|  | 618 | other from network operations. | 
|  | 619 | @end deftypevr | 
|  | 620 |  | 
|  | 621 | @comment errno.h | 
|  | 622 | @comment BSD: Transport endpoint is already connected | 
|  | 623 | @deftypevr Macro int EISCONN | 
|  | 624 | @comment errno 56 @c DO NOT REMOVE | 
|  | 625 | You tried to connect a socket that is already connected. | 
|  | 626 | @xref{Connecting}. | 
|  | 627 | @end deftypevr | 
|  | 628 |  | 
|  | 629 | @comment errno.h | 
|  | 630 | @comment BSD: Transport endpoint is not connected | 
|  | 631 | @deftypevr Macro int ENOTCONN | 
|  | 632 | @comment errno 57 @c DO NOT REMOVE | 
|  | 633 | The socket is not connected to anything.  You get this error when you | 
|  | 634 | try to transmit data over a socket, without first specifying a | 
|  | 635 | destination for the data.  For a connectionless socket (for datagram | 
|  | 636 | protocols, such as UDP), you get @code{EDESTADDRREQ} instead. | 
|  | 637 | @end deftypevr | 
|  | 638 |  | 
|  | 639 | @comment errno.h | 
|  | 640 | @comment BSD: Destination address required | 
|  | 641 | @deftypevr Macro int EDESTADDRREQ | 
|  | 642 | @comment errno 39 @c DO NOT REMOVE | 
|  | 643 | No default destination address was set for the socket.  You get this | 
|  | 644 | error when you try to transmit data over a connectionless socket, | 
|  | 645 | without first specifying a destination for the data with @code{connect}. | 
|  | 646 | @end deftypevr | 
|  | 647 |  | 
|  | 648 | @comment errno.h | 
|  | 649 | @comment BSD: Cannot send after transport endpoint shutdown | 
|  | 650 | @deftypevr Macro int ESHUTDOWN | 
|  | 651 | @comment errno 58 @c DO NOT REMOVE | 
|  | 652 | The socket has already been shut down. | 
|  | 653 | @end deftypevr | 
|  | 654 |  | 
|  | 655 | @comment errno.h | 
|  | 656 | @comment BSD: Too many references: cannot splice | 
|  | 657 | @deftypevr Macro int ETOOMANYREFS | 
|  | 658 | @comment errno 59 @c DO NOT REMOVE | 
|  | 659 | ??? | 
|  | 660 | @end deftypevr | 
|  | 661 |  | 
|  | 662 | @comment errno.h | 
|  | 663 | @comment BSD: Connection timed out | 
|  | 664 | @deftypevr Macro int ETIMEDOUT | 
|  | 665 | @comment errno 60 @c DO NOT REMOVE | 
|  | 666 | A socket operation with a specified timeout received no response during | 
|  | 667 | the timeout period. | 
|  | 668 | @end deftypevr | 
|  | 669 |  | 
|  | 670 | @comment errno.h | 
|  | 671 | @comment BSD: Connection refused | 
|  | 672 | @deftypevr Macro int ECONNREFUSED | 
|  | 673 | @comment errno 61 @c DO NOT REMOVE | 
|  | 674 | A remote host refused to allow the network connection (typically because | 
|  | 675 | it is not running the requested service). | 
|  | 676 | @end deftypevr | 
|  | 677 |  | 
|  | 678 | @comment errno.h | 
|  | 679 | @comment BSD: Too many levels of symbolic links | 
|  | 680 | @deftypevr Macro int ELOOP | 
|  | 681 | @comment errno 62 @c DO NOT REMOVE | 
|  | 682 | Too many levels of symbolic links were encountered in looking up a file name. | 
|  | 683 | This often indicates a cycle of symbolic links. | 
|  | 684 | @end deftypevr | 
|  | 685 |  | 
|  | 686 | @comment errno.h | 
|  | 687 | @comment POSIX.1: File name too long | 
|  | 688 | @deftypevr Macro int ENAMETOOLONG | 
|  | 689 | @comment errno 63 @c DO NOT REMOVE | 
|  | 690 | Filename too long (longer than @code{PATH_MAX}; @pxref{Limits for | 
|  | 691 | Files}) or host name too long (in @code{gethostname} or | 
|  | 692 | @code{sethostname}; @pxref{Host Identification}). | 
|  | 693 | @end deftypevr | 
|  | 694 |  | 
|  | 695 | @comment errno.h | 
|  | 696 | @comment BSD: Host is down | 
|  | 697 | @deftypevr Macro int EHOSTDOWN | 
|  | 698 | @comment errno 64 @c DO NOT REMOVE | 
|  | 699 | The remote host for a requested network connection is down. | 
|  | 700 | @end deftypevr | 
|  | 701 |  | 
|  | 702 | @comment errno.h | 
|  | 703 | @comment BSD: No route to host | 
|  | 704 | @deftypevr Macro int EHOSTUNREACH | 
|  | 705 | @comment errno 65 @c DO NOT REMOVE | 
|  | 706 | The remote host for a requested network connection is not reachable. | 
|  | 707 | @end deftypevr | 
|  | 708 |  | 
|  | 709 | @comment errno.h | 
|  | 710 | @comment POSIX.1: Directory not empty | 
|  | 711 | @deftypevr Macro int ENOTEMPTY | 
|  | 712 | @comment errno 66 @c DO NOT REMOVE | 
|  | 713 | Directory not empty, where an empty directory was expected.  Typically, | 
|  | 714 | this error occurs when you are trying to delete a directory. | 
|  | 715 | @end deftypevr | 
|  | 716 |  | 
|  | 717 | @comment errno.h | 
|  | 718 | @comment BSD: Too many processes | 
|  | 719 | @deftypevr Macro int EPROCLIM | 
|  | 720 | @comment errno 67 @c DO NOT REMOVE | 
|  | 721 | This means that the per-user limit on new process would be exceeded by | 
|  | 722 | an attempted @code{fork}.  @xref{Limits on Resources}, for details on | 
|  | 723 | the @code{RLIMIT_NPROC} limit. | 
|  | 724 | @end deftypevr | 
|  | 725 |  | 
|  | 726 | @comment errno.h | 
|  | 727 | @comment BSD: Too many users | 
|  | 728 | @deftypevr Macro int EUSERS | 
|  | 729 | @comment errno 68 @c DO NOT REMOVE | 
|  | 730 | The file quota system is confused because there are too many users. | 
|  | 731 | @c This can probably happen in a GNU system when using NFS. | 
|  | 732 | @end deftypevr | 
|  | 733 |  | 
|  | 734 | @comment errno.h | 
|  | 735 | @comment BSD: Disk quota exceeded | 
|  | 736 | @deftypevr Macro int EDQUOT | 
|  | 737 | @comment errno 69 @c DO NOT REMOVE | 
|  | 738 | The user's disk quota was exceeded. | 
|  | 739 | @end deftypevr | 
|  | 740 |  | 
|  | 741 | @comment errno.h | 
|  | 742 | @comment BSD: Stale file handle | 
|  | 743 | @deftypevr Macro int ESTALE | 
|  | 744 | @comment errno 70 @c DO NOT REMOVE | 
|  | 745 | Stale file handle.  This indicates an internal confusion in the | 
|  | 746 | file system which is due to file system rearrangements on the server host | 
|  | 747 | for NFS file systems or corruption in other file systems. | 
|  | 748 | Repairing this condition usually requires unmounting, possibly repairing | 
|  | 749 | and remounting the file system. | 
|  | 750 | @end deftypevr | 
|  | 751 |  | 
|  | 752 | @comment errno.h | 
|  | 753 | @comment BSD: Object is remote | 
|  | 754 | @deftypevr Macro int EREMOTE | 
|  | 755 | @comment errno 71 @c DO NOT REMOVE | 
|  | 756 | An attempt was made to NFS-mount a remote file system with a file name that | 
|  | 757 | already specifies an NFS-mounted file. | 
|  | 758 | (This is an error on some operating systems, but we expect it to work | 
|  | 759 | properly on @gnuhurdsystems{}, making this error code impossible.) | 
|  | 760 | @end deftypevr | 
|  | 761 |  | 
|  | 762 | @comment errno.h | 
|  | 763 | @comment BSD: RPC struct is bad | 
|  | 764 | @deftypevr Macro int EBADRPC | 
|  | 765 | @comment errno 72 @c DO NOT REMOVE | 
|  | 766 | ??? | 
|  | 767 | @end deftypevr | 
|  | 768 |  | 
|  | 769 | @comment errno.h | 
|  | 770 | @comment BSD: RPC version wrong | 
|  | 771 | @deftypevr Macro int ERPCMISMATCH | 
|  | 772 | @comment errno 73 @c DO NOT REMOVE | 
|  | 773 | ??? | 
|  | 774 | @end deftypevr | 
|  | 775 |  | 
|  | 776 | @comment errno.h | 
|  | 777 | @comment BSD: RPC program not available | 
|  | 778 | @deftypevr Macro int EPROGUNAVAIL | 
|  | 779 | @comment errno 74 @c DO NOT REMOVE | 
|  | 780 | ??? | 
|  | 781 | @end deftypevr | 
|  | 782 |  | 
|  | 783 | @comment errno.h | 
|  | 784 | @comment BSD: RPC program version wrong | 
|  | 785 | @deftypevr Macro int EPROGMISMATCH | 
|  | 786 | @comment errno 75 @c DO NOT REMOVE | 
|  | 787 | ??? | 
|  | 788 | @end deftypevr | 
|  | 789 |  | 
|  | 790 | @comment errno.h | 
|  | 791 | @comment BSD: RPC bad procedure for program | 
|  | 792 | @deftypevr Macro int EPROCUNAVAIL | 
|  | 793 | @comment errno 76 @c DO NOT REMOVE | 
|  | 794 | ??? | 
|  | 795 | @end deftypevr | 
|  | 796 |  | 
|  | 797 | @comment errno.h | 
|  | 798 | @comment POSIX.1: No locks available | 
|  | 799 | @deftypevr Macro int ENOLCK | 
|  | 800 | @comment errno 77 @c DO NOT REMOVE | 
|  | 801 | No locks available.  This is used by the file locking facilities; see | 
|  | 802 | @ref{File Locks}.  This error is never generated by @gnuhurdsystems{}, but | 
|  | 803 | it can result from an operation to an NFS server running another | 
|  | 804 | operating system. | 
|  | 805 | @end deftypevr | 
|  | 806 |  | 
|  | 807 | @comment errno.h | 
|  | 808 | @comment BSD: Inappropriate file type or format | 
|  | 809 | @deftypevr Macro int EFTYPE | 
|  | 810 | @comment errno 79 @c DO NOT REMOVE | 
|  | 811 | Inappropriate file type or format.  The file was the wrong type for the | 
|  | 812 | operation, or a data file had the wrong format. | 
|  | 813 |  | 
|  | 814 | On some systems @code{chmod} returns this error if you try to set the | 
|  | 815 | sticky bit on a non-directory file; @pxref{Setting Permissions}. | 
|  | 816 | @end deftypevr | 
|  | 817 |  | 
|  | 818 | @comment errno.h | 
|  | 819 | @comment BSD: Authentication error | 
|  | 820 | @deftypevr Macro int EAUTH | 
|  | 821 | @comment errno 80 @c DO NOT REMOVE | 
|  | 822 | ??? | 
|  | 823 | @end deftypevr | 
|  | 824 |  | 
|  | 825 | @comment errno.h | 
|  | 826 | @comment BSD: Need authenticator | 
|  | 827 | @deftypevr Macro int ENEEDAUTH | 
|  | 828 | @comment errno 81 @c DO NOT REMOVE | 
|  | 829 | ??? | 
|  | 830 | @end deftypevr | 
|  | 831 |  | 
|  | 832 | @comment errno.h | 
|  | 833 | @comment POSIX.1: Function not implemented | 
|  | 834 | @deftypevr Macro int ENOSYS | 
|  | 835 | @comment errno 78 @c DO NOT REMOVE | 
|  | 836 | Function not implemented.  This indicates that the function called is | 
|  | 837 | not implemented at all, either in the C library itself or in the | 
|  | 838 | operating system.  When you get this error, you can be sure that this | 
|  | 839 | particular function will always fail with @code{ENOSYS} unless you | 
|  | 840 | install a new version of the C library or the operating system. | 
|  | 841 | @end deftypevr | 
|  | 842 |  | 
|  | 843 | @comment errno.h | 
|  | 844 | @comment POSIX.1: Not supported | 
|  | 845 | @deftypevr Macro int ENOTSUP | 
|  | 846 | @comment errno 118 @c DO NOT REMOVE | 
|  | 847 | Not supported.  A function returns this error when certain parameter | 
|  | 848 | values are valid, but the functionality they request is not available. | 
|  | 849 | This can mean that the function does not implement a particular command | 
|  | 850 | or option value or flag bit at all.  For functions that operate on some | 
|  | 851 | object given in a parameter, such as a file descriptor or a port, it | 
|  | 852 | might instead mean that only @emph{that specific object} (file | 
|  | 853 | descriptor, port, etc.) is unable to support the other parameters given; | 
|  | 854 | different file descriptors might support different ranges of parameter | 
|  | 855 | values. | 
|  | 856 |  | 
|  | 857 | If the entire function is not available at all in the implementation, | 
|  | 858 | it returns @code{ENOSYS} instead. | 
|  | 859 | @end deftypevr | 
|  | 860 |  | 
|  | 861 | @comment errno.h | 
|  | 862 | @comment ISO: Invalid or incomplete multibyte or wide character | 
|  | 863 | @deftypevr Macro int EILSEQ | 
|  | 864 | @comment errno 106 @c DO NOT REMOVE | 
|  | 865 | While decoding a multibyte character the function came along an invalid | 
|  | 866 | or an incomplete sequence of bytes or the given wide character is invalid. | 
|  | 867 | @end deftypevr | 
|  | 868 |  | 
|  | 869 | @comment errno.h | 
|  | 870 | @comment GNU: Inappropriate operation for background process | 
|  | 871 | @deftypevr Macro int EBACKGROUND | 
|  | 872 | @comment errno 100 @c DO NOT REMOVE | 
|  | 873 | On @gnuhurdsystems{}, servers supporting the @code{term} protocol return | 
|  | 874 | this error for certain operations when the caller is not in the | 
|  | 875 | foreground process group of the terminal.  Users do not usually see this | 
|  | 876 | error because functions such as @code{read} and @code{write} translate | 
|  | 877 | it into a @code{SIGTTIN} or @code{SIGTTOU} signal.  @xref{Job Control}, | 
|  | 878 | for information on process groups and these signals. | 
|  | 879 | @end deftypevr | 
|  | 880 |  | 
|  | 881 | @comment errno.h | 
|  | 882 | @comment GNU: Translator died | 
|  | 883 | @deftypevr Macro int EDIED | 
|  | 884 | @comment errno 101 @c DO NOT REMOVE | 
|  | 885 | On @gnuhurdsystems{}, opening a file returns this error when the file is | 
|  | 886 | translated by a program and the translator program dies while starting | 
|  | 887 | up, before it has connected to the file. | 
|  | 888 | @end deftypevr | 
|  | 889 |  | 
|  | 890 | @comment errno.h | 
|  | 891 | @comment GNU: ? | 
|  | 892 | @deftypevr Macro int ED | 
|  | 893 | @comment errno 102 @c DO NOT REMOVE | 
|  | 894 | The experienced user will know what is wrong. | 
|  | 895 | @c This error code is a joke.  Its perror text is part of the joke. | 
|  | 896 | @c Don't change it. | 
|  | 897 | @end deftypevr | 
|  | 898 |  | 
|  | 899 | @comment errno.h | 
|  | 900 | @comment GNU: You really blew it this time | 
|  | 901 | @deftypevr Macro int EGREGIOUS | 
|  | 902 | @comment errno 103 @c DO NOT REMOVE | 
|  | 903 | You did @strong{what}? | 
|  | 904 | @end deftypevr | 
|  | 905 |  | 
|  | 906 | @comment errno.h | 
|  | 907 | @comment GNU: Computer bought the farm | 
|  | 908 | @deftypevr Macro int EIEIO | 
|  | 909 | @comment errno 104 @c DO NOT REMOVE | 
|  | 910 | Go home and have a glass of warm, dairy-fresh milk. | 
|  | 911 | @end deftypevr | 
|  | 912 |  | 
|  | 913 | @comment errno.h | 
|  | 914 | @comment GNU: Gratuitous error | 
|  | 915 | @deftypevr Macro int EGRATUITOUS | 
|  | 916 | @comment errno 105 @c DO NOT REMOVE | 
|  | 917 | This error code has no purpose. | 
|  | 918 | @end deftypevr | 
|  | 919 |  | 
|  | 920 | @comment errno.h | 
|  | 921 | @comment XOPEN: Bad message | 
|  | 922 | @deftypevr Macro int EBADMSG | 
|  | 923 | @comment errno 107 | 
|  | 924 | @end deftypevr | 
|  | 925 |  | 
|  | 926 | @comment errno.h | 
|  | 927 | @comment XOPEN: Identifier removed | 
|  | 928 | @deftypevr Macro int EIDRM | 
|  | 929 | @comment errno 108 | 
|  | 930 | @end deftypevr | 
|  | 931 |  | 
|  | 932 | @comment errno.h | 
|  | 933 | @comment XOPEN: Multihop attempted | 
|  | 934 | @deftypevr Macro int EMULTIHOP | 
|  | 935 | @comment errno 109 | 
|  | 936 | @end deftypevr | 
|  | 937 |  | 
|  | 938 | @comment errno.h | 
|  | 939 | @comment XOPEN: No data available | 
|  | 940 | @deftypevr Macro int ENODATA | 
|  | 941 | @comment errno 110 | 
|  | 942 | @end deftypevr | 
|  | 943 |  | 
|  | 944 | @comment errno.h | 
|  | 945 | @comment XOPEN: Link has been severed | 
|  | 946 | @deftypevr Macro int ENOLINK | 
|  | 947 | @comment errno 111 | 
|  | 948 | @end deftypevr | 
|  | 949 |  | 
|  | 950 | @comment errno.h | 
|  | 951 | @comment XOPEN: No message of desired type | 
|  | 952 | @deftypevr Macro int ENOMSG | 
|  | 953 | @comment errno 112 | 
|  | 954 | @end deftypevr | 
|  | 955 |  | 
|  | 956 | @comment errno.h | 
|  | 957 | @comment XOPEN: Out of streams resources | 
|  | 958 | @deftypevr Macro int ENOSR | 
|  | 959 | @comment errno 113 | 
|  | 960 | @end deftypevr | 
|  | 961 |  | 
|  | 962 | @comment errno.h | 
|  | 963 | @comment XOPEN: Device not a stream | 
|  | 964 | @deftypevr Macro int ENOSTR | 
|  | 965 | @comment errno 114 | 
|  | 966 | @end deftypevr | 
|  | 967 |  | 
|  | 968 | @comment errno.h | 
|  | 969 | @comment XOPEN: Value too large for defined data type | 
|  | 970 | @deftypevr Macro int EOVERFLOW | 
|  | 971 | @comment errno 115 | 
|  | 972 | @end deftypevr | 
|  | 973 |  | 
|  | 974 | @comment errno.h | 
|  | 975 | @comment XOPEN: Protocol error | 
|  | 976 | @deftypevr Macro int EPROTO | 
|  | 977 | @comment errno 116 | 
|  | 978 | @end deftypevr | 
|  | 979 |  | 
|  | 980 | @comment errno.h | 
|  | 981 | @comment XOPEN: Timer expired | 
|  | 982 | @deftypevr Macro int ETIME | 
|  | 983 | @comment errno 117 | 
|  | 984 | @end deftypevr | 
|  | 985 |  | 
|  | 986 | @comment errno.h | 
|  | 987 | @comment POSIX.1: Operation canceled | 
|  | 988 | @deftypevr Macro int ECANCELED | 
|  | 989 | @comment errno 119 | 
|  | 990 | Operation canceled; an asynchronous operation was canceled before it | 
|  | 991 | completed.  @xref{Asynchronous I/O}.  When you call @code{aio_cancel}, | 
|  | 992 | the normal result is for the operations affected to complete with this | 
|  | 993 | error; @pxref{Cancel AIO Operations}. | 
|  | 994 | @end deftypevr | 
|  | 995 |  | 
|  | 996 |  | 
|  | 997 | @emph{The following error codes are defined by the Linux/i386 kernel. | 
|  | 998 | They are not yet documented.} | 
|  | 999 |  | 
|  | 1000 | @comment errno.h | 
|  | 1001 | @comment Linux???: Interrupted system call should be restarted | 
|  | 1002 | @deftypevr Macro int ERESTART | 
|  | 1003 | @comment errno ???/85 | 
|  | 1004 | @end deftypevr | 
|  | 1005 |  | 
|  | 1006 | @comment errno.h | 
|  | 1007 | @comment Linux???: Channel number out of range | 
|  | 1008 | @deftypevr Macro int ECHRNG | 
|  | 1009 | @comment errno ???/44 | 
|  | 1010 | @end deftypevr | 
|  | 1011 |  | 
|  | 1012 | @comment errno.h | 
|  | 1013 | @comment Obsolete: Level 2 not synchronized | 
|  | 1014 | @deftypevr Macro int EL2NSYNC | 
|  | 1015 | @comment errno ???/45 | 
|  | 1016 | @end deftypevr | 
|  | 1017 |  | 
|  | 1018 | @comment errno.h | 
|  | 1019 | @comment Obsolete: Level 3 halted | 
|  | 1020 | @deftypevr Macro int EL3HLT | 
|  | 1021 | @comment errno ???/46 | 
|  | 1022 | @end deftypevr | 
|  | 1023 |  | 
|  | 1024 | @comment errno.h | 
|  | 1025 | @comment Obsolete: Level 3 reset | 
|  | 1026 | @deftypevr Macro int EL3RST | 
|  | 1027 | @comment errno ???/47 | 
|  | 1028 | @end deftypevr | 
|  | 1029 |  | 
|  | 1030 | @comment errno.h | 
|  | 1031 | @comment Linux???: Link number out of range | 
|  | 1032 | @deftypevr Macro int ELNRNG | 
|  | 1033 | @comment errno ???/48 | 
|  | 1034 | @end deftypevr | 
|  | 1035 |  | 
|  | 1036 | @comment errno.h | 
|  | 1037 | @comment Linux???: Protocol driver not attached | 
|  | 1038 | @deftypevr Macro int EUNATCH | 
|  | 1039 | @comment errno ???/49 | 
|  | 1040 | @end deftypevr | 
|  | 1041 |  | 
|  | 1042 | @comment errno.h | 
|  | 1043 | @comment Linux???: No CSI structure available | 
|  | 1044 | @deftypevr Macro int ENOCSI | 
|  | 1045 | @comment errno ???/50 | 
|  | 1046 | @end deftypevr | 
|  | 1047 |  | 
|  | 1048 | @comment errno.h | 
|  | 1049 | @comment Obsolete: Level 2 halted | 
|  | 1050 | @deftypevr Macro int EL2HLT | 
|  | 1051 | @comment errno ???/51 | 
|  | 1052 | @end deftypevr | 
|  | 1053 |  | 
|  | 1054 | @comment errno.h | 
|  | 1055 | @comment Linux???: Invalid exchange | 
|  | 1056 | @deftypevr Macro int EBADE | 
|  | 1057 | @comment errno ???/52 | 
|  | 1058 | @end deftypevr | 
|  | 1059 |  | 
|  | 1060 | @comment errno.h | 
|  | 1061 | @comment Linux???: Invalid request descriptor | 
|  | 1062 | @deftypevr Macro int EBADR | 
|  | 1063 | @comment errno ???/53 | 
|  | 1064 | @end deftypevr | 
|  | 1065 |  | 
|  | 1066 | @comment errno.h | 
|  | 1067 | @comment Linux???: Exchange full | 
|  | 1068 | @deftypevr Macro int EXFULL | 
|  | 1069 | @comment errno ???/54 | 
|  | 1070 | @end deftypevr | 
|  | 1071 |  | 
|  | 1072 | @comment errno.h | 
|  | 1073 | @comment Linux???: No anode | 
|  | 1074 | @deftypevr Macro int ENOANO | 
|  | 1075 | @comment errno ???/55 | 
|  | 1076 | @end deftypevr | 
|  | 1077 |  | 
|  | 1078 | @comment errno.h | 
|  | 1079 | @comment Linux???: Invalid request code | 
|  | 1080 | @deftypevr Macro int EBADRQC | 
|  | 1081 | @comment errno ???/56 | 
|  | 1082 | @end deftypevr | 
|  | 1083 |  | 
|  | 1084 | @comment errno.h | 
|  | 1085 | @comment Linux???: Invalid slot | 
|  | 1086 | @deftypevr Macro int EBADSLT | 
|  | 1087 | @comment errno ???/57 | 
|  | 1088 | @end deftypevr | 
|  | 1089 |  | 
|  | 1090 | @comment errno.h | 
|  | 1091 | @comment Linux???: File locking deadlock error | 
|  | 1092 | @deftypevr Macro int EDEADLOCK | 
|  | 1093 | @comment errno ???/58 | 
|  | 1094 | @end deftypevr | 
|  | 1095 |  | 
|  | 1096 | @comment errno.h | 
|  | 1097 | @comment Linux???: Bad font file format | 
|  | 1098 | @deftypevr Macro int EBFONT | 
|  | 1099 | @comment errno ???/59 | 
|  | 1100 | @end deftypevr | 
|  | 1101 |  | 
|  | 1102 | @comment errno.h | 
|  | 1103 | @comment Linux???: Machine is not on the network | 
|  | 1104 | @deftypevr Macro int ENONET | 
|  | 1105 | @comment errno ???/64 | 
|  | 1106 | @end deftypevr | 
|  | 1107 |  | 
|  | 1108 | @comment errno.h | 
|  | 1109 | @comment Linux???: Package not installed | 
|  | 1110 | @deftypevr Macro int ENOPKG | 
|  | 1111 | @comment errno ???/65 | 
|  | 1112 | @end deftypevr | 
|  | 1113 |  | 
|  | 1114 | @comment errno.h | 
|  | 1115 | @comment Linux???: Advertise error | 
|  | 1116 | @deftypevr Macro int EADV | 
|  | 1117 | @comment errno ???/68 | 
|  | 1118 | @end deftypevr | 
|  | 1119 |  | 
|  | 1120 | @comment errno.h | 
|  | 1121 | @comment Linux???: Srmount error | 
|  | 1122 | @deftypevr Macro int ESRMNT | 
|  | 1123 | @comment errno ???/69 | 
|  | 1124 | @end deftypevr | 
|  | 1125 |  | 
|  | 1126 | @comment errno.h | 
|  | 1127 | @comment Linux???: Communication error on send | 
|  | 1128 | @deftypevr Macro int ECOMM | 
|  | 1129 | @comment errno ???/70 | 
|  | 1130 | @end deftypevr | 
|  | 1131 |  | 
|  | 1132 | @comment errno.h | 
|  | 1133 | @comment Linux???: RFS specific error | 
|  | 1134 | @deftypevr Macro int EDOTDOT | 
|  | 1135 | @comment errno ???/73 | 
|  | 1136 | @end deftypevr | 
|  | 1137 |  | 
|  | 1138 | @comment errno.h | 
|  | 1139 | @comment Linux???: Name not unique on network | 
|  | 1140 | @deftypevr Macro int ENOTUNIQ | 
|  | 1141 | @comment errno ???/76 | 
|  | 1142 | @end deftypevr | 
|  | 1143 |  | 
|  | 1144 | @comment errno.h | 
|  | 1145 | @comment Linux???: File descriptor in bad state | 
|  | 1146 | @deftypevr Macro int EBADFD | 
|  | 1147 | @comment errno ???/77 | 
|  | 1148 | @end deftypevr | 
|  | 1149 |  | 
|  | 1150 | @comment errno.h | 
|  | 1151 | @comment Linux???: Remote address changed | 
|  | 1152 | @deftypevr Macro int EREMCHG | 
|  | 1153 | @comment errno ???/78 | 
|  | 1154 | @end deftypevr | 
|  | 1155 |  | 
|  | 1156 | @comment errno.h | 
|  | 1157 | @comment Linux???: Can not access a needed shared library | 
|  | 1158 | @deftypevr Macro int ELIBACC | 
|  | 1159 | @comment errno ???/79 | 
|  | 1160 | @end deftypevr | 
|  | 1161 |  | 
|  | 1162 | @comment errno.h | 
|  | 1163 | @comment Linux???: Accessing a corrupted shared library | 
|  | 1164 | @deftypevr Macro int ELIBBAD | 
|  | 1165 | @comment errno ???/80 | 
|  | 1166 | @end deftypevr | 
|  | 1167 |  | 
|  | 1168 | @comment errno.h | 
|  | 1169 | @comment Linux???: .lib section in a.out corrupted | 
|  | 1170 | @deftypevr Macro int ELIBSCN | 
|  | 1171 | @comment errno ???/81 | 
|  | 1172 | @end deftypevr | 
|  | 1173 |  | 
|  | 1174 | @comment errno.h | 
|  | 1175 | @comment Linux???: Attempting to link in too many shared libraries | 
|  | 1176 | @deftypevr Macro int ELIBMAX | 
|  | 1177 | @comment errno ???/82 | 
|  | 1178 | @end deftypevr | 
|  | 1179 |  | 
|  | 1180 | @comment errno.h | 
|  | 1181 | @comment Linux???: Cannot exec a shared library directly | 
|  | 1182 | @deftypevr Macro int ELIBEXEC | 
|  | 1183 | @comment errno ???/83 | 
|  | 1184 | @end deftypevr | 
|  | 1185 |  | 
|  | 1186 | @comment errno.h | 
|  | 1187 | @comment Linux???: Streams pipe error | 
|  | 1188 | @deftypevr Macro int ESTRPIPE | 
|  | 1189 | @comment errno ???/86 | 
|  | 1190 | @end deftypevr | 
|  | 1191 |  | 
|  | 1192 | @comment errno.h | 
|  | 1193 | @comment Linux???: Structure needs cleaning | 
|  | 1194 | @deftypevr Macro int EUCLEAN | 
|  | 1195 | @comment errno ???/117 | 
|  | 1196 | @end deftypevr | 
|  | 1197 |  | 
|  | 1198 | @comment errno.h | 
|  | 1199 | @comment Linux???: Not a XENIX named type file | 
|  | 1200 | @deftypevr Macro int ENOTNAM | 
|  | 1201 | @comment errno ???/118 | 
|  | 1202 | @end deftypevr | 
|  | 1203 |  | 
|  | 1204 | @comment errno.h | 
|  | 1205 | @comment Linux???: No XENIX semaphores available | 
|  | 1206 | @deftypevr Macro int ENAVAIL | 
|  | 1207 | @comment errno ???/119 | 
|  | 1208 | @end deftypevr | 
|  | 1209 |  | 
|  | 1210 | @comment errno.h | 
|  | 1211 | @comment Linux???: Is a named type file | 
|  | 1212 | @deftypevr Macro int EISNAM | 
|  | 1213 | @comment errno ???/120 | 
|  | 1214 | @end deftypevr | 
|  | 1215 |  | 
|  | 1216 | @comment errno.h | 
|  | 1217 | @comment Linux???: Remote I/O error | 
|  | 1218 | @deftypevr Macro int EREMOTEIO | 
|  | 1219 | @comment errno ???/121 | 
|  | 1220 | @end deftypevr | 
|  | 1221 |  | 
|  | 1222 | @comment errno.h | 
|  | 1223 | @comment Linux???: No medium found | 
|  | 1224 | @deftypevr Macro int ENOMEDIUM | 
|  | 1225 | @comment errno ???/??? | 
|  | 1226 | @end deftypevr | 
|  | 1227 |  | 
|  | 1228 | @comment errno.h | 
|  | 1229 | @comment Linux???: Wrong medium type | 
|  | 1230 | @deftypevr Macro int EMEDIUMTYPE | 
|  | 1231 | @comment errno ???/??? | 
|  | 1232 | @end deftypevr | 
|  | 1233 |  | 
|  | 1234 | @comment errno.h | 
|  | 1235 | @comment Linux: Required key not available | 
|  | 1236 | @deftypevr Macro int ENOKEY | 
|  | 1237 | @comment errno ???/??? | 
|  | 1238 | @end deftypevr | 
|  | 1239 |  | 
|  | 1240 | @comment errno.h | 
|  | 1241 | @comment Linux: Key has expired | 
|  | 1242 | @deftypevr Macro int EKEYEXPIRED | 
|  | 1243 | @comment errno ???/??? | 
|  | 1244 | @end deftypevr | 
|  | 1245 |  | 
|  | 1246 | @comment errno.h | 
|  | 1247 | @comment Linux: Key has been revoked | 
|  | 1248 | @deftypevr Macro int EKEYREVOKED | 
|  | 1249 | @comment errno ???/??? | 
|  | 1250 | @end deftypevr | 
|  | 1251 |  | 
|  | 1252 | @comment errno.h | 
|  | 1253 | @comment Linux: Key was rejected by service | 
|  | 1254 | @deftypevr Macro int EKEYREJECTED | 
|  | 1255 | @comment errno ???/??? | 
|  | 1256 | @end deftypevr | 
|  | 1257 |  | 
|  | 1258 | @comment errno.h | 
|  | 1259 | @comment Linux: Owner died | 
|  | 1260 | @deftypevr Macro int EOWNERDEAD | 
|  | 1261 | @comment errno ???/??? | 
|  | 1262 | @end deftypevr | 
|  | 1263 |  | 
|  | 1264 | @comment errno.h | 
|  | 1265 | @comment Linux: State not recoverable | 
|  | 1266 | @deftypevr Macro int ENOTRECOVERABLE | 
|  | 1267 | @comment errno ???/??? | 
|  | 1268 | @end deftypevr | 
|  | 1269 |  | 
|  | 1270 | @comment errno.h | 
|  | 1271 | @comment Linux: Operation not possible due to RF-kill | 
|  | 1272 | @deftypevr Macro int ERFKILL | 
|  | 1273 | @comment errno ???/??? | 
|  | 1274 | @end deftypevr | 
|  | 1275 |  | 
|  | 1276 | @comment errno.h | 
|  | 1277 | @comment Linux: Memory page has hardware error | 
|  | 1278 | @deftypevr Macro int EHWPOISON | 
|  | 1279 | @comment errno ???/??? | 
|  | 1280 | @end deftypevr | 
|  | 1281 |  | 
|  | 1282 | @node Error Messages,  , Error Codes, Error Reporting | 
|  | 1283 | @section Error Messages | 
|  | 1284 |  | 
|  | 1285 | The library has functions and variables designed to make it easy for | 
|  | 1286 | your program to report informative error messages in the customary | 
|  | 1287 | format about the failure of a library call.  The functions | 
|  | 1288 | @code{strerror} and @code{perror} give you the standard error message | 
|  | 1289 | for a given error code; the variable | 
|  | 1290 | @w{@code{program_invocation_short_name}} gives you convenient access to the | 
|  | 1291 | name of the program that encountered the error. | 
|  | 1292 |  | 
|  | 1293 | @comment string.h | 
|  | 1294 | @comment ISO | 
|  | 1295 | @deftypefun {char *} strerror (int @var{errnum}) | 
|  | 1296 | @safety{@prelim{}@mtunsafe{@mtasurace{:strerror}}@asunsafe{@ascuheap{} @ascuintl{}}@acunsafe{@acsmem{}}} | 
|  | 1297 | @c Calls strerror_r with a static buffer allocated with malloc on the | 
|  | 1298 | @c first use. | 
|  | 1299 | The @code{strerror} function maps the error code (@pxref{Checking for | 
|  | 1300 | Errors}) specified by the @var{errnum} argument to a descriptive error | 
|  | 1301 | message string.  The return value is a pointer to this string. | 
|  | 1302 |  | 
|  | 1303 | The value @var{errnum} normally comes from the variable @code{errno}. | 
|  | 1304 |  | 
|  | 1305 | You should not modify the string returned by @code{strerror}.  Also, if | 
|  | 1306 | you make subsequent calls to @code{strerror}, the string might be | 
|  | 1307 | overwritten.  (But it's guaranteed that no library function ever calls | 
|  | 1308 | @code{strerror} behind your back.) | 
|  | 1309 |  | 
|  | 1310 | The function @code{strerror} is declared in @file{string.h}. | 
|  | 1311 | @end deftypefun | 
|  | 1312 |  | 
|  | 1313 | @comment string.h | 
|  | 1314 | @comment GNU | 
|  | 1315 | @deftypefun {char *} strerror_r (int @var{errnum}, char *@var{buf}, size_t @var{n}) | 
|  | 1316 | @safety{@prelim{}@mtsafe{}@asunsafe{@ascuintl{}}@acunsafe{}} | 
|  | 1317 | The @code{strerror_r} function works like @code{strerror} but instead of | 
|  | 1318 | returning the error message in a statically allocated buffer shared by | 
|  | 1319 | all threads in the process, it returns a private copy for the | 
|  | 1320 | thread.  This might be either some permanent global data or a message | 
|  | 1321 | string in the user supplied buffer starting at @var{buf} with the | 
|  | 1322 | length of @var{n} bytes. | 
|  | 1323 |  | 
|  | 1324 | At most @var{n} characters are written (including the NUL byte) so it is | 
|  | 1325 | up to the user to select the buffer large enough. | 
|  | 1326 |  | 
|  | 1327 | This function should always be used in multi-threaded programs since | 
|  | 1328 | there is no way to guarantee the string returned by @code{strerror} | 
|  | 1329 | really belongs to the last call of the current thread. | 
|  | 1330 |  | 
|  | 1331 | This function @code{strerror_r} is a GNU extension and it is declared in | 
|  | 1332 | @file{string.h}. | 
|  | 1333 | @end deftypefun | 
|  | 1334 |  | 
|  | 1335 | @comment stdio.h | 
|  | 1336 | @comment ISO | 
|  | 1337 | @deftypefun void perror (const char *@var{message}) | 
|  | 1338 | @safety{@prelim{}@mtsafe{@mtasurace{:stderr}}@asunsafe{@asucorrupt{} @ascuintl{} @ascuheap{} @asulock{}}@acunsafe{@acucorrupt{} @aculock{} @acsmem{} @acsfd{}}} | 
|  | 1339 | @c Besides strerror_r's and some of fprintf's issues, if stderr is not | 
|  | 1340 | @c oriented yet, create a new stream with a dup of stderr's fd and write | 
|  | 1341 | @c to that instead of stderr, to avoid orienting it. | 
|  | 1342 | This function prints an error message to the stream @code{stderr}; | 
|  | 1343 | see @ref{Standard Streams}.  The orientation of @code{stderr} is not | 
|  | 1344 | changed. | 
|  | 1345 |  | 
|  | 1346 | If you call @code{perror} with a @var{message} that is either a null | 
|  | 1347 | pointer or an empty string, @code{perror} just prints the error message | 
|  | 1348 | corresponding to @code{errno}, adding a trailing newline. | 
|  | 1349 |  | 
|  | 1350 | If you supply a non-null @var{message} argument, then @code{perror} | 
|  | 1351 | prefixes its output with this string.  It adds a colon and a space | 
|  | 1352 | character to separate the @var{message} from the error string corresponding | 
|  | 1353 | to @code{errno}. | 
|  | 1354 |  | 
|  | 1355 | The function @code{perror} is declared in @file{stdio.h}. | 
|  | 1356 | @end deftypefun | 
|  | 1357 |  | 
|  | 1358 | @code{strerror} and @code{perror} produce the exact same message for any | 
|  | 1359 | given error code; the precise text varies from system to system.  With | 
|  | 1360 | @theglibc{}, the messages are fairly short; there are no multi-line | 
|  | 1361 | messages or embedded newlines.  Each error message begins with a capital | 
|  | 1362 | letter and does not include any terminating punctuation. | 
|  | 1363 |  | 
|  | 1364 | @cindex program name | 
|  | 1365 | @cindex name of running program | 
|  | 1366 | Many programs that don't read input from the terminal are designed to | 
|  | 1367 | exit if any system call fails.  By convention, the error message from | 
|  | 1368 | such a program should start with the program's name, sans directories. | 
|  | 1369 | You can find that name in the variable | 
|  | 1370 | @code{program_invocation_short_name}; the full file name is stored the | 
|  | 1371 | variable @code{program_invocation_name}. | 
|  | 1372 |  | 
|  | 1373 | @comment errno.h | 
|  | 1374 | @comment GNU | 
|  | 1375 | @deftypevar {char *} program_invocation_name | 
|  | 1376 | This variable's value is the name that was used to invoke the program | 
|  | 1377 | running in the current process.  It is the same as @code{argv[0]}.  Note | 
|  | 1378 | that this is not necessarily a useful file name; often it contains no | 
|  | 1379 | directory names.  @xref{Program Arguments}. | 
|  | 1380 |  | 
|  | 1381 | This variable is a GNU extension and is declared in @file{errno.h}. | 
|  | 1382 | @end deftypevar | 
|  | 1383 |  | 
|  | 1384 | @comment errno.h | 
|  | 1385 | @comment GNU | 
|  | 1386 | @deftypevar {char *} program_invocation_short_name | 
|  | 1387 | This variable's value is the name that was used to invoke the program | 
|  | 1388 | running in the current process, with directory names removed.  (That is | 
|  | 1389 | to say, it is the same as @code{program_invocation_name} minus | 
|  | 1390 | everything up to the last slash, if any.) | 
|  | 1391 |  | 
|  | 1392 | This variable is a GNU extension and is declared in @file{errno.h}. | 
|  | 1393 | @end deftypevar | 
|  | 1394 |  | 
|  | 1395 | The library initialization code sets up both of these variables before | 
|  | 1396 | calling @code{main}. | 
|  | 1397 |  | 
|  | 1398 | @strong{Portability Note:} If you want your program to work with | 
|  | 1399 | non-GNU libraries, you must save the value of @code{argv[0]} in | 
|  | 1400 | @code{main}, and then strip off the directory names yourself.  We | 
|  | 1401 | added these extensions to make it possible to write self-contained | 
|  | 1402 | error-reporting subroutines that require no explicit cooperation from | 
|  | 1403 | @code{main}. | 
|  | 1404 |  | 
|  | 1405 | Here is an example showing how to handle failure to open a file | 
|  | 1406 | correctly.  The function @code{open_sesame} tries to open the named file | 
|  | 1407 | for reading and returns a stream if successful.  The @code{fopen} | 
|  | 1408 | library function returns a null pointer if it couldn't open the file for | 
|  | 1409 | some reason.  In that situation, @code{open_sesame} constructs an | 
|  | 1410 | appropriate error message using the @code{strerror} function, and | 
|  | 1411 | terminates the program.  If we were going to make some other library | 
|  | 1412 | calls before passing the error code to @code{strerror}, we'd have to | 
|  | 1413 | save it in a local variable instead, because those other library | 
|  | 1414 | functions might overwrite @code{errno} in the meantime. | 
|  | 1415 |  | 
|  | 1416 | @smallexample | 
|  | 1417 | #define _GNU_SOURCE | 
|  | 1418 |  | 
|  | 1419 | #include <errno.h> | 
|  | 1420 | #include <stdio.h> | 
|  | 1421 | #include <stdlib.h> | 
|  | 1422 | #include <string.h> | 
|  | 1423 |  | 
|  | 1424 | FILE * | 
|  | 1425 | open_sesame (char *name) | 
|  | 1426 | @{ | 
|  | 1427 | FILE *stream; | 
|  | 1428 |  | 
|  | 1429 | errno = 0; | 
|  | 1430 | stream = fopen (name, "r"); | 
|  | 1431 | if (stream == NULL) | 
|  | 1432 | @{ | 
|  | 1433 | fprintf (stderr, "%s: Couldn't open file %s; %s\n", | 
|  | 1434 | program_invocation_short_name, name, strerror (errno)); | 
|  | 1435 | exit (EXIT_FAILURE); | 
|  | 1436 | @} | 
|  | 1437 | else | 
|  | 1438 | return stream; | 
|  | 1439 | @} | 
|  | 1440 | @end smallexample | 
|  | 1441 |  | 
|  | 1442 | Using @code{perror} has the advantage that the function is portable and | 
|  | 1443 | available on all systems implementing @w{ISO C}.  But often the text | 
|  | 1444 | @code{perror} generates is not what is wanted and there is no way to | 
|  | 1445 | extend or change what @code{perror} does.  The GNU coding standard, for | 
|  | 1446 | instance, requires error messages to be preceded by the program name and | 
|  | 1447 | programs which read some input files should provide information | 
|  | 1448 | about the input file name and the line number in case an error is | 
|  | 1449 | encountered while reading the file.  For these occasions there are two | 
|  | 1450 | functions available which are widely used throughout the GNU project. | 
|  | 1451 | These functions are declared in @file{error.h}. | 
|  | 1452 |  | 
|  | 1453 | @comment error.h | 
|  | 1454 | @comment GNU | 
|  | 1455 | @deftypefun void error (int @var{status}, int @var{errnum}, const char *@var{format}, @dots{}) | 
|  | 1456 | @safety{@prelim{}@mtsafe{@mtslocale{}}@asunsafe{@asucorrupt{} @asuheap{} @asuintl{}}@acsafe{}} | 
|  | 1457 | @c Cancellation is disabled throughout the execution.  It flushes stdout | 
|  | 1458 | @c and then holds a lock on stderr while printing the program name and | 
|  | 1459 | @c then running error_tail.  The non-wide case just runs vfprintf; the | 
|  | 1460 | @c wide case converts the message to an alloca/malloc-allocated buffer | 
|  | 1461 | @c with mbsrtowcs, then prints it with vfwprintf.  Afterwards, | 
|  | 1462 | @c print_errno_message calls strerror_r and fxprintf. | 
|  | 1463 | The @code{error} function can be used to report general problems during | 
|  | 1464 | program execution.  The @var{format} argument is a format string just | 
|  | 1465 | like those given to the @code{printf} family of functions.  The | 
|  | 1466 | arguments required for the format can follow the @var{format} parameter. | 
|  | 1467 | Just like @code{perror}, @code{error} also can report an error code in | 
|  | 1468 | textual form.  But unlike @code{perror} the error value is explicitly | 
|  | 1469 | passed to the function in the @var{errnum} parameter.  This eliminates | 
|  | 1470 | the problem mentioned above that the error reporting function must be | 
|  | 1471 | called immediately after the function causing the error since otherwise | 
|  | 1472 | @code{errno} might have a different value. | 
|  | 1473 |  | 
|  | 1474 | The @code{error} prints first the program name.  If the application | 
|  | 1475 | defined a global variable @code{error_print_progname} and points it to a | 
|  | 1476 | function this function will be called to print the program name. | 
|  | 1477 | Otherwise the string from the global variable @code{program_name} is | 
|  | 1478 | used.  The program name is followed by a colon and a space which in turn | 
|  | 1479 | is followed by the output produced by the format string.  If the | 
|  | 1480 | @var{errnum} parameter is non-zero the format string output is followed | 
|  | 1481 | by a colon and a space, followed by the error message for the error code | 
|  | 1482 | @var{errnum}.  In any case is the output terminated with a newline. | 
|  | 1483 |  | 
|  | 1484 | The output is directed to the @code{stderr} stream.  If the | 
|  | 1485 | @code{stderr} wasn't oriented before the call it will be narrow-oriented | 
|  | 1486 | afterwards. | 
|  | 1487 |  | 
|  | 1488 | The function will return unless the @var{status} parameter has a | 
|  | 1489 | non-zero value.  In this case the function will call @code{exit} with | 
|  | 1490 | the @var{status} value for its parameter and therefore never return.  If | 
|  | 1491 | @code{error} returns the global variable @code{error_message_count} is | 
|  | 1492 | incremented by one to keep track of the number of errors reported. | 
|  | 1493 | @end deftypefun | 
|  | 1494 |  | 
|  | 1495 | @comment error.h | 
|  | 1496 | @comment GNU | 
|  | 1497 | @deftypefun void error_at_line (int @var{status}, int @var{errnum}, const char *@var{fname}, unsigned int @var{lineno}, const char *@var{format}, @dots{}) | 
|  | 1498 | @safety{@prelim{}@mtunsafe{@mtasurace{:error_at_line/error_one_per_line} @mtslocale{}}@asunsafe{@asucorrupt{} @asuheap{} @asuintl{}}@acunsafe{@acucorrupt{/error_one_per_line}}} | 
|  | 1499 | @c The error_one_per_line variable is accessed (without any form of | 
|  | 1500 | @c synchronization, but since it's an int used once, it should be safe | 
|  | 1501 | @c enough) and, if this mode is enabled, static variables used to hold | 
|  | 1502 | @c the last printed file name and line number are accessed and modified | 
|  | 1503 | @c without synchronization; the update is not atomic and it occurs | 
|  | 1504 | @c before disabling cancellation, so it can be interrupted after only | 
|  | 1505 | @c one of the two variables is modified.  After that, it's very much | 
|  | 1506 | @c like error. | 
|  | 1507 |  | 
|  | 1508 | The @code{error_at_line} function is very similar to the @code{error} | 
|  | 1509 | function.  The only difference are the additional parameters @var{fname} | 
|  | 1510 | and @var{lineno}.  The handling of the other parameters is identical to | 
|  | 1511 | that of @code{error} except that between the program name and the string | 
|  | 1512 | generated by the format string additional text is inserted. | 
|  | 1513 |  | 
|  | 1514 | Directly following the program name a colon, followed by the file name | 
|  | 1515 | pointer to by @var{fname}, another colon, and a value of @var{lineno} is | 
|  | 1516 | printed. | 
|  | 1517 |  | 
|  | 1518 | This additional output of course is meant to be used to locate an error | 
|  | 1519 | in an input file (like a programming language source code file etc). | 
|  | 1520 |  | 
|  | 1521 | If the global variable @code{error_one_per_line} is set to a non-zero | 
|  | 1522 | value @code{error_at_line} will avoid printing consecutive messages for | 
|  | 1523 | the same file and line.  Repetition which are not directly following | 
|  | 1524 | each other are not caught. | 
|  | 1525 |  | 
|  | 1526 | Just like @code{error} this function only returned if @var{status} is | 
|  | 1527 | zero.  Otherwise @code{exit} is called with the non-zero value.  If | 
|  | 1528 | @code{error} returns the global variable @code{error_message_count} is | 
|  | 1529 | incremented by one to keep track of the number of errors reported. | 
|  | 1530 | @end deftypefun | 
|  | 1531 |  | 
|  | 1532 | As mentioned above the @code{error} and @code{error_at_line} functions | 
|  | 1533 | can be customized by defining a variable named | 
|  | 1534 | @code{error_print_progname}. | 
|  | 1535 |  | 
|  | 1536 | @comment error.h | 
|  | 1537 | @comment GNU | 
|  | 1538 | @deftypevar {void (*error_print_progname)} (void) | 
|  | 1539 | If the @code{error_print_progname} variable is defined to a non-zero | 
|  | 1540 | value the function pointed to is called by @code{error} or | 
|  | 1541 | @code{error_at_line}.  It is expected to print the program name or do | 
|  | 1542 | something similarly useful. | 
|  | 1543 |  | 
|  | 1544 | The function is expected to be print to the @code{stderr} stream and | 
|  | 1545 | must be able to handle whatever orientation the stream has. | 
|  | 1546 |  | 
|  | 1547 | The variable is global and shared by all threads. | 
|  | 1548 | @end deftypevar | 
|  | 1549 |  | 
|  | 1550 | @comment error.h | 
|  | 1551 | @comment GNU | 
|  | 1552 | @deftypevar {unsigned int} error_message_count | 
|  | 1553 | The @code{error_message_count} variable is incremented whenever one of | 
|  | 1554 | the functions @code{error} or @code{error_at_line} returns.  The | 
|  | 1555 | variable is global and shared by all threads. | 
|  | 1556 | @end deftypevar | 
|  | 1557 |  | 
|  | 1558 | @comment error.h | 
|  | 1559 | @comment GNU | 
|  | 1560 | @deftypevar int error_one_per_line | 
|  | 1561 | The @code{error_one_per_line} variable influences only | 
|  | 1562 | @code{error_at_line}.  Normally the @code{error_at_line} function | 
|  | 1563 | creates output for every invocation.  If @code{error_one_per_line} is | 
|  | 1564 | set to a non-zero value @code{error_at_line} keeps track of the last | 
|  | 1565 | file name and line number for which an error was reported and avoid | 
|  | 1566 | directly following messages for the same file and line.  This variable | 
|  | 1567 | is global and shared by all threads. | 
|  | 1568 | @end deftypevar | 
|  | 1569 |  | 
|  | 1570 | @noindent | 
|  | 1571 | A program which read some input file and reports errors in it could look | 
|  | 1572 | like this: | 
|  | 1573 |  | 
|  | 1574 | @smallexample | 
|  | 1575 | @{ | 
|  | 1576 | char *line = NULL; | 
|  | 1577 | size_t len = 0; | 
|  | 1578 | unsigned int lineno = 0; | 
|  | 1579 |  | 
|  | 1580 | error_message_count = 0; | 
|  | 1581 | while (! feof_unlocked (fp)) | 
|  | 1582 | @{ | 
|  | 1583 | ssize_t n = getline (&line, &len, fp); | 
|  | 1584 | if (n <= 0) | 
|  | 1585 | /* @r{End of file or error.}  */ | 
|  | 1586 | break; | 
|  | 1587 | ++lineno; | 
|  | 1588 |  | 
|  | 1589 | /* @r{Process the line.}  */ | 
|  | 1590 | @dots{} | 
|  | 1591 |  | 
|  | 1592 | if (@r{Detect error in line}) | 
|  | 1593 | error_at_line (0, errval, filename, lineno, | 
|  | 1594 | "some error text %s", some_variable); | 
|  | 1595 | @} | 
|  | 1596 |  | 
|  | 1597 | if (error_message_count != 0) | 
|  | 1598 | error (EXIT_FAILURE, 0, "%u errors found", error_message_count); | 
|  | 1599 | @} | 
|  | 1600 | @end smallexample | 
|  | 1601 |  | 
|  | 1602 | @code{error} and @code{error_at_line} are clearly the functions of | 
|  | 1603 | choice and enable the programmer to write applications which follow the | 
|  | 1604 | GNU coding standard.  @Theglibc{} additionally contains functions which | 
|  | 1605 | are used in BSD for the same purpose.  These functions are declared in | 
|  | 1606 | @file{err.h}.  It is generally advised to not use these functions.  They | 
|  | 1607 | are included only for compatibility. | 
|  | 1608 |  | 
|  | 1609 | @comment err.h | 
|  | 1610 | @comment BSD | 
|  | 1611 | @deftypefun void warn (const char *@var{format}, @dots{}) | 
|  | 1612 | @safety{@prelim{}@mtsafe{@mtslocale{}}@asunsafe{@asucorrupt{} @ascuheap{} @ascuintl{}}@acunsafe{@acucorrupt{} @aculock{} @acsmem{}}} | 
|  | 1613 | @c Just calls vwarn with the va_list. | 
|  | 1614 | The @code{warn} function is roughly equivalent to a call like | 
|  | 1615 | @smallexample | 
|  | 1616 | error (0, errno, format, @r{the parameters}) | 
|  | 1617 | @end smallexample | 
|  | 1618 | @noindent | 
|  | 1619 | except that the global variables @code{error} respects and modifies | 
|  | 1620 | are not used. | 
|  | 1621 | @end deftypefun | 
|  | 1622 |  | 
|  | 1623 | @comment err.h | 
|  | 1624 | @comment BSD | 
|  | 1625 | @deftypefun void vwarn (const char *@var{format}, va_list @var{ap}) | 
|  | 1626 | @safety{@prelim{}@mtsafe{@mtslocale{}}@asunsafe{@asucorrupt{} @ascuheap{} @ascuintl{}}@acunsafe{@acucorrupt{} @aculock{} @acsmem{}}} | 
|  | 1627 | @c While holding stderr's recursive lock, it prints the programname, the | 
|  | 1628 | @c given message, and the error string with fw?printf's %m.  When the | 
|  | 1629 | @c stream is wide, convert_and_print converts the format string to an | 
|  | 1630 | @c alloca/malloc-created buffer using mbsrtowcs and then calls fwprintf. | 
|  | 1631 | The @code{vwarn} function is just like @code{warn} except that the | 
|  | 1632 | parameters for the handling of the format string @var{format} are passed | 
|  | 1633 | in as a value of type @code{va_list}. | 
|  | 1634 | @end deftypefun | 
|  | 1635 |  | 
|  | 1636 | @comment err.h | 
|  | 1637 | @comment BSD | 
|  | 1638 | @deftypefun void warnx (const char *@var{format}, @dots{}) | 
|  | 1639 | @safety{@prelim{}@mtsafe{@mtslocale{}}@asunsafe{@asucorrupt{} @ascuheap{}}@acunsafe{@acucorrupt{} @aculock{} @acsmem{}}} | 
|  | 1640 | @c Same as warn, but without the strerror translation issues. | 
|  | 1641 | The @code{warnx} function is roughly equivalent to a call like | 
|  | 1642 | @smallexample | 
|  | 1643 | error (0, 0, format, @r{the parameters}) | 
|  | 1644 | @end smallexample | 
|  | 1645 | @noindent | 
|  | 1646 | except that the global variables @code{error} respects and modifies | 
|  | 1647 | are not used.  The difference to @code{warn} is that no error number | 
|  | 1648 | string is printed. | 
|  | 1649 | @end deftypefun | 
|  | 1650 |  | 
|  | 1651 | @comment err.h | 
|  | 1652 | @comment BSD | 
|  | 1653 | @deftypefun void vwarnx (const char *@var{format}, va_list @var{ap}) | 
|  | 1654 | @safety{@prelim{}@mtsafe{@mtslocale{}}@asunsafe{@asucorrupt{} @ascuheap{}}@acunsafe{@acucorrupt{} @aculock{} @acsmem{}}} | 
|  | 1655 | @c Same as vwarn, but without the strerror translation issues. | 
|  | 1656 | The @code{vwarnx} function is just like @code{warnx} except that the | 
|  | 1657 | parameters for the handling of the format string @var{format} are passed | 
|  | 1658 | in as a value of type @code{va_list}. | 
|  | 1659 | @end deftypefun | 
|  | 1660 |  | 
|  | 1661 | @comment err.h | 
|  | 1662 | @comment BSD | 
|  | 1663 | @deftypefun void err (int @var{status}, const char *@var{format}, @dots{}) | 
|  | 1664 | @safety{@prelim{}@mtsafe{@mtslocale{}}@asunsafe{@asucorrupt{} @ascuheap{} @ascuintl{}}@acunsafe{@acucorrupt{} @aculock{} @acsmem{}}} | 
|  | 1665 | @c Same as warn followed by exit. | 
|  | 1666 | The @code{err} function is roughly equivalent to a call like | 
|  | 1667 | @smallexample | 
|  | 1668 | error (status, errno, format, @r{the parameters}) | 
|  | 1669 | @end smallexample | 
|  | 1670 | @noindent | 
|  | 1671 | except that the global variables @code{error} respects and modifies | 
|  | 1672 | are not used and that the program is exited even if @var{status} is zero. | 
|  | 1673 | @end deftypefun | 
|  | 1674 |  | 
|  | 1675 | @comment err.h | 
|  | 1676 | @comment BSD | 
|  | 1677 | @deftypefun void verr (int @var{status}, const char *@var{format}, va_list @var{ap}) | 
|  | 1678 | @safety{@prelim{}@mtsafe{@mtslocale{}}@asunsafe{@asucorrupt{} @ascuheap{} @ascuintl{}}@acunsafe{@acucorrupt{} @aculock{} @acsmem{}}} | 
|  | 1679 | @c Same as vwarn followed by exit. | 
|  | 1680 | The @code{verr} function is just like @code{err} except that the | 
|  | 1681 | parameters for the handling of the format string @var{format} are passed | 
|  | 1682 | in as a value of type @code{va_list}. | 
|  | 1683 | @end deftypefun | 
|  | 1684 |  | 
|  | 1685 | @comment err.h | 
|  | 1686 | @comment BSD | 
|  | 1687 | @deftypefun void errx (int @var{status}, const char *@var{format}, @dots{}) | 
|  | 1688 | @safety{@prelim{}@mtsafe{@mtslocale{}}@asunsafe{@asucorrupt{} @ascuheap{}}@acunsafe{@acucorrupt{} @aculock{} @acsmem{}}} | 
|  | 1689 | @c Same as warnx followed by exit. | 
|  | 1690 | The @code{errx} function is roughly equivalent to a call like | 
|  | 1691 | @smallexample | 
|  | 1692 | error (status, 0, format, @r{the parameters}) | 
|  | 1693 | @end smallexample | 
|  | 1694 | @noindent | 
|  | 1695 | except that the global variables @code{error} respects and modifies | 
|  | 1696 | are not used and that the program is exited even if @var{status} | 
|  | 1697 | is zero.  The difference to @code{err} is that no error number | 
|  | 1698 | string is printed. | 
|  | 1699 | @end deftypefun | 
|  | 1700 |  | 
|  | 1701 | @comment err.h | 
|  | 1702 | @comment BSD | 
|  | 1703 | @deftypefun void verrx (int @var{status}, const char *@var{format}, va_list @var{ap}) | 
|  | 1704 | @safety{@prelim{}@mtsafe{@mtslocale{}}@asunsafe{@asucorrupt{} @ascuheap{}}@acunsafe{@acucorrupt{} @aculock{} @acsmem{}}} | 
|  | 1705 | @c Same as vwarnx followed by exit. | 
|  | 1706 | The @code{verrx} function is just like @code{errx} except that the | 
|  | 1707 | parameters for the handling of the format string @var{format} are passed | 
|  | 1708 | in as a value of type @code{va_list}. | 
|  | 1709 | @end deftypefun |