標準輸入輸出

2022-03-12 19:36:43 字數 1661 閱讀 7587

目錄流緩衝

格式輸出

格式輸入

目錄流緩衝

格式輸出

格式輸入

記錄下,了解概念。

當用流或檔案描述字i/o函式開啟乙個檔案時,分別返回乙個流或檔案描述字,後面就可以將這個流或檔案描述字作為引數交給相應讀寫函式來完成實際的讀寫操作。通過關閉檔案可以終止程式與檔案的連線。

檔案描述字表示為int型別的物件,流表示指向型別為file結構的指標。檔案描述字多數是系統呼叫,提供底層基本的輸入輸出操作介面。

流函式建立在檔案描述字之上,通過檔案描述字函式而實現,給程式提供更高一級的輸入輸出介面。流函式比對應的檔案描述字函式更豐富,功能更強大,也更利於程式的移植。

一般情況下,堅持使用流函式,系統基本支援流函式,而不是所有系統支援檔案描述字。除非做些特殊操作,而此操作只能使用檔案描述字,如需要對特定裝置進行控制操作,非阻塞輸入等。

流的資料型別是file型別。file物件由標準i/o庫函式內部分配和管理,使用者無需自己建立file型別物件,無須檢視file物件內容,呼叫標準i/o庫函式即可,如fopen()開啟或建立乙個流時,它會返回乙個指向file結構的指標,此時程式和檔案之間建立了乙個流。

unix系統中每個程序都有三個預先定義並自動開啟的流,stdin,stdout,stderr。這三個標準流在< stdio.h >中說明,分別代表標準輸入、標準輸出和標準錯誤輸出。

開啟和關閉流

三個函式

freopen()重新開啟pathname指定的檔案,作用類似於fclose()和fopen()的合併。

讀和寫流

開啟乙個流,就可以對其進行讀寫。使用i/o函式:

如:字元i/o

每次讀入乙個字元:

輸出單字元:

其它函式不做細究。

每乙個流都有乙個輸入輸出緩衝區。寫入流的字元並不立即寫到檔案中,而是現在緩衝區中聚集為一塊,然後非同步地以塊為單位傳送到檔案。

目的:減少呼叫低階i/o函式(如read(),write())的次數,因為真正讀寫檔案的函式是系統呼叫,它們是較費時間的操作。

舉例:對於儲存在硬碟上的檔案,當進

程用read或 write(讀寫資料時,裝置驅動程式必須將資料在檔案中的位址轉換成硬碟的物理磁

道號、卷宗號以及扇段號。之後裝置必須移動磁頭至相應的卷宗並等待磁碟的相應扇段旋轉至

磁頭之下。一切準備好了之後才能從磁碟開始讀寫資料。顯然,每讀寫乙個或幾個字元便導致

執行這一串的動作是極不合算的。利用緩衝處理則不必為每讀寫乙個字元而頻繁地與外部裝置

打交道,同時還可以實現非同步io,即在cpu執行程式的同時從外設傳輸資料,從而提高輸入輸出的效率。

流有三種緩衝型別:

unix對新開啟的流採用如下預設緩衝型別:

思考:開啟檔案的實質是什麼?

從應用的角度看,unix系統中程式與檔案建立連線有幾種機制?流與檔案描述字有什麼

區別?什麼是檔案位置?它起什麼作用?

系統為每乙個程序自動開啟的輸入輸出流有哪些?它們對應的名字是什麼?

寫「r」方式開啟的檔案會發生什麼情況?讀「w方式開啟的檔案呢?建議你編寫乙個這樣

的程式試試。

按讀寫資料的粒度分,有幾類流輸入輸出函式?

說說php關於緩衝區的處理。

參考:php緩衝區詳解

標準輸入輸出

linux的大部分命令都具有標準的輸入輸出埠,有哪些標準裝置資訊?名稱 檔案描述符 含義裝置 說明stdin 0標準輸入 鍵盤命令在執行時所需要的輸入資料,通過它來獲取 stdout 1標準輸出 顯示器命令在執行後所產生的輸出資料,通過它來送出 stderr 2標準錯誤 顯示器命令在執行後所產生的錯...

python標準輸入輸出

sys模組 usr bin python2.6 import sysfor line in sys.stdin print line,先寫乙個指令碼,顯示行號和內容,之後引用它 usr bin env python import sys counter 1 while true line sys.s...

Python標準輸入輸出

以乙個從控制台接收使用者輸入的名字字串為例,排除空格和單純的換行符 import sys while true sys.stdout.write 請輸入你的名字 name sys.stdin.readline if not name.strip sys.stdout.write 輸入的名字為空 n ...