Chinaunix首页 | 论坛 | 博客
  • 博客访问: 526651
  • 博文数量: 96
  • 博客积分: 2102
  • 博客等级: 上尉
  • 技术积分: 1695
  • 用 户 组: 普通用户
  • 注册时间: 2012-04-11 22:12
文章分类

全部博文(96)

文章存档

2014年(2)

2012年(94)

分类: C/C++

2012-04-30 10:10:46

          对于编程序来讲,我们需要十分注意错误的返回,所以我想要谢谢我对于error.h的理解。
          对于早期的unix程序采用的“其他地方”,是一个具有外部链接的数据对象。任何失败的系统调用都从内核中存储一个叫做errno的整型变量作为错误编, 它或者返回-1,或者返回其他适当的无意义的值来说明一个错误。但是,如果两个系统调用都发生了错误,但是还没来的及输出那么其中一个错误就有可能被覆盖 掉。这是不安的。
        数学错误:
                       当一个结果在数值上太大而不能作为指定类型的浮点值表示的时候就会发生向上溢出。
                       当一个结果在数值上太小而不能作为指定类型的浮点值表示的时候就会发生向下溢出。
                       但一个结果没有位置容纳它的类型指示的有效位的时候就会发生有效值丢失。
                       当接受一个指定的参数值而产生的结果没有被定义的时候就会发生域错误。
       其中 : 域错误报告EDOM
                    溢出错误报告ERANGE
        在errno.h中
                      #ifndef   _ERRNO
                      #define _ERRNO
                       extern int errno;
                      #define  EDOM  1
                      #define  ERANGE 2
                         .................
                      #endif
输出错误函数:
1>perror() 用 来 将 上 一 个 函 数 发 生 错 误 的 原 因 输 出 到 标 准 设备 (stderr) 。参数 s 所指的字符串会先打印出,后面再加上错误原因字符串。此错误原因依照全局变量error 的值来决定要输出的字符串。
  在库函数中有个error变量,每个error值对应着以字符串表示的错误类型。当你调用"某些"函数出错时,该函数已经重新设置了error的值。perror函数只是将你输入的一些信息和现在的error所对应的错误一起输出。
2>stderr() 【unix】标准输出(设备)文件,对应终端的屏幕。进程将从标准输入文件中得到输入数据,将正常输出数据输出到标准输出文件,而将错误信息送到标准错误文件中。
在C中,程序执行时,一直处于开启状态。   与其有关的 stdin、stdout……   可能的使用方法有:fprintf(stderr,"error message");
默认输出到终端窗口,文件描述器代码为2。
3>strerror() 获取系统错误信息或打印用户程序错误信息。函数strerror返回一个错误消息字符串的指针,其内容是由实现定义的,字符串不能修、但可以在后续调用strerror函数时覆盖.

注意:
如果擅自修改errno的值,那么相应perror 、strerror 的值也会修改

例子

  1. #include<stdio.h>
  2. #include<errno.h>
  3. #include<string.h>
  4. #include<sys/types.h>
  5. #include<sys/stat.h>
  6. #include<fcntl.h>

  7. int main()
  8. {
  9.     char* filename = "test";
  10.     errno = 0;//在errno中已经定义。
  11.     int fd;
  12.    
  13.     fd = open(filename,O_RDWR);
  14.     
  15.     if(fd <=0) {
  16.         perror("open");
  17.         printf("error: %s\n",strerror(errno));
  18.         fprintf(stderr,"line = %d\n",__LINE__);
  19.     }

  20.     errno = 1;
  21.     if(fd<=0) {
  22.         perror("open");
  23.         printf("error: %s\n",strerror(errno));
  24.         fprintf(stderr,"line = %d\n",__LINE__);
  25.     }

  26. }
结果:


阅读(1425) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~