第十一章 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的值所对应的错误提示信息。

原文地址:https://www.cnblogs.com/wolfrickwang/p/3193732.html