文件IO编程十

(1) fgets 详解

函数:char *fgets(char *s, int size, FILE *stream);

说明:fgets()用来从参数stream所指的文件内读入字符并存到参数s所指的内存空间,直到出现换行字符,读到文件尾或是已读了size-1个字符为止,最后会加上NULL作为字符串结束。 若成功则返回s指针,返回NULL则失败。


(2) fputs详解

函数:int fputs(const char *s, FILE *stream);

说明:fputs()用来将参数s所指的字符串写入到参数stream所指的文件中,成功则返回写出的字符个数,失败则返回EOF。

都是行缓冲,都是对文本文件操作。


程序:每次都读99个字节,会自动加上\0

char buf[10];

while(1)

{

bzero(buf, 100);

if(fgets(buf, 100, fp_src) == NULL)

{

if(feof(fp_src))

break;

if(ferror(fp_src))

{

perror("fgets() failed");

break;

}

}

fputs(buf, fp_dst);

}


上面介绍的是行缓冲,下面介绍的是块缓冲。而且下面的称为直接IO函数,二进制IO函数。

(3) fread/fwrite 详解

函数:size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream);

说明:参数stream为已经打开的文件指针,参数ptr为欲存放读取进来的数据空间,读取的字符以参数size*nmemb来决定。fread()会返回实际读取到的nmemb数目,如果此值比参数nmemb来的小。则代表可能读到了文件尾或者失败,这时必须用feof()或者ferror()来判断。

函数:size_t fwrite(void *ptr, size_t size, size_t nmemb, FILE *stream);

说明:会返回实际写入的nmemb数目

假如有99个字符,size是20,nmemb是5,那么将返回4。此时比nmemb小1,就要进行判断


(3) ftell

函数:long ftell(FILE *stream);

说明:ftell()用来取得文件流目前的读写位置,参数stream为已打开的文件指针。当调用成功则会返回目前的读写位置。若有错误则返回1,errno会存放错误代码。

程序:

char buf[20*5];

int nread;

long begin, end;

while(1)

{

bzero(buf, 20*5);

begin = ftell(fp_src);

int nread = fread(buf, 20, 5, fp_src);

if(nread < 5)

{

if(feof(fp_src))

{

end = ftell(fp_src);

fwrite(buf, end-begin, 1, fp_src);

break;

}

if(ferror(fp_src))

{

perror("fread() failed");

exit(1);

}

fwrite(buf, 20, 5, fp_src);

}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值