Appendix B. UNIX Error Messages

Errors generated by the failure of a system call or library function, can be displayed using the perror or strerror library function calls (see "Managing Failures" Section 1.5, "Managing System Call Failures"). For example, the error messages returned by strerror on a Linux system can be displayed in their entirety using Program B.1.

Program B.1 Displaying strerror messages.

File : errors.cxx #include #include #include extern int sys_nerr; + using namespace std; int main( ){ for (int err=0; err < sys_nerr; ++err ) cout << err << ' ' << strerror(err) << endl; 10 return 0; }

As the output of the program will fill more than one screen, it may be helpful to redirect the output to either a file, for future reference, or to the more command to permit viewing of the output at a controlled pace. To compile the source file and capture the output of the program in a file called emessages , the command sequence is

linux$ g++ errors.cxx -o errors linux$ errors > emessages

If, after compilation, you want the program output to be piped to more , the command sequence is

linux$ errors more

Note that the error message returned by strerror (and perror ) in a C/C++ program is the same message that is returned by the Linux command-line utility called perror . A command-line sequence to determine the error message associated with error number 13 is

linux$ perror 13 Error code 13: Permission denied

A Bourne shell script that uses the command-line perror utility to display all error messages is shown in Program B.2.

Program B.2 Bourne shell script that uses perror to generate error messages.

File : errors_script #! /bin/bash err=0 while test $err -lt 125; do echo -n "$err " + perror -s $err err='expr $err + 1' done

Table B.1 lists the error number, its symbolic name , and the actual message generated by strerror .

Table B.1. Error messages.

Error #

Symbolic Constant

Message Generated by strerror

 

Success

1

EPERM

Operation not permitted

2

ENOENT

No such file or directory

3

ESRCH

No such process

4

EINTR

Interrupted system call

5

EIO

Input/output error

6

ENXIO

No such device or address

7

E2BIG

Argument list too long

8

ENOEXEC

exec format error

9

EBADF

Bad file descriptor

10

ECHILD

No child processes

11

EAGAIN

Resource temporarily unavailable

12

ENOMEM

Cannot allocate memory

13

EACCES

Permission denied

14

EFAULT

Bad address

15

ENOTBLK

Block device required

16

EBUSY

Device or resource busy

17

EEXIST

File exists

18

EXDEV

Invalid cross-device link

19

ENODEV

No such device

20

ENOTDIR

Not a directory

21

EISDIR

Is a directory

22

EINVAL

Invalid argument

23

ENFILE

Too many open files in system

24

EMFILE

Too many open files

25

ENOTTY

Inappropriate ioctl for device

26

ETXTBSY

Text file busy

27

EFBIG

File too large

28

ENOSPC

No space left on device

29

ESPIPE

Illegal seek

30

EROFS

Read-only file system

31

EMLINK

Too many links

32

EPIPE

Broken pipe

33

EDOM

Numerical argument out of domain

34

ERANGE

Numerical result out of range

35

EDEADLK

Resource deadlock avoided

36

ENAMETOOLONG

File name too long

37

ENOLCK

No locks available

38

ENOSYS

Function not implemented

39

ENOTEMPTY

Directory not empty

40

ELOOP

Too many levels of symbolic links

41

EWOULDBLOCK

Unknown error 41

42

ENOMSG

No message of desired type

43

EIDRM

Identifier removed

44

ECHRNG

Channel number out of range

45

EL2NSYNC

Level 2 not synchronized

46

EL3HLT

Level 3 halted

47

EL3RST

Level 3 reset

48

ELNRNG

Link number out of range

49

EUNATCH

Protocol driver not attached

50

ENOCSI

No CSI structure available

51

EL2HLT

Level 2 halted

52

EBADE

Invalid exchange

53

EBADR

Invalid request descriptor

54

EXFULL

Exchange full

55

ENOANO

No anode

56

EBADRQC

Invalid request code

57

EBADSLT

Invalid slot

58

EDEADLOCK

Unknown error 58

59

EBFONT

Bad font file format

60

ENOSTR

Device not a stream

61

ENODATA

No data available

62

ETIME

Timer expired

63

ENOSR

Out of streams resources

64

ENONET

Machine is not on the network

65

ENOPKG

Package not installed

66

EREMOTE

Object is remote

67

ENOLINK

Link has been severed

68

EADV

Advertise error

69

ESRMNT

Srmount error

70

ECOMM

Communication error on send

71

EPROTO

Protocol error

72

EMULTIHOP

Multihop attempted

73

EDOTDOT

RFS-specific error

74

EBADMSG

Bad message

75

EOVERFLOW

Value too large for defined data type

76

ENOTUNIQ

Name not unique on network

77

EBADFD

File descriptor in bad state

78

EREMCHG

Remote address changed

79

ELIBACC

Can not access a needed shared library

80

ELIBBAD

Accessing a corrupted shared library

81

ELIBSCN

.lib section in a.out corrupted

82

ELIBMAX

Attempting to link in too many shared libraries

83

ELIBEXEC

Cannot exec a shared library directly

84

EILSEQ

Invalid or incomplete multibyte or wide character

85

ERESTART

Interrupted system call should be restarted

86

ESTRPIPE

Streams pipe error

87

EUSERS

Too many users

88

ENOTSOCK

Socket operation on nonsocket

89

EDESTADDRREQ

Destination address required

90

EMSGSIZE

Message too long

91

EPROTOTYPE

Protocol wrong type for socket

92

ENOPROTOOPT

Protocol not available

93

EPROTONOSUPPORT

Protocol not supported

94

ESOCKTNOSUPPORT

Socket type not supported

95

EOPNOTSUPP

Operation not supported

96

EPFNOSUPPORT

Protocol family not supported

97

EAFNOSUPPORT

Address family not supported by protocol

98

EADDRINUSE

Address already in use

99

EADDRNOTAVAIL

Cannot assign requested address

100

ENETDOWN

Network is down

101

ENETUNREACH

Network is unreachable

102

ENETRESET

Network dropped connection on reset

103

ECONNABORTED

Software caused connection abort

104

ECONNRESET

Connection reset by peer

105

ENOBUFS

No buffer space available

106

EISCONN

Transport endpoint is already connected

107

ENOTCONN

Transport endpoint is not connected

108

ESHUTDOWN

Cannot send after transport endpoint shutdown

109

ETOOMANYREFS

Too many references: cannot splice

110

ETIMEDOUT

Connection timed out

111

ECONNREFUSED

Connection refused

112

EHOSTDOWN

Host is down

113

EHOSTUNREACH

No route to host

114

EALREADY

Operation already in progress

115

EINPROGRESS

Operation now in progress

116

ESTALE

Stale NFS file handle

117

EUCLEAN

Structure needs cleaning

118

ENOTNAM

Not a XENIX named type file

119

ENAVAIL

No XENIX semaphores available

120

EISNAM

Is a named type file

121

EREMOTEIO

Remote I/O error

122

EDQUOT

Disk quota exceeded

123

ENOMEDIUM

No medium found

124

EMEDIUMTYPE

Wrong medium type

Keep in mind that in C/C++ programs it is always best to reference a specific error by its symbolic constant, as the underlying numeric value for an error can change from one implementation of UNIX to another (and even from one version of the same implementation to the next ). For example, in Solaris 2.8 (EBADRInvalid request descriptor) is associated with error number 51; in Red Hat Linux 7.3 this same error is associated with error number 53. Likewise, EIDRMIdentifier removed, is error number 43 in Red Hat Linux 7.3 but is error number 37 in Solaris 2.8.

In addition to error messages the command-line perror utility returns MyISAM/ISAM [1] table-handler error codes and messages. These codes and their associated messages are shown in Table B.2. Again, as with other error messages, these are mostly system-dependent.

[1] ISAM is short for Indexed Sequential Access Method a technique for storing and retrieving data.

Table B.2. MyISAM/ISAM Error Messages.

Error #

MyISAM/ISAM Message Generated by perror

120

Didn't find key on read or update

121

Duplicate key on write or update

122

 

123

Someone has changed the row since it was read

124

 

126

Index file is crashed/wrong file format

127

Record file is crashed

131

Command not supported by database

132

Old database file

133

No record read before update

134

Record was already deleted (or record file crashed)

135

No more room in record file

136

No more room in index file

137

No more records (read after end of file)

138

Unsupported extension used for table

139

Too big row (>= 16 M)

140

Wrong create options

141

Duplicate unique key or constraint on write or update

142

Unknown character set used

143

Conflicting table definition between MERGE and mapped table

144

Table is crashed and last repair failed

145

Table was marked as crashed and should be repaired

146

Lock timed out; retry transaction

147

Lock table is full; restart program with a larger lock table

148

Updates are not allowed under a read-only transaction

149

Lock deadlock; retry transaction

Категории