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;
}