標準輸入 標準輸出究竟是什麼?

2021-06-26 18:41:54 字數 2033 閱讀 2789

本文將從基本原理解析標準輸入,標準輸出的由來(最終結論見最後).

對於乙個執行的程式,不可避免地要進行某些輸入輸出操作,也即i/o操作.對於i/o操 作,c語言提供了一系列標準i/o函式,來完成輸入輸出任務.

最主要的標準i/o函式包括:fopen()(開啟乙個檔案),fprintf()(寫檔案),fscanf()(讀文 件).讀寫乙個檔案的步驟為:

開啟檔案,同時得到指向檔案的指標,然後以該指標為引數, 呼叫相應的讀,寫函式進行文 件讀寫.例如:若想從鍵盤獲取輸入(也即讀檔案,unix系統下程式可將鍵盤和螢幕當作普通檔案對待),需首先使用fopen()開啟鍵盤這個檔案,獲 得指向它的指標,然後以該指標為引數呼叫fscanf()讀取該檔案內容,從而獲得鍵盤輸入;若 想輸出資訊到顯示器(也即寫檔案),需首先開啟顯示器這個檔案,獲得指向它的指標,然後 以該指標為引數呼叫fprintf()向該檔案寫入資訊, 從而向顯示器輸出資訊.以上步驟在 unix系統中,可通過以下**實現:

[cpp]view plain

copy

print?

/* 在unix系統下,讀取鍵盤輸入,向螢幕輸入資訊.

手動開啟鍵盤和顯示器檔案並進行讀寫.

*/#include 

int main(void)    

注:/dev/tty為終端字元檔案,該檔案是對鍵盤,顯示器的抽象,向該檔案寫入,則寫入內 容將被顯示在顯示器,讀該檔案,則將從鍵盤獲得輸入.

採用以上方式獲取鍵盤輸入,向螢幕輸出將是系統相關的(因為不同系統對鍵盤,螢幕的 抽象方式不同).為了封裝鍵盤,螢幕i/o操作的底層實現細節,c語言要求系統為每個程式 提供兩個指標,這兩個指標分別指向鍵盤和螢幕,並將這兩個指標命名為:stdin和 stdout.這兩個指標就是所謂的標準輸入和標準輸出.此時,從鍵盤獲取輸入,向螢幕輸出 資訊的**可寫為:

[cpp]view plain

copy

print?

/* 在任意系統下,讀取鍵盤輸入,向螢幕輸入資訊.

顯式得使用標準輸入,標準輸出指標.

*/#include 

int main(void)  

[cpp]view plain

copy

print?

/* 在任意系統下,讀取鍵盤輸入,向螢幕輸入資訊.

顯式得使用標準輸入,標準輸出指標.

*/#include 

int main(void)    

與**1不同,該**將能夠執行於任何支援標準c的系統.由於從標準輸入獲取輸入,向標 準輸出顯示資訊是非常常用的操作(幾乎每個控制台程式均包含該操作),因此c語言提供 了專門用於從標準輸入獲取資訊和向標準輸出顯示資訊的函式,即scanf()和printf().此 時,從鍵盤獲取輸入,向螢幕顯示資訊的**可寫為:

[cpp]view plain

copy

print?

/* 標準的c程式,讀取鍵盤輸入,向螢幕輸入資訊.

隱式得使用標準輸入,標準輸出指標.

*/#include 

int main(void)  

[cpp]view plain

copy

print?

/* 標準的c程式,讀取鍵盤輸入,向螢幕輸入資訊.

隱式得使用標準輸入,標準輸出指標.

*/#include 

int main(void)    

從中可看出,使用scanf()和printf()時,無需向其提供檔案指標,這是因為它們知道所需 的檔案指標,它們操作的物件便是標準輸入和標準輸出所指向的檔案.

結論:

標準輸入,標準輸出是作業系統為c程式提供的檔案指標,預設情況下,它們分別指向鍵盤 和螢幕.標準輸入函式scanf()將從標準輸入指向的檔案讀取資訊,標準輸出函式 printf()將輸出資訊到標準輸出指向的檔案.

注:標準輸入,標準輸出並非必須指向鍵盤或螢幕,使用者程式可改變它們的指向.

**:

標準輸入 標準輸出究竟是什麼?

對於乙個執行的程式,不可避免地要進行某些輸入輸出操作,也即i o操作.對於i o操 作,c語言提供了一系列標準i o函式,來完成輸入輸出任務.最主要的標準i o函式包括 fopen 開啟乙個檔案 fprintf 寫檔案 fscanf 讀文 件 讀寫乙個檔案的步驟為 開啟檔案,同時得到指向檔案的指標,...

Bundle 究竟是什麼?

bundle用於場景 在我印象中比較深刻的是,一般用於activity之間傳遞數值,也用於handler傳送訊息,如下 intent intent new intent bundle bundle new bundle bundle.putstring key value intent.putext...

分析EOF究竟是什麼

eof僅僅是一種狀態或者說條件,需要觸發。read呼叫遇到檔案結尾,觸發該條件,結果將返回0。針對eof,對於標準輸入裝置,普通檔案,管道檔案,網路套接字檔案是read如何觸發呢?下面程式將說明 server.c 是socket套接字服務端,目的為了網路套接字檔案是read如何觸發測試用的。serv...