標準I O中基礎知識積累

2021-08-28 04:52:25 字數 1703 閱讀 5450

標準i/o在擁有c庫的作業系統中都可以呼叫,所以擁有良好的可移植性。與之前的檔案相比,標準i/o更少使用系統呼叫,原因是標準i/o在使用者空間先行建立緩衝區,執行讀寫操作時先操作緩衝區,最後再訪問要被執行的檔案。

ansic進一步對i/o的概念進行了抽象。就c程式而言,所有的i/o操作只是簡單地從程式移進或移出位元組的事情(它將資料的輸入輸出看作是資料的流入和流出)。這種位元組流便被稱為流(stream)。流入程式的流稱為輸入流,流出程式的流稱為輸出流。模擬於生活中的水流,水流可以流入碗中,也可以從碗中流回到水流中。這裡的水流就是檔案流,流入碗中的過程就是檔案輸入的過程,流回到水流中的過程就是檔案輸出的過程。標準i/o操作都是基於流來進行各種操作的。

每當通過標準i/o開啟乙個檔案時,就會返回乙個檔案描述符,我們就要建立乙個file結構體去接收,這個file結構體就是我們所說的流。

流的分類分為文字流和二進位製流兩種:

文字流:在流處理過程中所有資料以字元形式出現,'\n'被當做回車符cr和換行符lf兩個字元處理,即'\n'ascii碼儲存形式是0x0d和0x0a。當輸出時,0x0d和0x0a轉換成'\n'

二進位製流:在流處理過程中把資料當做二進位制序列,若流中有字元則把字元當做ascii碼的二進位制數表示。'\n'不進行變換。

例如:2018在文字流中和二進位製流中的資料型別不同:

文字流:2018—->』2」0」1」8』—->50 48 49 56 共佔4位元組。

二進位製流:2018–>數字2018—>00000111 11100010 用十六進製制就是07e2只佔兩位元組。

由此看出,二進位製流比文字流節省空間,且不用進行對\n的轉換,這樣可以大大加快流的速度,提高效率。因而,對於含有大量數字資訊的數字流,可以採用二進位製流的方式;對於含有大量字元資訊的流,則採用文字流的方式。

每當乙個程序被啟動的時候,系統會自動開啟3個流:標準輸入、標準輸出、標準出錯。

標準輸入

0stdin_fileno

stdin

標準輸出1stdout_filenostdout

標準出錯2stderr_filenostderr

標準io函式是根據檔案流關聯的裝置型別,會選擇採用何種緩衝區的操作方式。分類如下:

1)全緩衝區:這種緩衝區要求填滿整個緩衝區後才進行i/o 系統呼叫操作。對於磁碟檔案通常使用全緩衝區訪問。第一次執行i/o 操作時,ansi 標準的檔案管理函式通過呼叫malloc函式獲得需使用的緩衝區。linux中預設大小為4096。

2)行緩衝區:在這種情況下,當在輸入和輸出中遇到換行符時,執行i/o系統呼叫操作。當流涉及乙個終端時(例如標準輸入和標準輸出),使用行緩衝區。因為標準i/o 庫每行的緩衝區長度是固定的,只要填滿了緩衝區,即使還沒有遇到換行符也將執行i/o 系統呼叫操作。預設行緩衝區大小為1024 位元組。

3)無緩衝區:標準i/o 庫不對字元進行快取,即對流的讀寫操作會立即操作實際檔案。很多的人機互動介面要求不可全快取。標準出錯流stderr 通常是不帶緩衝區的,這使得出錯資訊能夠盡快地顯示出來。

每當程序結束就會預設重新整理緩衝區。

Hibernate基礎知識積累

屬性介紹 1,create 表示啟動的時候先drop,再create create drop 也表示建立,只不過再系統關閉前執行一下drop update 這個操作啟動的時候會去檢查schema是否一致,如果不一致會做scheme更新 validate 啟動時驗證現有schema與你配置的hiber...

Canvas基礎知識積累

id canvas canvas var canvas document.getelementbyid canvas var context canvas.getcontext context就是canvas物件,接下來都是對其進行操作 設定width和height canvas.width 102...

JS基礎知識積累4

do while結構 for迴圈結構 while 條件 true false 判斷條件是否成立,如果成立,執行迴圈體 重新判斷條件是否成立 如果不成立,跳出迴圈,執行大括號之後的 條件語句可以是 關係表示式 布林型別的值 其他型別的值 都會轉換成布林型別 do while 判斷條件 true fal...