標準輸入、標準輸出究竟是什麼? .
本文將從基本原理解析標準輸入,標準輸出的由來(最終結論見最後).
對於一個執行的程式,不可避免地要進行某些輸入輸出操作,也即I/O操作.對於I/O操 作,C語言提供了一系列標準I/O函式,來完成輸入輸出任務.
最主要的標準I/O函式包括:fopen()(開啟一個檔案),fprintf()(寫檔案),fscanf()(讀文 件).讀寫一個檔案的步驟為:
開啟檔案,同時得到指向檔案的指標,然後以該指標為引數, 呼叫相應的讀,寫函式進行文 件讀寫.例如:若想從鍵盤獲取輸入(也即讀檔案,Unix系統下程式可將鍵盤和螢幕當作普通檔案對待),需首先使用fopen()開啟鍵盤這個檔案,獲 得指向它的指標,然後以該指標為引數呼叫fscanf()讀取該檔案內容,從而獲得鍵盤輸入;若 想輸出資訊到顯示器(也即寫檔案),需首先開啟顯示器這個檔案,獲得指向它的指標,然後 以該指標為引數呼叫fprintf()向該檔案寫入資訊, 從而向顯示器輸出資訊.以上步驟在 Unix系統中,可通過以下程式碼實現:
- /*
- 在Unix系統下,讀取鍵盤輸入,向螢幕輸入資訊.
- 手動開啟鍵盤和顯示器檔案並進行讀寫.
- */
- #include <stdio.h>
- int main(void)
- {
- FILE *pf;
- pf=fopen("/dev/tty","a+"); //終端字元檔案
- char sbuf[100];
- fprintf(pf, "Please input a string: ");
- fscanf(pf,"%s",sbuf);
- fprintf(pf,"The input string is : \"%s\".\n"
- return 0;
- }
注:/dev/tty為終端字元檔案,該檔案是對鍵盤,顯示器的抽象,向該檔案寫入,則寫入內 容將被顯示在顯示器,讀該檔案,則將從鍵盤獲得輸入.
採用以上方式獲取鍵盤輸入,向螢幕輸出將是系統相關的(因為不同系統對鍵盤,螢幕的 抽象方式不同).為了封裝鍵盤,螢幕I/O操作的底層實現細節,C語言要求系統為每個程式 提供兩個指標,這兩個指標分別指向鍵盤和螢幕,並將這兩個指標命名為:stdin和 stdout.這兩個指標就是所謂的標準輸入和標準輸出.此時,從鍵盤獲取輸入,向螢幕輸出 資訊的程式碼可寫為:
[cpp] view plaincopyprint?- /*
- 在任意系統下,讀取鍵盤輸入,向螢幕輸入資訊.
- 顯式得使用標準輸入,標準輸出指標.
- */
- #include <stdio.h>
- int main(void)
- {
- char sbuf[100];
- fprintf(stdout, "Please input a string: ");
- fscanf(stdin,"%s",sbuf);
- fprintf(stdout,"The input string is : \"%s\".\n",sbuf);
- return 0;
- }
與程式碼1不同,該程式碼將能夠運行於任何支援標準C的系統.由於從標準輸入獲取輸入,向標 準輸出顯示資訊是非常常用的操作(幾乎每個控制檯程式均包含該操作),因此C語言提供 了專門用於從標準輸入獲取資訊和向標準輸出顯示資訊的函式,即scanf()和printf().此 時,從鍵盤獲取輸入,向螢幕顯示資訊的程式碼可寫為:
[cpp] view plaincopyprint?- /*
- 標準的C程式,讀取鍵盤輸入,向螢幕輸入資訊.
- 隱式得使用標準輸入,標準輸出指標.
- */
- #include <stdio.h>
- int main(void)
- {
- char sbuf[100];
- printf("Please input a string: ");
- scanf("%s",sbuf);
- printf("The input string is : \"%s\".\n",sbuf);
- return 0;
- }
結論:
標準輸入,標準輸出是作業系統為C程式提供的檔案指標,預設情況下,它們分別指向鍵盤 和螢幕.標準輸入函式scanf()將從標準輸入指向的檔案讀取資訊,標準輸出函式 printf()將輸出資訊到標準輸出指向的檔案.
注:標準輸入,標準輸出並非必須指向鍵盤或螢幕,使用者程式可改變它們的指向.