資料流 I/O

這些函式會處理不同大小和格式的資料,範圍從單一字元到大型資料結構。 它們也提供緩衝處理,如此可改善效能。 資料流緩衝區的預設大小是 4K。 這些常式只會影響執行階段程式庫常式所建立的緩衝區,而且不會影響作業系統所建立的緩衝區。

串流 I/O 常式

常式 使用
clearerr, clearerr_s 清除資料流的錯誤指標
fclose 關閉資料流
_fcloseall 關閉所有開啟的資料流,但 stdin, stdoutstderr除外
_fdopen, wfdopen 關聯資料流與已開啟檔案的檔案描述項
feof 測試資料流上的檔案結尾
ferror 測試資料流上的錯誤
fflush 將資料流清除至緩衝區或存放裝置
fgetc, fgetwc 從資料流讀取字元 ( getcgetwc的函式版本)
_fgetchar, _fgetwchar stdin 讀取字元 ( getchargetwchar的函式版本)
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 將字元寫入資料流 ( putcputwc的函式版本)
_fputchar, _fputwchar 將字元寫入 stdout ( putcharputwchar的函式版本)
fputs, fputws 將字串寫入資料流
fread 從資料流讀取未格式化資料
freopen, _wfreopen, freopen_s, _wfreopen_s FILE 資料流指標重新指派給新的檔案或裝置
fscanf, fwscanf, fscanf_s, _fscanf_s_l, fwscanf_s, _fwscanf_s_l 從資料流讀取格式化資料
fseek, _fseeki64 將檔案位置移至指定的位置
fsetpos 設定資料流的位置指標
_fsopen, _wfsopen 以檔案共用開啟資料流
ftell, _ftelli64 取得目前檔案位置
fwrite 將未格式化資料項目寫入資料流
getc, getwc 從資料流讀取字元 ( fgetcfgetwc的巨集版本)
getchar, getwchar stdin 讀取字元 ( fgetcharfgetwchar的巨集版本)
_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 將字元寫入資料流 ( fputcfputwc的巨集版本)
putchar, putwchar 將字元寫入 stdout ( fputcharfputwchar的巨集版本)
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, swprintf, sprintf_s, _sprintf_s_l, swprintf_s, _swprintf_s_l 將格式化資料寫入字串
sscanf、、 swscanfsscanf_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, vfwprintf, vfprintf_s, _vfprintf_s_l, vfwprintf_s, _vfwprintf_s_l 將格式化資料寫入資料流
vprintf, vwprintf, vprintf_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, vswprintf, vsprintf_s, _vsprintf_s_l, vswprintf_s, _vswprintf_s_l 將格式化資料寫入緩衝區

程式開始執行時,啟動程式碼會自動開啟數個資料流:標準輸入 (由 stdin指向)、標準輸出 (由 stdout指向) 和標準誤差 (由 stderr指向)。 預設會將這些資料流導向主控台 (鍵盤和螢幕)。 使用 freopenstdinstdoutstderr 重新導向磁碟檔案或裝置。

預設會緩衝處理使用資料流常式所開啟的檔案。 stdoutstderr 函式會在每次呼叫程式庫之後寫入字元裝置時排清,或是寫入字元裝置時。 如果程式異常終止,則可能未清除輸出緩衝區,導致資料遺失。 使用 fflush_flushall 來確保與指定檔案相關聯的緩衝區已排清至作業系統,或清除所有開啟的緩衝區。 作業系統可以在將資料寫入磁片之前快取資料。 認可到磁片功能可確保如果系統失敗,排清的緩衝區內容不會遺失。

有兩種方式可以將緩衝區內容認可至磁碟:

  • 使用檔案 COMMODE.OBJ 進行連結,以設定全域認可旗標。 全域旗標的預設設定是 n(表示「不認可」)。

  • 使用 cfopen ,將模式旗標設為 _fdopen

不論全域認可/不認可旗標的狀態為何,特別使用 cn 旗標所開啟的任何檔案都是根據旗標所運作。

如果您的程式未明確關閉資料流程,則程式終止時會自動關閉資料流程。 不過,您應該在程式完成資料流的處理時關閉資料流,因為一次可以開啟的資料流數目有限。 如需此限制的資訊,請參閱 _setmaxstdio

只有在具有 fflush 或是檔案定位函式 (fseekfsetposrewind) 的中間呼叫時,輸入才能直接遵循輸出。 如果輸入作業遇到檔案結尾,則輸入可以接著輸出,而不需要對檔案定位函式進行介入呼叫。

另請參閱

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