1. 程式人生 > >【linux--菜鳥學習之路】fread和fwrite

【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的大小來一次性讀寫的)