Man page - stdout(3)

Packages contains this manual

Available languages:

en fr es pl ja ru ro zh_TW zh_CN de

Manual


STDIN (3) Library Functions Manual STDIN (3)

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)