第十一章 Linux系统编程错误处理
(1 )errno
在系统编程中错误通常通过函数返回值来表示,并通过特殊变量errno来描述。每个线程都有自己的errno,根据errno值的不同,我们就可以知道自己的程序发生了什么错误,然后进行相应的处理。
errno这个全局变量在<errno.h>, extern int * __errno_location(void); #define errno (*__errno_location())。
关于errno有三点需要特别注意:
1> 如果系统调用或库函数正确执行的话,errno的值是不会被清零。所以,在利用errno之前,最好先对函数的返回值进行判断,看是否发生了错误,返回值错误再利用errno判断时哪里发生了错误。如果一个函数无法从返回值上判断正误,而只能通过errno来判断出错,那你在调用它之前必须手动将errno清零!
2> 系统调用或库函数正确执行,并不保证errno的值不会被改变!
3> 任何错误号(即发生错误时errno的取值)都是非0的。
综上所述,当需要用errno来判断函数是否正确执行的时候,最好先将errno清零,函数执行结束时,通过其返回值判断函数是否正确执行,若没有正确执行,再根据errno判断时哪里发生了错误。
(2) 错误处理函数
perror和strerror函数都是用来打印错误提示信息的,它们的原型分别是:
1> #include <stdio.h> void perror(const char *s); 它先打印s指向的字符串,然后输出当前errno值所对应的错误提示信息。
2> #include <string.h> char *strerror(int errnum); 它返回errnum的值所对应的错误提示信息。