errno是什么?

Posted on 2009-07-18 13:57 天边蓝 阅读(1418) 评论(0)  编辑 收藏 引用 所属分类: cplusplus

errno是什么?
为防止和正常的返回值混淆,系统调用并不直接返回错误码,而是将错误码放入一个名为errno的全局变量中。如果一个系统调用失败,你可以读出errno的值来确定问题所在。
errno不同数值所代表的错误消息定义在errno.h中,你也可以通过命令"man 3 errno"来察看它们。
需要注意的是,errno的值只在函数发生错误时设置,如果函数不发生错误,errno的值就无定义,并不会被置为0。另外,在处理errno前最好先把它的值存入另一个变量,因为在错误处理过程中,即使像printf()这样的函数出错时也会改变errno的值。

#include <stdio.h>
#include <string.h>
#include <errno.h>

int main(void)
{
    int  fd;
    //extern int errno;这句应该是画蛇添足

    if((fd = open("no/such/file",0)) < 0)
    {
        printf("errno=%d\n",errno);
        char * mesg = strerror(errno);
        printf("Mesg:%s\n",mesg); 
    }
 
    exit(0);
}


strerror  
    #include <string.h>
  char*strerror(int errnum);

  #include <stdio.h>
  void perror(const cahr *msg);

  strerror是把一个错误numb作为参数,然后返回错误numb所对应的错误语段,一般用errno。
  perror是在标准输出上输出msg字符串,然后再后面加上:错误语段(这个错误语段对应这时的errno)。
  测试代码如下:
  #include <stdio.h>
  2 #include <string.h>
  3 #include <errno.h>
  4
  5 int
  6 main(int argc, char *argv[])
  7 {
  8 fprintf(stderr, "EACCES:%s\n", strerror(EACCES));
  9 errno = ENOENT;
  10 printf("ENOENT:%s\n",strerror(errno));
  11 perror(argv[0]);
  12 exit(0);
  13 }

 


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理


Copyright © 天边蓝