13.07.2015 Views

Perl 语言编程 - Linux教程

Perl 语言编程 - Linux教程

Perl 语言编程 - Linux教程

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

flock(FH, LOCK_SH) or die "can't lock filename: $!";# 现 在 从 FH 里 读 取你 可 以 试 图 请 求 一 个 非 阻 塞 的 锁 , 只 需 要 在 flock 请 求 里 加 入 LOCK_NB 标 志 就 可 以 了 。如 果 你 不 能 马 上 获 得 锁 , 那 么 该 函 数 失 败 并 且 马 上 返 回 假 。 下 面 是 例 子 :flock(FH, LOCK_FH | LOCK_NB)or die "can't lock filename: $!";你 除 了 象 我 们 这 样 抛 出 一 个 例 外 之 外 可 能 还 想 做 点 别 的 事 情 , 但 是 你 肯 定 不 敢 对 该 文 件 进 行任 何 I/O 操 作 。 如 果 你 的 锁 申 请 被 拒 绝 , 你 就 不 应 该 访 问 该 文 件 直 到 你 能 够 拿 到 锁 。 谁 知道 那 个 文 件 处 于 什 么 样 的 混 乱 状 态 ? 非 阻 塞 模 式 的 主 要 目 的 是 让 你 离 开 并 且 在 等 待 期 间 做些 其 他 的 事 情 。 而 且 它 也 可 以 用 于 生 成 更 友 好 的 交 互 , 比 如 警 告 用 户 说 他 可 能 要 一 段 时 间 才能 获 取 锁 , 这 样 用 户 就 不 会 觉 得 被 抛 弃 :use Fcntl qw(:DEFAULT :flock);open(FH, "< filename") or die "can't open filename: $!";unless (flock(FH, LOCK_SH | LOCK_NB)) {local $| = 1;print "Waiting for lock on filename...";flock(FH, LOCK_SH) or die "can't lock filename: $!";print "got it.\n";}# 现 在 从 FH 读 数有 些 人 会 试 图 把 非 阻 塞 锁 放 到 一 个 循 环 里 去 。 非 阻 塞 锁 的 主 要 问 题 是 , 当 你 回 过 头 来 再 次 检查 的 时 候 , 可 能 其 他 人 已 经 把 锁 拿 走 了 , 因 为 你 放 弃 了 在 队 伍 里 的 位 置 。 有 时 候 你 不 得 不 排队 并 且 等 待 。 如 果 你 走 运 的 话 , 可 能 可 以 先 看 看 杂 志 什 么 的 。锁 是 针 对 文 件 句 柄 的 , 而 不 是 文 件 名 。( 注 : 实 际 上 , 锁 不 是 针 对 文 件 句 柄 的 —— 他 们 是 针对 与 文 件 句 柄 关 联 的 文 件 描 述 符 的 , 因 为 操 作 系 统 并 不 知 道 文 件 句 柄 。 这 就 意 味 着 我 们 的 所有 关 于 对 某 文 件 名 没 能 拿 到 锁 的 die 消 息 从 技 术 上 来 讲 都 是 不 准 确 的 。 不 过 下 面 这 样 的 错误 信 息 :”I can't get a lock on the file represented by the file descriptor associatedwith the filehandle originally opened to the path filename, although by now418

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

Saved successfully!

Ooh no, something went wrong!