共用方式為


資料流 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、 、 _wfopenfopen_s_wfopen_s 開啟資料流
fprintf_fprintf_lfwprintf_fwprintf_lfprintf_s_fprintf_s_l、、、 fwprintf_s_fwprintf_s_l 將格式化資料寫入資料流
fputc, fputwc 將字元寫入資料流 ( putcputwc的函式版本)
_fputchar, _fputwchar 將字元寫入 stdout ( putcharputwchar的函式版本)
fputs, fputws 將字串寫入資料流
fread 從資料流讀取未格式化資料
freopen、 、 _wfreopenfreopen_s_wfreopen_s FILE 資料流指標重新指派給新的檔案或裝置
fscanf、、fscanf_sfwscanf_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_lwprintf_wprintf_lprintf_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_lwscanf_wscanf_lscanf_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_sswprintf_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、 、 _wtmpnamtmpnam_s_wtmpnam_s 產生暫存檔名
ungetc, ungetwc 將字元推送回資料流
_vcprintf、、_vcprintf_s_vcwprintf_vcprintf_s_l、、、 _vcwprintf_s_vcwprintf_s_l 將格式化資料寫入主控台。
vfprintf、、vfprintf_svfwprintf_vfprintf_s_l、、、 vfwprintf_s_vfwprintf_s_l 將格式化資料寫入資料流
vprintf、、vprintf_svwprintf_vprintf_s_l、、、 vwprintf_s_vwprintf_s_l 將格式化資料寫入 stdout
_vsnprintf_vsnwprintf、、_vsnprintf_svsnprintf_s_vsnprintf_s_l、、、 _vsnwprintf_s_vsnwprintf_s_l 將所指定長度的格式化資料寫入緩衝區
vsprintf、、vsprintf_svswprintf_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 執行階段常式