Provided by: manpages-zh_1.6.3.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