perror和errno的理解

1、前言

stdin:标准输入       //键盘输入的内容会存在这个文件里

stdout:标准输出     //屏幕输出的内容会存在这个文件里

stderr:标准错误      //屏幕输出的错误信息会存在这个文件里,与正常输出到stdout的信息分开

2、perror

#include <stdlib.h>

void perror(const char*s);

将上一个函数发生的错误原因输出到标准错误中stderr;s为用户的提示信息,会先被打印出来,后面会紧跟着错误原因字符串,此错误原因依照全局变量errno的值来决定要输出的字符串。

在库函数中有个errno变量,每个errno值对应着以字符串表示的错误类型。当你调用"某些"函数出错时,该函数已经重新设置了errno的值。perror函数只是将你输入的一些信息和errno所对应的错误一起输出。

#include <stdlib.h>
int main(int argc, char *argv[])
{
    FILE *fp;
    fp=fopen("/root/myfile","r+");
    if(NULL==fp)
    {
        perror("/root/myfile");
    }
    return 0;
}

 

会发现: void perror(const char*s);s是用户要输出的提示信息,perror会在后面添加   :错误原因

上一个函数即:fopen

3、errno

#include <errno.h>

errno是一个全局变量,不同的数值表示不同的出错原因;当linux系统调用api失败时,根据errno分析原因。

#include <stdlib.h>
#include <string.h>
int main(int argc, char *argv[])
{
    FILE *fp;
    fp=fopen("/root/myfile","r+");
    if(NULL==fp)
    {
        perror("/root/myfile");

        printf("errno=%d\n",errno);
        char * mesg = strerror(errno);
        printf("/root/myfile:%s\n",mesg);
    }
    return 0;
}

 

 总结:perror和打印输出strerror(errno)的效果是一样的。

发布了100 篇原创文章 · 获赞 26 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/modi000/article/details/105540769