Linux下文件读写示例

1. 对于fread或fwrite查看man手册,其中要注意返回值。

2. 上述两个函数第二个参数如果是1,那么返回值即实际传输长度,如果返回值是0,一般表示文件传完;如果返回值等于需要传输长度,那么正常;如果返回值小于指定传输长度,那么有可能是最后一次传输,因为到达文件尾,也有可能是传输错误;

如果第二个参数不是1,那么就不能通过返回值判断是否传输完,要通过对应库函数来判断是否到达文件尾。如果返回小于传输长度,有可能是正常、有可能发生错误,也要通过库函数检测。

3. 示例源码如下:

#include <stdio.h>
#include <string.h>
#include <stdlib.h>


/*
Function : read data from the 2page.pdf,And write the date to write.pdf
*/




char * readFileName = "./2page.pdf";
char * writeFileName = "./write.pdf";


#define BUFFER_SIZE 2048


void main()
{
int readLengh = 0;
int realReadLengh =0;
int realWriteLengh =0;

char buf[BUFFER_SIZE];
memset(buf, 0, sizeof(buf));

FILE *readFp = fopen(readFileName, "r");
if(NULL == readFp) //if failed,fread and fwrite can't go on 
    { 
printf("readFile open failed,exit!\n"); 
exit(1);
    } 

FILE *writeFp = fopen(writeFileName, "w");
if(NULL == writeFp) //if failed,fread and fwrite can't go on 
    { 
printf("writeFile open failed,exit!\n"); 
exit(1);
    } 
/*
fread or fwrite does not distinguish between end-of-file and error, and callers must use feof(3)
and ferror(3) to determine which occurred.
*/


readLengh  = 1024;

while(1)
{
realReadLengh = fread(buf,1,readLengh, readFp);//return value equals the number of bytes transferred only when the second parameter is 1.
buf[realReadLengh] = '\0';
printf("\nrealReadLengh=%d\nbuf=\n %s\n",realReadLengh,buf);
if( realReadLengh >0 )
{
realWriteLengh = fwrite(buf,1,realReadLengh,writeFp);
printf("\nrealWriteLengh=%d\nbuf=\n %s\n",realWriteLengh,buf);
memset(buf, 0, sizeof(buf));
continue;
}
else
{
printf("read end\n");
exit(1);
}

}



}













 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值