標準輸入輸出的基本操作,包括文件的打開與關閉,緩衝區的操作
非格式化輸入輸出,包括單個字節、字符串以及數據塊的輸入輸出
格式化輸入輸出
1.標準輸入輸出的基本操作
標準輸入文件(stdin):一般爲鍵盤
標準輸出文件(stout):一般爲顯示器
標準錯誤輸出文件(stderr):一般爲顯示器
1.文件的打開
操作文件之前要打開文件,打開文件主要是在系統中分配一些資源用於保存該文件的狀態信息,並獲取文件的指針,
打開文件的函數爲fopen
2.文件的關閉
fclose函數
3.緩衝區的刷新
刷新操作是指將緩衝區中的數據清除
fflush函數將緩衝區中的數據寫入到磁盤文件或輸出到用戶終端,同時清空緩衝區
fpurge函數將緩衝區的數據直接清除,包括尚未讀取或寫入的數據
4.緩衝區屬性的設置
緩衝區的大小和類型等都可以通過函數來設置,緩衝區的類型有下面3種。
全緩衝:緩衝區被填滿後才執行輸入輸出操作,將數據寫入到磁盤文件或輸出到用戶終端。
行緩衝:緩衝區中填入換行符時,執行輸入輸出操作
無緩衝:不對數據進行緩存,標準錯誤輸出stderr一般就是無緩衝的,這可以使錯誤信息儘快地顯示出來。
打開文件後,用戶可以使用下面的函數來設定自己的文件緩衝區,而不使用fopen函數打開文件設定的默認緩衝區。
定義:
int setvbuf(FILE * stream,char * buf,int mode,size_t size);
說明:
在打開文件流後, 讀取內容之前, 調用setvbuf()可以用來設置文件流的緩衝區。參數stream爲指定的文件流,
參數buf指向自定的緩衝區起始地址, 參數size爲緩衝區大小,
參數mode有下列幾種
_IONBF 無緩衝IO
_IOLBF 以換行爲依據的無緩衝IO
_IOFBF 完全無緩衝IO。如果參數buf爲NULL指針, 則爲無緩衝IO。
除上面函數外,還有如下3個函數:
setbuf
setbuffer
setlinebuf
2.非格式化輸入輸出
非格式化輸入輸出包括單個字節輸入輸出、字符串輸入輸出以及數據塊輸入輸出
1.單個字節輸入輸出
從文件讀一個字節
fgetc
getchar函數從標準輸入讀一個字節,等價於fgetc(stdin)
向指定文件寫一個字節
fputc
putchar函數可以向標準輸出寫一個字節,等價於fputc(c, stdout)
2.字符串輸入輸出
fgets函數可以從指定的文件中讀一行字符到緩衝區中,
fputs函數可以向指定的文件寫入一個字符串
feof函數來測試讀寫位置是否到達文件末尾
3.數據塊輸入輸出
對文件進行輸入輸出操作,也可以以數據塊爲單位進行,所謂數據塊,是指一串固定長度的字節,從文件中
讀取數據塊用fread函數
向文件中寫入數據塊使用fwrite函數
3.格式化輸入輸出
格式化輸出fprintf
printf等價於fprintf(stdout,...)
格式化輸入函數爲fscanf
scanf等價於fscanf(stdin,...)