Bootstrap

fread fwrite feof ferror用法

size_t fwrite(const void *ptr, size_t size, size_t nmemb,FILE *stream);
功能:将ptr中的数据写入到文件中,写nmemb项,每一项的大小是size
参数:
    @ptr:指向被写数据的首地址
	@size:每一项的大小
	@nmemb:项目个数
	@stream:文件指针
返回值:成功返回写入项目的个数,当每一项的大小是1个字节时,返回值就是字节数
        失败返回小于项目的个数或者是0
size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream);
功能:从文件中读取数据存入到ptr中,读取nmemb项,每一项的大小是size
参数:
    @ptr:保存读取到数据的首地址
	@size:每一项的大小
	@nmemb:项目个数
	@stream:文件指针
返回值:成功返回读入项目的个数,当每一项的大小是1个字节时,返回值就是字节数
        读发生了错误或者读到文件的结尾,返回值小于项目的个数
        feof(fp) //如果这个函数返回真说明读取到文件结尾了  
        ferror(fp) //如果这个函数返回值说明读的时候发生了系统错误,错误时候返回真

feof函数作用:当文件读取结束时,判断文件读取结束的原因是否是:遇到了文件结束结束标志

ferror函数作用:在文件读取结束时,检查是否是因为遇到了文件错误标志。

 man 3                fread fwrite 实现文件拷贝示例

#include <head.h>

int main(int argc, const char* argv[])
{
    FILE *fp1, *fp2;
    // 1.检查命令行参数的个数
    if (argc != 3) {
        printf("input error,try again\n");
        printf("usage: ./a.out srcfile destfile\n");
        return -1;
    }

    // 2.只读方式打开源文件,只写方式打开目标文件
    if ((fp1 = fopen(argv[1], "r")) == NULL) {
        printf("fopen src error\n");
        return -1;
    }
    if ((fp2 = fopen(argv[2], "w")) == NULL) {
        printf("fopen dest error\n");
        return -1;
    }
    // 3.循环完成文件读写
    char s[50];
    int ret;
    while(!(feof(fp1) || ferror(fp1))){
        ret = fread(s,1,sizeof(s),fp1);
        fwrite(s,1,ret,fp2);
    }
    // 4.关闭文件
    fclose(fp1);
    fclose(fp2);
    return 0;
}

;