errno表示错误代码。 记录系统的最后一次错误代码。代码是一个int型的值,在errno.h中定义。系统每一次出错都会对应一个出错代码,例如12表示“Cannot allocate memory"。
stderr是linux(unix)标准出错输出。linux中的一个进程启动时,都会打开三个文件:标准输入、标准输出和标准出错处理。通常这三个文件都与终端联系。这三个文件分别对应文件描述符0、1、2。系队统自定义了三个文件指针stdin、stdout、stderr,分别指向标准输入、标准输出和标准出错输出。通常结合fprintf使用:fprintf(stderr,"error message")。
perror是错误输出函数,在标准输出设备上输出一个错误信息。是对errno的封装。例如perror("fun"),其输出为:fun:后面跟着错误信息(加一个换行符)。包含头文件stdio.h.
stderror是通过参数errno,返回错误信息。即stderror(errno),可用printf函数打印出错信息,用于调试。包含头文件string.h。
-
测试代码
-
-
/*
-
-
*时间:2012.03.11
-
-
*功能:测试errno、perror、strerror和stderr
-
-
*目的:验证linux下出错处理
-
-
*/
-
-
#include
-
-
#include
-
-
#include
-
-
#include
-
-
-
-
int main(int argc[],char *argv[])
-
-
{
-
-
malloc(
1);
-
-
printf(
"errno = %d\n",errno);
-
-
fprintf(
stderr,
"stderr\n");
-
-
perror(
"perror");
-
-
printf(
"strerror: %s\n",strerror(errno));
-
-
-
-
malloc(
-1);
-
-
printf(
"errno = %d\n",errno);
-
-
fprintf(
stderr,
"stderr\n");
-
-
perror(
"perror");
-
-
printf(
"strerror: %s\n",strerror(errno));
-
-
-
-
return
0;
-
-
}
运行结果
3、strerror与perror、fprintf(stderr...和printf(stderr....在输出重定向下的差别
3.1 strerror()方法与perror()的用法十分相似。
然后,关于streorror()本身,可以这么理解。顾名思义,streorror=string+error,就是将errno值翻译成描述错误类型的string语句!
3.2 fprintf printf
一般情况下,你这两个语句运行的结果是相同的,没有区别,只有一下情况才有区别:
运行你的程序的时候,命令行上把输出结果进行的转向,比如使用下面的命令把你的程序a.c运行的结果转向到记事本文件a.txt:
a.exe > a.txt
在这样的情况,如果使用printf输出错误信息,会保存到a.txt文件里面,如果使用fprintf输出错误,会显示在屏幕上。