由于程序中經(jīng)常有大量對(duì)文件的輸入輸出操作,它經(jīng)常構(gòu)成了程序的主要部分,因而C語(yǔ)言提供了很多輸入輸出的函數(shù),它們分別用于兩種類型文件輸入輸出系統(tǒng):即由ANSI標(biāo)準(zhǔn)定義的緩沖文件(也稱標(biāo)準(zhǔn)文件(流)輸入輸出(I/O)系統(tǒng));另一類是ANSI標(biāo)準(zhǔn)中沒(méi)有定義的非緩沖文件(也稱非標(biāo)準(zhǔn)文件(流)輸入輸出(I/O)系統(tǒng))。
我們已經(jīng)熟悉了通過(guò)鍵盤(pán)和顯示器進(jìn)行輸入輸出的一些函數(shù),如scanf(),printf()等等,這些通過(guò)控制臺(tái)(鍵盤(pán)、顯示器等)進(jìn)行I/O的操作,可以看作標(biāo)準(zhǔn)文件輸入輸出系統(tǒng)的一些特例,實(shí)際上在標(biāo)準(zhǔn)輸入輸出系統(tǒng)中的一些函數(shù),有關(guān)文件的參數(shù)(文件結(jié)構(gòu)指針或稱流指針),只要用標(biāo)準(zhǔn)設(shè)備的流指針代替,這些標(biāo)準(zhǔn)輸入輸出函數(shù)即成為控制臺(tái)I/O函數(shù)。在任何程序執(zhí)行時(shí),C系統(tǒng)都定義了5個(gè)標(biāo)準(zhǔn)設(shè)備文件可供使用。自動(dòng)打開(kāi)的5個(gè)標(biāo)準(zhǔn)設(shè)備文件的文件結(jié)構(gòu)指針(在標(biāo)準(zhǔn)I/O系統(tǒng)中)和文件代號(hào)將有一個(gè)規(guī)定值:
設(shè)備 標(biāo)準(zhǔn)文件I/O系統(tǒng)中的流指針名 非標(biāo)準(zhǔn)文件……
鍵盤(pán)(標(biāo)準(zhǔn)輸入) stdin 0
顯示器(標(biāo)準(zhǔn)輸出) stdout 1
顯示器(標(biāo)準(zhǔn)錯(cuò)誤) stderr 2
串行口(標(biāo)準(zhǔn)輔助) stdoux 3
打印機(jī)(標(biāo)準(zhǔn)打印) stdprn 4
這樣,不論在標(biāo)準(zhǔn)文件系統(tǒng)還是非標(biāo)準(zhǔn)文件系統(tǒng)中,文件結(jié)構(gòu)只要用上述的流指針或文件代號(hào)代替,則這些函數(shù)也均適用于控制臺(tái)設(shè)備。
一、文本流和二進(jìn)制流
在C中引入了流(stream)的概念。它將數(shù)據(jù)的輸入輸出看作是數(shù)據(jù)的流入和流出,這樣不管是磁盤(pán)文件或者是物理設(shè)備(打印機(jī)、顯示器、鍵盤(pán)等),都可看作一種流的源和目的,視他們?yōu)橥环N東西,而不管其具體的物理結(jié)構(gòu),即對(duì)他們的操作,就是數(shù)據(jù)的流入和流出。這種把數(shù)據(jù)的輸入輸出操作對(duì)象,抽象化為一種流,而不管它的具體結(jié)構(gòu)的方法很有利于編程,而涉及流的輸出操作函數(shù)可用于各種對(duì)象,與其具體的實(shí)體無(wú)關(guān),即具有通用性。
在C中流可分為兩大類,即文本流(text stream)和二進(jìn)制流(binary stream)。所謂文本流是指在流中流動(dòng)的數(shù)據(jù)是以字符形式出現(xiàn)。在文本流中,'\n'被換成回車CR和換行LF的代碼0DH和0AH。而當(dāng)輸出時(shí),則0DH和0AH本換成'\n'。
二進(jìn)制流是指流動(dòng)的是二進(jìn)制數(shù)字序列,若流中有字符,則用一個(gè)字節(jié)的二進(jìn)制ASCII碼表示,若是數(shù)字,則用一個(gè)字節(jié)的二進(jìn)制數(shù)表示。在流入流出時(shí),對(duì)\n符號(hào)不進(jìn)行變換。例如2001這個(gè)數(shù),在文本流中用其ASCII碼表示為:
'2' '0' '0' '1'
| | | |
50 48 48 49
共占4字節(jié)。而在二進(jìn)制流中則表示為:00000111 11010001 用十六進(jìn)制就是07D1。只占兩字節(jié)。
由此看出,二進(jìn)制流比文本流節(jié)省空間,且不用進(jìn)行對(duì)\n的轉(zhuǎn)換,這樣可以大大加快流的速度,提高效率。因而,對(duì)于含有大量數(shù)字信息的數(shù)字流,可以采用二進(jìn)制流的方式;對(duì)于含有大量字符信息的流,則采用文本流的方式。
相關(guān)推薦:計(jì)算機(jī)等級(jí)考試二級(jí)C語(yǔ)言教程匯總計(jì)算機(jī)等級(jí)考試二級(jí)C語(yǔ)言常見(jiàn)知識(shí)點(diǎn)總結(jié)
北京 | 天津 | 上海 | 江蘇 | 山東 |
安徽 | 浙江 | 江西 | 福建 | 深圳 |
廣東 | 河北 | 湖南 | 廣西 | 河南 |
海南 | 湖北 | 四川 | 重慶 | 云南 |
貴州 | 西藏 | 新疆 | 陜西 | 山西 |
寧夏 | 甘肅 | 青海 | 遼寧 | 吉林 |
黑龍江 | 內(nèi)蒙古 |