perror strerror使用方法

Posted Malphite

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了perror strerror使用方法相关的知识,希望对你有一定的参考价值。

 1. 简介

很多系统函数在错误返回时将错误原因记录在libc定义的全局变量errno中,每种错误原因对应一个错误码。

errno在头文件errno.h中声明,是一个整型变量,所有错误码都是正整数。然后我们可以用perror

strerror函数将errno解释成字符串

perror

#include <stdio.h>

void perror(const char *s);

基于errno的当前值,在标准出错上产生一条出错信息,然后返回。它首先输出由msg指向的字符串,然后是一个冒号,一个空格,接着是对应于errno值的出错信息,最后是一个换行符。
strerror
#include <string.h>

char *strerror(int errnum);

将errnum(它通常就说errno值)映射为一个出错信息字符串,并返回此字符串的指针。

perror是将errno对应的错误消息的字符串打印到标准错误输出上,即stderr或2上,若你的程序将标准错误输出重定向到/dev/null,那就看不到了,就不能用perror了。而 strerror的作用只是

将errno对应的错误消息字符串返回,要怎样处理完全由你自己决定。通常我们选择把错误消息保存到日志文件中,即写文件,所以通常可以用fprintf(fp, "%s", strerror(errno))将错误消息打印

到fp指向的文件中。其中perror中errno对应的错误消息集合跟strerror是一样的,也就是说不会漏掉某些错误。

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

int main()
{
        int fd = 111111;
        int ret = 0;
        if((ret = close(fd)) == -1)
        {
                perror("close error");
                fprintf(stderr,"close error msg is :%s\\n",strerror(errno));
                printf("close error msg is :%s\\n",strerror(errno));
        }
        return 0;
}

参考:http://www.cnblogs.com/zjfdbz/archive/2012/12/16/2821061.html

 

以上是关于perror strerror使用方法的主要内容,如果未能解决你的问题,请参考以下文章

C/C++ Linux 出错处理函数(strerror 与 perror)

C/C++ Linux 出错处理函数(strerror 与 perror)

linux 中的errno 和 strerror(errno)

系统编程错误处理

C基础知识(11):错误处理

如何在 C 中打印 errno 的符号名称?