?
This document uses PHP Chinese website manual Release
所述<stdio.h>
頭部提供通用文件操作支持和建筑材料功能與窄字符輸入/輸出能力。
該<wchar.h>
標(biāo)頭寬字符輸入/輸出功能提供功能。
I / O流是FILE
只能通過(guò)類型指針訪問(wèn)和操作的類型對(duì)象FILE*
(注意:雖然可以FILE
通過(guò)解引用和復(fù)制有效的FILE*
方法創(chuàng)建類型的本地對(duì)象,但使用I中的此類副本的地址/ O函數(shù)是未定義的行為)。每個(gè)流都與外部物理設(shè)備(文件,標(biāo)準(zhǔn)輸入流,打印機(jī),串行端口等)相關(guān)聯(lián)。
I / O流可用于未格式化和格式化的輸入和輸出。它們是區(qū)域設(shè)置敏感的,并且可以根據(jù)需要執(zhí)行寬/多字節(jié)轉(zhuǎn)換。所有流都訪問(wèn)相同的語(yǔ)言環(huán)境對(duì)象:最近安裝的語(yǔ)言環(huán)境對(duì)象setlocale
。
除了訪問(wèn)設(shè)備所需的系統(tǒng)特定信息(例如POSIX文件描述符)之外,每個(gè)流對(duì)象還包含以下內(nèi)容:
1)(C95)字符寬度:未設(shè)置,縮小或?qū)?/p>
2)緩沖狀態(tài):無(wú)緩沖,行緩沖,完全緩沖。
3)緩沖區(qū),可以由用戶提供的外部緩沖區(qū)替換。
4)I / O模式:輸入,輸出或更新(包括輸入和輸出)。
5)二進(jìn)制/文本模式指示器。
6)文件結(jié)束狀態(tài)指示器。
7)錯(cuò)誤狀態(tài)指示器。
8)文件位置指示器(類型對(duì)象fpos_t
),對(duì)于寬字符流,它包含解析狀態(tài)(類型為mbstate_t
(C95)的對(duì)象)。
9)(C11)當(dāng)多線程讀取,寫(xiě)入,定位或查詢流的位置時(shí),用于防止數(shù)據(jù)競(jìng)爭(zhēng)的重入鎖。
新開(kāi)的流沒(méi)有方向。第一次調(diào)用fwide
或訪問(wèn)任何I / O函數(shù)可以確定方向:寬I / O函數(shù)使得流的寬度更大,窄I / O函數(shù)使得流的范圍更窄。一旦設(shè)置,方向只能隨著改變freopen
。窄I / O函數(shù)不能在面向廣泛的流上調(diào)用; 寬泛的I / O功能無(wú)法在窄定向的流上調(diào)用。寬I / O函數(shù)在寬字符和多字節(jié)字符之間轉(zhuǎn)換,就像通過(guò)調(diào)用mbrtowc
和wcrtomb
。與在程序中有效的多字節(jié)字符串不同,文件中的多字節(jié)字符序列可能包含嵌入的空值,不必在初始轉(zhuǎn)換狀態(tài)下開(kāi)始或結(jié)束。
POSIX要求當(dāng)前安裝的C語(yǔ)言環(huán)境的LC_CTYPE構(gòu)面在其方向變寬時(shí)存儲(chǔ)在流對(duì)象中,并且用于此流上將來(lái)的所有I / O,直到方向改變?yōu)橹?,而不管后續(xù)調(diào)用如何setlocale
。
甲文本流是由為行(零個(gè)或多個(gè)字符加上終止字符的有序序列'\n'
)。最后一行是否需要終止'\n'
是實(shí)現(xiàn)定義的??赡苄枰谳斎牒洼敵鲋刑砑?,更改或刪除字符,以符合OS中表示文本的約定(特別是Windows OS上的C流轉(zhuǎn)換\n
為\r\n
輸出并轉(zhuǎn)換\r\n
為\n
輸入)。
只有滿足以下所有條件,才能保證從文本流中讀入的數(shù)據(jù)與之前寫(xiě)入該流的數(shù)據(jù)相等。
數(shù)據(jù)只包括打印字符及控制字符\t
和\n
(具體地,在Windows操作系統(tǒng)中,字符'\0x1A'
終止輸入)
否\ n緊接在空格字符前面(空格字符在緊接在\ n讀取時(shí)可能消失之前寫(xiě)出)
最后一個(gè)字符是\ n
甲二進(jìn)制流是可以透明地記錄的內(nèi)部數(shù)據(jù)的字符的有序序列。從二進(jìn)制流中讀入的數(shù)據(jù)總是等于先前寫(xiě)入該數(shù)據(jù)流的數(shù)據(jù)。實(shí)現(xiàn)只允許在流尾添加一些空字符。寬二進(jìn)制流不需要在初始轉(zhuǎn)換狀態(tài)下結(jié)束。
POSIX實(shí)現(xiàn)不區(qū)分文本流和二進(jìn)制流(沒(méi)有針對(duì)\ n或任何其他字符的特殊映射)。
| 文件訪問(wèn)|
|:----|
| 在頭文件<stdio.h> |中定義
| fopenfopen_s(C11)| 打開(kāi)一個(gè)文件(函數(shù))|
| freopenfreopen_s(C11)| 使用不同的名稱(函數(shù))|打開(kāi)現(xiàn)有流
| fclose | 關(guān)閉文件(功能)|
| fflush | 使輸出流與實(shí)際文件(函數(shù))|同步
| setbuf | 為文件流(函數(shù))|設(shè)置緩沖區(qū)
| setvbuf | 設(shè)置文件流(函數(shù))|的緩沖區(qū)及其大小
| 在頭文件<wchar.h>中定義
| fwide(C95)| 在寬字符I / O和窄字符I / O(函數(shù))|之間切換文件流
| 直接輸入/輸出|
| 在頭文件<stdio.h> |中定義
| fread | 從文件(函數(shù))|讀取
| fwrite | 寫(xiě)入文件(函數(shù))|
| 未格式化的輸入/輸出|
| 窄字符|
| 在頭文件<stdio.h> |中定義
| fgetcgetc | 從文件流(函數(shù))|獲取字符
| fgets | 從文件流(函數(shù))|獲取字符串
| fputcputc | 將一個(gè)字符寫(xiě)入文件流(函數(shù))|
| fputs | 將字符串寫(xiě)入文件流(函數(shù))|
| getchar | 從stdin(function)|讀取一個(gè)字符
| getsgets_s(直到C11)(自C11)| 從stdin(function)|讀取一個(gè)字符串
| putchar | 將一個(gè)字符寫(xiě)入stdout(function)|
| 放入| 將一個(gè)字符串寫(xiě)入stdout(function)|
| ungetc | 將字符放回到文件流(函數(shù))|中
| 寬字符|
| 在頭文件<wchar.h>中定義
| fgetwcgetwc(C95)| 從文件流(函數(shù))|獲取寬字符
| fgetws(C95)| 從文件流(函數(shù))|獲取寬字符串
| fputwcputwc(C95)| 將寬字符寫(xiě)入文件流(函數(shù))|
| fputws(C95)| 將寬字符串寫(xiě)入文件流(函數(shù))|
| getwchar(C95)| 從標(biāo)準(zhǔn)輸入(函數(shù))|讀取一個(gè)寬字符
| putwchar(C95)| 將寬字符寫(xiě)入stdout(function)|
| ungetwc(C95)| 將寬字符放回到文件流(函數(shù))|中
| 格式化輸入/輸出|
| 窄字符|
| 在頭文件<stdio.h> |中定義
| scanffscanfsscanfscanf_sfscanf_ssscanf_s(C11)(C11)(C11)| 從stdin,文件流或緩沖區(qū)(函數(shù))|讀取格式化的輸入
| vscanfvfscanfvsscanfvscanf_svfscanf_svsscanf_s(C99)(C99)(C99)(C11)(C11)(C11)| 使用變量參數(shù)列表(函數(shù))|從stdin,文件流或緩沖區(qū)中讀取格式化的輸入
| printfprintfsprintfsnprintfprintf_sfprintf_ssprintf_ssnprintf_s(C99)(C11)(C11)(C11)(C11)| 將格式化輸出打印到標(biāo)準(zhǔn)輸出,文件流或緩沖區(qū)(函數(shù))|
| (C11)(C11)(C11)(C11)(C11)| 使用可變參數(shù)列表(函數(shù))|將格式化輸出打印到標(biāo)準(zhǔn)輸出,文件流或緩沖區(qū)
| 寬字符|
| 在頭文件<wchar.h>中定義
| wscanffwscanfswscanfwscanf_sfwscanf_sswscanf_s (C95)(C95)(C95)(C11)(C11)(C11)| 從stdin,文件流或緩沖區(qū)(函數(shù))|讀取格式化的寬字符輸入
| vwscanfvfwscanfvswscanfvwscanf_svfwscanf_svswscanf_s (C99)(C99)(C99)(C11)(C11)(C11) | 使用變量參數(shù)列表(函數(shù))|從stdin,文件流或緩沖區(qū)中讀取格式化的寬字符輸入
| wprintffwprintfswprintfwprintf_sfwprintf_sswprintf_ssnwprintf_s (C95)(C95)(C95)(C11)(C11)(C11)(C11) | 將格式化的寬字符輸出打印到stdout,文件流或緩沖區(qū)(函數(shù))|
| vwprintfvfwprintfvswprintfvwprintf_svfwprintf_svswprintf_svsnwprintf_s (C95)(C95)(C95)(C11)(C11)(C11)(C11) | 使用變量參數(shù)列表(函數(shù))|將格式化的寬字符輸出打印到標(biāo)準(zhǔn)輸出,文件流或緩沖區(qū)
| 文件定位|
| 在頭文件<stdio.h> |中定義
| ftell | 返回當(dāng)前文件位置指示符(功能)|
| fgetpos | 獲取文件位置指示符(函數(shù))|
| fseek | 將文件位置指示器移動(dòng)到文件(功能)|中的特定位置
| fsetpos | 將文件位置指示器移動(dòng)到文件(功能)|中的特定位置
| 倒帶| 將文件位置指示器移動(dòng)到文件(函數(shù))|中的開(kāi)頭
| 錯(cuò)誤處理|
| 在頭文件<stdio.h> |中定義
| clearerr | 清除錯(cuò)誤(函數(shù))|
| feof | 檢查文件結(jié)束(函數(shù))|
| ferror | 檢查文件錯(cuò)誤(函數(shù))|
| perror | 顯示與當(dāng)前錯(cuò)誤對(duì)應(yīng)的字符串到stderr(function)|
| 對(duì)文件進(jìn)行操作|
| 在頭文件<stdio.h> |中定義
| 刪除| 擦除文件(功能)|
| 重命名| 重命名文件(函數(shù))|
| tmpfiletmpfile_s(C11)| 返回一個(gè)指向臨時(shí)文件(函數(shù))|的指針
| tmpnamtmpnam_s(C11)| 返回一個(gè)唯一的文件名(函數(shù))|
| 在頭文件<stdio.h> |中定義
|:----|
| 類型| 定義|
| FILE | 類型,能夠保存控制CI / O流|所需的所有信息
| fpos_t | 類型,能夠在文件|中唯一地指定位置和多字節(jié)分析器狀態(tài)
| 在頭文件<stdio.h> |中定義
|:----|
| stdinstdoutstderr | 與FILE *類型的輸出流表達(dá)式相關(guān)聯(lián)的類型FILE *的表達(dá)式與與錯(cuò)誤輸出流(宏常量)相關(guān)聯(lián)的FILE *類型的輸出流表達(dá)式相關(guān)聯(lián)。
| EOF | int類型的整型常量表達(dá)式和負(fù)值(宏常量)|
| FOPEN_MAX | 可同時(shí)打開(kāi)的文件數(shù)(宏常量)|
| FILENAME_MAX | char數(shù)組需要的大小來(lái)保存最長(zhǎng)的支持文件名(宏常量)|
| BUFSIZ | setbuf()(宏常量)|使用的緩沖區(qū)的大小
| _IOFBF_IOLBF_IONBF | setvbuf()指示完全緩沖的I / O參數(shù)給setvbuf()指示緩沖的I / O參數(shù)指向未緩沖的I / O(宏常量)的setvbuf()。
| SEEK_SETSEEK_CURSEEK_END | fseek()表示從fileargument的開(kāi)頭搜索到fseek(),表示從當(dāng)前文件positionargument尋找fseek(),指示從文件末尾搜索(宏常量)。
| TMP_MAXTMP_MAX_S(C11)| 可由tmpnam生成的唯一文件名的最大數(shù)目tmpnam_s(宏常量)可生成的唯一文件名的最大數(shù)目|
| L_tmpnamL_tmpnam_s(C11)| 字符數(shù)組所需的大小,以保存tmpnamsize的結(jié)果,以便保存tmpnam_s(宏常量)的結(jié)果。
C11標(biāo)準(zhǔn)(ISO / IEC 9899:2011):
7.21輸入/輸出<stdio.h>(p:296-339)
7.29擴(kuò)展的多字節(jié)和寬字符實(shí)用程序<wchar.h>(p:402-446)
7.31.11輸入/輸出<stdio.h>(p:456)
7.31.16擴(kuò)展的多字節(jié)和寬字符實(shí)用程序<wchar.h>(p:456)
K.3.5輸入/輸出<stdio.h>(p:586-603)
C99標(biāo)準(zhǔn)(ISO / IEC 9899:1999):
7.19輸入/輸出<stdio.h>(p:262-305)
7.24擴(kuò)展的多字節(jié)和寬字符實(shí)用程序<wchar.h>(p:348-392)
7.26.9輸入/輸出<stdio.h>(p:402)
7.26.12擴(kuò)展的多字節(jié)和寬字符實(shí)用程序<wchar.h>(p:402)
C89 / C90標(biāo)準(zhǔn)(ISO / IEC 9899:1990):
4.9 INPUT / OUTPUT <stdio.h>
4.13.6輸入/輸出<stdio.h>