436 lines
		
	
	
		
			16 KiB
		
	
	
	
		
			HTML
		
	
	
	
	
	
			
		
		
	
	
			436 lines
		
	
	
		
			16 KiB
		
	
	
	
		
			HTML
		
	
	
	
	
	
<!--
 | 
						|
Copyright (c) 2000, 2001, 2002, 2003, 2004, 2005, 2008, 2009, 2013
 | 
						|
	The President and Fellows of Harvard College.
 | 
						|
 | 
						|
Redistribution and use in source and binary forms, with or without
 | 
						|
modification, are permitted provided that the following conditions
 | 
						|
are met:
 | 
						|
1. Redistributions of source code must retain the above copyright
 | 
						|
   notice, this list of conditions and the following disclaimer.
 | 
						|
2. Redistributions in binary form must reproduce the above copyright
 | 
						|
   notice, this list of conditions and the following disclaimer in the
 | 
						|
   documentation and/or other materials provided with the distribution.
 | 
						|
3. Neither the name of the University nor the names of its contributors
 | 
						|
   may be used to endorse or promote products derived from this software
 | 
						|
   without specific prior written permission.
 | 
						|
 | 
						|
THIS SOFTWARE IS PROVIDED BY THE UNIVERSITY AND CONTRIBUTORS ``AS IS'' AND
 | 
						|
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 | 
						|
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
 | 
						|
ARE DISCLAIMED.  IN NO EVENT SHALL THE UNIVERSITY OR CONTRIBUTORS BE LIABLE
 | 
						|
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
 | 
						|
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
 | 
						|
OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
 | 
						|
HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
 | 
						|
LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
 | 
						|
OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 | 
						|
SUCH DAMAGE.
 | 
						|
-->
 | 
						|
<html>
 | 
						|
<head>
 | 
						|
<title>errno</title>
 | 
						|
<link rel="stylesheet" type="text/css" media="all" href="../man.css">
 | 
						|
</head>
 | 
						|
<body bgcolor=#ffffff>
 | 
						|
<h2 align=center>errno</h2>
 | 
						|
<h4 align=center>OS/161 Reference Manual</h4>
 | 
						|
 | 
						|
<h3>Name</h3>
 | 
						|
<p>
 | 
						|
errno - error code reporting
 | 
						|
</p>
 | 
						|
 | 
						|
<h3>Library</h3>
 | 
						|
<p>
 | 
						|
Standard C Library (libc, -lc)
 | 
						|
</p>
 | 
						|
 | 
						|
<h3>Synopsis</h3>
 | 
						|
<p>
 | 
						|
<tt>#include <errno.h></tt><br>
 | 
						|
<br>
 | 
						|
<tt>extern int errno;</tt>
 | 
						|
</p>
 | 
						|
 | 
						|
<h3>Description</h3>
 | 
						|
<p>
 | 
						|
When system calls, and sometimes other functions, fail, a code
 | 
						|
representing or describing the error condition is placed in the global
 | 
						|
variable <tt>errno</tt>.
 | 
						|
</p>
 | 
						|
 | 
						|
<p>
 | 
						|
When an operation succeeds, <tt>errno</tt> is not explicitly changed;
 | 
						|
however, operations that succeed are also not required to preserve the
 | 
						|
pre-existing value of <tt>errno</tt>.
 | 
						|
In general one must first check whether the operation failed, and only
 | 
						|
then interrogate <tt>errno</tt>.
 | 
						|
</p>
 | 
						|
 | 
						|
<p>
 | 
						|
A handful of functions in Standard C and POSIX are explicitly defined
 | 
						|
to preserve <tt>errno</tt> on success. These are typically functions
 | 
						|
with not-entirely-satisfactory interfaces where the only reliable way
 | 
						|
to detect failure is to clear <tt>errno</tt> to zero beforehand and
 | 
						|
check it afterwards. The most common/notable example (not currently
 | 
						|
available in OS/161's library) is <tt>strtol</tt>.
 | 
						|
</p>
 | 
						|
 | 
						|
<p>
 | 
						|
<tt>errno</tt> may be a macro. In a multithreaded process it is almost
 | 
						|
invariably a macro. However, it is always an lvalue, that is, it may
 | 
						|
be assigned to.
 | 
						|
</p>
 | 
						|
 | 
						|
<p>
 | 
						|
Each numeric code has a symbolic name and a textual expansion. The
 | 
						|
symbolic names are used in source code; the textual expansions are
 | 
						|
printed out when errors are reported to users.
 | 
						|
</p>
 | 
						|
 | 
						|
<p>
 | 
						|
The textual expansions can be retrieved with
 | 
						|
<A HREF=../libc/strerror.html>strerror</A> or printed with
 | 
						|
<A HREF=../libc/err.html>err</A> or <A HREF=../libc/warn.html>warn</A>.
 | 
						|
</p>
 | 
						|
 | 
						|
<h3>Symbolic names</h3>
 | 
						|
<p>
 | 
						|
The following symbolic errors are defined in the OS/161 base system.
 | 
						|
You may add more at your pleasure; but be sure to read the notes in
 | 
						|
the file <tt>kern/errno.h</tt> that defines them.
 | 
						|
 | 
						|
<table width=90%>
 | 
						|
<tr><td width=5% rowspan=63> </td>
 | 
						|
    <td width=10% valign=top>ENOSYS</td>
 | 
						|
<td><b>Function not implemented</b>: the action requested required
 | 
						|
	functionality not yet implemented. This is also the error
 | 
						|
	produced by attempting to make nonexistent system
 | 
						|
	calls.</td></tr>
 | 
						|
 | 
						|
<tr><td valign=top>ENOMEM</td>
 | 
						|
<td><b>Out of memory</b>: a memory allocation failed. This normally
 | 
						|
	means that a process has used up all the memory available to
 | 
						|
	it. (This may be due to limits or because it has used up all
 | 
						|
	the memory available to the system.) It may also mean that
 | 
						|
	memory allocation within the kernel has failed.</td></tr>
 | 
						|
 | 
						|
<tr><td valign=top>EAGAIN</td>
 | 
						|
<td><b>Operation would block</b>: some resource is temporarily
 | 
						|
	unavailable, or a non-blocking I/O operation (if such things
 | 
						|
	exist) could not be completed without waiting. Historically,
 | 
						|
	the message was "Try again later"; in 4.4BSD EAGAIN and the
 | 
						|
	old EWOULDBLOCK error code were folded together.</td></tr>
 | 
						|
 | 
						|
<tr><td valign=top>EINTR</td>
 | 
						|
<td><b>Interrupted system call</b>: handling of a system call was
 | 
						|
	interrupted by the delivery of a signal. (If you have
 | 
						|
	signals.)</td></tr>
 | 
						|
 | 
						|
<tr><td valign=top>EFAULT</td>
 | 
						|
<td><b>Bad memory reference</b>: a pointer passed as an argument was
 | 
						|
	not valid. Within the kernel, the <tt>copyin</tt> family of
 | 
						|
	functions produces this error when given an invalid
 | 
						|
	pointer.</td></tr>
 | 
						|
 | 
						|
<tr><td valign=top>ENAMETOOLONG</td>
 | 
						|
<td><b>String too long</b>: a string passed as an argument was too
 | 
						|
	long to process.</td></tr>
 | 
						|
 | 
						|
<tr><td valign=top>EINVAL</td>
 | 
						|
<td><b>Invalid argument</b>: an argument passed to a command or system
 | 
						|
	call was badly formed, invalid, or nonsensical, in a way for
 | 
						|
	which no more specific error code is defined.</td></tr>
 | 
						|
 | 
						|
<tr><td valign=top>EPERM</td>
 | 
						|
<td><b>Operation not permitted</b>: the requested operation is
 | 
						|
	restricted to privileged users, or, in some cases, prohibited
 | 
						|
	entirely. Note that "permission denied" is not EPERM.</td></tr>
 | 
						|
 | 
						|
<tr><td valign=top>EACCES</td>
 | 
						|
<td><b>Permission denied</b>: the current process's credentials do not
 | 
						|
	allow the desired form of access to the target object
 | 
						|
	according to its permission settings. Note that "permission
 | 
						|
	denied" is not EPERM.</td></tr>
 | 
						|
 | 
						|
<tr><td valign=top>EMPROC</td>
 | 
						|
<td><b>Too many processes</b>: the current user ID has reached its
 | 
						|
	limit of simultaneous running processes. In Unix, this is
 | 
						|
	spelled EPROCLIM.</td></tr>
 | 
						|
 | 
						|
<tr><td valign=top>ENPROC</td>
 | 
						|
<td><b>Too many processes on system</b>: the system process table is
 | 
						|
	full. (Void where impossible or prohibited by law.)</td></tr>
 | 
						|
 | 
						|
<tr><td valign=top>ENOEXEC</td>
 | 
						|
<td><b>File is not executable</b>: an
 | 
						|
	<A HREF=../syscall/execv.html>execv</A> operation was
 | 
						|
	attempted but the kernel was unable to run the requested
 | 
						|
	program.</td></tr>
 | 
						|
 | 
						|
<tr><td valign=top>E2BIG</td>
 | 
						|
<td><b>Argument list too long</b>: the space taken up by the
 | 
						|
	<tt>argv[]</tt> strings (and environment strings, where
 | 
						|
	applicable) passed to a newly started program is larger than
 | 
						|
	the system allows. The limit on this space is given by the
 | 
						|
	symbol <tt>ARG_MAX</tt>.</td></tr>
 | 
						|
 | 
						|
<tr><td valign=top>ESRCH</td>
 | 
						|
<td><b>No such process</b>: the supplied process ID does not name any
 | 
						|
	of the currently running processes.</td></tr>
 | 
						|
 | 
						|
<tr><td valign=top>ECHILD</td>
 | 
						|
<td><b>No child processes</b>: the current process has no exited child
 | 
						|
	processes whose exit status has not yet been collected with <A
 | 
						|
	HREF=../syscall/waitpid.html>waitpid</A>.</td></tr>
 | 
						|
 | 
						|
<tr><td valign=top>ENOTDIR</td>
 | 
						|
<td><b>Not a directory</b>: a directory was expected and a
 | 
						|
	non-directory filesystem object was found.</td></tr>
 | 
						|
 | 
						|
<tr><td valign=top>EISDIR</td>
 | 
						|
<td><b>Is a directory</b>: a non-directory was expected and a
 | 
						|
	directory was found.</td></tr>
 | 
						|
 | 
						|
<tr><td valign=top>ENOENT</td>
 | 
						|
<td><b>No such file or directory</b>: the requested filesystem object
 | 
						|
	does/did not exist.</td></tr>
 | 
						|
 | 
						|
<tr><td valign=top>ELOOP</td>
 | 
						|
<td><b>Too many levels of symbolic links</b>: pathname lookup crossed
 | 
						|
	more than the maximum allowed number of symbolic links.
 | 
						|
	Usually means a link points to itself, or a family of links
 | 
						|
	has been arranged into a loop. (If you have symbolic
 | 
						|
	links.)</td></tr>
 | 
						|
 | 
						|
<tr><td valign=top>ENOTEMPTY</td>
 | 
						|
<td><b>Directory not empty</b>: a directory must be empty of
 | 
						|
	everything (except <tt>.</tt> and <tt>..</tt>) before it may
 | 
						|
	be removed.</td></tr>
 | 
						|
 | 
						|
<tr><td valign=top>EEXIST</td>
 | 
						|
<td><b>File exists</b>: a filesystem object that was expected not to
 | 
						|
	exist did in fact already exist.</td></tr>
 | 
						|
 | 
						|
<tr><td valign=top>EMLINK</td>
 | 
						|
<td><b>Too many hard links</b>: the maximum number of hard links to
 | 
						|
	the target file already exist.</td></tr>
 | 
						|
 | 
						|
<tr><td valign=top>EXDEV</td>
 | 
						|
<td><b>Cross-device link</b>: an attempt was made to instruct one
 | 
						|
	filesystem to handle files on another filesystem.</td></tr>
 | 
						|
 | 
						|
<tr><td valign=top>ENODEV</td>
 | 
						|
<td><b>No such device</b>: the requested device or device driver does
 | 
						|
	not exist.</td></tr>
 | 
						|
 | 
						|
<tr><td valign=top>ENXIO</td>
 | 
						|
<td><b>Device not available</b>: the requested device exists but is
 | 
						|
	not available (is not mounted, is powered off, etc.)</td></tr>
 | 
						|
 | 
						|
<tr><td valign=top>EBUSY</td>
 | 
						|
<td><b>Device busy</b>: the requested object cannot be used (or,
 | 
						|
	perhaps, released) because something else is using
 | 
						|
	it.</td></tr>
 | 
						|
 | 
						|
<tr><td valign=top>EMFILE</td>
 | 
						|
<td><b>Too many open files</b>: the process file table is full, so the
 | 
						|
	process cannot open more files.</td></tr>
 | 
						|
 | 
						|
<tr><td valign=top>ENFILE</td>
 | 
						|
<td><b>Too many open files in system</b>: a system-wide limit of some
 | 
						|
	sort, if any exists, on the number of open files has been
 | 
						|
	reached. Void where not possible.</td></tr>
 | 
						|
 | 
						|
<tr><td valign=top>EBADF</td>
 | 
						|
<td><b>Bad file number</b>: a file operation was requested on an
 | 
						|
	illegal file handle, or a file handle that was not open. Or, a
 | 
						|
	write operation was attempted on a file handle that was open
 | 
						|
	only for read or vice-versa.</td></tr>
 | 
						|
 | 
						|
<tr><td valign=top>EIOCTL</td>
 | 
						|
<td><b>Invalid or inappropriate ioctl</b>: an operation requested via
 | 
						|
	the <A HREF=../syscall/ioctl.html>ioctl</A> system call was
 | 
						|
	not defined or could not be performed on the indicated
 | 
						|
	object. In Unix, for historical reasons, this is spelled
 | 
						|
	ENOTTY, with the historic message "Not a
 | 
						|
	typewriter".</td></tr>
 | 
						|
 | 
						|
<tr><td valign=top>EIO</td>
 | 
						|
<td><b>Input/output error</b>: a hardware-level error occured on a
 | 
						|
	device. Media errors on disks fall into this
 | 
						|
	category.</td></tr>
 | 
						|
 | 
						|
<tr><td valign=top>ESPIPE</td>
 | 
						|
<td><b>Illegal seek</b>: a seek operation was attempted on a
 | 
						|
	sequential object where seeking makes no sense, like a
 | 
						|
	pipe or terminal.</td></tr>
 | 
						|
 | 
						|
<tr><td valign=top>EPIPE</td>
 | 
						|
<td><b>Broken pipe</b>: a write was made to a pipe or socket object
 | 
						|
	with nobody to read it.</td></tr>
 | 
						|
 | 
						|
<tr><td valign=top>EROFS</td>
 | 
						|
<td><b>Read-only file system</b>: an attempt was made to modify a
 | 
						|
	filesystem that was mounted read-only. (If you have read-only
 | 
						|
	mounts.)</td></tr>
 | 
						|
 | 
						|
<tr><td valign=top>ENOSPC</td>
 | 
						|
<td><b>No space left on device</b>: the target filesystem is
 | 
						|
	full.</td></tr>
 | 
						|
 | 
						|
<tr><td valign=top>EDQUOT</td>
 | 
						|
<td><b>Disc</b><font size=-2><i>(sic)</i></font><b> quota
 | 
						|
	exceeded</b>: the current user ID's quota (of space or
 | 
						|
	number of files) on the target filesystem has been used up.
 | 
						|
	(If you have disk quotas.)</td></tr>
 | 
						|
 | 
						|
<tr><td valign=top>EFBIG</td>
 | 
						|
<td><b>File too large</b>: an attempt was made to exceed the target
 | 
						|
	filesystem's maximum file size, or a per-user limit on maximum
 | 
						|
	file size was reached, if such a thing exists.</td></tr>
 | 
						|
 | 
						|
<tr><td valign=top>EFTYPE</td>
 | 
						|
<td><b>Invalid file type or format</b>: the file provided was the
 | 
						|
	wrong kind of file or contained invalid syntax.</td></tr>
 | 
						|
 | 
						|
<tr><td valign=top>EDOM</td>
 | 
						|
<td><b>Argument out of range</b>: the (numeric) argument provided was
 | 
						|
	outside the values upon which the operation is defined. For
 | 
						|
	example, attempting to evaluate the logarithm of
 | 
						|
	zero produces this error. It is sometimes also used for
 | 
						|
	non-numeric arguments where the idea of being "out of range"
 | 
						|
	still makes sense.</td></tr>
 | 
						|
 | 
						|
<tr><td valign=top>ERANGE</td>
 | 
						|
<td><b>Result out of range</b>: the result of an operation did not fit
 | 
						|
	in the space provided or could not be represented. Usually
 | 
						|
	used with numeric values. String values that don't fit usually
 | 
						|
	result in ENAMETOOLONG, or in its specific case,
 | 
						|
	E2BIG.</td></tr>
 | 
						|
 | 
						|
<tr><td valign=top>EILSEQ</td>
 | 
						|
<td><b>Invalid multibyte character sequence</b>: the input string
 | 
						|
	contained a byte sequence whose value is undefined or whose
 | 
						|
	use is restricted. Only applicable when a multibyte character
 | 
						|
	set is in use, and if someone has added locale
 | 
						|
	support.</td></tr>
 | 
						|
 | 
						|
<tr><td valign=top>ENOTSOCK</td>
 | 
						|
<td><b>Not a socket</b>: the file handle in question does not refer to
 | 
						|
	a socket, but a socket was expected.</td></tr>
 | 
						|
 | 
						|
<tr><td valign=top>EISSOCK</td>
 | 
						|
<td><b>Is a socket</b>: the file handle in question refers to a
 | 
						|
	socket, but a socket was not expected. In Unix this is spelled
 | 
						|
	EOPNOTSUPP, and prints as "Operation not supported on
 | 
						|
	socket".</td></tr>
 | 
						|
 | 
						|
<tr><td valign=top>EISCONN</td>
 | 
						|
<td><b>Socket is already connected</b>: given the protocol in use, the
 | 
						|
	operation requires a socket that has not yet been connected,
 | 
						|
	but the socket provided is in fact connected.</td></tr>
 | 
						|
 | 
						|
<tr><td valign=top>ENOTCONN</td>
 | 
						|
<td><b>Socket is not connected</b>: given the protocol in use, the
 | 
						|
	operation requires a connected socket, but no connection has
 | 
						|
	yet been made.</td></tr>
 | 
						|
 | 
						|
<tr><td valign=top>ESHUTDOWN</td>
 | 
						|
<td><b>Socket has been shut down</b>: the operation requires a running
 | 
						|
	socket, but the socket provided has been closed
 | 
						|
	down.</td></tr>
 | 
						|
 | 
						|
<tr><td valign=top>EPFNOSUPPORT</td>
 | 
						|
<td><b>Protocol family not supported</b>: the requested protocol
 | 
						|
	family (PF_INET, PF_LOCAL, etc.) is not supported by the
 | 
						|
	system.</td></tr>
 | 
						|
 | 
						|
<tr><td valign=top>ESOCKTNOSUPPORT</td>
 | 
						|
<td><b>Socket type not supported</b>: the requested socket type
 | 
						|
	(SOCK_STREAM, SOCK_DGRAM, etc.) is not supported by the
 | 
						|
	system.</td></tr>
 | 
						|
 | 
						|
<tr><td valign=top>EPROTONOSUPPORT</td>
 | 
						|
<td><b>Protocol not supported</b>: the protocol requested for a socket
 | 
						|
	was not one supported by the system.</td></tr>
 | 
						|
 | 
						|
<tr><td valign=top>EPROTOTYPE</td>
 | 
						|
<td><b>Protocol wrong type for socket</b>: the protocol requested for
 | 
						|
	a socket was not one supported by the requested socket type
 | 
						|
	and protocol family.</td></tr>
 | 
						|
 | 
						|
<tr><td valign=top>EAFNOSUPPORT</td>
 | 
						|
<td><b>Address family not supported by protocol family</b>: the
 | 
						|
	address family named in a struct sockaddr (AF_INET, AF_LOCAL,
 | 
						|
	etc.) is not supported by the protocol family used to create
 | 
						|
	the socket (PF_INET, PF_LOCAL, etc.). In practice each
 | 
						|
	protocol family has exactly one address family and the values
 | 
						|
	of AF_* and PF_* are often, if incorrectly, used
 | 
						|
	interchangeably. If you run into this error in real life, it
 | 
						|
	usually means you didn't initialize your sockaddr structures
 | 
						|
	correctly.</td></tr>
 | 
						|
 | 
						|
<tr><td valign=top>ENOPROTOOPT</td>
 | 
						|
<td><b>Protocol option not available</b>: the protocol option that was
 | 
						|
	requested is not supported or cannot be activated.</td></tr>
 | 
						|
 | 
						|
<tr><td valign=top>EADDRINUSE</td>
 | 
						|
<td><b>Address already in use</b>: the requested socket address is
 | 
						|
	already in use by another socket somewhere on the
 | 
						|
	system.</td></tr>
 | 
						|
 | 
						|
<tr><td valign=top>EADDRNOTAVAIL</td>
 | 
						|
<td><b>Cannot assign requested address</b>: the requested socket
 | 
						|
	address is unavailable. Usually caused by attempting to bind a
 | 
						|
	socket to the IP address of another machine. </td></tr>
 | 
						|
 | 
						|
<tr><td valign=top>ENETDOWN</td>
 | 
						|
<td><b>Network is down</b>: the network or subnet needed is
 | 
						|
	offline.</td></tr>
 | 
						|
 | 
						|
<tr><td valign=top>ENETUNREACH</td>
 | 
						|
<td><b>Network is unreachable</b>: the network or subnet needed cannot
 | 
						|
	be reached from here, possibly due to routing problems on the
 | 
						|
	network, possibly due to local configuration
 | 
						|
	trouble.</td></tr>
 | 
						|
 | 
						|
<tr><td valign=top>EHOSTDOWN</td>
 | 
						|
<td><b>Host is down</b>: the specific machine requested is
 | 
						|
	offline.</td></tr>
 | 
						|
 | 
						|
<tr><td valign=top>EHOSTUNREACH</td>
 | 
						|
<td><b>Host is unreachable</b>: the specific machine requested cannot
 | 
						|
	be reached from here.</td></tr>
 | 
						|
 | 
						|
<tr><td valign=top>ECONNREFUSED</td>
 | 
						|
<td><b>Connection refused</b>: the remote machine is not listening for
 | 
						|
	connections on the requested port.</td></tr>
 | 
						|
 | 
						|
<tr><td valign=top>ETIMEDOUT</td>
 | 
						|
<td><b>Connection timed out</b>: there was no response from the remote
 | 
						|
	machine. It may be down, it may not be listening, or it may
 | 
						|
	not be receiving our packets at all.</td></tr>
 | 
						|
 | 
						|
<tr><td valign=top>ECONNRESET</td>
 | 
						|
<td><b>Connection reset by peer</b>: the connection was abandoned by
 | 
						|
	the remote host. Usually seen on already-open connections
 | 
						|
	after the remote machine reboots and thereby loses its network
 | 
						|
	state. Sometimes also caused by defective network devices
 | 
						|
	between the local and remote hosts.</td></tr>
 | 
						|
 | 
						|
<tr><td valign=top>EMSGSIZE</td>
 | 
						|
<td><b>Message too large</b>: an internal protocol length limit was
 | 
						|
	exceeded.</td></tr>
 | 
						|
 | 
						|
<tr><td valign=top>ENOTSUP</td>
 | 
						|
<td><b>Threads operation not supported</b>: a special error code
 | 
						|
	defined by the POSIX threads standard, which is a "special"
 | 
						|
	interface.</td></tr>
 | 
						|
 | 
						|
</table>
 | 
						|
</p>
 | 
						|
 | 
						|
</body>
 | 
						|
</html>
 |