13.07.2015 Views

Perl 语言编程 - Linux教程

Perl 语言编程 - Linux教程

Perl 语言编程 - Linux教程

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

open 函 数 不 允 许 你 这 么 干 , 因 为 这 种 做 法 非 常 容 易 导 致 死 锁 , 除 非 你 非 常 小 心 。 但 是 如 果你 决 定 了 , 那 么 你 可 以 使 用 标 准 的 IPC::Open2 库 模 块 , 用 这 个 模 块 给 一 个 子 过 程 的STDIN 和 STDOUT 附 着 两 个 管 道 。 还 有 一 个 IPC::Open3 模 块 用 于 三 通 I/O( 还 允 许你 捕 获 子 进 程 的 STDERR), 但 这 个 模 块 需 要 一 个 笨 拙 的 select 循 环 或 者 更 方 便 一 些 的IO:Select 模 块 。 不 过 那 样 你 就 得 放 弃 <strong>Perl</strong> 的 缓 冲 的 输 入 操 作 ( 比 如 , 读 一 行 )。下 面 是 一 个 使 用 open2 的 例 子 :use IPC::Open2;local (*Reader, *Writer);$pid = open2(\*Reader, \*Writer, "bc -l");$sum = 2;for (1 .. 5) {print Writer "$sum * $sum\n";chomp($sum = );}close Writer;close Reader;waitpid($pid, 0);print "sum is $sum\n";你 还 可 以 自 动 激 活 词 法 句 柄 :my ($fhread, $fhwrite);$pid = open2($fhread, $fhwrite, "cat -u -n");这 个 方 法 的 普 遍 的 问 题 就 是 标 准 I/O 缓 冲 实 在 是 会 破 坏 你 的 好 事 。 即 使 你 的 输 出 文 件 句 柄是 自 动 刷 新 的 ( 库 为 你 做 这 些 事 情 ), 这 样 另 一 端 的 进 程 将 能 及 时 地 收 到 你 的 数 据 , 但 是 通常 你 没 法 强 迫 它 也 返 回 这 样 的 风 格 。 在 一 些 特 殊 的 情 况 下 我 们 是 很 幸 运 的 ,bc 可 以 在 管 道的 模 式 下 运 行 , 而 且 还 会 刷 新 每 个 输 出 行 。 但 是 只 有 很 少 的 几 条 命 令 是 这 样 设 计 的 , 因 此 这个 方 法 很 少 管 用 , 除 非 你 自 己 就 是 双 向 管 道 的 另 外 一 端 的 程 序 的 作 者 。 甚 至 是 简 单 而 且 明 确432

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!