lark 发表于 2015-7-27 16:09:05

文件操作函数 peeor(),ferror(); 的代码;

文件错误相关的函数;

#include<stdio.h>
#include<stdlib.h>
#define E printf("未出现错误...debug...\n");
int main(void){
        FILE *fp=NULL;
        int Eor=0;E
       
        fp=fopen("/root/noexitfile","r+");E
                //Eor=ferror(fp);E        //这是第一个出现的问题,我想取得ferror()的返回值,但是似乎出了点问题。。
        printf("\a\t文件错误代码:%d ;\n",Eor);E
        if(fp==NULL){E
                perror("\a\t标准错误打印");E        //perror()如果有多个文件被打开呢?只有1个错误的,那么它怎么去判断哪个出现错误?而我又怎么知道它打印的是哪个错误的文件?[也许...我还是没太理解 ==];
                //clearerr(fp);E        //这里能是不是文件打开失败的原因?
                exit(0);
        }
        fclose(fp);E        //当文件打开失败的时候,就不必要fclose()了吧?
return 0;
}


时间:2013年7月27日16:10:59;

ryxcaixia 发表于 2015-7-27 16:09:06

本帖最后由 ryxcaixia 于 2015-7-27 16:39 编辑

额。。楼主 好巧 又见到你了
一个一个问题说

1:
//Eor=ferror(fp);E      //这是第一个出现的问题,我想取得ferror()的返回值,但是似乎出了点问题。


ferror是测试文件读写期间获得的错误 而不是测试在打开期间的错误
换句话说ferror这个函数接受一个有效的文件流, 即一定是成功打开(非空)的文件流. 如果你给他一个空指针, 即打开失败的文件指针, 这个会直接报错

2:
perror()如果有多个文件被打开呢?只有1个错误的,那么它怎么去判断哪个出现错误?而我又怎么知道它打印的是哪个错误的文件?[也许...我还是没太理解 ==];
我理解你是想同时打开多个文件, 这个涉及到多线程操作要考虑进程调度, 以及对同一个文件读写, 这个在是很不稳定的事情 多个进程对同一个文件读也就罢了 因为每个进程项都有自己的文件指针偏移量 如果多个进程同时对一个文件写 就会很纠结
如果是打开多个文件, 在一个进程里没问题, 但是最好遵循以下原则
同时只存在一个打开的文件流, 操作完之后再操作下一个文件流

3:
如果一个文件打开失败, 那么你千万不要再进行关闭文件的操作, 因为一定会报错
打开文件获得一个空指针, 强行去释放这个空指针里的内容, 必然出错

lark 发表于 2015-7-27 16:40:43

ryxcaixia 发表于 2015-7-27 16:09
额。。楼主 好巧 又见到你了
一个一个问题说



好快的速度!!!!!现在对你可是佩服的五体投地了。大神,你这太厉害。

ryxcaixia 发表于 2015-7-27 16:41:01

{:9_240:}{:9_240:}{:9_240:}{:9_240:}{:9_240:}{:9_240:}{:9_240:}

ryxcaixia 发表于 2015-7-27 16:41:15

lark 发表于 2015-7-27 16:40
好快的速度!!!!!现在对你可是佩服的五体投地了。大神,你这太厉害。

与君共勉{:9_240:}{:9_240:}{:9_240:}{:9_240:}{:9_240:}{:9_240:}{:9_240:}{:9_240:}{:9_240:}{:9_240:}

lark 发表于 2015-7-27 16:46:41

ryxcaixia 发表于 2015-7-27 16:41
与君共勉

:handshake
页: [1]
查看完整版本: 文件操作函数 peeor(),ferror(); 的代码;