C語言標準IO

2021-12-29 16:30:36 字數 1381 閱讀 7192

這幾天參加中興捧月比賽,用到了c語言的標準io庫。由於對其中的一些細節不是非常清楚,導致了許多bug,花了好長時間來除錯。所以在此做個筆記,以備後查。

1. 緩衝區

全緩衝。在這種情況下,當填滿標準i/o快取後才進行實際i/o操作。對駐留在磁碟上的檔案的訪問通常是由標準i/o庫實施全緩衝的。 緩衝區可由標準io例程自動沖洗(如當填滿乙個緩衝區時),或呼叫函式fflush強制沖洗。

行緩衝。在這種情況下,當在輸入和輸出中遇到新行符時,標準i/o庫執行i/o操作,這允許我們一次輸出乙個字元(如fputc函式),但只有寫了一行之後才進行實際i/o操作。當流涉及乙個終端時(例如標準輸入和標準輸出),典型地使用行緩衝。

不帶緩衝。標準i/o庫不對字元進行緩衝。如果用標準i/o函式寫若干字元到不帶緩衝的流中,則相當於用write系統呼叫將這些字元寫到開啟的檔案上。標準出錯況stderr通常是不帶快取的,這就使得出錯資訊可以盡快顯示出來。

2. 開啟流

file *fopen(const char *filename, const char *type)

若成功,返回檔案指標;若失敗,返回null

這裡要注意引數type對開啟的流的讀寫的影響。

type 說明

r    為唯讀而開啟;檔案必須存在

w    為只寫而新建;若檔案已存在,將檔案內容截短至0

a    為在檔案尾端添寫而開啟;若檔案不存在,新建

r+    為讀寫而開啟;檔案必須存在

w+    為讀寫而新建;若檔案已存在,將檔案內容截短至0

a+    為在檔案尾端讀和寫而開啟;若檔案不存在,新建。可通過fseek或rewind重定位檔案指標位置來讀,

但寫操作將把檔案指標移回到檔案尾端

使用字元b作為type的一部分,可以區分文字檔案和二進位制檔案。但有些系統不作區分,如unix。

當以讀寫方式開啟檔案時,即type中有「+」時,在輸出操作和輸入操作之間一定要有沖洗fflush或重定位fseek、fsetpos、rewind等操作。

3. 關閉流

int fclose(file *fp)

關閉流之前,沖洗緩衝區中的輸出資料,丟棄緩衝區中的任何輸入資料。

程序正常終止時,所有帶未寫緩衝資料的流被沖洗,所有的流被關閉。異常終止時,不保證沖洗緩衝區。

4. 二進位制io

size_t fread(void *buf,            size_t size, size_t count, file *fp);

size_t fwrite(const void *buf, size_t size, size_t count, file *fp);

返回讀寫的物件數。

限制:只能用於讀在同一系統上已寫的資料。

apue

作者:iamzhaiwei

C語言標準I O

1 標準檔案 標準檔案 檔案指標 一般使用的裝置 標準輸入 stdin鍵盤 標準輸出 stdout 顯示器 標準出錯 stderr 顯示器 2 檔案操作函式 2.1 開啟檔案 include file fopen const char path,const char mode 引數說明 第乙個引數 ...

C語言標準IO

這幾天參加中興捧月比賽,用到了c語言的標準io庫。由於對其中的一些細節不是非常清楚,導致了許多bug,花了好長時間來除錯。所以在此做個筆記,以備後查。1.緩衝區 全緩衝。在這種情況下,當填滿標準i o快取後才進行實際i o操作。對駐留在磁碟上的檔案的訪問通常是由標準i o庫實施全緩衝的。緩衝區可由標...

C語言檔案IO操作(標準IO)

函式 file fopen const char path,const char mode 引數1 將要開啟的檔案路徑 引數2 開啟檔案的方式 1.r 唯讀的方式開啟 2.w 若檔案不存在則建立檔案,若存在此檔案則清空檔案內容並打卡 3.a 若檔案不存在則建立檔案,若存在則在末尾追加 不會清空原檔案...