Manpages

______________________________________________________________________________

NAME

open - 打 开 基 于 文 件 或 命 令 管 道 的 一 个 通 道

总 览 SYNOPSIS

open fileName
open
fileName access
open
fileName access permissions _________________________________________________________________

描 述 DESCRIPTION

这 个 命 令 打 开 一 个 文 件 、 串 行 端 口 、 或 命 令 管 道 并 返 回 一 个 通 道 标 识 符 用 于 将 来 │ 被 命 令 如 readputs、 和 close 调 用 。 如 果 fileName 的 第 一 个 字 符 不 是 “|”则 命 令 打 开 一 个 文 件 : fileName 给 出 要 打 开 的 文 件 的 名 字 , 并 且 它 必 须 符 合 在 filename 手 册 条 目 中 描 述 的 规 范 。 如 果 存 在 access 参 数 , 则 它 指 示 以 何 种 方 式 访 问 文 件 (或 命 令 管 道 )。 在 第 一 种 形 式 下 access 可 以 是 下 列 值 :

r 为 只 读 而 打 开 文 件 ; 文 件 必 须 已 经 存 在 。 如 果 未 指 定

access

则 这 个 值 是 缺 省 值 。

r+ 为 读 写 而 打 开 文 件 ; 文 件 必 须 已 经 存 在 。

w 为 只 写 而 打 开 文 件 。 如 果 文 件 已 经 存 在 则 截 断

(truncate)它 , 如

果 文 件 不 存 在 则 建 立 一 个 新 文 件 。

w+ 为 读 写 而 打 开 文 件 。 如 果 文 件 已 经 存 在 则 截 断

(truncate)它 , 如

果 文 件 不 存 在 则 建 立 一 个 新 文 件 。

a 为 只 读 而 打 开 文 件 。 如 果 文 件 不 存 在 , 则 建 立 一 个 新 的 空 文 件 。 设 置 初 始 访 问 位 置 为 文 件 的 结 束 处 。

a+ 为 读 写 而 打 开 文 件 。 如 果 文 件 不 存 在 , 则 建 立 一 个 新 的 空 文 件 。 设 置 初 始 访 问 位 置 为 文 件 的 结 束 处 。 在 第 二 种 形 式 下 ,

access 由 某 些 下 列 标 志 的 一 个 列 表 构 成 , 所 有 这 些 都 有 标 准 的 POSIX 意 义 。 必 须 有 一 个 标 志 是 RDONLYWRONLYRDWR 中 的 一 个 。

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 返 回 的 通 道 标 识 符 来 向 这 个 命 令 的 输 入 管 道 写 或 从 它 的 输 出 管 道 读 。 如 果 使 用 了 只 写 访 问 (例 如 , accessw), 则 除 非 被 这 个 命 令 所 屏 弃 (override), 这 个 (命 令 )管 道 的 标 准 输 出 被 定 向 到 当 前 的 标 准 输 出 上 。 如 果 使 用 了 只 读 访 问 (例 如 , accessr), 则 除 非 被 这 个 命 令 所 屏 弃 (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 是 下 列 字 母 之 一 : │ noems; 分 别 表 示 奇 偶 校 验 选 项 │ “none”、 “odd”、 “even”、 “mark”、 或 “space”。 Data 是 数 据 位 │ 数 , 应 当 是 从 5 到 8 中 的 一 个 整 数 , 而 stop 是 停 止 位 的 数 目 , 应 │ 当 是 整 数 1 或 2。 │
-pollinterval
msec │ 只 在 Windows 上 串 行 端 口 能 获 得 这 个 选 项 , 它 被 用 来 设 置 文 件 事 件 │ 轮 询 (poll)之 间 的 最 大 时 间 。 这 影 响 整 个 Tcl 解 释 器 检 查 事 件 中 间 │ 的 时 间 间 隔 (总 是 采 用 最 小 的 值 )。 只 有 在 你 想 要 使 轮 询 这 个 串 行 端 口 的 时 │ 间 间 隔 小 于 10 msec (缺 省 值 )时 才 使 用 这 个 选 项 。 │
-lasterror
│ 只 在 Windows 上 串 行 端 口 能 获 得 这 个 选 项 , 并 只 能 查 询 (只 在 直 接 请 求 时 │ 报 告 )。 在 串 行 通 信 出 错 的 情 况 下 , readputs 返 回 一 个 一 般 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, 这 里 的 │ Xab, 但 是 可 以 使 用 映 射 到 一 个 串 行 端 口 的 任 何 伪 文 │ 件 (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

AltStyle によって変換されたページ (->オリジナル) /