]> git.ipfire.org Git - thirdparty/man-pages.git/blame - man3/errno.3
memfd_create.2: memfd_create() now has a glibc wrapper; remove mention of syscall(2)
[thirdparty/man-pages.git] / man3 / errno.3
CommitLineData
fea681da
MK
1.\" Copyright (c) 1996 Andries Brouwer (aeb@cwi.nl)
2.\"
1dd72f9c 3.\" %%%LICENSE_START(GPLv2+_DOC_FULL)
fea681da
MK
4.\" This is free documentation; you can redistribute it and/or
5.\" modify it under the terms of the GNU General Public License as
6.\" published by the Free Software Foundation; either version 2 of
7.\" the License, or (at your option) any later version.
8.\"
9.\" The GNU General Public License's references to "object code"
10.\" and "executables" are to be interpreted as the output of any
11.\" document formatting or typesetting system, including
12.\" intermediate and printed output.
13.\"
14.\" This manual is distributed in the hope that it will be useful,
15.\" but WITHOUT ANY WARRANTY; without even the implied warranty of
16.\" MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17.\" GNU General Public License for more details.
18.\"
19.\" You should have received a copy of the GNU General Public
c715f741
MK
20.\" License along with this manual; if not, see
21.\" <http://www.gnu.org/licenses/>.
6a8d8745 22.\" %%%LICENSE_END
fea681da 23.\"
c11b1abf 24.\" 5 Oct 2002, Modified by Michael Kerrisk <mtk.manpages@gmail.com>
68e1685c 25.\" Updated for POSIX.1 2001
05432883
MK
26.\" 2004-12-17 Martin Schulze <joey@infodrom.org>, mtk
27.\" Removed errno declaration prototype, added notes
a0ddea87
MK
28.\" 2006-02-09 Kurt Wall, mtk
29.\" Added non-POSIX errors
fea681da 30.\"
4b8c67d9 31.TH ERRNO 3 2017-09-15 "" "Linux Programmer's Manual"
fea681da
MK
32.SH NAME
33errno \- number of last error
34.SH SYNOPSIS
35.B #include <errno.h>
68e4db0a 36.\".PP
05432883 37.\".BI "extern int " errno ;
fea681da 38.SH DESCRIPTION
c13182ef 39The
05432883
MK
40.I <errno.h>
41header file defines the integer variable
09b235db 42.IR errno ,
05432883
MK
43which is set by system calls and some library functions in the event
44of an error to indicate what went wrong.
b89ec852
MK
45.\"
46.SS errno
a9641f84
MK
47The value in
48.I errno
49is significant only when the return value of
929ccaa3
MK
50the call indicated an error
51(i.e., \-1 from most system calls;
52\-1 or NULL from most library functions);
53a function that succeeds
54.I is
55allowed to change
09b235db 56.IR errno .
b89ec852
MK
57The value of
58.I errno
59is never set to zero by any system call or library function.
847e0d88 60.PP
929ccaa3
MK
61For some system calls and library functions (e.g.,
62.BR getpriority (2)),
63\-1 is a valid return on success.
64In such cases, a successful return can be distinguished from an error
65return by setting
09b235db 66.I errno
929ccaa3
MK
67to zero before the call, and then,
68if the call returns a status that indicates that an error
69may have occurred, checking to see if
70.I errno
c7094399 71has a nonzero value.
847e0d88 72.PP
c6fa0841
MK
73.I errno
74is defined by the ISO C standard to be a modifiable lvalue
75of type
76.IR int ,
77and must not be explicitly declared;
78.I errno
be7fff26 79may be a macro.
c6fa0841
MK
80.I errno
81is thread-local; setting it in one thread
fea681da 82does not affect its value in any other thread.
b89ec852
MK
83.\"
84.SS Error numbers and names
9d1a5fa6 85Valid error numbers are all positive numbers.
b89ec852
MK
86The
87.I <errno.h>
88header file defines symbolic names for each
89of the possible error numbers that may appear in
90.IR errno .
847e0d88 91.PP
c13182ef 92All the error names specified by POSIX.1
05432883
MK
93must have distinct values, with the exception of
94.B EAGAIN
c13182ef 95and
05432883
MK
96.BR EWOULDBLOCK ,
97which may be the same.
847e0d88 98.PP
f7921478
MK
99The error numbers that correspond to each symbolic name
100vary across UNIX systems,
101and even across different architectures on Linux.
b01ecc5e 102Therefore, numeric values are not included as part of the list of
bf3683a1 103error names below.
5a99c722
MK
104The
105.BR perror (3)
106and
107.BR strerror (3)
108functions can be used to convert these names to
109corresponding textual error messages.
afde18c0
MK
110.PP
111On any particular Linux system,
44a35dc8
MK
112one can obtain a list of all symbolic error names and
113the corresponding error numbers using the
114.BR errno (1)
115command:
116.PP
117.in +4n
118.EX
119$ \fBerrno \-l\fP
120EPERM 1 Operation not permitted
121ENOENT 2 No such file or directory
122ESRCH 3 No such process
123EINTR 4 Interrupted system call
124EIO 5 Input/output error
125\&...
126.EE
127.in
128.PP
129The
130.BR errno (1)
131command can also be used to look up individual error numbers and names
132as in the following examples:
133.PP
134.in +4n
135.EX
136$ \fBerrno 2\fP
137ENOENT 2 No such file or directory
138$ \fBerrno ESRCH\fP
139ESRCH 3 No such process
140.EE
141.in
bf3683a1 142.PP
a0ddea87 143.\" POSIX.1 (2001 edition) lists the following symbolic error names. Of
a8d55537
MK
144.\" these, \fBEDOM\fP and \fBERANGE\fP are in the ISO C standard. ISO C
145.\" Amendment 1 defines the additional error number \fBEILSEQ\fP for
a0ddea87 146.\" coding errors in multibyte or wide characters.
c13182ef 147.\"
b89ec852 148.SS List of error names
e4a5b662
MK
149In the list of the symbolic error names below,
150various names are marked as follows:
5a63455f
MK
151.IP * 3
152.IR POSIX.1-2001 :
153The name is defined by POSIX.1-2001,
154and is defined in later POSIX.1 versions, unless otherwise indicated.
155.IP *
156.IR POSIX.1-2008 :
157The name is defined in POSIX.1-2008,
158but was not present in earlier POSIX.1 standards.
159.IP *
160.IR C99 :
161The name is defined by C99.
e4a5b662 162Below is a list of the symbolic error names that are defined on Linux:
dbb8ac51 163.TP 16
0daa9e92 164.B E2BIG
5a63455f 165Argument list too long (POSIX.1-2001).
fea681da 166.TP
0daa9e92 167.B EACCES
5a63455f 168Permission denied (POSIX.1-2001).
fea681da 169.TP
0daa9e92 170.B EADDRINUSE
5a63455f 171Address already in use (POSIX.1-2001).
fea681da 172.TP
0daa9e92 173.B EADDRNOTAVAIL
5a63455f 174Address not available (POSIX.1-2001).
a0ddea87 175.\" EADV is only an error on HURD(?)
fea681da 176.TP
0daa9e92 177.B EAFNOSUPPORT
5a63455f 178Address family not supported (POSIX.1-2001).
fea681da 179.TP
0daa9e92 180.B EAGAIN
c13182ef 181Resource temporarily unavailable (may be the same value as
a0ddea87 182.BR EWOULDBLOCK )
5a63455f 183(POSIX.1-2001).
a0ddea87 184.TP
0daa9e92 185.B EALREADY
5a63455f 186Connection already in progress (POSIX.1-2001).
a0ddea87 187.TP
0daa9e92 188.B EBADE
31071798 189Invalid exchange.
a0ddea87 190.TP
0daa9e92 191.B EBADF
5a63455f 192Bad file descriptor (POSIX.1-2001).
a0ddea87 193.TP
0daa9e92 194.B EBADFD
31071798 195File descriptor in bad state.
fea681da 196.TP
0daa9e92 197.B EBADMSG
5a63455f 198Bad message (POSIX.1-2001).
fea681da 199.TP
0daa9e92 200.B EBADR
31071798 201Invalid request descriptor.
fea681da 202.TP
0daa9e92 203.B EBADRQC
31071798 204Invalid request code.
fea681da 205.TP
0daa9e92 206.B EBADSLT
31071798 207Invalid slot.
a0ddea87 208.\" EBFONT is defined but appears not to be used by kernel or glibc.
fea681da 209.TP
0daa9e92 210.B EBUSY
5a63455f 211Device or resource busy (POSIX.1-2001).
fea681da 212.TP
0daa9e92 213.B ECANCELED
5a63455f 214Operation canceled (POSIX.1-2001).
fea681da 215.TP
0daa9e92 216.B ECHILD
5a63455f 217No child processes (POSIX.1-2001).
fea681da 218.TP
a0ddea87 219.B ECHRNG
31071798 220Channel number out of range.
fea681da 221.TP
a0ddea87 222.B ECOMM
31071798 223Communication error on send.
fea681da 224.TP
0daa9e92 225.B ECONNABORTED
5a63455f 226Connection aborted (POSIX.1-2001).
a0ddea87 227.TP
0daa9e92 228.B ECONNREFUSED
5a63455f 229Connection refused (POSIX.1-2001).
a0ddea87 230.TP
0daa9e92 231.B ECONNRESET
5a63455f 232Connection reset (POSIX.1-2001).
a0ddea87 233.TP
0daa9e92 234.B EDEADLK
5a63455f 235Resource deadlock avoided (POSIX.1-2001).
a0ddea87 236.TP
0daa9e92 237.B EDEADLOCK
a0ddea87 238Synonym for
31071798 239.BR EDEADLK .
fea681da 240.TP
0daa9e92 241.B EDESTADDRREQ
5a63455f 242Destination address required (POSIX.1-2001).
a0ddea87 243.TP
0daa9e92 244.B EDOM
31071798 245Mathematics argument out of domain of function (POSIX.1, C99).
a0ddea87
MK
246.\" EDOTDOT is defined but appears to be unused
247.TP
0daa9e92 248.B EDQUOT
a0ddea87 249.\" POSIX just says "Reserved"
5a63455f 250Disk quota exceeded (POSIX.1-2001).
a0ddea87 251.TP
0daa9e92 252.B EEXIST
5a63455f 253File exists (POSIX.1-2001).
a0ddea87 254.TP
0daa9e92 255.B EFAULT
5a63455f 256Bad address (POSIX.1-2001).
a0ddea87 257.TP
0daa9e92 258.B EFBIG
5a63455f 259File too large (POSIX.1-2001).
a0ddea87 260.TP
0daa9e92 261.B EHOSTDOWN
31071798 262Host is down.
a0ddea87 263.TP
0daa9e92 264.B EHOSTUNREACH
5a63455f 265Host is unreachable (POSIX.1-2001).
a0ddea87 266.TP
975c0f87
MK
267.B EHWPOISON
268Memory page has hardware error.
269.TP
0daa9e92 270.B EIDRM
5a63455f 271Identifier removed (POSIX.1-2001).
a0ddea87 272.TP
0daa9e92 273.B EILSEQ
d411041b 274Invalid or incomplete multibyte or wide character (POSIX.1, C99).
847e0d88 275.IP
d411041b
MK
276The text shown here is the glibc error description;
277in POSIX.1, this error is described as "Illegal byte sequence".
a0ddea87 278.TP
0daa9e92 279.B EINPROGRESS
5a63455f 280Operation in progress (POSIX.1-2001).
a0ddea87 281.TP
0daa9e92 282.B EINTR
5a63455f 283Interrupted function call (POSIX.1-2001); see
0b6d88cf 284.BR signal (7).
a0ddea87 285.TP
0daa9e92 286.B EINVAL
5a63455f 287Invalid argument (POSIX.1-2001).
fea681da 288.TP
0daa9e92 289.B EIO
5a63455f 290Input/output error (POSIX.1-2001).
fea681da 291.TP
0daa9e92 292.B EISCONN
5a63455f 293Socket is connected (POSIX.1-2001).
fea681da 294.TP
0daa9e92 295.B EISDIR
5a63455f 296Is a directory (POSIX.1-2001).
fea681da 297.TP
0daa9e92 298.B EISNAM
31071798 299Is a named type file.
fea681da 300.TP
0daa9e92 301.B EKEYEXPIRED
31071798 302Key has expired.
fea681da 303.TP
0daa9e92 304.B EKEYREJECTED
31071798 305Key was rejected by service.
fea681da 306.TP
0daa9e92 307.B EKEYREVOKED
31071798 308Key has been revoked.
fea681da 309.TP
a0ddea87 310.B EL2HLT
31071798 311Level 2 halted.
fea681da 312.TP
a0ddea87 313.B EL2NSYNC
31071798 314Level 2 not synchronized.
fea681da 315.TP
a0ddea87 316.B EL3HLT
31071798 317Level 3 halted.
fea681da 318.TP
a0ddea87 319.B EL3RST
14ecabec 320Level 3 reset.
fea681da 321.TP
0daa9e92 322.B ELIBACC
31071798 323Cannot access a needed shared library.
fea681da 324.TP
0daa9e92 325.B ELIBBAD
31071798 326Accessing a corrupted shared library.
fea681da 327.TP
0daa9e92 328.B ELIBMAX
31071798 329Attempting to link in too many shared libraries.
fea681da 330.TP
0daa9e92 331.B ELIBSCN
e1f3482c 332\&.lib section in a.out corrupted
fea681da 333.TP
0daa9e92 334.B ELIBEXEC
31071798 335Cannot exec a shared library directly.
fea681da 336.TP
975c0f87
MK
337.B ELNRANGE
338.\" ELNRNG appears to be used by a few drivers
339Link number out of range.
340.TP
0daa9e92 341.B ELOOP
5a63455f 342Too many levels of symbolic links (POSIX.1-2001).
fea681da 343.TP
0daa9e92 344.B EMEDIUMTYPE
31071798 345Wrong medium type.
fea681da 346.TP
0daa9e92 347.B EMFILE
5a63455f 348Too many open files (POSIX.1-2001).
31071798 349Commonly caused by exceeding the
0c38aa2c
MK
350.BR RLIMIT_NOFILE
351resource limit described in
31071798 352.BR getrlimit (2).
fea681da 353.TP
0daa9e92 354.B EMLINK
5a63455f 355Too many links (POSIX.1-2001).
fea681da 356.TP
0daa9e92 357.B EMSGSIZE
5a63455f 358Message too long (POSIX.1-2001).
fea681da 359.TP
0daa9e92 360.B EMULTIHOP
a0ddea87 361.\" POSIX says "Reserved"
5a63455f 362Multihop attempted (POSIX.1-2001).
fea681da 363.TP
0daa9e92 364.B ENAMETOOLONG
5a63455f 365Filename too long (POSIX.1-2001).
a0ddea87 366.\" ENAVAIL is defined, but appears not to be used
fea681da 367.TP
0daa9e92 368.B ENETDOWN
5a63455f 369Network is down (POSIX.1-2001).
fea681da 370.TP
0daa9e92 371.B ENETRESET
5a63455f 372Connection aborted by network (POSIX.1-2001).
fea681da 373.TP
0daa9e92 374.B ENETUNREACH
5a63455f 375Network unreachable (POSIX.1-2001).
fea681da 376.TP
0daa9e92 377.B ENFILE
5a63455f 378Too many open files in system (POSIX.1-2001).
31071798 379On Linux, this is probably a result of encountering the
4a5c6f9f
MK
380.IR /proc/sys/fs/file-max
381limit (see
382.BR proc (5)).
975c0f87
MK
383.TP
384.B ENOANO
385.\" ENOANO appears to be used by a few drivers
386No anode.
fea681da 387.TP
0daa9e92 388.B ENOBUFS
31071798 389No buffer space available (POSIX.1 (XSI STREAMS option)).
a0ddea87 390.\" ENOCSI is defined but appears to be unused.
fea681da 391.TP
0daa9e92 392.B ENODATA
5a63455f 393No message is available on the STREAM head read queue (POSIX.1-2001).
fea681da 394.TP
0daa9e92 395.B ENODEV
5a63455f 396No such device (POSIX.1-2001).
fea681da 397.TP
0daa9e92 398.B ENOENT
5a63455f 399No such file or directory (POSIX.1-2001).
847e0d88 400.IP
9f895e62
MK
401Typically, this error results when a specified pathname does not exist,
402or one of the components in the directory prefix of a pathname does not exist,
403or the specified pathname is a dangling symbolic link.
fea681da 404.TP
0daa9e92 405.B ENOEXEC
5a63455f 406Exec format error (POSIX.1-2001).
fea681da 407.TP
0daa9e92 408.B ENOKEY
31071798 409Required key not available.
fea681da 410.TP
0daa9e92 411.B ENOLCK
5a63455f 412No locks available (POSIX.1-2001).
fea681da 413.TP
0daa9e92 414.B ENOLINK
a0ddea87 415.\" POSIX says "Reserved"
5a63455f 416Link has been severed (POSIX.1-2001).
fea681da 417.TP
0daa9e92 418.B ENOMEDIUM
31071798 419No medium found.
fea681da 420.TP
0daa9e92 421.B ENOMEM
6386c0c8 422Not enough space/cannot allocate memory (POSIX.1-2001).
fea681da 423.TP
0daa9e92 424.B ENOMSG
5a63455f 425No message of the desired type (POSIX.1-2001).
fea681da 426.TP
0daa9e92 427.B ENONET
31071798 428Machine is not on the network.
fea681da 429.TP
0daa9e92 430.B ENOPKG
31071798 431Package not installed.
fea681da 432.TP
0daa9e92 433.B ENOPROTOOPT
5a63455f 434Protocol not available (POSIX.1-2001).
fea681da 435.TP
0daa9e92 436.B ENOSPC
5a63455f 437No space left on device (POSIX.1-2001).
fea681da 438.TP
0daa9e92 439.B ENOSR
31071798 440No STREAM resources (POSIX.1 (XSI STREAMS option)).
fea681da 441.TP
0daa9e92 442.B ENOSTR
31071798 443Not a STREAM (POSIX.1 (XSI STREAMS option)).
fea681da 444.TP
0daa9e92 445.B ENOSYS
5a63455f 446Function not implemented (POSIX.1-2001).
fea681da 447.TP
0daa9e92 448.B ENOTBLK
31071798 449Block device required.
fea681da 450.TP
0daa9e92 451.B ENOTCONN
5a63455f 452The socket is not connected (POSIX.1-2001).
fea681da 453.TP
0daa9e92 454.B ENOTDIR
5a63455f 455Not a directory (POSIX.1-2001).
fea681da 456.TP
0daa9e92 457.B ENOTEMPTY
5a63455f 458Directory not empty (POSIX.1-2001).
a0ddea87 459.\" ENOTNAM is defined but appears to be unused.
fea681da 460.TP
975c0f87 461.B ENOTRECOVERABLE
5a63455f 462State not recoverable (POSIX.1-2008).
975c0f87 463.TP
0daa9e92 464.B ENOTSOCK
5a63455f 465Not a socket (POSIX.1-2001).
fea681da 466.TP
0daa9e92 467.B ENOTSUP
5a63455f 468Operation not supported (POSIX.1-2001).
fea681da 469.TP
0daa9e92 470.B ENOTTY
5a63455f 471Inappropriate I/O control operation (POSIX.1-2001).
fea681da 472.TP
0daa9e92 473.B ENOTUNIQ
31071798 474Name not unique on network.
fea681da 475.TP
0daa9e92 476.B ENXIO
5a63455f 477No such device or address (POSIX.1-2001).
fea681da 478.TP
0daa9e92 479.B EOPNOTSUPP
5a63455f 480Operation not supported on socket (POSIX.1-2001).
ba39b288 481.IP
2f0af33b
MK
482.RB ( ENOTSUP
483and
484.B EOPNOTSUPP
485have the same value on Linux, but
a0ddea87 486according to POSIX.1 these error values should be distinct.)
fea681da 487.TP
0daa9e92 488.B EOVERFLOW
5a63455f 489Value too large to be stored in data type (POSIX.1-2001).
fea681da 490.TP
975c0f87
MK
491.B EOWNERDEAD
492.\" Used at least by the user-space side of rubost mutexes
5a63455f 493Owner died (POSIX.1-2008).
975c0f87 494.TP
0daa9e92 495.B EPERM
5a63455f 496Operation not permitted (POSIX.1-2001).
fea681da 497.TP
0daa9e92 498.B EPFNOSUPPORT
31071798 499Protocol family not supported.
a0ddea87 500.TP
0daa9e92 501.B EPIPE
5a63455f 502Broken pipe (POSIX.1-2001).
a0ddea87 503.TP
0daa9e92 504.B EPROTO
5a63455f 505Protocol error (POSIX.1-2001).
a0ddea87 506.TP
0daa9e92 507.B EPROTONOSUPPORT
5a63455f 508Protocol not supported (POSIX.1-2001).
a0ddea87 509.TP
0daa9e92 510.B EPROTOTYPE
5a63455f 511Protocol wrong type for socket (POSIX.1-2001).
a0ddea87 512.TP
0daa9e92 513.B ERANGE
31071798 514Result too large (POSIX.1, C99).
a0ddea87 515.TP
0daa9e92 516.B EREMCHG
31071798 517Remote address changed.
a0ddea87 518.TP
0daa9e92 519.B EREMOTE
31071798 520Object is remote.
a0ddea87 521.TP
0daa9e92 522.B EREMOTEIO
31071798 523Remote I/O error.
a0ddea87 524.TP
0daa9e92 525.B ERESTART
31071798 526Interrupted system call should be restarted.
a0ddea87 527.TP
975c0f87
MK
528.B ERFKILL
529.\" ERFKILL appears to be used by various drivers
530Operation not possible due to RF-kill.
531.TP
0daa9e92 532.B EROFS
5a63455f 533Read-only filesystem (POSIX.1-2001).
a0ddea87 534.TP
0daa9e92 535.B ESHUTDOWN
31071798 536Cannot send after transport endpoint shutdown.
a0ddea87 537.TP
0daa9e92 538.B ESPIPE
5a63455f 539Invalid seek (POSIX.1-2001).
a0ddea87 540.TP
0daa9e92 541.B ESOCKTNOSUPPORT
31071798 542Socket type not supported.
a0ddea87 543.TP
0daa9e92 544.B ESRCH
5a63455f 545No such process (POSIX.1-2001).
a0ddea87
MK
546.\" ESRMNT is defined but appears not to be used
547.TP
0daa9e92 548.B ESTALE
5a63455f 549Stale file handle (POSIX.1-2001).
ba39b288 550.IP
31071798 551This error can occur for NFS and for other filesystems.
a0ddea87 552.TP
0daa9e92 553.B ESTRPIPE
31071798 554Streams pipe error.
a0ddea87 555.TP
0daa9e92 556.B ETIME
5db92f96
MK
557Timer expired
558(POSIX.1 (XSI STREAMS option)).
ba39b288 559.IP
c13182ef 560(POSIX.1 says "STREAM
363a3cc9 561.BR ioctl (2)
5db92f96 562timeout".)
a0ddea87 563.TP
0daa9e92 564.B ETIMEDOUT
5a63455f 565Connection timed out (POSIX.1-2001).
975c0f87
MK
566.TP
567.B ETOOMANYREFS
568.\" ETOOMANYREFS seems to be used in net/unix/af_unix.c
569Too many references: cannot splice.
a0ddea87 570.TP
0daa9e92 571.B ETXTBSY
5a63455f 572Text file busy (POSIX.1-2001).
fea681da 573.TP
0daa9e92 574.B EUCLEAN
31071798 575Structure needs cleaning.
fea681da 576.TP
0daa9e92 577.B EUNATCH
31071798 578Protocol driver not attached.
fea681da 579.TP
0daa9e92 580.B EUSERS
31071798 581Too many users.
a0ddea87 582.TP
0daa9e92 583.B EWOULDBLOCK
fea681da 584Operation would block (may be same value as
c13182ef 585.BR EAGAIN )
5a63455f 586(POSIX.1-2001).
a0ddea87 587.TP
0daa9e92 588.B EXDEV
5a63455f 589Improper link (POSIX.1-2001).
fea681da 590.TP
a0ddea87 591.B EXFULL
31071798 592Exchange full.
05432883 593.SH NOTES
fea681da 594A common mistake is to do
e646a1ba 595.PP
a6e2f128 596.in +4n
e646a1ba 597.EX
2bc2f479 598if (somecall() == \-1) {
31a6818e 599 printf("somecall() failed\en");
fea681da
MK
600 if (errno == ...) { ... }
601}
e646a1ba 602.EE
a6e2f128 603.in
e646a1ba 604.PP
fea681da
MK
605where
606.I errno
607no longer needs to have the value it had upon return from
63aa9df0 608.IR somecall ()
05432883 609(i.e., it may have been changed by the
fb186734 610.BR printf (3)).
fea681da
MK
611If the value of
612.I errno
613should be preserved across a library call, it must be saved:
e646a1ba 614.PP
a6e2f128 615.in +4n
e646a1ba 616.EX
2bc2f479 617if (somecall() == \-1) {
fea681da 618 int errsv = errno;
31a6818e 619 printf("somecall() failed\en");
fea681da
MK
620 if (errsv == ...) { ... }
621}
b8302363 622.EE
a6e2f128 623.in
05432883 624.PP
6eb4b782
MK
625On some ancient systems,
626.I <errno.h>
627was not present or did not declare
628.IR errno ,
629so that it was necessary to declare
05432883
MK
630.I errno
631manually
c13182ef 632(i.e.,
6eb4b782 633.IR "extern int errno" ).
05432883 634.BR "Do not do this" .
6eb4b782
MK
635It long ago ceased to be necessary,
636and it will cause problems with modern versions of the C library.
47297adb 637.SH SEE ALSO
00f3b66d 638.BR errno (1), \" In the moreutils package
d7871cf9 639.BR err (3),
37b6aec3 640.BR error (3),
fea681da
MK
641.BR perror (3),
642.BR strerror (3)