資料流 I/O
這些函式會處理不同大小和格式的資料,範圍從單一字元到大型資料結構。 它們也提供緩衝處理,如此可改善效能。 資料流緩衝區的預設大小是 4K。 這些常式只會影響執行階段程式庫常式所建立的緩衝區,而且不會影響作業系統所建立的緩衝區。
串流 I/O 例程
常式 | 使用 |
---|---|
clearerr , clearerr_s |
清除資料流的錯誤指標 |
fclose |
關閉資料流 |
_fcloseall |
關閉所有開啟的資料流,但 stdin , stdout 和 stderr 除外 |
_fdopen , wfdopen |
關聯資料流與已開啟檔案的檔案描述項 |
feof |
測試資料流上的檔案結尾 |
ferror |
測試資料流上的錯誤 |
fflush |
將資料流清除至緩衝區或存放裝置 |
fgetc , fgetwc |
從資料流讀取字元 ( getc 和 getwc 的函式版本) |
_fgetchar , _fgetwchar |
從 stdin 讀取字元 ( getchar 和 getwchar 的函式版本) |
fgetpos |
取得資料流的位置指標 |
fgets , fgetws |
從資料流讀取字串 |
_fileno |
取得與資料流相關聯的檔案描述項 |
_flushall |
將所有資料流清除至緩衝區或存放裝置 |
fopen 、 、 _wfopen 、 fopen_s _wfopen_s |
開啟資料流 |
fprintf 、_fprintf_l 、fwprintf 、_fwprintf_l 、fprintf_s 、_fprintf_s_l 、、、 fwprintf_s _fwprintf_s_l |
將格式化資料寫入資料流 |
fputc , fputwc |
將字元寫入資料流 ( putc 和 putwc 的函式版本) |
_fputchar , _fputwchar |
將字元寫入 stdout ( putchar 和 putwchar 的函式版本) |
fputs , fputws |
將字串寫入資料流 |
fread |
從資料流讀取未格式化資料 |
freopen 、 、 _wfreopen 、 freopen_s _wfreopen_s |
將 FILE 資料流指標重新指派給新的檔案或裝置 |
fscanf 、、fscanf_s fwscanf 、_fscanf_s_l 、、、 fwscanf_s _fwscanf_s_l |
從資料流讀取格式化資料 |
fseek , _fseeki64 |
將檔案位置移至指定的位置 |
fsetpos |
設定資料流的位置指標 |
_fsopen , _wfsopen |
以檔案共用開啟資料流 |
ftell , _ftelli64 |
取得目前檔案位置 |
fwrite |
將未格式化資料項目寫入資料流 |
getc , getwc |
從資料流讀取字元 ( fgetc 和 fgetwc 的巨集版本) |
getchar , getwchar |
從 stdin 讀取字元 ( fgetchar 和 fgetwchar 的巨集版本) |
_getmaxstdio |
傳回允許在資料流 I/O 層級同時開啟的檔案數目。 |
gets_s , _getws_s |
從 stdin 讀取行 |
_getw |
從資料流讀取二進位 int |
printf 、_printf_l 、wprintf 、_wprintf_l printf_s 、、、_printf_s_l 、、 wprintf_s _wprintf_s_l |
將格式化資料寫入 stdout |
putc , putwc |
將字元寫入資料流 ( fputc 和 fputwc 的巨集版本) |
putchar , putwchar |
將字元寫入 stdout ( fputchar 和 fputwchar 的巨集版本) |
puts , _putws |
將行寫入資料流 |
_putw |
將二進位 int 寫入資料流 |
rewind |
將檔案位置移至資料流開頭 |
_rmtmp |
移除 tmpfile 所建立的暫存檔案 |
scanf 、_scanf_l 、wscanf 、_wscanf_l scanf_s 、、、_scanf_s_l 、、 wscanf_s _wscanf_s_l |
從 stdin 讀取格式化資料 |
setbuf |
控制資料流緩衝 |
_setmaxstdio |
設定在資料流 I/O 層級同時開啟的檔案數目上限。 |
setvbuf |
控制資料流緩衝和緩衝區大小 |
_snprintf 、、_snprintf_s _snwprintf 、_snprintf_s_l 、、、 _snwprintf_s _snwprintf_s_l |
將所指定長度的格式化資料寫入字串 |
_snscanf 、、_snscanf_s _snwscanf 、_snscanf_s_l 、、、 _snwscanf_s _snwscanf_s_l |
從標準輸入資料流讀取所指定長度的格式化資料。 |
sprintf 、、sprintf_s swprintf 、_sprintf_s_l 、、、 swprintf_s _swprintf_s_l |
將格式化資料寫入字串 |
sscanf 、、swscanf 、sscanf_s _sscanf_s_l、、 swscanf_s _swscanf_s_l |
從字串讀取格式化資料 |
_tempnam , _wtempnam |
在指定的目錄中產生暫存檔名 |
tmpfile , tmpfile_s |
建立暫存檔 |
tmpnam 、 、 _wtmpnam 、 tmpnam_s _wtmpnam_s |
產生暫存檔名 |
ungetc , ungetwc |
將字元推送回資料流 |
_vcprintf 、、_vcprintf_s _vcwprintf 、_vcprintf_s_l 、、、 _vcwprintf_s _vcwprintf_s_l |
將格式化資料寫入主控台。 |
vfprintf 、、vfprintf_s vfwprintf 、_vfprintf_s_l 、、、 vfwprintf_s _vfwprintf_s_l |
將格式化資料寫入資料流 |
vprintf 、、vprintf_s vwprintf 、_vprintf_s_l 、、、 vwprintf_s _vwprintf_s_l |
將格式化資料寫入 stdout |
_vsnprintf 、_vsnwprintf 、、_vsnprintf_s vsnprintf_s 、_vsnprintf_s_l 、、、 _vsnwprintf_s _vsnwprintf_s_l |
將所指定長度的格式化資料寫入緩衝區 |
vsprintf 、、vsprintf_s vswprintf 、_vsprintf_s_l 、、、 vswprintf_s _vswprintf_s_l |
將格式化資料寫入緩衝區 |
程式開始執行時,啟動程式碼會自動開啟數個資料流:標準輸入 (由 stdin
指向)、標準輸出 (由 stdout
指向) 和標準誤差 (由 stderr
指向)。 預設會將這些資料流導向主控台 (鍵盤和螢幕)。 使用 freopen
將 stdin
、 stdout
或 stderr
重新導向磁碟檔案或裝置。
預設會緩衝處理使用資料流常式所開啟的檔案。 stdout
和 stderr
函式會在每次呼叫連結庫之後寫入字元裝置時排清,或是寫入字元裝置時。 如果程式異常終止,則可能未清除輸出緩衝區,導致資料遺失。 使用 fflush
或 _flushall
來確保與指定檔案相關聯的緩衝區已排清至操作系統,或清除所有開啟的緩衝區。 操作系統可以在將數據寫入磁碟之前快取數據。 認可到磁碟功能可確保如果系統失敗,排清的緩衝區內容不會遺失。
有兩種方式可以將緩衝區內容認可至磁碟:
使用檔案 COMMODE.OBJ 進行連結,以設定全域認可旗標。 全域旗標的預設設定是
n
(表示「不認可」)。使用
c
或fopen
,將模式旗標設為_fdopen
。
不論全域認可/不認可旗標的狀態為何,特別使用 c
或 n
旗標所開啟的任何檔案都是根據旗標所運作。
如果您的程式未明確關閉數據流,則程式終止時會自動關閉數據流。 不過,您應該在程式完成資料流的處理時關閉資料流,因為一次可以開啟的資料流數目有限。 如需此限制的資訊,請參閱 _setmaxstdio
。
只有在具有 fflush
或是檔案定位函式 (fseek
、 fsetpos
或 rewind
) 的中間呼叫時,輸入才能直接遵循輸出。 如果輸入作業遇到檔案結尾,則輸入可以接著輸出,而不需要對檔案定位函式進行介入呼叫。