---
name: "sysexits.h"
section: "3head"
platform: "linux"
package: "man-pages"
version: "6.19-1"
release: "Arch Linux 2026-11-01"
platforms: ["linux"]
url: "https://new.carta.tech/sysexits.h"
---

# sysexits.h(3head)

exit codes for programs

## NAME

sysexits.h - exit codes for programs

## LIBRARY

Standard C library (*libc*)

## SYNOPSIS

```
#include <sysexits.h>
```

| | | | |
| --- | --- | --- | --- |
| **#define EX\_OK** | **0** | /\* | successful termination \*/ |
| **#define EX\_\_BASE** | **64** | /\* | base value for error messages \*/ |
| **#define EX\_USAGE** | **64** | /\* | command line usage error \*/ |
| **#define EX\_DATAERR** | **65** | /\* | data format error \*/ |
| **#define EX\_NOINPUT** | **66** | /\* | cannot open input \*/ |
| **#define EX\_NOUSER** | **67** | /\* | addressee unknown \*/ |
| **#define EX\_NOHOST** | **68** | /\* | host name unknown \*/ |
| **#define EX\_UNAVAILABLE** | **69** | /\* | service unavailable \*/ |
| **#define EX\_SOFTWARE** | **70** | /\* | internal software error \*/ |
| **#define EX\_OSERR** | **71** | /\* | system error (e.g., can't fork) \*/ |
| **#define EX\_OSFILE** | **72** | /\* | critical OS file missing \*/ |
| **#define EX\_CANTCREAT** | **73** | /\* | can't create (user) output file \*/ |
| **#define EX\_IOERR** | **74** | /\* | input/output error \*/ |
| **#define EX\_TEMPFAIL** | **75** | /\* | temp failure; user is invited to retry \*/ |
| **#define EX\_PROTOCOL** | **76** | /\* | remote error in protocol \*/ |
| **#define EX\_NOPERM** | **77** | /\* | permission denied \*/ |
| **#define EX\_CONFIG** | **78** | /\* | configuration error \*/ |
| **#define EX\_\_MAX** |  | /\* | maximum listed value \*/ |

## DESCRIPTION

A few programs exit with the following error codes.

The successful exit is always indicated by a status of **0**, or **EX\_OK** (equivalent to **EXIT\_SUCCESS** from *\<stdlib.h\>*). Error numbers begin at **EX\_\_BASE** to reduce the possibility of clashing with other exit statuses that random programs may already return. The meaning of the code is approximately as follows:

- **EX\_USAGE**

  The command was used incorrectly, e.g., with the wrong number of arguments, a bad flag, bad syntax in a parameter, or whatever.

- **EX\_DATAERR**

  The input data was incorrect in some way. This should only be used for user's data and not system files.

- **EX\_NOINPUT**

  An input file (not a system file) did not exist or was not readable. This could also include errors like "No message" to a mailer (if it cared to catch it).

- **EX\_NOUSER**

  The user specified did not exist. This might be used for mail addresses or remote logins.

- **EX\_NOHOST**

  The host specified did not exist. This is used in mail addresses or network requests.

- **EX\_UNAVAILABLE**

  A service is unavailable. This can occur if a support program or file does not exist. This can also be used as a catch-all message when something you wanted to do doesn't work, but you don't know why.

- **EX\_SOFTWARE**

  An internal software error has been detected. This should be limited to non-operating system related errors if possible.

- **EX\_OSERR**

  An operating system error has been detected. This is intended to be used for such things as "cannot fork", "cannot create pipe", or the like. It includes things like [**getuid**(2)](/getuid/2.md) returning a user that does not exist in the [**passwd**(5)](/passwd/5.md) file.

- **EX\_OSFILE**

  Some system file (e.g., */etc/passwd*, */etc/utmp*, etc.) does not exist, cannot be opened, or has some sort of error (e.g., syntax error).

- **EX\_CANTCREAT**

  A (user specified) output file cannot be created.

- **EX\_IOERR**

  An error occurred while doing I/O on some file.

- **EX\_TEMPFAIL**

  Temporary failure, indicating something that is not really an error. For example that a mailer could not create a connection, and the request should be reattempted later.

- **EX\_PROTOCOL**

  The remote system returned something that was "not possible" during a protocol exchange.

- **EX\_OSFILE**

  You did not have sufficient permission to perform the operation. This is not intended for file system problems, which should use **EX\_NOINPUT** or **EX\_CANTCREAT**, but rather for higher level permissions.

- **EX\_CONFIG**

  Something was found in an unconfigured or misconfigured state.

The numerical values corresponding to the symbolical ones are given in parenthesis for easy reference.

## STANDARDS

BSD.

## HISTORY

The *\<sysexits.h\>* file appeared in 4.0BSD for use by the deliverymail utility, later renamed to [**sendmail**(8)](/sendmail/8.md).

## CAVEATS

The choice of an appropriate exit value is often ambiguous.

## SEE ALSO

[**err**(3)](/err/3.md), [**error**(3)](/error/3.md), [**exit**(3)](/exit/3.md)
