Linux系统编程:errno,perror,strerror

 一:  errno变量

    Linux系统函数出错时通常会返回一个负值,并把整形变量errno设置为具有特定信息的值。

    errno被POSIX和ISO C定义为一个符号,它拓展成为一个可修改的整型左值。它可以是一个包含出错编号的整数,也可以是一个返回出错编号指针的函数。

    以前errno被定义成extern int errno,但这样会存在一个问题:在多线程环境中errno会被多个线程共享,当线程A调用系统函数出错时errno值会被改变,这时操作系统调度让线程B执行,线程B调用系统函数也出错,errno值再次被改变,当线程A再次被调度时去检测errno值,得到的却是错误的信息!

    现在这种情况已被改善:每个线程都有属于自己的局部errno,这样当前线程使用的errno不必担心被其他线程修改。

    errno被定义在头文件中。


    对于errno有两点需要注意:

    1. 如果系统函数被调用后没有出错,其值不会被例程清除。因此,仅当函数的返回值指明出错时,我们才去检验其值。

    2. 任何函数都不会把errno设置为0,而且在中定义的所有常量都不为0。

    综合上述两点,当使用一个无法从返回值上判断正误的的函数前最好先把errno清0,函数如果没有正确执行,则可通过errno判断哪里出现了问题。


 二:  错误处理函数

    C标准定义了两个错误处理函数,用于打印错误信息:

    1. strerror

你可能感兴趣的:(linux系统编程,linux,编程)