转自:http://blog.chinaunix.net/uid-26874138-id-3192983.html
输出错误函数:
1>perror(const char *s) 用 来 将 上 一 个 函 数 发生 错 误 的 原 因 输 出 到 标 准 设备 (stderr) 。参数 s 所指的字符串会先打印出,后面再加上错误原因字符串。此错误原因依照全局变量error 的值来决定要输出的字符串。
在库函数中有个error变量,每个error值对应着以字符串表示的错误类型。当你调用"某些"函数出错时,该函数已经重新设置了error的值。perror函数只是将你输入的一些信息和现在的error所对应的错误一起输出。
2>stderr unix 标准输出(设备)文件,对应终端的屏幕。进程将从标准输入文件中得到输入数据,将正常输出数据输出到标准输出文件,而将错误信息送到标准错误文件中。
在C中,程序执行时,一直处于开启状态。 与其有关的 stdin、stdout…… 可能的使用方法有:fprintf(stderr,"error message");
默认输出到终端窗口,文件描述器代码为2。
3>strerror(int errno) 获取系统错误信息或打印用户程序错误信息。函数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.
8.int main()
9.{
10. char* filename = "test";
11. errno = 0;//在errno中已经定义。
12. int fd;
13.
14. fd = open(filename,O_RDWR);
15.
16. if(fd <=0) {
17. perror("open");
18. printf("error: %s\n",strerror(errno));
19. fprintf(stderr,"line = %d\n",__LINE__);
20. }
21.
22. errno = 1;
23. if(fd<=0) {
24. perror("open");
25. printf("error: %s\n",strerror(errno));
26. fprintf(stderr,"line = %d\n",__LINE__);
27. }
28.
29.}