, , . $?.
( ):
− , ( ABORT EXIT main)
− 16- .
.
, :
1. ˳ . , . , ', .
2. . . , , ' .
3. . , - . , ' . - ' , ' .
4. . , . . , .
5. . , , , . ' , .
, , -1, NULL, EOF. , .
( 80%) errno , . errno . , errno .
errno , , "E", EACCES EINVAL. errno , . <errno. h>.
|
|
sys_errlist, .
sys_nerr . errno .
POSIX :
E2BIG -
EACCES - ³
EAGAIN -
EBADF -
EBADMSG -
EBUSY -
ECANCELED -
ECHILD -
EDEADLK -
EDOM -
EEXIST -
EFAULT -
EFBIG -
EINPROGRESS -
EINTR -
EINVAL -
EIO - -
EISDIR -
EMFILE -
EMLINK - '
EMSGSIZE -
ENAMETOOLONG - '
ENFILE -
ENODEV -
ENOENT -
ENOEXEC - ,
ENOLCK -
ENOMEM - '
ENOSPC - '
ENOSYS -
ENOTDIR -
ENOTEMPTY -
ENOTSUP -
ENOTTY - -
ENXIO -
EPERM -
EPIPE -
ERANGE -
EROFS -
ESPIPE -
ESRCH -
ETIMEDOUT -
EXDEV - '
.
#include <errno.h> /* */
extern int errno;
extern char *sys_errlist[];
int value;
.
if((value = sys_call(...)) < 0){
printf("Error:%s(%d)\n",sys_errlist[errno],errno);
exit(errno); /* */
}
sys_call(...)-
2. errno
UNIX errno
strerror() - . ֳ . <string. h>.
. , . open() , - -1.
fd = open("inputfile.txt",O_RDONLY);
if(fd == -1){
fprintf(stderr,"error opening file: %s\n", strerror(errno)); exit (1);
}
struct stat statbuf. ³ , fd . C fstat ( fd) statbuf
if (fstat (fd, &statbuf)==-1)
{ printf("Fstat failed; %s\n",strerror(errno)); }
perror() - errno sys_errlist stderr. ( <stdio.h>). , ' , .
|
|
1.
# Include <stdio.h>
int main (void)
{chars [] = "Hello, World!";
If (printf ("% s \ n", s)> 0)
{perror("Can ' t print ");
return -1;}
return 0;}
2.
# Include <stdio.h>
int main (void)
{FILE * fp;
fp = fopen ("perror.dat", "r");
if (! Fp)
perror (" . \ n ");
return 0;}
3.
# Include <unistd.h>
# include <fcntl.h>
# include <stdio.h>
int main (void)
{int fn1, fn2;
fn1 = open ("data1", O_RDONLY);
if (fn1 == -1)
perror (" ");
fn2=open("data2",O_WRONLY|O_TRUNC | O_CREAT,
S_IREAD | S_IWRITE);
if (fn2 == -1)
perror (" ");}
䳿, , : , , , . , , .
3. atexit()
, C C + + return main exit (). , , . exit () .
exit () :
# include <unistd.h>
void exit (int status);
status - - .
.
, exit (0) , -.
䳿 . 32 (exit handler), - , exit (), . LIFO atexit ():
ATEXIT - , , , (E) AX, . ATEXIT 0. .
# Include <stdlib.h>
int atexit (void (* func) (void);
:
# include <stdio.h>
# include <stdlib.h>
void handler1 ()
{printf
("handler1 \
n");}
void handler2 ()
{printf
("handler2 \
n");}
void handler3 ()
{printf
("handler2 \
n");}
int main ()
{atexit
(& handler1);
atexit (& handler2);
atexit (& handler3);
return
(0);}