嵌入式Linux C编程学习之路(十四)——标准IO之feof,ferror,clearerr

1. 当返回错误时,怎样判读是已经到达文件结尾,还是读错呢?

 a. int feof(FILE *stream);

功能:判断是否已经到文件结束

参数:文件流

返回值:到文件结束,返回为非0,没有则返回0

b.int ferror(FILE *stream);

功能:判断是否读写错误

参数:文件流

 

返回值:是读写错误,返回为非0,不是则返回0

c.void clearerr(FILE *stream);

功能:清除流错误

参数:文件流

 

2. 通过检查fgetc的返回值,判断是文件尾还是出错

 

#include "stdio.h"

int main(int argc, char *argv[]){

FILE *fp;

int ret;

fp = open("./a.c","w+");

if(fp == NULL){

printf("open file a.c error\n");

return -1;

}

printf("open file a.c success\n");



fputc('a',fp);

rewind(fp);



ret = fgetc(fp);

printf("ret = %c\n",ret);





ret = fgetc(fp);

printf("ret = %d\n",ret);



printf("1feof=%d,ferror=%d\n",feof(fp),ferror(fp));



clearerr(fp);

printf("2feof=%d,ferror=%d\n",feof(fp),ferror(fp));



fclose(fp);



return 0;

}





 3. 通过检查fgets的返回值,判断是文件尾还是出错



#include "stdio.h"



int main(int argc, char *argv[]){

FILE *fp;

char buf[] = "hello linux\n";

char readbuf[128] = {0};

char *ret;



fp = open("./a.c","w+");

if(fp == NULL){

printf("open file a.c error\n");

return -1;

}

printf("open file a.c success\n");



fput(buf,fp);

rewind(fp);



fgets(readbuf,128,fp);

printf("1readbuf : %s\n",readbuf);



memset(readbuf,128,0);



ret = fgets(readbuf,128,fp);

printf("2readbuf = %s,ret=%p\n",readbuf,ret);



printf("feof=%d,ferror=%d\n",feof(fp),ferror(fp));



fclose(fp);



return 0;

}

 

 

 

 

 

4. 例 cat 命令的实现

 

#include "stdio.h"

#include "unistd.h"

#include "fcntl.h"

#include "string.h"



int main(int argc, char *argv[]){

FILE *src_fp;

int read_ret;



if(argc < 2){

printf("please input src file \n");

return -1;

}



src_fp = fopen(argv[1],"r");

if(src_fp == NULL){

printf("open src file %s error \n",argv[1]);

return -2;

}



while(1){

read_ret = fgetc(src_fp);

if(feof(src_fp)){

printf("read file %s end \n",argv[1]);

break;

}

fputc(read_ret,stdout);

}



fclose(src_fp);



return 0;

}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值