______________________________________________________________________________
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 手 册 页 翻 译 计 划 》 :
│
跋
│ 本 页 面 中 文 版 由 中 文 man 手 册 页 计 划 提 供 。 │ 中 文 man 手 册 页 计 划 : https://github.com/man-pages-zh/manpages-zh │