標準I O庫(對流的操作)

2021-06-18 08:19:43 字數 2295 閱讀 2079

1. i/o緩衝:

緩衝機制有三種:

(1)全緩衝:一般是緩衝區滿了以後才進行實際的i/o操作。全緩衝是盡可能的多讀寫資料到緩衝區。

(2)行緩衝:當遇到換行符時,進行實際的i/o操作一般應用於標準輸入輸出。

(3)無緩衝:一般是應用物件是標準錯誤輸出,對無緩衝的流每次讀寫操作都會引起flush操作。

行緩衝的示意圖:

printf函式向標準輸出寫入多個字元,所寫入的字元被放在乙個緩衝區,直到碰到乙個換行符系統才呼叫write函式將緩衝區資料寫入到標準輸出。

採用這種機制的可以提高i/o操作效率。因為系統呼叫會請求核心的服務,會引發

cpu模式的切換 ,期間會有大量的堆疊資料儲存操作,開銷大。

緩衝機制,將多個讀寫操作合併為一次系統呼叫,減少了系統呼叫的次數,大大提高了執行效率。

2.標準i/o函式:

標準i/o函式是 對底層系統呼叫的封裝。

最終讀寫裝置或者檔案操作是需要呼叫系統i/o函式來完成的。

3.檔案指標和流

標準i/o函式使用檔案指標,檔案指標和檔案描述符是一一對應關係。

檔案指標指向的資料型別是file型。

在標準i/o中,乙個開啟的檔案成為流。

每個程序在啟動後開啟三個流:stdin(標準輸入流),stdout(標準輸出流),stderr(標準輸入流)

以下是一些常見的函式,有待補充。

4.fopen 函式

#include

file *fopen(const char *path,const char *mode);

fopen開啟由path指定的檔案,並把它與乙個檔案流關聯起來

"r"或"rb":以唯讀方式開啟。

"w"或"wb":以只寫方式開啟,並把檔案長度截短為零。

"a"或"ab":以寫方式開啟,新內容追加在檔案尾。

"r+"或"rb+"或"r+b":以更新方式開啟(讀和寫)。

"w+"或"wb+"或"w+b":以更新方式開啟,並把檔案長度截短為零。

"a+"或"ab+"或"a+b":以更新方式開啟,新內容追加在檔案尾。

fopen執行成功返回乙個非空的file*指標,失敗時返回null。

5.fread函式

從乙個檔案流離讀取資料,

#include

size_t fread(void *ptr,size_t size,size_t nmemb,file *stream);

資料從檔案流strlen獨到ptr指向的資料緩衝區。

size是每個資料記錄的長度,nmemb:要傳輸的記錄的個數。函式的返回值是成功讀到資料緩衝區裡的記錄的個數。當到達檔案結尾時,返回值會小於nmemb,或者0.

6.fwrite函式

fwrite函式從指定資料緩衝區取出資料,並寫道輸出流中。返回值是成功寫入的記錄個數。

#include

size_t fwrite(const void *ptr,size_t size ,size_t nmemb,file *stream);

fread和fwrite函式主要執行二進位制i/o操作,例如讀寫乙個二進位制資料,讀寫乙個資料結構。

7.fclose函式

用於關閉指定檔案流,原型如下:

#include

int fclose(file *fp);

8.fflush函式

把檔案流裡所有未寫出的資料立即寫出。

#include

int fflush(file * stream);

使用它,可以確保在程式繼續執行之前把重要資料都已經寫到磁碟上。呼叫fclose函式,隱含執行了一次fflush操作了。

9.fseek函式

#inclue

int fseek(file *stream,long offset,int whence);

成功返回0.錯誤返回-1

10.fgets,getc和getchar函式:

fgetc函式從檔案流裡取出下乙個位元組並返回,到達檔案尾端或者出現錯誤,則返回eof。getc和fgetc一樣。

getchar相當於getc(stdin)。

#include

int fgetc(file *stream);

int getc(file *stream);

int getchar(void);

11.fputc,putc和putchar函式

#include

int fputc(int c,file *stream);

int putc(int c,file *stream);

int putchar(int c);

C 標準庫 IO 操作

c 通過以下幾個類支援檔案的輸入輸出 開啟檔案 open a file 對這些類的乙個物件所做的第乙個操作通常就是將它和乙個真正的檔案聯絡起來,也就是說開啟乙個檔案。被開啟的檔案在程式中由乙個流物件 stream object 來表示 這些類的乙個例項 而對這個流物件所做的任何輸入輸出操作實際就是對...

檔案的操作 標準IO庫

fopen 開啟或建立檔案 fread 讀取檔案的資料 fwrite 向檔案寫入資料 fgetc 從檔案中讀乙個字元 fputc 向檔案中寫乙個字元 fscanf 從乙個流中進行格式化輸入 fprintf 格式化輸出乙個流 fseek 定位 getcwd 獲取路徑 fopen原形 file fope...

golang中的標準庫IO操作

參考鏈結 func main func main 輸出結果 2021 11 29 16 52 35.242112 c users mayanan desktop pro go common standard library main.go 20 這是一條很普通的日誌。小王子 2021 11 29 1...