判断文件的错误与结束状态

一.标准文件编程库用于文件状态的函数:
#include <stdio.h>
1.int ferror(FILE* stream);//只是用来判断错误是否发生,不能明确错误的内容
当文件IO 发生错误时,ferror返回非0,成功返回0
2.int feof(FILE* stream);//只是用来判断错误是否发生,不能明确错误的内容
当文件结束时,feof返回非0,否则返回0
//使用上面俩函数:
//读取文件,当文件结束时自动退出
int main()
{
    FILE* fp;
    char buf[1024];
    //1.通常使用的判断出错方法
    if((fp = fopen("/etc/passwd","r")) == NULL)
    {
        fprintf(stderr,"Error: %s","open file passwd failed");
        perror("/etc/passwd");
        exit(1);
    }
    //2.使用ferror判断文件是否发生错误
    fp = fopen("/etc/passwd","r");
    if(ferror(fp))
    {
        fprintf(stderr,"Error: %s","open file passwd failed");
        perror("/etc/passwd");
        exit(1);
    }


    //1.通常判断文件结束的方法
    while(fgets(buf,sizeof(buf),fp) != NULL)
    {
        if(fputs(buf,stdout) == EOF)
        {
            fprintf(stderr,"Error:%s","fput filed");
            break;
        }
    }
   //2.使用feof判断文件结束
    while(!feof(fp))//没结束就不退出循环
    {
        fgets(buf,sizeof(buf),fp);
        if(feof(fp))
            break;
        fputs(buf,stdout);
    }

    fclose(fp);
}


3.void clearerr(FILE* stream);
clearerr清除文件流错误标志和EOF标志。

二.标准文件编程库中用于判断文件明确错误信息的函数
当unix函数出错时,常常返回一个负值或NULL,而且整型变量errno通常被设置为含有附加信息的一个值。
#include <string.h>
1.char* strerror(int errnum);
此函数将errnum(通常就是errno的值)映射为一个出错信息字符串,并且返回此字符串的指针。
在发生错误后,立刻调用strerror(errno),就可以获取当前的错误提示信息,然后可通过fprintf将其打印到标准错误输出流中
//用法:

if((fd = open("/etc/passwd","r")) == -1)
{
    fprintf(stderr,"Error:%s",strerror(errno));
}


#include <stdio.h>
2.void perror(const char* msg);

posted @ 2015-05-08 22:36  泡菜炒米  阅读(395)  评论(0编辑  收藏  举报