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