Linux 標準IO操作函數fopen fclose fread fwrite fgetc fputc fgets fputs
前面我分享了Linux檔案系統呼叫的一些函數,是不帶快取的,一般是底層呼叫,今天來分享下上層的標準IO操作函數,也就是跨平台的,一般以f開頭
1 fopen
函數原型 FILE * fopen(const char *path,cost char *mode)
作用:開啟一個檔案,返回指向該檔案的指標
引數說明:第一個引數為欲開啟檔案的檔案路徑及檔名,第二個參數列示對檔案的開啟方式
註:mode有以下值:
r:唯讀方式開啟,檔案必須存在
r+:可讀寫,必須存在
rb+:開啟二進位制檔案,可以讀寫
rt+:開啟文字檔案,可讀寫
w:只寫,檔案存在則檔案長度清0,檔案不存在則建立該檔案
w+:可讀寫,檔案存在則檔案長度清0,檔案不存在則建立該檔案
a:附加方式開啟只寫,不存在建立該檔案,存在寫入的資料加到檔案尾,EOF符保留
a+:附加方式開啟可讀寫,不存在建立該檔案,存在寫入的資料加到檔案尾,EOF符不保留
wb:開啟二進位制檔案,只寫
wb+:開啟或建立二進位制檔案,可讀寫
wt+:開啟或建立文字檔案,可讀寫
at+:開啟文字檔案,可讀寫,寫的資料加在文字末尾
ab+:開啟二進位制檔案,可讀寫,寫的資料加在檔案末尾
由mode字元可知,上述如r、w、a在其後都可以加一個b,表示以二進位制形式開啟檔案
返回值:檔案開啟了,返回一個指向該開啟檔案的指標(FILE結構);檔案開啟失敗,錯誤上存error code(錯誤程式碼)
2 fclose
函數原型:int fclose(FILE *stream)
功能:關閉一個檔案流,使用fclose就可以把緩衝區內最後剩餘的資料輸出到磁碟檔案中,並釋放檔案指標和有關的緩衝區
3 fread
函數原型:size_t fread(void* buff,size_t size,size_t count,FILE* stream)
作用:從檔案中讀入資料到指定的地址中
引數:第一個引數為接收資料的指標(buff),也即資料儲存的地址
第二個引數為單個元素的大小,即由指標寫入地址的資料大小,注意單位是位元組
第三個引數為元素個數,即要讀取的資料大小為size的元素個素
第四個引數為提供資料的檔案指標,該指標指向檔案內部資料
返回值:讀取的總資料元素個數
4 fwrite
函數原型:size_t fwrite ( const void * ptr, size_t size, size_t count, FILE * stream )
作用:寫入資料到指定的檔案流中
引數:第一個引數為接收資料的指標(buff),也即資料儲存的地址
第二個引數為單個元素的大小,即由指標寫入地址的資料大小,注意單位是位元組
第三個引數為元素個數,即要讀取的資料大小為size的元素個素
第四個引數為提供資料的檔案指標,該指標指向檔案內部資料
返回值:寫入的總資料元素個數
例子,把file.in的檔案讀出來,寫入到file.out
5 fgetc
函數原型:int fgetc(FILE *stream)
作用:從一個流中讀取一個字元
引數:一個FILE型的指標
返回值:getc 以 unsigned char 的方式讀取檔案流,擴張為一個整數,並返回。 意思就是, getc 從檔案流中取一個位元組(8位元),並加上24個零,變成32位元整型,成為一個小於256的整數, 然後返回
6 fputc
函數原型:int fputc(int ch, FILE *stream)
作用:往一個流中輸入一個字元
引數:第一個引數ch雖然是整型,但fputc 將其寫入檔案流之前,,把整數的高24位元去掉了
第二個引數是一個FILE型的指標
返回值:如果成功輸入,fputc 返回 0,否則返回EOF(-1)
例子,把filegetc.in的檔案讀出來,寫入到fileputc.out
7 fgets
函數原型:char *fgets(char *s, int n, FILE *stream)
作用:從流中讀取n-1個字元,末尾有一個結束標誌’