【linux--菜鸟学习之路】fread和fwrite

fread

函数名: fread
功  能: 从一个流中读数据
用  法: int fread(void *ptr, int size, int nitems, FILE *stream);
参  数:用于接收数据的地址(ptr) 
        单个元素的大小(size) 
        元素个数(nitems)
        提供数据的文件指针(stream)
返回值:成功读取的元素个数

fwrite函数

1.函数功能

用来读写一个数据块。

2.一般调用形式

fwrite(buffer,size,count,fp);

3.说明

(1)buffer:是一个指针,对fread来说,它是读入数据的存放地址。对fwrite来说,是要输出数据的地址。

(2)size:要读写的字节数;

(3)count:要进行读写多少个size字节的数据项;

(4)fp:文件型指针

个人理解 -流:相当于 size 的大小(不一定对);如果定义size=128,那么这个数据流的大小就是128为基本单位;

#include "stdio.h"
//#include "unistd.h"
int main(int argc, char *argv[])
{
        FILE *src_fp , *des_fp;//定义指向源文件和目标文件的指针
        int read_ret;
        char read_buf[128]={0};
        //char buf[]="hello linux";
        if(argc<3)
        {
                printf("src ? des? \n ");
                return -1;
        }
        src_fp=fopen(argv[1],"r");
        if(src_fp==NULL)
        {
                printf("open src %s fail\n",argv[1]);
                return -2;
        }
        des_fp=fopen(argv[2],"w");
        if(des_fp==NULL)
        {
                printf("open des %s fail\n",argv[2]);
                return -3;
        }
        while(1)                 //重点在这里
        {
                read_ret=fread(read_buf,1,128,src_fp);                   //定义了128个字节大小的文件流
                printf("read_ret=%d ",read_ret);

                fwrite(read_buf,1,read_ret,des_fp);                           //写到目标文件中
                if(read_ret < 128)                                                     
                {
                        printf("read file %s end \n",argv[1]);
                        break;
                }
        //      printf("begin write\n");
        //      fwrite(read_buf,1,read_ret,des_fp);
        }
        fclose(src_fp);
        fclose(des_fp);
        return 0;
}

运行后将a.c内容复制到b.c,结果如下:

接下来将代码修改:

while(1)                 //重点在这里
        {
                read_ret=fread(read_buf,1,128,src_fp);                   //定义了128个字节大小的文件流
                printf("read_ret=%d ",read_ret);

               // fwrite(read_buf,1,read_ret,des_fp);                           //写到目标文件中
                if(read_ret < 128)                                                     
                {
                        printf("read file %s end \n",argv[1]);
                        break;
                }
              printf("begin write\n");
              fwrite(read_buf,1,read_ret,des_fp);                              //将写操作,修改到这里
        }

运行结果如下:

如果觉得不想看  ,可以看下面的:

可以看出,a.c和b.c的内容不一样,具体原因是:

这里的最后一个71,这里因为小于128,所以没有写入到b.c里去;b.c比a.c正好小455-384=71;

(这也是我认为size就是流的大小,因为read_ret返回实际读到的大小,也就是他是按照这个size的大小来一次性读写的)

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值