有關fread fwrite 以及fseek的總結

來源:互聯網
上載者:User

本片主要是對fread fwite 的檔案指標定位問題進行總結

fread

  功 能: 從一個流中讀資料

  函數原型: size_t fread(void*buffer,size_tsize,size_tcount,FILE*stream); 

  參 數:

  1.用於接收資料的地址(指標)(buffer

  2.單個元素的大小(size) :單位是位元組而不是位,例如讀取一個int型資料就是4個位元組

  3.元素個數(count

  4.提供資料的檔案指標(stream)

  傳回值:讀取的元素的個數

example:

void main()
{
 FILE *fp;
 char buf[10];
 if((fp=fopen("test.ini","r+"))==NULL)
 {
  printf("open error\n");
  
 }
 fread(buf,2,1,fp);
 printf("%s\n",buf);
 fread(buf,2,1,fp);
 printf("%s\n",buf);
 fclose(fp);
 
}

 

 

列印的結果說明,使用了fread以後這次讀到哪裡下次還是從上次的地方開始讀。

 

但是當我使用了w+方式開啟以後發現裡面的東西全沒了,可見使用w+回清除原來的資料。

下面看看fwrite方式 會不會改變:

void main()
{
 FILE *fp;
 char buf[3]="abc";
 if((fp=fopen("test.ini","w+"))==NULL)
 {
  printf("open error\n");
  
 }
 fwrite(buf,3,1,fp);
 //printf("%s\n",buf);
 fwrite(buf,3,1,fp);
 //printf("%s\n",buf);
 fclose(fp);
 
}

 

運行程式可見fwrite和fread一樣都是根據上次的重點來進行讀和寫。

下面寫一點fseek,是從百度百科裡看的:

 重定位流(資料流/檔案)上的檔案內部位置指標

  注意:不是定位檔案指標,檔案指標指向檔案/流。位置指標指向檔案內部的位元組位置,隨著檔案的讀取會移動,檔案指標如果不重新賦值將不會改變指向別的檔案。

int fseek(FILE *stream, long offset, int fromwhere);

函數設定檔案指標stream的位置。如果執行成功,stream將指向以fromwhere(位移起始位置:檔案頭0,當前位置1,檔案尾2)為基準,位移offset(指標位移量)個位元組的位置。如果執行失敗(比如offset超過檔案自身大小),則不改變stream指向的位置。

  fseek函數和lseek函數類似,但lseek返回的是一個off_t數值,而fseek返回的是一個整形。

成功,返回0,失敗返回-1,並設定errno的值,可以用perror()函數輸出錯誤。

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.