資料流 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、、fwscanffscanf_s、_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、、_snwprintf_snprintf_s、_snprintf_s_l、、、 _snwprintf_s_snwprintf_s_l 將所指定長度的格式化資料寫入字串
_snscanf、、_snwscanf_snscanf_s、_snscanf_s_l、、、 _snwscanf_s_snwscanf_s_l 從標準輸入資料流讀取所指定長度的格式化資料。
sprintf、、swprintfsprintf_s、_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、、_vcwprintf_vcprintf_s、_vcprintf_s_l、、、 _vcwprintf_s_vcwprintf_s_l 將格式化資料寫入主控台。
vfprintf、、vfwprintfvfprintf_s、_vfprintf_s_l、、、 vfwprintf_s_vfwprintf_s_l 將格式化資料寫入資料流
vprintf、、vwprintfvprintf_s、_vprintf_s_l、、、 vwprintf_s_vwprintf_s_l 將格式化資料寫入 stdout
_vsnprintf、_vsnwprintf、、vsnprintf_s_vsnprintf_s、_vsnprintf_s_l、、、 _vsnwprintf_s_vsnwprintf_s_l 將所指定長度的格式化資料寫入緩衝區
vsprintf、、vswprintfvsprintf_s、_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) 的中間呼叫時,輸入才能直接遵循輸出。 如果輸入作業遇到檔案結尾,則輸入可以接著輸出,而不需要對檔案定位函式進行介入呼叫。

另請參閱

輸入和輸出
依類別排序的通用 C 執行階段常式