.\" From dholland@burgundy.eecs.harvard.edu Tue Mar 24 18:08:15 1998 .\" .\" This man page was written in 1998 by David A. Holland .\" and placed in the Public Domain. Polished a bit by aeb. .\" .Dd March 24, 1998 .Dt STDIN 3 .Os "Linux 2.0" .Sh NAME .Nm stdin , .Nm stdout , .Nm stderr .Nd 標準 I/O 流 .Sh "SYNOPSIS 總覽" .Fd #include .Fd extern FILE *stdin; .Fd extern FILE *stdout; .Fd extern FILE *stderr; .Sh "DESCRIPTION 描述" 通常,每個 Unix 程式在啟動時都會開啟三個流,一個用於輸入,一個用於輸出,一個用於列印診斷或錯誤訊息。典型的,他們被連線到使用者的終端 (參見 .Xr tty 4 ) 但是也有可能指向檔案或是其他裝置,取決於父程序選擇設定了什麼 (參見 .Xr sh 1 的重定向 (``Redirection'') 章節。) .Pp 輸入流被稱為 ``standard input''; 輸出流被稱為 ``standard output''; 錯誤流被稱為 ``standard error''。這些名詞通常簡寫為符號,用於引用這些檔案,它們是 .Nm stdin , .Nm stdout , 和 .Nm stderr . .Pp 這些符號中,每一個都是 .Xr stdio 3 中的一個宏,型別是指向 FILE 的指標,可以用於類似 .Xr fprintf 3 或 .Xr fread 3 等函式中。 .Pp 由於 FILE 是一個對 Unix 檔案描述符加以緩衝的包裝,下層的檔案也可以使用原始的 Unix 檔案介面來存取。也就是,類似 .Xr read 2 和 .Xr lseek 2 的函式。與流 .Nm stdin , .Nm stdout , 和 .Nm stderr 關聯的整數形式的檔案描述符分別是 0,1 還有 2。預處理器符號 STDIN_FILENO,STDOUT_FILENO 和 STDERR_FILENO 分別以它們為值,定義在 中。 .Pp 注意混合使用 FILE 和原始的檔案描述符可能帶來不可預料的結果,一般應當避免。(對於喜歡追根問底的人:POSIX.1 規範的 8.2.3 節詳細地描述了這樣的混合使用怎樣才能不出錯。) 一個簡單的規則是,檔案描述符由核心控制,而 stdio 僅僅是一個庫。它的意思是,例如當呼叫 exec 之後,子程序可以繼承所有開啟的檔案描述符,但是任何原有的流都不可再存取了。 .Pp 由於符號 .Nm stdin , .Nm stdout , 和 .Nm stderr 被指定為宏,為它們賦值將導致不可移植。利用庫函式 .Xr freopen 3 ,標準流可以用來指向不同的檔案。引進這個函式專門用來為 .Nm stdin , .Nm stdout , 和 .Nm stderr 重新賦值。標準流在呼叫 .Xr exit 3 和程式正常中止時被關閉。 .Sh "SEE ALSO 參見" .Xr sh 1 , .Xr csh 1 , .Xr open 2 , .Xr fopen 3 , .Xr stdio 3 .Sh CONSIDERATIONS 錯誤流 .Nm stderr 是非緩衝的。輸出流 .Nm stdout 是行緩衝的,如果它指向一個終端。不完全的行只有在呼叫 .Xr fflush 3 或 .Xr exit 3 ,或者列印了新行符之後才會顯示。這樣可能帶來無法預料的結果,尤其是除錯輸出時。標準流 (或任何其他流) 的緩衝模式可以用函式 .Xr setbuf 3 或 .Xr setvbuf 3 來切換。注意當 .Nm stdin 與一個終端關聯時,也許終端驅動中存在輸入緩衝,與 stdio 緩衝完全無關。(確實如此,一般的終端輸入在核心中是行緩衝的。) 核心對輸入的控制可以透過對 .Xr tcsetattr 3 的呼叫來修改,參見 .Xr stty 1 , 和 .Xr termios 3 。 .Sh "CONFORMING TO 標準參考" 宏 .Nm stdin , .Nm stdout , 和 .Nm stderr 遵循 .St -ansiC 標準,這個標準同時規定了這三個流應當在程式啟動時開啟。 .Sh "跋" .br 本頁面中文版由中文 man 手冊頁計劃提供。 .br 中文 man 手冊頁計劃:\fBhttps://github.com/man-pages-zh/manpages-zh\fR