您的位置:首页 > 编程语言

Unix环境编程----出错处理(errno)

2013-07-23 10:25 232 查看
当Unix函数出错时,通常会返回一个负值,而且整型变量errno通常被设置为包含出错信息的一个值。

整型变量errno包含在头文件<errno.h>中,该文件中包含了errno的各种取值,这些取值通常以字母E开头(例如:EACCESS表示没有访问权限).

        在以前的Unix系统中通常将errno定义为:

extern int errno

        但是在引入多线程的概念后,由于多线程共享内存的地址空间,每个线程都应该有属于它自己的局部errno以防止线程之间的干  扰。Linux为了支持多线程存取errno,将其定义为:

extern int *__errno_location()

#define errno (*__errno_location())

      对于errno应该知道两条规则:

  1. 如果函数没有出错,errno的值就不会被重置,在这种情况下查看errno的值没有意义,所以当且仅当函数调用出错时才去查看errno  的值。

  2. 任意函数都不会将errno的值置为0,在<errno.h>中定义的常量都不为0.

       为了方便查看错误信息,标准C提供了如下两个函数:

       1. char  *strerror(int errno)

该函数将错误码errno作为参数,将该错误码表示的详细信息作为字符串返回。

<span style="font-family:'Courier New';color:#33033;">	#include<stdio.h>
#include<string.h>
#include<errno.h>

int
main()
{
FILE *fp;

fp = fopen("/tmp/wahaha","r");

if(!fp)
{
printf("%s\n", strerror(errno));
}

return 0;
}</span>


         如果文件/tmp/wahaha不存在,将打印:

         No such file or directory

    

    2. void perror(char *message)

        perror 封装了错误码errno,将error表示的错误信息重定向到stderr上,其输出格式为:message:errno表示的错误信息.

<span style="font-family:Courier New;font-size:14px;"> #include<stdio.h>
#include<string.h>
#include<error.h>

int
main()
{
FILE *fp;

fp = fopen("/tmp/wahaha","r");

if(!fp)
{
perror("This is a error msg");
}

return 0;
}</span>

      如果文件/tmp/wahaha不存在,将打印:

       This is a error msg: No such file or directory

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: