úåëðéú
äîãâéîåú àú errorno, sys_nerr, sys_errlist
/* errlist2.c - display system error messages */
#include
<unistd.h>
#include
<errno.h>
#include
<stdio.h>
main()
{
int i;
printf(" Here
are the current %d error messages:\n\n",
sys_nerr);
for (i=0; i < sys_nerr; i++)
printf("%d:
%s \n", i, sys_errlist[i]);
}
/* main */
%
cc errlist2.c
% a.out
Here are the current 126 error messages:
0:
Success
1: Operation not permitted
2:
No such file or directory
3:
No such process
4:
Interrupted system call
5:
Input/output error
6:
No such device or address
7:
Argument list too long
8:
Exec format error
9:
Bad file descriptor
10:
No child processes
11:
Resource temporarily unavailable
12:
Cannot allocate memory
13:
Permission denied
14:
Bad address
15:
Block device required
16:
Device or resource busy
17:
File exists
18:
Invalid cross-device link
19:
No such device
20:
Not a directory
21:
Is a directory
22:
Invalid argument
23:
Too many open files in system
24:
Too many open files
25:
Inappropriate ioctl for device
26:
Text file busy
27:
File too large
28:
No space left on device
29:
Illegal seek
30:
Read-only file system
31:
Too many links
32:
Broken pipe
33:
Numerical argument out of domain
34:
Numerical result out of range
35:
Resource deadlock avoided
36:
File name too long
37:
No locks available
38:
Function not implemented
39:
Directory not empty
40:
Too many levels of symbolic links
41:
(null)
42:
No message of desired type
43:
Identifier removed
44:
Channel number out of range
45:
Level 2 not synchronized
46:
Level 3 halted
47:
Level 3 reset
48:
Link number out of range
49:
Protocol driver not attached
50:
No CSI structure available
51:
Level 2 halted
52:
Invalid exchange
53:
Invalid request descriptor
54:
Exchange full
55:
No anode
56:
Invalid request code
57:
Invalid slot
58:
(null)
59:
Bad font file format
60:
Device not a stream
61:
No data available
62:
Timer expired
63:
Out of streams resources
64:
Machine is not on the network
65:
Package not installed
66:
Object is remote
67:
Link has been severed
68:
Advertise error
69:
Srmount error
70:
Communication error on send
71:
Protocol error
72:
Multihop attempted
73:
RFS specific error
74:
Bad message
75:
Value too large for defined data type
76:
Name not unique on network
77:
File descriptor in bad state
78:
Remote address changed
79:
Can not access a needed shared library
80:
Accessing a corrupted shared library
81:
.lib section in a.out corrupted
82:
Attempting to link in too many shared libraries
83:
Cannot exec a shared library directly
84:
Invalid or incomplete multibyte or wide character
85:
Interrupted system call should be restarted
86:
Streams pipe error
87:
Too many users
88:
Socket operation on non-socket
89:
Destination address required
90:
Message too long
91:
Protocol wrong type for socket
92:
Protocol not available
93:
Protocol not supported
94:
Socket type not supported
95:
Operation not supported
96:
Protocol family not supported
97:
Address family not supported by protocol
98:
Address already in use
99:
Cannot assign requested address
100:
Network is down
101:
Network is unreachable
102:
Network dropped connection on reset
103:
Software caused connection abort
104:
Connection reset by peer
105:
No buffer space available
106:
Transport endpoint is already connected
107:
Transport endpoint is not connected
108:
Cannot send after transport endpoint shutdown
109:
Too many references: cannot splice
110:
Connection timed out
111:
Connection refused
112:
Host is down
113:
No route to host
114:
Operation already in progress
115:
Operation now in progress
116:
Stale NFS file handle
117:
Structure needs cleaning
118:
Not a XENIX named type file
119:
No XENIX semaphores available
120:
Is a named type file
121:
Remote I/O error
122:
Disk quota exceeded
123:
No medium found
124:
Wrong medium type
125:
Operation canceled
%
/* testpe.c - test myperror */
#include
<unistd.h>
#include
<errno.h>
#include
<stdio.h>
myperror(char s[])
{
extern int errono;
extern int sys_nerr;
extern const char *sys_errlist[];
printf("%s:
%s\n", s, sys_errlist[errno]);
}
/* myperror */
main()
{
int i;
FILE *f;
f = fopen("/etc/passwd", "wt"); /* cannot do this */
/* Not Owner
*/
myperror("fopen1");
}
/* main */
________________________________________________
mathcs31:/home4/ronn/OS > cc testpe.c
mathcs31:/home4/ronn/OS > a.out
fopen1: Permission denied
mathcs31:/home4/ronn/OS >
/* testpe1.c - test myperror
*/
#include
<unistd.h>
#include
<errno.h>
#include
<stdio.h>
myperror(char s[])
{
fprintf(stderr, "%s: %s\n", s, sys_errlist[errno]);
}
/* myperror */
int main()
{
int i;
FILE *f;
f = fopen("/etc/passwd", "wt"); /* cannot do this */
/* Not Owner
*/
myperror("fopen1");
}
/* main */
_______________________________________________
math:/home3/ronn/OS > cc testpe1.c
math:/home3/ronn/OS > ./a.out
fopen1: Permission denied
math:/home3/ronn/OS >
úåëðéú äîãâéîåú
àú ÷øéàú äîòøëú perror
/*
testpe2.c - test perror */
#include
<unistd.h>
#include
<errno.h>
#include
<stdio.h>
int main()
{
int i;
FILE *f;
f = fopen("/etc/passwd", "wt"); /* cannot do this */
/* Not Owner
*/
perror("fopen1");
}
/* main */
_________________________________________
math:/home3/ronn/OS > cc testpe2.c
math:/home3/ronn/OS > ./a.out
fopen1: Permission denied
math:/home3/ronn/OS >
úåëðéú
äîãâéîä ùéîåù á-strerror áî÷åí sys_errlist
/*
testpe3.c - test myperror */
#include
<unistd.h>
#include
<errno.h>
#include
<stdio.h>
#include
<string.h>
myperror(char s[])
{
fprintf(stderr, "%s: %s\n", s, strerror(errno));
}
/* myperror */
int main()
{
int i;
FILE *f;
f = fopen("/etc/passwd", "wt"); /* cannot do this */
/* Not Owner
*/
myperror("fopen1");
}
/* main */
__________________________________________________
%
cc testpe3.c
%
a.out
fopen1: Permission denied
%