fopen用法

最近在做聊天室時寫到文件傳輸功能,使用到了fopen函數。發現相比於open函數在參數上要簡單很多。

表頭文件 
  #include 
  定義函數 
  FILE * fopen(const char * path,const char * mode); 
  函數說明 
  參數path字符串包含欲打開的文件路徑及文件名,參數mode字符串則代表着流形態。 
  mode有下列幾種形態字符串: 
  r 打開只讀文件,該文件必須存在。 
  r+ 打開可讀寫的文件,該文件必須存在。 
  w 打開只寫文件,若文件存在則文件長度清爲0,即該文件內容會消失。若文件不存在則建立該文件。 
  w+ 打開可讀寫文件,若文件存在則文件長度清爲零,即該文件內容會消失。若文件不存在則建立該文件。 
  a 以附加的方式打開只寫文件。若文件不存在,則會建立該文件,如果文件存在,寫入的數據會被加到文件尾,即文件原先的內容會被保留。 
  a+ 以附加方式打開可讀寫的文件。若文件不存在,則會建立該文件,如果文件存在,寫入的數據會被加到文件尾後,即文件原先的內容會被保留。 
  上述的形態字符串都可以再加一個b字符,如rb、w+b或ab+等組合,加入b 字符用來告訴函數庫打開的文件爲二進制文件,而非純文字文件。不過在POSIX系統,包含Linux都會忽略該字符。由fopen()所建立的新文件會具有S_IRUSR|S_IWUSR|S_IRGRP|S_IWGRP|S_IROTH|S_IWOTH(0666)權限,此文件權限也會參考umask 值。 
  返回值 
  文件順利打開後,指向該流的文件指針就會被返回。若果文件打開失敗則返回NULL,並把錯誤代碼存在errno 中。 
  附加說明 

  一般而言,開文件後會作一些文件讀取或寫入的動作,若開文件失敗,接下來的讀寫動作也無法順利進行,所以在fopen()後請作錯誤判斷及處理。 

fopen和open之間的區別

1、緩衝文件系統與非緩衝系統的區別

緩衝文件系統(fopen):在內存爲每個文件開闢一個緩存區,當執行讀操作,從磁盤文件將數據讀入內存緩衝區,裝滿後從內存緩衝區依次讀取數據。寫操作同理。
內存緩衝區的大小影響着實際操作外存的次數,緩衝區越大,操作外存的次數越少,執行速度快,效率高。緩衝區大小由機器而定。
藉助文件結構體指針對文件管理,可讀寫字符串、格式化數據、二進制數據。
非緩衝文件系統(open):依賴操作系統功能對文件讀寫,不設文件結構體指針,只能讀寫二進制文件。

2、open屬於低級IO,fopen屬於高級IO

3、open返回文件描述符,屬於用戶態,讀寫需進行用戶態與內核態切換。
   fopen返回文件指針

4、open是系統函數,不可移植
   fopen是標準C函數,可移植

5、一般用fopen打開普通文件,open打開設備文件

6、如果順序訪問文件,fopen比open快
   如果隨機訪問文件,open比fopen快

發佈了60 篇原創文章 · 獲贊 26 · 訪問量 5萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章