Provided by: manpages-zh_1.6.4.3-1_all bug

NAME

       stdin, stdout, stderr — 標準 I/O 流

SYNOPSIS 總覽

       #include <stdio.h>
       extern FILE *stdin;
       extern FILE *stdout;
       extern FILE *stderr;

DESCRIPTION 描述

       通常,每個  Unix 程式在啟動時都會開啟三個流,一個用於輸入,一個用於輸出,一個用於列印診斷或錯誤訊息。典型
       的,他們被連線到使用者的終端 (參見  tty(4))  但是也有可能指向檔案或是其他裝置,取決於父程序選擇設定了什麼
       (參見 sh(1) 的重定向 (``Redirection'') 章節。)

       輸入流被稱為  ``standard input''; 輸出流被稱為 ``standard output''; 錯誤流被稱為 ``standard error''。這些
       名詞通常簡寫為符號,用於引用這些檔案,它們是 stdin, stdout, 和 stderr.

       這些符號中,每一個都是 stdio(3) 中的一個宏,型別是指向 FILE 的指標,可以用於類似 fprintf(3)  或  fread(3)
       等函式中。

       由於  FILE  是一個對  Unix 檔案描述符加以緩衝的包裝,下層的檔案也可以使用原始的 Unix 檔案介面來存取。也就
       是,類似 read(2) 和 lseek(2) 的函式。與流 stdin, stdout, 和 stderr 關聯的整數形式的檔案描述符分別是  0,1
       還有 2。預處理器符號 STDIN_FILENO,STDOUT_FILENO 和 STDERR_FILENO 分別以它們為值,定義在 <unistd.h> 中。

       注意混合使用  FILE 和原始的檔案描述符可能帶來不可預料的結果,一般應當避免。(對於喜歡追根問底的人:POSIX.1
       規範的  8.2.3  節詳細地描述了這樣的混合使用怎樣才能不出錯。)   一個簡單的規則是,檔案描述符由核心控制,而
       stdio  僅僅是一個庫。它的意思是,例如當呼叫 exec 之後,子程序可以繼承所有開啟的檔案描述符,但是任何原有的
       流都不可再存取了。

       由於符號 stdin, stdout, 和 stderr 被指定為宏,為它們賦值將導致不可移植。利用庫函式 freopen(3)  ,標準流可
       以用來指向不同的檔案。引進這個函式專門用來為 stdin, stdout, 和 stderr 重新賦值。標準流在呼叫 exit(3) 和程
       式正常中止時被關閉。

SEE ALSO 參見

       sh(1), csh(1), open(2), fopen(3), stdio(3)

CONSIDERATIONS

       錯誤流 stderr 是非緩衝的。輸出流 stdout 是行緩衝的,如果它指向一個終端。不完全的行只有在呼叫 fflush(3) 或
       exit(3)  ,或者列印了新行符之後才會顯示。這樣可能帶來無法預料的結果,尤其是除錯輸出時。標準流 (或任何其他
       流) 的緩衝模式可以用函式 setbuf(3) 或 setvbuf(3) 來切換。注意當 stdin  與一個終端關聯時,也許終端驅動中存
       在輸入緩衝,與  stdio 緩衝完全無關。(確實如此,一般的終端輸入在核心中是行緩衝的。) 核心對輸入的控制可以透
       過對 tcsetattr(3) 的呼叫來修改,參見 stty(1), 和 termios(3) 。

CONFORMING TO 標準參考

stdin, stdout, 和 stderr 遵循 ANSI X3.159-1989 (“ANSI C89”) 標準,這個標準同時規定了這三個流應當在程式
       啟動時開啟。

       本頁面中文版由中文 man 手冊頁計劃提供。
       中文 man 手冊頁計劃:https://github.com/man-pages-zh/manpages-zh

Linux 2.0                                        March 24, 1998                                         STDIN(3)