官术网_书友最值得收藏!

1.2 Linux標(biāo)準(zhǔn) I/O概述

1.2.1 標(biāo)準(zhǔn) I/O 的由來

標(biāo)準(zhǔn) I/O 指的是 ANSI C 中定義的用于 I/O 操作的一系列函數(shù)。

只要操作系統(tǒng)中安裝了 C 庫,標(biāo)準(zhǔn) I/O 函數(shù)就可以調(diào)用。換句話說,如果程序中使用的是標(biāo)準(zhǔn) I/O 函數(shù),那么源代碼不需要修改就可以在其他操作系統(tǒng)下編譯運(yùn)行,具有更好的可移植性。

除此之外,使用標(biāo)準(zhǔn) I/O 可以減少系統(tǒng)調(diào)用的次數(shù),提高系統(tǒng)效率。標(biāo)準(zhǔn) I/O 函數(shù)在執(zhí)行時(shí)也會(huì)用到系統(tǒng)調(diào)用。在執(zhí)行系統(tǒng)調(diào)用時(shí),Linux 必須從用戶態(tài)切換到內(nèi)核態(tài),處理相應(yīng)的請(qǐng)求,然后再返回到用戶態(tài)。如果頻繁地執(zhí)行系統(tǒng)調(diào)用會(huì)增加系統(tǒng)的開銷。為了避免這種情況,標(biāo)準(zhǔn) I/O 使用時(shí)在用戶空間創(chuàng)建緩沖區(qū),讀寫時(shí)先操作緩沖區(qū),在合適的時(shí)機(jī)再通過系統(tǒng)調(diào)用訪問實(shí)際的文件,從而減少了使用系統(tǒng)調(diào)用的次數(shù)。

1.2.2 流的含義

標(biāo)準(zhǔn) I/O 的核心對(duì)象就是流。當(dāng)用標(biāo)準(zhǔn) I/O 打開一個(gè)文件時(shí),就會(huì)創(chuàng)建一個(gè) FILE 結(jié)構(gòu)體描述該文件(或者理解為創(chuàng)建一個(gè) FILE 結(jié)構(gòu)體和實(shí)際打開的文件關(guān)聯(lián)起來)。我們把這個(gè) FILE 結(jié)構(gòu)體形象地稱為流。標(biāo)準(zhǔn) I/O 函數(shù)都基于流進(jìn)行各種操作。

標(biāo)準(zhǔn) I/O 概述

標(biāo)準(zhǔn) I/O 中的流的緩沖類型有以下3種。

(1)全緩沖。在這種情況下,當(dāng)填滿標(biāo)準(zhǔn) I/O 緩沖區(qū)后才進(jìn)行實(shí)際 I/O操作。對(duì)于存放在磁盤上的普通文件,用標(biāo)準(zhǔn) I/O 打開時(shí)默認(rèn)是全緩沖的。當(dāng)緩沖區(qū)已滿或執(zhí)行 flush 操作時(shí)才會(huì)進(jìn)行磁盤操作。

(2)行緩沖。在這種情況下,當(dāng)在輸入和輸出中遇到換行符時(shí)執(zhí)行 I/O操作。標(biāo)準(zhǔn)輸入流和標(biāo)準(zhǔn)輸出流就是使用行緩沖的典型例子。

(3)無緩沖。不對(duì) I/O 操作進(jìn)行緩沖,即在對(duì)流的讀寫時(shí)會(huì)立刻操作實(shí)際的文件。標(biāo)準(zhǔn)出錯(cuò)流是不帶緩沖的,這就使得出錯(cuò)信息可以立刻顯示在終端上,而不管輸出的內(nèi)容是否包含換行符。

下面討論具體函數(shù)時(shí),請(qǐng)讀者注意區(qū)分以上的3種不同情況。

主站蜘蛛池模板: 肥城市| 宁安市| 玛多县| 沿河| 丰宁| 合山市| 江源县| 山东省| 共和县| 沂源县| 朔州市| 南雄市| 西乌珠穆沁旗| 玉山县| 松潘县| 图木舒克市| 太湖县| 寿宁县| 南汇区| 石城县| 淮南市| 得荣县| 宽城| 碌曲县| 高邑县| 木兰县| 乌兰察布市| 孝义市| 迁安市| 丰都县| 南川市| 鄂州市| 方山县| 越西县| 大余县| 塘沽区| 丘北县| 扎囊县| 临泉县| 阳城县| 攀枝花市|