您的位置:首页 > 运维架构 > Linux

Linux下文件读写示例

2015-08-26 12:06 633 查看
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);

}

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: