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

NAME

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

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

DESCRIPTIONyz
     通常,每 Unix 程式在啟動時都會打開三茯y,一茈峏騜擗J,一茈峏騜擖X,一-
     茈峏韟C印診斷或錯誤消息。典型的,他抭Q連接到使用者的終端 (參見 tty(4))
     但是也有可能指向檔案或是其他設備,取決於父進程選擇設置了什麼 (參見 sh(1)
     的咿w向 (``Redirection'') 章節。)

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

     這些符號中,每一茬ㄛO stdio(3) 中的一荍說A類型是指向 FILE
     的指針,可以用於類似 fprintf(3) 或 fread(3) 等函數中。

     由於 FILE 是一蚢 Unix 檔案描z符加以緩沖的包裝,下層的檔案也可以使用鴝l的
     Unix 檔案接口來存取。也就是,類似 read(2) 和 lseek(2) 的函數。與流 stdin,
     stdout, 和 stderr 關聯的整數形式的檔案描z符分別是 0,1 還有
     2。預處理器符號 STDIN_FILENO,STDOUT_FILENO 和 STDERR_FILENO 分別以它怓-
     A定義在 <unistd.h> 中。

     注意混合使用 FILE 和鴝l的檔案描-
     z符可能帶來不可預料的結果,一般應當避免。(對於喜歡追根問底的人:POSIX.1
     規範的 8.2.3 節詳細地描z了這樣的混合使用怎樣才能不出錯。) 一-
     蚋眾瑼熙W則是,檔案描z符由核心控制,而 stdio 僅僅是一-
     荇w。它的意思是,例如當調用 exec 之後,子進程可以繼承所有打開的檔案描-
     z符,但是任何鴞釭漪y都不可再存取了。

     由於符號 stdin, stdout, 和 stderr 被指定為宏,為它抻慒將導-
     P不可移植。利用庫函數 freopen(3) ,標準流可以用來指向不同的檔案。引進這-
     茖蝻M門用來為 stdin, stdout, 和 stderr 奐s賦C標準流在調用 exit(3)
     和程式正常中止時被關閉。

SEE ALSO見
     sh(1), csh(1), open(2), fopen(3), stdio(3)

CONSIDERATIONS

     錯誤流 stderr 是非緩沖的。輸出流 stdout 是行緩沖的,如果它指向一-
     茞袟搳C不完全的行只有在調用 fflush(3) 或 exit(3)
     ,或者列印了新行符之後才會顯示。這樣可能帶來無法預料的結果,尤其是調試輸出時。標準流
     (或任何其他流) 的緩沖模式可以用函數 setbuf(3) 或 setvbuf(3)
     來切換。注意當 stdin 與一茞袟暋鶬p時,也陴袟暙X動中存在輸入緩沖,與 stdio
     緩沖完全無關。(確實如此,一般的終端輸入在核心中是行緩沖的。)
     核心對輸入的控制可以通過對 tcsetattr(3) 的調用來蚹鵅A參見 stty(1), 和
     termios(3) 。

CONFORMING TO考
     宏 stdin, stdout, 和 stderr 遵循 ANSI X3.159-1989 (``ANSI C'') 標準,這-
     蚍郱P時規定了這三茯y應當在程式啟動時打開。