Manpages

______________________________________________________________________________

NAME

open - 打 開 基 於 文 件 或 命 令 管 道 的 一 個 通 道

總 覽 SYNOPSIS

open fileName
open
fileName access
open
fileName access permissions _________________________________________________________________

描 述 DESCRIPTION

這 個 命 令 打 開 一 個 文 件 、 串 行 端 口 、 或 命 令 管 道 並 返 回 一 個 通 道 標 識 符 用 於 將 來 │ 被 命 令 如 read、 puts、 和 close 調 用 。 如 果 fileName 的 第 一 個 字 符 不 是 “|”則 命 令 打 開 一 個 文 件 : fileName 給 出 要 打 開 的 文 件 的 名 字 , 並 且 它 必 須 符 合 在 filename 手 冊 條 目 中 描 述 的 規 範 。 如 果 存 在 access 參 數 , 則 它 指 示 以 何 種 方 式 訪 問 文 件 (或 命 令 管 道 )。 在 第 一 種 形 式 下 access 可 以 是 下 列 值 :

r 爲 只 讀 而 打 開 文 件 ; 文 件 必 須 已 經 存 在 。 如 果 未 指 定

access

則 這 個 值 是 缺 省 值 。

r+ 爲 讀 寫 而 打 開 文 件 ; 文 件 必 須 已 經 存 在 。

w 爲 只 寫 而 打 開 文 件 。 如 果 文 件 已 經 存 在 則 截 斷

(truncate)它 , 如

果 文 件 不 存 在 則 建 立 一 個 新 文 件 。

w+ 爲 讀 寫 而 打 開 文 件 。 如 果 文 件 已 經 存 在 則 截 斷

(truncate)它 , 如

果 文 件 不 存 在 則 建 立 一 個 新 文 件 。

a 爲 只 讀 而 打 開 文 件 。 如 果 文 件 不 存 在 , 則 建 立 一 個 新 的 空 文 件 。 設 置 初 始 訪 問 位 置 爲 文 件 的 結 束 處 。

a+ 爲 讀 寫 而 打 開 文 件 。 如 果 文 件 不 存 在 , 則 建 立 一 個 新 的 空 文 件 。 設 置 初 始 訪 問 位 置 爲 文 件 的 結 束 處 。 在 第 二 種 形 式 下 ,

access 由 某 些 下 列 標 誌 的 一 個 列 表 構 成 , 所 有 這 些 都 有 標 準 的 POSIX 意 義 。 必 須 有 一 個 標 誌 是 RDONLY、 WRONLY 或 RDWR 中 的 一 個 。

RDONLY 爲 只 讀 而 打 開 文 件 。

WRONLY 爲 只 寫 而 打 開 文 件 。

RDWR 爲 讀 寫 而 打 開 文 件 。

APPEND 在 每 次 寫 之 前 把 指 針 設 置 到 文 件 的 結 束 處 。

CREAT 如 果 文 件 不 存 在 則 建 立 這 個 文 件

(如 果 沒 有 這 個 標 誌 , 在 文 件 不 存 在 時 返 回 一 個 錯 誤 )。

EXCL 如 果 還 指 定 了

CREAT, 如 果 文 件 已 經 存 在 則 返 回 一 個 錯 誤 。

NOCTTY 如 果 文 件 是 一 個

終 端 設 備 , 這 個 標 誌 防 止 這 個 文 件 成 爲 這 個 進 程 的 控 制 終 端 。

NONBLOCK 在 打 開 文 件 和 可 能 的 後 續

I/O

操 作 期 間 防 止 過 程 阻 塞 。 這 個 標 誌 的 真 實 行 爲 是 依 賴 於 系 統 的 和 依 賴 於 設 備 的 ; 不 鼓 勵 使 用 它 (更 好 是 使 用 fconfigure 命 令 來 使 一 個 文 件 進 入 非 阻 塞 模 式 )。 詳 情 參 見 你 的 系 統 文 檔 中 的 open 系 統 調 用 的 O_NONBLOCK 標 誌 。

TRUNC 如 果 文 件 存 在 則 截 斷 其 爲 零 長 度 。 如 果 作 爲 打 開 過 程 的 一 部 分 而 建 立 了 一 個 新 文 件 , 使 用

permissions (一 個 整

數 )並 聯 合 進 程 的 文 件 模 式 建 立 掩 碼 爲 新 文 件 設 置 權 限 。 Permissions 缺 省 爲 0666。

Note that if you are going to be reading or writing binary data from │ the channel created by this command, you should use the fconfigure │ command to change the -translation option of the channel to binary │ before transferring any binary data. This is in contrast to the ’’b’’ │ character passed as part of the equivalent of the access parameter to │ some versions of the C library fopen() function.

命 令 管 道 COMMAND PIPELINES

如 果 fileName is 的 第 一 個 字 符 是 “|”, 則 把 fileName 的 餘 下 的 字 符 被 作 爲 描 述 要 調 用 的 一 個 命 令 管 道 的 參 數 的 一 個 列 表 來 對 待 , 與 exec 對 待 參 數 的 方 式 相 同 。 在 這 種 情 況 下 , 依 賴 於 access 的 值 , 使 用 由 open 返 回 的 通 道 標 識 符 來 向 這 個 命 令 的 輸 入 管 道 寫 或 從 它 的 輸 出 管 道 讀 。 如 果 使 用 了 只 寫 訪 問 (例 如 , access 是 w), 則 除 非 被 這 個 命 令 所 屏 棄 (override), 這 個 (命 令 )管 道 的 標 準 輸 出 被 定 向 到 當 前 的 標 準 輸 出 上 。 如 果 使 用 了 只 讀 訪 問 (例 如 , access 是 r), 則 除 非 被 這 個 命 令 所 屏 棄 (override), 這 個 (命 令 )管 道 的 標 準 輸 入 接 受 當 前 的 標 準 輸 入 。 譯 註 打 開 用 來 寫 的 命 令 管 道

Tcl ==> Pipeline ==> command

+--------+ +--------+ +--------+ +--------+
| stdin |<------+ stdin | +-->| pipein | +--+ stdin |
+--------+ +--------+ | +--------+ | +--------+
| stdout |<--+---+ stdout | | | pipeout|<--+ | stdout +--+
+--------+ | +--------+ | +--------+ +--------+ |
| | stderr | | | stderr | |
| +--------+ | +--------+ |
| | channel+--+ |
| +--------+ |
+-----------------------------------------------+ 打 開 一 個 用 來 讀 的 命 令 管 道

+-----------------------------------------------+
| |
+--------+ | +--------+ +--------+ +--------+ |
| stdin |<--+---+ stdin | | pipein |<--+ | stdin +--+
+--------+ +--------+ +--------+ | +--------+
| stdout |<------+ stdout | +-->| pipeout| +--+ stdout |
+--------+ +--------+ | +--------+ +--------+
| stderr | | | stderr |
+--------+ | +--------+
| channel+--+
+--------+
Tcl <== Pipeline <== command

串 行 通 信 SERIAL COMMUNICATIONS

如 果 fileName 參 照 一 個 串 行 端 口 , 則 打 開 特 定 的 串 行 端 口 並 以 依 賴 於 平 臺 的 方 │ 式 初 始 化 。 給 fileName 用 以 打 開 一 個 串 行 端 口 的 可 接 受 的 值 在 移 植 要 點 中 描 │ 述 。 │

配 置 選 項 CONFIGURATION OPTIONS

│ 使 用 fconfigure 命 令 來 爲 打 開 的 串 行 端 口 查 詢 和 設 置 下 列 選 項 : │

-mode baud,parity,data,stop │ 這 個 選 項 是 由 逗 號 分 隔 的 四 個 值 的 一 個 集 合 : 這 個 串 行 端 口 的 波 │ 特 (baud)率 、 奇 偶 校 驗 (parity)、 數 據 位 數 、 和 停 止 位 。 baud 率 是 │ 指 定 連 接 速 度 的 一 個 簡 單 整 數 。 Parity 是 下 列 字 母 之 一 : │ n、 o、 e、 m、 s; 分 別 表 示 奇 偶 校 驗 選 項 │ “none”、 “odd”、 “even”、 “mark”、 或 “space”。 Data 是 數 據 位 │ 數 , 應 當 是 從 5 到 8 中 的 一 個 整 數 , 而 stop 是 停 止 位 的 數 目 , 應 │ 當 是 整 數 1 或 2。 │
-pollinterval
msec │ 只 在 Windows 上 串 行 端 口 能 獲 得 這 個 選 項 , 它 被 用 來 設 置 文 件 事 件 │ 輪 詢 (poll)之 間 的 最 大 時 間 。 這 影 響 整 個 Tcl 解 釋 器 檢 查 事 件 中 間 │ 的 時 間 間 隔 (總 是 採 用 最 小 的 值 )。 只 有 在 你 想 要 使 輪 詢 這 個 串 行 端 口 的 時 │ 間 間 隔 小 於 10 msec (缺 省 值 )時 才 使 用 這 個 選 項 。 │
-lasterror
│ 只 在 Windows 上 串 行 端 口 能 獲 得 這 個 選 項 , 並 只 能 查 詢 (只 在 直 接 請 求 時 │ 報 告 )。 在 串 行 通 信 出 錯 的 情 況 下 , read 或 puts 返 回 一 個 一 般 Tcl │ 文 件 I/O 錯 誤 。 可 以 調 用 fconfigure -lasterror 來 得 到 錯 誤 │ 詳 情 的 一 個 列 表 (例 如 , FRAME RXOVER)。

移 植 要 點 PORTABILITY ISSUES

│

Windows (所 有 版 本 ) │ 給 fileName 來 打 開 一 個 串 行 端 口 的 有 效 值 的 形 式 是 comX:, 這 裏 X │ 是 一 個 數 , 一 般 是 從 1 到 4。 如 果 系 統 有 多 於 四 個 串 行 端 口 , 則 這 個 符 │ 號 (notation)可 以 表 示 串 行 端 口 從 1 到 9。 嘗 試 打 開 一 個 不 存 在 或 │ 序 號 大 於 9 的 串 行 端 口 將 導 致 錯 誤 。 打 開 串 行 端 口 的 可 替 代 的 方 法 │ 是 使 用 文 件 名 \\.\comX, 這 裏 X 是 對 應 於 一 個 串 行 端 口 的 任 │ 何 (整 )數 ; 請 注 意 , 這 個 方 法 在 Windows 95 和 Windows 98 上 相 當 │ 的 慢 。 │
Windows NT
│ 在 交 互 運 行 Tcl 的 時 候 , 如 果 存 在 一 個 控 制 檯 , 則 在 真 實 的 控 制 檯 │ 和 使 用 標 準 輸 入 或 輸 出 的 一 個 命 令 管 道 之 間 可 能 有 一 些 奇 怪 的 相 互 作 │ 用 。 如 果 爲 讀 而 打 開 一 個 命 令 管 道 , 在 這 個 控 制 檯 鍵 入 的 一 些 行 將 被 髮 送 │ 到 命 令 管 道 而 一 些 行 將 別 發 送 到 Tcl 求 值 器 。 如 果 爲 寫 而 打 開 │ 一 個 命 令 管 道 , 在 管 道 關 閉 之 前 , 在 這 個 控 制 檯 中 鍵 入 的 擊 │ 鍵 (keystroke)將 一 直 是 不 可 見 的 。 在 執 行 16-bit 或 32-bit │ 應 用 程 序 時 都 可 能 發 生 這 種 事 情 。 這 些 問 題 只 發 生 在 Tcl 和 子 應 用 │ 程 序 同 時 競 爭 這 個 控 制 檯 的 時 候 。 如 果 命 令 管 道 是 從 一 個 腳 本 中 啓 動 │ 的 , 所 以 Tcl 不 訪 問 控 制 檯 , 或 者 命 令 管 道 不 使 用 標 準 輸 出 或 │ 輸 出 , 而 是 重 定 向 (從 或 )到 一 個 文 件 , 那 麼 上 述 問 題 不 發 生 。 │
Windows 95
│ 不 能 同 時 爲 讀 寫 而 打 開 一 個 命 令 管 道 來 執 行 一 個 16-bit DOS 應 用 程 │ 序 , 因 爲 從 一 個 管 道 接 收 標 準 輸 入 和 向 一 個 管 道 發 送 標 準 輸 出 的 (兩 個 ) │ 16-bit DOS 應 用 程 序 同 步 運 行 。 不 執 行 16-bit DOS 應 用 程 序 的 命 │ 令 管 道 異 步 運 行 並 且 可 以 同 時 爲 讀 寫 而 打 開 。 │ 在 交 互 運 行 Tcl 的 時 候 , 如 果 存 在 一 個 控 制 檯 , 則 在 真 實 的 控 制 檯 │ 和 使 用 標 準 輸 入 或 輸 出 的 一 個 命 令 管 道 之 間 可 能 有 一 些 奇 怪 的 相 互 作 │ 用 。 如 果 爲 從 一 個 32-bit 應 用 程 序 讀 而 打 開 一 個 命 令 管 道 , 在 │ 這 個 控 制 檯 鍵 入 的 一 些 擊 鍵 將 被 髮 送 到 命 令 管 道 而 一 些 擊 鍵 將 別 發 送 到 │ Tcl 求 值 器 。 如 果 爲 向 一 個 32-bit 應 用 程 序 寫 而 打 開 一 個 命 令 管 │ 道 , 在 管 道 關 閉 之 前 , 在 控 制 檯 中 將 一 直 沒 有 輸 出 是 可 見 的 。 這 些 問 題 只 │ 發 生 在 Tcl 和 子 應 用 程 序 同 時 競 爭 這 個 控 制 檯 的 時 候 。 如 果 命 │ 令 管 道 是 從 一 個 腳 本 中 啓 動 的 , 所 以 Tcl 不 訪 問 控 制 檯 , 或 者 │ 命 令 管 道 不 使 用 標 準 輸 出 或 輸 出 , 而 是 重 定 向 (從 或 )到 一 個 文 件 , 那 麼 上 │ 述 問 題 不 發 生 。 │ 不 論 Tcl 是 否 在 交 互 的 運 行 , 如 果 爲 從 一 個 16-bit DOS 應 用 程 序 │ 讀 而 打 開 一 個 命 令 管 道 , 在 從 命 令 管 道 的 標 準 輸 出 收 到 文 件 結 束 之 前 , 對 │ open 的 調 用 一 直 不 返 回 。 如 果 爲 向 一 個 16-bit DOS 應 用 程 序 寫 而 │ 打 開 一 個 命 令 管 道 , 在 管 道 實 際 上 被 關 閉 之 前 , 沒 有 數 據 被 髮 送 到 命 令 管 │ 道 的 標 準 輸 出 。 象 上 面 描 述 的 那 樣 , 這 個 問 題 發 生 的 原 因 是 16-bit │ DOS 應 用 程 序 同 步 運 行 。 │
Macintosh
│ 在 Macintosh 下 目 前 未 實 現 打 開 串 行 端 口 。 │ 在 Macintosh 不 支 持 打 開 命 令 管 道 , 原 因 是 應 用 程 序 不 支 持 標 準 輸 │ 入 或 輸 出 的 概 念 。 │
Unix
│ 給 fileName 來 打 開 一 個 串 行 端 口 的 有 效 值 的 形 式 是 /dev/ttyX, 這 裏 的 │ X 是 a 或 b, 但 是 可 以 使 用 映 射 到 一 個 串 行 端 口 的 任 何 僞 文 │ 件 (pseudo-file)的 名 字 。 │ 在 交 互 運 行 Tcl 的 時 候 , 如 果 存 在 一 個 控 制 檯 , 則 在 真 實 的 控 制 檯 │ 和 使 用 標 準 輸 入 或 輸 出 的 一 個 命 令 管 道 之 間 可 能 有 一 些 奇 怪 的 相 互 作 │ 用 。 如 果 爲 讀 而 打 開 一 個 命 令 管 道 , 在 這 個 控 制 檯 鍵 入 的 一 些 行 將 被 髮 送 │ 到 命 令 管 道 而 一 些 行 將 別 發 送 到 Tcl 求 值 器 。 這 些 問 題 只 發 生 在 │ Tcl 和 子 應 用 程 序 同 時 競 爭 這 個 控 制 檯 的 時 候 。 如 果 命 令 管 道 是 從 一 │ 個 腳 本 中 啓 動 的 , 所 以 Tcl 不 訪 問 控 制 檯 , 或 者 命 令 管 道 不 使 │ 用 標 準 輸 出 或 輸 出 , 而 是 重 定 向 (從 或 )到 一 個 文 件 , 那 麼 上 述 問 題 不 發 │ 生 。 │ 關 於 在 不 同 平 臺 上 執 行 應 用 程 序 請 參 見 exec 命 令 的 移 植 要 點 章 節 來 得 到 不 特 定 │ 於 命 令 管 道 的 額 外 的 信 息 。 │

參 見 SEE ALSO

│

file(n), close(n), filename(n), fconfigure(n), gets(n), read(n), │ puts(n), exec(n), fopen(1) │

關 鍵 字 KEYWORDS

│

access mode, append, create, file, non-blocking, open, permissions, │ pipeline, process, serial │

[中 文 版 維 護 人 ]

│ 寒 蟬 退 士 │

[中 文 版 最 新 更 新 ]

│

2001/10/16 │

《 中 國 Linux 論 壇 man 手 冊 頁 翻 譯 計 劃 》 :

│

http://cmpp.linuxforum.net │

跋

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