fopenlinux
庫函數頭文件:<stdio.h>c++
函數原型:FILE * fopen(const char * path, const char * mode);windows
參數:函數
path字符串包含欲打開的文件路徑及文件名,unix
mode字符串則表明着流形態。指針
mode有下列幾種形態字符串:內存
"r"或"rb" 以只讀方式打開文件,該文件必須存在。字符串
"w"或"wb" 以寫方式打開文件,並把文件長度截短爲零。原型
"a"或"ab" 以寫方式打開文件,新內容追加在文件尾。it
"r+"或"rb+"或"r+b" 以更新方式打開(讀和寫)
"w+"或"wb+"或"w+b" 以更新方式打開,並把文件長度截短爲零。
"a+"或"ab+"或"a+b" 以更新方式打開,新內容追加在文件尾。
字母b表示文件時一個二進制文件而不是文本文件。(linux下不區分二進制文件和文本文件)
返回值:文件順利打開後,指向該流的文件指針就會被返回。若是文件打開失敗則返回NULL,並把錯誤代碼存在errno 中。
fread
功能簡介:從一個文件流中讀數據,最多讀取count個元素,每一個元素size字節,若是調用成功返回實際讀取到的元素個數,若是不成功或讀到文件末尾返回 0。
函數原型:size_t fread ( void *buffer, size_t size, size_t count, FILE *stream) ;
參 數:
buffer:用於接收數據的內存地址
size:要讀寫的字節數,單位是字節
count:要進行讀寫多少個size字節的數據項,每一個元素是size字節.
stream:輸入流
返回值:
實際讀取的元素個數.若是返回值與count不相同,則可能文件結尾或發生錯誤,從ferror和feof獲取錯誤信息或檢測是否到達文件結尾.
fwrite
功能簡介:向文件寫入一個數據塊
函數原型:size_t fwrite(const void* buffer, size_t size, size_t count, FILE* stream);
參數:
buffer:是一個指針,對fwrite來講,是要獲取數據的地址;
size:要寫入內容的單字節數;
count:要進行寫入size字節的數據項的個數;
stream:目標文件指針;
返回值:返回實際寫入的數據塊數目
fflush
功能簡介:把文件流裏的全部爲寫出數據馬上寫出。
函數原型:int fflush(FILE *stream);
fseek
功能簡介:是lseek系統調用對應的文件流函數。它在文件流裏爲下一次讀寫操做指定位置。
函數原型:int fseek(FILE *stream, long offset, int fromwhere);
參數:
stream爲文件指針參數
offset爲偏移量,正數表示正向偏移,負數表示負向偏移
fromwhere設定從文件的哪裏開始偏移,可能取值爲:SEEK_CUR、 SEEK_END 或 SEEK_SET
SEEK_SET: 文件開頭
SEEK_CUR: 當前位置
SEEK_END: 文件結尾
其中SEEK_SET,SEEK_CUR和SEEK_END依次爲0,1和2.
返回值:
若是執行成功,stream將指向以fromwhere爲基準,偏移offset(指針偏移量)個字節的位置,函數返回0。
若是執行失敗(好比offset超過文件自身大小),則不改變stream指向的位置,函數返回一個非0值。
---------------------------------------------------------------------------------------------------------------------------------------
freopen
函數原型:FILE * freopen ( const char * filename, const char * mode, FILE * stream );
參數:
filename: 要打開的文件名
mode: 文件打開的模式,和fopen中的模式(r/w)相同
stream: 文件指針,一般使用標準流文件(stdin/stdout/stderr)
返回值:
若是成功則返回該指向該stream的指針,不然爲NULL。
做用:用於重定向輸入輸出流的函數,將stream中的標準輸入、輸出、錯誤或者文件流重定向爲filename文件中的內容。linux下須要重定向輸出很容易使用 ./程序名 >test (>>test 追加),windows下的輸入輸出重定向可使用freopen。
使用方法: 由於文件指針使用的是標準流文件,所以咱們能夠不定義文件指針。
咱們使用freopen()函數以只讀方式r(read)打開輸入文件test.in ,freopen("test.in", "r", stdin);
這樣程序的輸入就會從標準輸入流stdin轉換到從文件"test.in"中輸入而後使用freopen()函數以寫入方式w(write)打開輸出文件test.out,freopen("test.out", "w", stdout);程序的輸出就會從原來的標準輸出變成寫入文件"test.out"中